Chromium Code Reviews| Index: media/filters/ffmpeg_demuxer.cc |
| diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
| index f3f87ac45ed8b794a934f477a807bf849c15932c..4791045de7004ee9d3fac1992ae5314ae7e7f253 100644 |
| --- a/media/filters/ffmpeg_demuxer.cc |
| +++ b/media/filters/ffmpeg_demuxer.cc |
| @@ -91,6 +91,7 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer, |
| task_runner_(base::MessageLoopProxy::current()), |
| stream_(stream), |
| type_(UNKNOWN), |
| + liveness_(LIVENESS_UNKNOWN), |
| end_of_stream_(false), |
| last_packet_timestamp_(kNoTimestamp()), |
| last_packet_duration_(kNoTimestamp()), |
| @@ -174,6 +175,12 @@ FFmpegDemuxerStream::FFmpegDemuxerStream(FFmpegDemuxer* demuxer, |
| } |
| } |
| +FFmpegDemuxerStream::~FFmpegDemuxerStream() { |
| + DCHECK(!demuxer_); |
| + DCHECK(read_cb_.is_null()); |
| + DCHECK(buffer_queue_.IsEmpty()); |
| +} |
| + |
| void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| @@ -411,6 +418,11 @@ DemuxerStream::Type FFmpegDemuxerStream::type() { |
| return type_; |
| } |
| +DemuxerStream::Liveness FFmpegDemuxerStream::liveness() { |
| + DCHECK(task_runner_->BelongsToCurrentThread()); |
| + return liveness_; |
| +} |
| + |
| void FFmpegDemuxerStream::Read(const ReadCB& read_cb) { |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| CHECK(read_cb_.is_null()) << "Overlapping reads are not supported"; |
| @@ -468,10 +480,9 @@ VideoRotation FFmpegDemuxerStream::video_rotation() { |
| return video_rotation_; |
| } |
| -FFmpegDemuxerStream::~FFmpegDemuxerStream() { |
| - DCHECK(!demuxer_); |
| - DCHECK(read_cb_.is_null()); |
| - DCHECK(buffer_queue_.IsEmpty()); |
| +void FFmpegDemuxerStream::SetLiveness(Liveness liveness) { |
| + DCHECK_EQ(liveness_, LIVENESS_UNKNOWN); |
|
wolenetz
2014/11/11 23:48:07
nit: DCHECK we're on the right thread?
xhwang
2014/11/14 06:38:04
Done.
|
| + liveness_ = liveness; |
| } |
| base::TimeDelta FFmpegDemuxerStream::GetElapsedTime() const { |
| @@ -566,7 +577,6 @@ FFmpegDemuxer::FFmpegDemuxer( |
| start_time_(kNoTimestamp()), |
| preferred_stream_for_seeking_(-1, kNoTimestamp()), |
| fallback_stream_for_seeking_(-1, kNoTimestamp()), |
| - liveness_(LIVENESS_UNKNOWN), |
| text_enabled_(false), |
| duration_known_(false), |
| need_key_cb_(need_key_cb), |
| @@ -706,11 +716,6 @@ base::TimeDelta FFmpegDemuxer::GetStartTime() const { |
| return std::max(start_time_, base::TimeDelta()); |
| } |
| -Demuxer::Liveness FFmpegDemuxer::GetLiveness() const { |
| - DCHECK(task_runner_->BelongsToCurrentThread()); |
| - return liveness_; |
| -} |
| - |
| void FFmpegDemuxer::AddTextStreams() { |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| @@ -983,11 +988,11 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, |
| timeline_offset_ += start_time_; |
| if (max_duration == kInfiniteDuration() && !timeline_offset_.is_null()) { |
| - liveness_ = LIVENESS_LIVE; |
| + SetLiveness(DemuxerStream::LIVENESS_LIVE); |
| } else if (max_duration != kInfiniteDuration()) { |
| - liveness_ = LIVENESS_RECORDED; |
| + SetLiveness(DemuxerStream::LIVENESS_RECORDED); |
| } else { |
| - liveness_ = LIVENESS_UNKNOWN; |
| + SetLiveness(DemuxerStream::LIVENESS_UNKNOWN); |
| } |
| // Good to go: set the duration and bitrate and notify we're done |
| @@ -1270,4 +1275,11 @@ void FFmpegDemuxer::OnDataSourceError() { |
| host_->OnDemuxerError(PIPELINE_ERROR_READ); |
| } |
| +void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) { |
| + for (const auto& stream : streams_) { // |stream| is a ref to a pointer. |
|
wolenetz
2014/11/11 23:48:07
nit: DCHECK we're on the right thread?
xhwang
2014/11/14 06:38:04
Done.
|
| + if (stream) |
| + stream->SetLiveness(liveness); |
| + } |
| +} |
| + |
| } // namespace media |