diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 07:15:12 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 07:15:12 +0000 |
commit | db66d0097bf0b0a3757056ce8272c0a6f1ae0eab (patch) | |
tree | 5c5e5ad3600444fede5560c3f64ca2a8f1fccb09 /media/formats | |
parent | b1248eb73c20ca69fc8e9e88667b416989e413f7 (diff) | |
download | chromium_src-db66d0097bf0b0a3757056ce8272c0a6f1ae0eab.zip chromium_src-db66d0097bf0b0a3757056ce8272c0a6f1ae0eab.tar.gz chromium_src-db66d0097bf0b0a3757056ce8272c0a6f1ae0eab.tar.bz2 |
Add WebMediaPlayer::timelineOffset() support to WebMediaPlayerImpl.
These changes add support for the
WebMediaPlayer::timelineOffset() method so that
HTMLMediaElement::getStartDate() can report this
information to JavaScript. FFmpegDemuxer & ChunkDemuxer
have been updated to provide "timeline offset" information
for WebM.
BUG=312699
TESTS=PipelineIntegrationTest.BasicPlayback, PipelineIntegrationTest.BasicPlaybackLive, PipelineIntegrationTest.BasicPlayback_MediaSource, PipelineIntegrationTest, BasicPlayback_MediaSource_Live
Review URL: https://codereview.chromium.org/236023003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264145 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/formats')
-rw-r--r-- | media/formats/common/stream_parser_test_base.cc | 1 | ||||
-rw-r--r-- | media/formats/common/stream_parser_test_base.h | 1 | ||||
-rw-r--r-- | media/formats/mp2t/mp2t_stream_parser.cc | 5 | ||||
-rw-r--r-- | media/formats/mp2t/mp2t_stream_parser_unittest.cc | 1 | ||||
-rw-r--r-- | media/formats/mp4/mp4_stream_parser.cc | 2 | ||||
-rw-r--r-- | media/formats/mp4/mp4_stream_parser_unittest.cc | 1 | ||||
-rw-r--r-- | media/formats/mpeg/mpeg_audio_stream_parser_base.cc | 3 | ||||
-rw-r--r-- | media/formats/webm/webm_info_parser.cc | 19 | ||||
-rw-r--r-- | media/formats/webm/webm_info_parser.h | 3 | ||||
-rw-r--r-- | media/formats/webm/webm_stream_parser.cc | 3 |
10 files changed, 34 insertions, 5 deletions
diff --git a/media/formats/common/stream_parser_test_base.cc b/media/formats/common/stream_parser_test_base.cc index abe7cf9..61e0f13 100644 --- a/media/formats/common/stream_parser_test_base.cc +++ b/media/formats/common/stream_parser_test_base.cc @@ -72,6 +72,7 @@ bool StreamParserTestBase::AppendDataInPieces(const uint8* data, void StreamParserTestBase::OnInitDone(bool success, base::TimeDelta duration, + base::Time wallclock_timeline_offset, bool auto_update_timestamp_offset) { EXPECT_TRUE(auto_update_timestamp_offset); DVLOG(1) << __FUNCTION__ << "(" << success << ", " diff --git a/media/formats/common/stream_parser_test_base.h b/media/formats/common/stream_parser_test_base.h index 780f665..609dea3 100644 --- a/media/formats/common/stream_parser_test_base.h +++ b/media/formats/common/stream_parser_test_base.h @@ -45,6 +45,7 @@ class StreamParserTestBase { void OnInitDone(bool success, base::TimeDelta duration, + base::Time wallclock_timeline_offset, bool auto_update_timestamp_offset); bool OnNewConfig(const AudioDecoderConfig& audio_config, const VideoDecoderConfig& video_config, diff --git a/media/formats/mp2t/mp2t_stream_parser.cc b/media/formats/mp2t/mp2t_stream_parser.cc index a22af1a..cc2af5e 100644 --- a/media/formats/mp2t/mp2t_stream_parser.cc +++ b/media/formats/mp2t/mp2t_stream_parser.cc @@ -5,6 +5,7 @@ #include "media/formats/mp2t/mp2t_stream_parser.h" #include "base/bind.h" +#include "base/callback_helpers.h" #include "base/memory/scoped_ptr.h" #include "base/stl_util.h" #include "media/base/audio_decoder_config.h" @@ -484,7 +485,8 @@ bool Mp2tStreamParser::FinishInitializationIfNeeded() { // For Mpeg2 TS, the duration is not known. DVLOG(1) << "Mpeg2TS stream parser initialization done"; - init_cb_.Run(true, kInfiniteDuration(), false); + base::ResetAndReturn(&init_cb_).Run( + true, kInfiniteDuration(), base::Time(), false); is_initialized_ = true; return true; @@ -619,4 +621,3 @@ bool Mp2tStreamParser::EmitRemainingBuffers() { } // namespace mp2t } // namespace media - diff --git a/media/formats/mp2t/mp2t_stream_parser_unittest.cc b/media/formats/mp2t/mp2t_stream_parser_unittest.cc index ea79674..660792f 100644 --- a/media/formats/mp2t/mp2t_stream_parser_unittest.cc +++ b/media/formats/mp2t/mp2t_stream_parser_unittest.cc @@ -59,6 +59,7 @@ class Mp2tStreamParserTest : public testing::Test { void OnInit(bool init_ok, base::TimeDelta duration, + base::Time wallclock_timeline_offset, bool auto_update_timestamp_offset) { DVLOG(1) << "OnInit: ok=" << init_ok << ", dur=" << duration.InMilliseconds() diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc index b8ddf30..e3b42fef 100644 --- a/media/formats/mp4/mp4_stream_parser.cc +++ b/media/formats/mp4/mp4_stream_parser.cc @@ -301,7 +301,7 @@ bool MP4StreamParser::ParseMoov(BoxReader* reader) { } if (!init_cb_.is_null()) - base::ResetAndReturn(&init_cb_).Run(true, duration, false); + base::ResetAndReturn(&init_cb_).Run(true, duration, base::Time(), false); EmitNeedKeyIfNecessary(moov_->pssh); return true; diff --git a/media/formats/mp4/mp4_stream_parser_unittest.cc b/media/formats/mp4/mp4_stream_parser_unittest.cc index 4418d6d..6f58c6a 100644 --- a/media/formats/mp4/mp4_stream_parser_unittest.cc +++ b/media/formats/mp4/mp4_stream_parser_unittest.cc @@ -60,6 +60,7 @@ class MP4StreamParserTest : public testing::Test { void InitF(bool init_ok, base::TimeDelta duration, + base::Time wallclock_timeline_offset, bool auto_update_timestamp_offset) { DVLOG(1) << "InitF: ok=" << init_ok << ", dur=" << duration.InMilliseconds() << ", autoTimestampOffset=" << auto_update_timestamp_offset; diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc index aaf6a50..035dd85 100644 --- a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc +++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc @@ -208,7 +208,8 @@ int MPEGAudioStreamParserBase::ParseFrame(const uint8* data, bool success = config_cb_.Run(config_, video_config, TextTrackConfigMap()); if (!init_cb_.is_null()) - base::ResetAndReturn(&init_cb_).Run(success, kInfiniteDuration(), true); + base::ResetAndReturn(&init_cb_).Run( + success, kInfiniteDuration(), base::Time(), true); if (!success) return -1; diff --git a/media/formats/webm/webm_info_parser.cc b/media/formats/webm/webm_info_parser.cc index ac4f08c..6309c21 100644 --- a/media/formats/webm/webm_info_parser.cc +++ b/media/formats/webm/webm_info_parser.cc @@ -74,6 +74,25 @@ bool WebMInfoParser::OnFloat(int id, double val) { } bool WebMInfoParser::OnBinary(int id, const uint8* data, int size) { + if (id == kWebMIdDateUTC) { + if (size != 8) + return false; + + int64 date_in_nanoseconds = 0; + for (int i = 0; i < size; ++i) + date_in_nanoseconds = (date_in_nanoseconds << 8) | data[i]; + + base::Time::Exploded exploded_epoch; + exploded_epoch.year = 2001; + exploded_epoch.month = 1; + exploded_epoch.day_of_month = 1; + exploded_epoch.hour = 0; + exploded_epoch.minute = 0; + exploded_epoch.second = 0; + exploded_epoch.millisecond = 0; + date_utc_ = base::Time::FromUTCExploded(exploded_epoch) + + base::TimeDelta::FromMicroseconds(date_in_nanoseconds / 1000); + } return true; } diff --git a/media/formats/webm/webm_info_parser.h b/media/formats/webm/webm_info_parser.h index 504b927..36aac92 100644 --- a/media/formats/webm/webm_info_parser.h +++ b/media/formats/webm/webm_info_parser.h @@ -6,6 +6,7 @@ #define MEDIA_FORMATS_WEBM_WEBM_INFO_PARSER_H_ #include "base/compiler_specific.h" +#include "base/time/time.h" #include "media/base/media_export.h" #include "media/formats/webm/webm_parser.h" @@ -26,6 +27,7 @@ class MEDIA_EXPORT WebMInfoParser : public WebMParserClient { int64 timecode_scale() const { return timecode_scale_; } double duration() const { return duration_; } + base::Time date_utc() const { return date_utc_; } private: // WebMParserClient methods @@ -38,6 +40,7 @@ class MEDIA_EXPORT WebMInfoParser : public WebMParserClient { int64 timecode_scale_; double duration_; + base::Time date_utc_; DISALLOW_COPY_AND_ASSIGN(WebMInfoParser); }; diff --git a/media/formats/webm/webm_stream_parser.cc b/media/formats/webm/webm_stream_parser.cc index 1a49c66..4a724090 100644 --- a/media/formats/webm/webm_stream_parser.cc +++ b/media/formats/webm/webm_stream_parser.cc @@ -219,7 +219,8 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { ChangeState(kParsingClusters); if (!init_cb_.is_null()) - base::ResetAndReturn(&init_cb_).Run(true, duration, false); + base::ResetAndReturn(&init_cb_).Run( + true, duration, info_parser.date_utc(), false); return bytes_parsed; } |