summaryrefslogtreecommitdiffstats
path: root/media/formats
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-16 07:15:12 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-16 07:15:12 +0000
commitdb66d0097bf0b0a3757056ce8272c0a6f1ae0eab (patch)
tree5c5e5ad3600444fede5560c3f64ca2a8f1fccb09 /media/formats
parentb1248eb73c20ca69fc8e9e88667b416989e413f7 (diff)
downloadchromium_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.cc1
-rw-r--r--media/formats/common/stream_parser_test_base.h1
-rw-r--r--media/formats/mp2t/mp2t_stream_parser.cc5
-rw-r--r--media/formats/mp2t/mp2t_stream_parser_unittest.cc1
-rw-r--r--media/formats/mp4/mp4_stream_parser.cc2
-rw-r--r--media/formats/mp4/mp4_stream_parser_unittest.cc1
-rw-r--r--media/formats/mpeg/mpeg_audio_stream_parser_base.cc3
-rw-r--r--media/formats/webm/webm_info_parser.cc19
-rw-r--r--media/formats/webm/webm_info_parser.h3
-rw-r--r--media/formats/webm/webm_stream_parser.cc3
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;
}