Index: media/filters/chunk_demuxer.cc |
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
index 1b57c3a1b18d35587bf6f07e8b2f6a68c258f15f..d0b4e4ad956ec7b8e1c0f2b30d15aeaa1f1d9586 100644 |
--- a/media/filters/chunk_demuxer.cc |
+++ b/media/filters/chunk_demuxer.cc |
@@ -1032,6 +1032,11 @@ void ChunkDemuxerStream::SetLiveness(Liveness liveness) { |
liveness_ = liveness; |
} |
+void ChunkDemuxerStream::NotifyMediaTimeUpdate(DecodeTimestamp media_time) { |
+ base::AutoLock auto_lock(lock_); |
+ stream_->NotifyMediaTimeUpdate(media_time); |
+} |
+ |
void ChunkDemuxerStream::ChangeState_Locked(State state) { |
lock_.AssertAcquired(); |
DVLOG(1) << "ChunkDemuxerStream::ChangeState_Locked() : " |
@@ -1124,6 +1129,11 @@ ChunkDemuxer::ChunkDemuxer( |
DCHECK(!encrypted_media_init_data_cb_.is_null()); |
} |
+void ChunkDemuxer::SetMediaTimeProvider( |
+ const base::Callback<base::TimeDelta(void)>& get_media_time_cb) { |
+ get_media_time_cb_ = get_media_time_cb; |
+} |
+ |
void ChunkDemuxer::Initialize( |
DemuxerHost* host, |
const PipelineStatusCB& cb, |
@@ -1332,6 +1342,15 @@ void ChunkDemuxer::AppendData( |
Ranges<TimeDelta> ranges; |
+ if (!get_media_time_cb_.is_null()) { |
+ DecodeTimestamp current_media_time = |
+ DecodeTimestamp::FromPresentationTime(get_media_time_cb_.Run()); |
+ if (audio_) |
+ audio_->NotifyMediaTimeUpdate(current_media_time); |
+ if (video_) |
+ video_->NotifyMediaTimeUpdate(current_media_time); |
+ } |
+ |
{ |
base::AutoLock auto_lock(lock_); |
DCHECK_NE(state_, ENDED); |