Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: media/filters/chunk_demuxer.cc

Issue 236023003: Add WebMediaPlayer::timelineOffset() support to WebMediaPlayerImpl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address CR comments Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/chunk_demuxer.h ('k') | media/filters/ffmpeg_demuxer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/chunk_demuxer.cc
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index 49a04f61c763754eba21a4ea55a0d2c4a4aedd16..0c5608943725b41383b8aa278b056c792dbecf60 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -98,7 +98,11 @@ class SourceState {
// occurred.
// Second parameter - Indicates the stream duration. Only contains a valid
// value if the first parameter is true.
- typedef base::Callback<void(bool, TimeDelta)> InitCB;
+ // Third parameter - Indicates the source Time associated with
+ // presentation timestamp 0. A null Time is returned if
+ // no mapping to Time exists. Only contains a
+ // valid value if the first parameter is true.
+ typedef base::Callback<void(bool, TimeDelta, base::Time)> InitCB;
SourceState(
scoped_ptr<StreamParser> stream_parser,
@@ -190,6 +194,7 @@ class SourceState {
void OnSourceInitDone(bool success,
TimeDelta duration,
+ base::Time timeline_offset,
bool auto_update_timestamp_offset);
CreateDemuxerStreamCB create_demuxer_stream_cb_;
@@ -697,9 +702,11 @@ bool SourceState::OnNewBuffers(
void SourceState::OnSourceInitDone(bool success,
TimeDelta duration,
+ base::Time timeline_offset,
bool auto_update_timestamp_offset) {
auto_update_timestamp_offset_ = auto_update_timestamp_offset;
- base::ResetAndReturn(&init_cb_).Run(success, duration);
+ base::ResetAndReturn(&init_cb_).Run(
+ success, duration, timeline_offset);
}
ChunkDemuxerStream::ChunkDemuxerStream(Type type, bool splice_frames_enabled)
@@ -1069,6 +1076,10 @@ TimeDelta ChunkDemuxer::GetStartTime() const {
return TimeDelta();
}
+base::Time ChunkDemuxer::GetTimelineOffset() const {
+ return timeline_offset_;
+}
+
void ChunkDemuxer::StartWaitingForSeek(TimeDelta seek_time) {
DVLOG(1) << "StartWaitingForSeek()";
base::AutoLock auto_lock(lock_);
@@ -1486,7 +1497,8 @@ bool ChunkDemuxer::IsSeekWaitingForData_Locked() const {
return false;
}
-void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration) {
+void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration,
+ base::Time timeline_offset) {
DVLOG(1) << "OnSourceInitDone(" << success << ", "
<< duration.InSecondsF() << ")";
lock_.AssertAcquired();
@@ -1499,6 +1511,18 @@ void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration) {
if (duration != TimeDelta() && duration_ == kNoTimestamp())
UpdateDuration(duration);
+ if (!timeline_offset.is_null()) {
+ if (!timeline_offset_.is_null() &&
+ timeline_offset != timeline_offset_) {
+ MEDIA_LOG(log_cb_)
+ << "Timeline offset is not the same across all SourceBuffers.";
+ ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN);
+ return;
+ }
+
+ timeline_offset_ = timeline_offset;
+ }
+
// Wait until all streams have initialized.
if ((!source_id_audio_.empty() && !audio_) ||
(!source_id_video_.empty() && !video_))
« no previous file with comments | « media/filters/chunk_demuxer.h ('k') | media/filters/ffmpeg_demuxer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698