Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index 077314e6c64179aabfa1777f97174206249c767f..ab3974b81a34ddde381de3aa5a006b95de486c76 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -51,7 +51,7 @@ class AVPacketBuffer : public Buffer { |
FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer, |
AVStream* stream) |
: demuxer_(demuxer), |
- av_stream_(stream), |
+ stream_(stream), |
discontinuous_(false) { |
DCHECK(demuxer_); |
@@ -70,12 +70,8 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer, |
break; |
} |
- // Calculate the time base and duration in microseconds. |
- int64 time_base_us = static_cast<int64>(av_q2d(stream->time_base) * |
- base::Time::kMicrosecondsPerSecond); |
- int64 duration_us = static_cast<int64>(time_base_us * stream->duration); |
- time_base_ = base::TimeDelta::FromMicroseconds(time_base_us); |
- duration_ = base::TimeDelta::FromMicroseconds(duration_us); |
+ // Calculate the duration. |
+ duration_ = ConvertTimestamp(stream->duration); |
} |
FFmpegDemuxerStream::~FFmpegDemuxerStream() { |
@@ -106,8 +102,8 @@ bool FFmpegDemuxerStream::HasPendingReads() { |
} |
base::TimeDelta FFmpegDemuxerStream::EnqueuePacket(AVPacket* packet) { |
- base::TimeDelta timestamp = time_base_ * packet->pts; |
- base::TimeDelta duration = time_base_ * packet->duration; |
+ base::TimeDelta timestamp = ConvertTimestamp(packet->pts); |
+ base::TimeDelta duration = ConvertTimestamp(packet->duration); |
Buffer* buffer = new AVPacketBuffer(packet, timestamp, duration); |
DCHECK(buffer); |
{ |
@@ -166,6 +162,12 @@ bool FFmpegDemuxerStream::FulfillPendingReads() { |
return pending_reads; |
} |
+base::TimeDelta FFmpegDemuxerStream::ConvertTimestamp(int64 timestamp) { |
+ AVRational time_base = { 1, base::Time::kMicrosecondsPerSecond }; |
+ int64 microseconds = av_rescale_q(timestamp, stream_->time_base, time_base); |
+ return base::TimeDelta::FromMicroseconds(microseconds); |
+} |
+ |
// |
// FFmpegDemuxer |