summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorself@brendanlong.com <self@brendanlong.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-26 23:45:40 +0000
committerself@brendanlong.com <self@brendanlong.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-26 23:45:40 +0000
commit427ff10d1e5643c0af11223d185ad4d6d68a9be7 (patch)
treec6a02ebc459800fa0c809d29919ebccbc9fe6bfd
parentba7993d96365f26378411bfd023d6e168a773eee (diff)
downloadchromium_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--AUTHORS1
-rw-r--r--content/renderer/media/webinbandtexttrack_impl.cc6
-rw-r--r--content/renderer/media/webinbandtexttrack_impl.h3
-rw-r--r--content/renderer/media/webmediaplayer_impl.cc4
-rw-r--r--media/base/pipeline_unittest.cc2
-rw-r--r--media/base/text_renderer_unittest.cc2
-rw-r--r--media/base/text_track_config.cc9
-rw-r--r--media/base/text_track_config.h5
-rw-r--r--media/filters/chunk_demuxer_unittest.cc8
-rw-r--r--media/filters/ffmpeg_demuxer.cc5
-rw-r--r--media/webm/tracks_builder.cc9
-rw-r--r--media/webm/tracks_builder.h11
-rw-r--r--media/webm/webm_cluster_parser_unittest.cc12
-rw-r--r--media/webm/webm_tracks_parser.cc16
-rw-r--r--media/webm/webm_tracks_parser.h1
-rw-r--r--media/webm/webm_tracks_parser_unittest.cc12
16 files changed, 76 insertions, 30 deletions
diff --git a/AUTHORS b/AUTHORS
index 148c3e0..a04ca71 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -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();