| Index: media/filters/ffmpeg_demuxer.cc
|
| diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
|
| index 227cd6aad27c5198bcab5d4d4341301d43397af2..00bf9109d2708fa2a42c7ee043fbac9f23395cf9 100644
|
| --- a/media/filters/ffmpeg_demuxer.cc
|
| +++ b/media/filters/ffmpeg_demuxer.cc
|
| @@ -93,6 +93,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()),
|
| @@ -168,6 +169,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());
|
|
|
| @@ -403,11 +410,16 @@ void FFmpegDemuxerStream::Stop() {
|
| end_of_stream_ = true;
|
| }
|
|
|
| -DemuxerStream::Type FFmpegDemuxerStream::type() {
|
| +DemuxerStream::Type FFmpegDemuxerStream::type() const {
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| return type_;
|
| }
|
|
|
| +DemuxerStream::Liveness FFmpegDemuxerStream::liveness() const {
|
| + 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";
|
| @@ -473,10 +485,10 @@ 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(task_runner_->BelongsToCurrentThread());
|
| + DCHECK_EQ(liveness_, LIVENESS_UNKNOWN);
|
| + liveness_ = liveness;
|
| }
|
|
|
| base::TimeDelta FFmpegDemuxerStream::GetElapsedTime() const {
|
| @@ -571,7 +583,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),
|
| @@ -711,11 +722,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());
|
|
|
| @@ -988,11 +994,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
|
| @@ -1275,4 +1281,12 @@ void FFmpegDemuxer::OnDataSourceError() {
|
| host_->OnDemuxerError(PIPELINE_ERROR_READ);
|
| }
|
|
|
| +void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) {
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| + for (const auto& stream : streams_) { // |stream| is a ref to a pointer.
|
| + if (stream)
|
| + stream->SetLiveness(liveness);
|
| + }
|
| +}
|
| +
|
| } // namespace media
|
|
|