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 |