diff options
author | self@brendanlong.com <self@brendanlong.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-26 23:45:40 +0000 |
---|---|---|
committer | self@brendanlong.com <self@brendanlong.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-26 23:45:40 +0000 |
commit | 427ff10d1e5643c0af11223d185ad4d6d68a9be7 (patch) | |
tree | c6a02ebc459800fa0c809d29919ebccbc9fe6bfd | |
parent | ba7993d96365f26378411bfd023d6e168a773eee (diff) | |
download | chromium_src-427ff10d1e5643c0af11223d185ad4d6d68a9be7.zip chromium_src-427ff10d1e5643c0af11223d185ad4d6d68a9be7.tar.gz chromium_src-427ff10d1e5643c0af11223d185ad4d6d68a9be7.tar.bz2 |
Add TextTrack.id and TextTrackList.getTrackById().
Contributed by self@brendanlong.com
BUG=313601
Review URL: https://codereview.chromium.org/85693006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237438 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | content/renderer/media/webinbandtexttrack_impl.cc | 6 | ||||
-rw-r--r-- | content/renderer/media/webinbandtexttrack_impl.h | 3 | ||||
-rw-r--r-- | content/renderer/media/webmediaplayer_impl.cc | 4 | ||||
-rw-r--r-- | media/base/pipeline_unittest.cc | 2 | ||||
-rw-r--r-- | media/base/text_renderer_unittest.cc | 2 | ||||
-rw-r--r-- | media/base/text_track_config.cc | 9 | ||||
-rw-r--r-- | media/base/text_track_config.h | 5 | ||||
-rw-r--r-- | media/filters/chunk_demuxer_unittest.cc | 8 | ||||
-rw-r--r-- | media/filters/ffmpeg_demuxer.cc | 5 | ||||
-rw-r--r-- | media/webm/tracks_builder.cc | 9 | ||||
-rw-r--r-- | media/webm/tracks_builder.h | 11 | ||||
-rw-r--r-- | media/webm/webm_cluster_parser_unittest.cc | 12 | ||||
-rw-r--r-- | media/webm/webm_tracks_parser.cc | 16 | ||||
-rw-r--r-- | media/webm/webm_tracks_parser.h | 1 | ||||
-rw-r--r-- | media/webm/webm_tracks_parser_unittest.cc | 12 |
16 files changed, 76 insertions, 30 deletions
@@ -38,6 +38,7 @@ Ben Karel <eschew@gmail.com> Benjamin Jemlich <pcgod99@gmail.com> Bernard Cafarelli <voyageur@gentoo.org> Bobby Powers <bobbypowers@gmail.com> +Brendan Long <self@brendanlong.com> Brian G. Merrell <bgmerrell@gmail.com> Brian Merrell, Novell Inc. <bgmerrell@gmail.com> Bruno Calvignac <bruno@flock.com> diff --git a/content/renderer/media/webinbandtexttrack_impl.cc b/content/renderer/media/webinbandtexttrack_impl.cc index 20f2d6f..e83af8f 100644 --- a/content/renderer/media/webinbandtexttrack_impl.cc +++ b/content/renderer/media/webinbandtexttrack_impl.cc @@ -12,11 +12,13 @@ WebInbandTextTrackImpl::WebInbandTextTrackImpl( Kind kind, const blink::WebString& label, const blink::WebString& language, + const blink::WebString& id, int index) : client_(NULL), kind_(kind), label_(label), language_(language), + id_(id), index_(index) { } @@ -45,6 +47,10 @@ blink::WebString WebInbandTextTrackImpl::language() const { return language_; } +blink::WebString WebInbandTextTrackImpl::id() const { + return id_; +} + int WebInbandTextTrackImpl::textTrackIndex() const { return index_; } diff --git a/content/renderer/media/webinbandtexttrack_impl.h b/content/renderer/media/webinbandtexttrack_impl.h index 76fc3cc..293fbd3 100644 --- a/content/renderer/media/webinbandtexttrack_impl.h +++ b/content/renderer/media/webinbandtexttrack_impl.h @@ -15,6 +15,7 @@ class WebInbandTextTrackImpl : public blink::WebInbandTextTrack { WebInbandTextTrackImpl(Kind kind, const blink::WebString& label, const blink::WebString& language, + const blink::WebString& id, int index); virtual ~WebInbandTextTrackImpl(); @@ -25,6 +26,7 @@ class WebInbandTextTrackImpl : public blink::WebInbandTextTrack { virtual blink::WebString label() const; virtual blink::WebString language() const; + virtual blink::WebString id() const; virtual int textTrackIndex() const; @@ -33,6 +35,7 @@ class WebInbandTextTrackImpl : public blink::WebInbandTextTrack { Kind kind_; blink::WebString label_; blink::WebString language_; + blink::WebString id_; int index_; DISALLOW_COPY_AND_ASSIGN(WebInbandTextTrackImpl); }; diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc index c0aee6f..6e6ed2f 100644 --- a/content/renderer/media/webmediaplayer_impl.cc +++ b/content/renderer/media/webmediaplayer_impl.cc @@ -1005,9 +1005,11 @@ void WebMediaPlayerImpl::OnAddTextTrack( blink::WebString::fromUTF8(config.label()); const blink::WebString web_language = blink::WebString::fromUTF8(config.language()); + const blink::WebString web_id = + blink::WebString::fromUTF8(config.id()); scoped_ptr<WebInbandTextTrackImpl> web_inband_text_track( - new WebInbandTextTrackImpl(web_kind, web_label, web_language, + new WebInbandTextTrackImpl(web_kind, web_label, web_language, web_id, text_track_index_++)); scoped_ptr<media::TextTrack> text_track( diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc index ccd7e4e..a7a8cae 100644 --- a/media/base/pipeline_unittest.cc +++ b/media/base/pipeline_unittest.cc @@ -194,7 +194,7 @@ class PipelineTest : public ::testing::Test { EXPECT_CALL(*this, OnAddTextTrack(_,_)) .WillOnce(Invoke(this, &PipelineTest::DoOnAddTextTrack)); static_cast<DemuxerHost*>(pipeline_.get())->AddTextStream(text_stream(), - TextTrackConfig(kTextSubtitles, "", "")); + TextTrackConfig(kTextSubtitles, "", "", "")); } // Sets up expectations on the callback and initializes the pipeline. Called diff --git a/media/base/text_renderer_unittest.cc b/media/base/text_renderer_unittest.cc index 0188763..77e8c47 100644 --- a/media/base/text_renderer_unittest.cc +++ b/media/base/text_renderer_unittest.cc @@ -86,7 +86,7 @@ class TextRendererTest : public testing::Test { if (expect_read) ExpectRead(idx); - const TextTrackConfig config(kind, name, language); + const TextTrackConfig config(kind, name, language, std::string()); text_renderer_->AddTextStream(text_track_streams_.back(), config); message_loop_.RunUntilIdle(); diff --git a/media/base/text_track_config.cc b/media/base/text_track_config.cc index 2d30fc6..0d4b11f6 100644 --- a/media/base/text_track_config.cc +++ b/media/base/text_track_config.cc @@ -12,16 +12,19 @@ TextTrackConfig::TextTrackConfig() TextTrackConfig::TextTrackConfig(TextKind kind, const std::string& label, - const std::string& language) + const std::string& language, + const std::string& id) : kind_(kind), label_(label), - language_(language) { + language_(language), + id_(id) { } bool TextTrackConfig::Matches(const TextTrackConfig& config) const { return config.kind() == kind_ && config.label() == label_ && - config.language() == language_; + config.language() == language_ && + config.id() == id_; } } // namespace media diff --git a/media/base/text_track_config.h b/media/base/text_track_config.h index 5619aec..58efba4 100644 --- a/media/base/text_track_config.h +++ b/media/base/text_track_config.h @@ -25,7 +25,8 @@ class MEDIA_EXPORT TextTrackConfig { TextTrackConfig(); TextTrackConfig(TextKind kind, const std::string& label, - const std::string& language); + const std::string& language, + const std::string& id); // Returns true if all fields in |config| match this config. bool Matches(const TextTrackConfig& config) const; @@ -33,11 +34,13 @@ class MEDIA_EXPORT TextTrackConfig { TextKind kind() const { return kind_; } const std::string& label() const { return label_; } const std::string& language() const { return language_; } + const std::string& id() const { return id_; } private: TextKind kind_; std::string label_; std::string language_; + std::string id_; }; } // namespace media diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc index 4b279b6..87c9f70 100644 --- a/media/filters/chunk_demuxer_unittest.cc +++ b/media/filters/chunk_demuxer_unittest.cc @@ -208,14 +208,16 @@ class ChunkDemuxerTest : public testing::Test { // We need it to also handle the creation of multiple text tracks. // // This is the track entry for a text track, - // TrackEntry [AE], size=26 + // TrackEntry [AE], size=30 // TrackNum [D7], size=1, val=3 + // TrackUID [73] [C5], size=1, value=3 // TrackType [83], size=1, val=0x11 // CodecId [86], size=18, val="D_WEBVTT/SUBTITLES" - const char str[] = "\xAE\x9A\xD7\x81\x03\x83\x81\x11\x86\x92" + const char str[] = "\xAE\x9E\xD7\x81\x03\x73\xC5\x81\x03" + "\x83\x81\x11\x86\x92" "D_WEBVTT/SUBTITLES"; const int len = strlen(str); - DCHECK_EQ(len, 28); + DCHECK_EQ(len, 32); const uint8* const buf = reinterpret_cast<const uint8*>(str); text_track_entry = DecoderBuffer::CopyFrom(buf, len); tracks_element_size += text_track_entry->data_size(); diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc index c3d4490..e47c59e 100644 --- a/media/filters/ffmpeg_demuxer.cc +++ b/media/filters/ffmpeg_demuxer.cc @@ -482,7 +482,10 @@ void FFmpegDemuxer::AddTextStreams() { std::string title = stream->GetMetadata("title"); std::string language = stream->GetMetadata("language"); - host_->AddTextStream(stream, TextTrackConfig(kind, title, language)); + // TODO: Implement "id" metadata in FFMPEG. + // See: http://crbug.com/323183 + host_->AddTextStream(stream, TextTrackConfig(kind, title, language, + std::string())); } } diff --git a/media/webm/tracks_builder.cc b/media/webm/tracks_builder.cc index 370ca82..3ad5953 100644 --- a/media/webm/tracks_builder.cc +++ b/media/webm/tracks_builder.cc @@ -118,10 +118,12 @@ TracksBuilder::~TracksBuilder() {} void TracksBuilder::AddTrack( int track_num, int track_type, + int track_uid, const std::string& codec_id, const std::string& name, const std::string& language) { - tracks_.push_back(Track(track_num, track_type, codec_id, name, language)); + tracks_.push_back(Track(track_num, track_type, track_uid, codec_id, name, + language)); } std::vector<uint8> TracksBuilder::Finish() { @@ -159,12 +161,13 @@ void TracksBuilder::WriteTracks(uint8* buf, int buf_size) const { } } -TracksBuilder::Track::Track(int track_num, int track_type, +TracksBuilder::Track::Track(int track_num, int track_type, int track_uid, const std::string& codec_id, const std::string& name, const std::string& language) : track_num_(track_num), track_type_(track_type), + track_uid_(track_uid), codec_id_(codec_id), name_(name), language_(language) { @@ -179,6 +182,7 @@ int TracksBuilder::Track::GetPayloadSize() const { size += IntElementSize(kWebMIdTrackNumber, track_num_); size += IntElementSize(kWebMIdTrackType, track_type_); + size += IntElementSize(kWebMIdTrackUID, track_uid_); if (!codec_id_.empty()) size += StringElementSize(kWebMIdCodecID, codec_id_); @@ -197,6 +201,7 @@ void TracksBuilder::Track::Write(uint8** buf, int* buf_size) const { WriteIntElement(buf, buf_size, kWebMIdTrackNumber, track_num_); WriteIntElement(buf, buf_size, kWebMIdTrackType, track_type_); + WriteIntElement(buf, buf_size, kWebMIdTrackUID, track_uid_); if (!codec_id_.empty()) WriteStringElement(buf, buf_size, kWebMIdCodecID, codec_id_); diff --git a/media/webm/tracks_builder.h b/media/webm/tracks_builder.h index 87ceaed..fca9dfe 100644 --- a/media/webm/tracks_builder.h +++ b/media/webm/tracks_builder.h @@ -18,8 +18,9 @@ class TracksBuilder { TracksBuilder(); ~TracksBuilder(); - void AddTrack(int track_num, int track_type, const std::string& codec_id, - const std::string& name, const std::string& language); + void AddTrack(int track_num, int track_type, int track_uid, + const std::string& codec_id, const std::string& name, + const std::string& language); std::vector<uint8> Finish(); @@ -30,8 +31,9 @@ class TracksBuilder { class Track { public: - Track(int track_num, int track_type, const std::string& codec_id, - const std::string& name, const std::string& language); + Track(int track_num, int track_type, int track_uid, + const std::string& codec_id, const std::string& name, + const std::string& language); int GetSize() const; void Write(uint8** buf, int* buf_size) const; @@ -40,6 +42,7 @@ class TracksBuilder { int track_num_; int track_type_; + int track_uid_; std::string codec_id_; std::string name_; std::string language_; diff --git a/media/webm/webm_cluster_parser_unittest.cc b/media/webm/webm_cluster_parser_unittest.cc index fe5e83f..691325d 100644 --- a/media/webm/webm_cluster_parser_unittest.cc +++ b/media/webm/webm_cluster_parser_unittest.cc @@ -376,7 +376,8 @@ TEST_F(WebMClusterParserTest, ParseTextTracks) { TextTracks text_tracks; text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum), - TextTrackConfig(kTextSubtitles, "", ""))); + TextTrackConfig(kTextSubtitles, "", "", + ""))); parser_.reset(new WebMClusterParser(kTimecodeScale, kAudioTrackNum, @@ -411,7 +412,8 @@ TEST_F(WebMClusterParserTest, TextTracksSimpleBlock) { WebMTracksParser::TextTracks text_tracks; text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum), - TextTrackConfig(kTextSubtitles, "", ""))); + TextTrackConfig(kTextSubtitles, "", "", + ""))); parser_.reset(new WebMClusterParser(kTimecodeScale, kAudioTrackNum, @@ -442,10 +444,12 @@ TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) { const int kCaptionTextTrackNum = kTextTrackNum + 1; text_tracks.insert(std::make_pair(TextTracks::key_type(kSubtitleTextTrackNum), - TextTrackConfig(kTextSubtitles, "", ""))); + TextTrackConfig(kTextSubtitles, "", "", + ""))); text_tracks.insert(std::make_pair(TextTracks::key_type(kCaptionTextTrackNum), - TextTrackConfig(kTextCaptions, "", ""))); + TextTrackConfig(kTextCaptions, "", "", + ""))); parser_.reset(new WebMClusterParser(kTimecodeScale, kAudioTrackNum, diff --git a/media/webm/webm_tracks_parser.cc b/media/webm/webm_tracks_parser.cc index 47fade3..771480f 100644 --- a/media/webm/webm_tracks_parser.cc +++ b/media/webm/webm_tracks_parser.cc @@ -5,6 +5,7 @@ #include "media/webm/webm_tracks_parser.h" #include "base/logging.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "media/base/buffers.h" #include "media/webm/webm_constants.h" @@ -31,6 +32,7 @@ static TextKind CodecIdToTextKind(const std::string& codec_id) { WebMTracksParser::WebMTracksParser(const LogCB& log_cb, bool ignore_text_tracks) : track_type_(-1), track_num_(-1), + track_uid_(-1), seek_preroll_(-1), codec_delay_(-1), audio_track_num_(-1), @@ -46,6 +48,7 @@ WebMTracksParser::~WebMTracksParser() {} int WebMTracksParser::Parse(const uint8* buf, int size) { track_type_ =-1; track_num_ = -1; + track_uid_ = -1; track_name_.clear(); track_language_.clear(); audio_track_num_ = -1; @@ -101,10 +104,11 @@ bool WebMTracksParser::OnListEnd(int id) { } if (id == kWebMIdTrackEntry) { - if (track_type_ == -1 || track_num_ == -1) { + if (track_type_ == -1 || track_num_ == -1 || track_uid_ == -1) { MEDIA_LOG(log_cb_) << "Missing TrackEntry data for " << " TrackType " << track_type_ - << " TrackNum " << track_num_; + << " TrackNum " << track_num_ + << " TrackUID " << track_uid_; return false; } @@ -192,9 +196,11 @@ bool WebMTracksParser::OnListEnd(int id) { MEDIA_LOG(log_cb_) << "Ignoring text track " << track_num_; ignored_tracks_.insert(track_num_); } else { + std::string track_uid = base::Int64ToString(track_uid_); text_tracks_[track_num_] = TextTrackConfig(text_track_kind, track_name_, - track_language_); + track_language_, + track_uid); } } else { MEDIA_LOG(log_cb_) << "Unexpected TrackType " << track_type_; @@ -203,6 +209,7 @@ bool WebMTracksParser::OnListEnd(int id) { track_type_ = -1; track_num_ = -1; + track_uid_ = -1; track_name_.clear(); track_language_.clear(); codec_id_ = ""; @@ -227,6 +234,9 @@ bool WebMTracksParser::OnUInt(int id, int64 val) { case kWebMIdTrackType: dst = &track_type_; break; + case kWebMIdTrackUID: + dst = &track_uid_; + break; case kWebMIdSeekPreRoll: dst = &seek_preroll_; break; diff --git a/media/webm/webm_tracks_parser.h b/media/webm/webm_tracks_parser.h index cd6f942..d489235 100644 --- a/media/webm/webm_tracks_parser.h +++ b/media/webm/webm_tracks_parser.h @@ -73,6 +73,7 @@ class MEDIA_EXPORT WebMTracksParser : public WebMParserClient { int64 track_type_; int64 track_num_; + int64 track_uid_; std::string track_name_; std::string track_language_; std::string codec_id_; diff --git a/media/webm/webm_tracks_parser_unittest.cc b/media/webm/webm_tracks_parser_unittest.cc index 8e10c31..ba1e729 100644 --- a/media/webm/webm_tracks_parser_unittest.cc +++ b/media/webm/webm_tracks_parser_unittest.cc @@ -47,7 +47,7 @@ TEST_F(WebMTracksParserTest, SubtitleNoNameNoLang) { InSequence s; TracksBuilder tb; - tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, + tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, kWebMCodecSubtitles, "", ""); const std::vector<uint8> buf = tb.Finish(); @@ -58,7 +58,7 @@ TEST_F(WebMTracksParserTest, SubtitleYesNameNoLang) { InSequence s; TracksBuilder tb; - tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, + tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, kWebMCodecSubtitles, "Spock", ""); const std::vector<uint8> buf = tb.Finish(); @@ -69,7 +69,7 @@ TEST_F(WebMTracksParserTest, SubtitleNoNameYesLang) { InSequence s; TracksBuilder tb; - tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, + tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, kWebMCodecSubtitles, "", "eng"); const std::vector<uint8> buf = tb.Finish(); @@ -80,7 +80,7 @@ TEST_F(WebMTracksParserTest, SubtitleYesNameYesLang) { InSequence s; TracksBuilder tb; - tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, + tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, kWebMCodecSubtitles, "Picard", "fre"); const std::vector<uint8> buf = tb.Finish(); @@ -91,9 +91,9 @@ TEST_F(WebMTracksParserTest, IgnoringTextTracks) { InSequence s; TracksBuilder tb; - tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, + tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions, 1, kWebMCodecSubtitles, "Subtitles", "fre"); - tb.AddTrack(2, kWebMTrackTypeSubtitlesOrCaptions, + tb.AddTrack(2, kWebMTrackTypeSubtitlesOrCaptions, 2, kWebMCodecSubtitles, "Commentary", "fre"); const std::vector<uint8> buf = tb.Finish(); |