Index: media/filters/chunk_demuxer.cc |
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
index e6caaebc35ca68f420fab3b60cfb8a50119f2e8f..d2a2b649556eb2acff80a90f865ab77c35466663 100644 |
--- a/media/filters/chunk_demuxer.cc |
+++ b/media/filters/chunk_demuxer.cc |
@@ -974,6 +974,7 @@ ChunkDemuxer::ChunkDemuxer(const base::Closure& open_cb, |
log_cb_(log_cb), |
duration_(kNoTimestamp()), |
user_specified_duration_(-1), |
+ liveness_(LIVENESS_UNKNOWN), |
splice_frames_enabled_(splice_frames_enabled) { |
DCHECK(!open_cb_.is_null()); |
DCHECK(!need_key_cb_.is_null()); |
@@ -1064,6 +1065,10 @@ base::Time ChunkDemuxer::GetTimelineOffset() const { |
return timeline_offset_; |
} |
+Demuxer::Liveness ChunkDemuxer::GetLiveness() const { |
+ return liveness_; |
+} |
+ |
void ChunkDemuxer::StartWaitingForSeek(TimeDelta seek_time) { |
DVLOG(1) << "StartWaitingForSeek()"; |
base::AutoLock auto_lock(lock_); |
@@ -1508,6 +1513,17 @@ void ChunkDemuxer::OnSourceInitDone( |
timeline_offset_ = params.timeline_offset; |
} |
+ if (params.liveness != LIVENESS_UNKNOWN) { |
+ if (liveness_ != LIVENESS_UNKNOWN && params.liveness != liveness_) { |
+ MEDIA_LOG(log_cb_) |
+ << "Liveness is not the same across all SourceBuffers."; |
+ ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN); |
+ return; |
+ } |
+ |
+ liveness_ = params.liveness; |
+ } |
+ |
// Wait until all streams have initialized. |
if ((!source_id_audio_.empty() && !audio_) || |
(!source_id_video_.empty() && !video_)) { |