summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-29 14:27:10 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-29 14:27:10 +0000
commit7afb1bb34951825dc3dad9579d9a58892fd7d5ba (patch)
tree1c23f591f0b02fcbf2c404cb11e126f091c2b7c6 /media
parent020df7960f6073f8ca0a5750327c5ae058694b21 (diff)
downloadchromium_src-7afb1bb34951825dc3dad9579d9a58892fd7d5ba.zip
chromium_src-7afb1bb34951825dc3dad9579d9a58892fd7d5ba.tar.gz
chromium_src-7afb1bb34951825dc3dad9579d9a58892fd7d5ba.tar.bz2
Place inband text track support behind a flag.
The inband text track support is not ready to be exposed by default. This patch adds a flag for enabling this feature and fixes the code to ignore text tracks when the flag is not set. BUG=230708 TEST=WebMTracksParserTest.TestIgnoringTextTracks Review URL: https://chromiumcodereview.appspot.com/18104002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209320 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/base/media_switches.cc3
-rw-r--r--media/base/media_switches.h2
-rw-r--r--media/webm/webm_stream_parser.cc2
-rw-r--r--media/webm/webm_tracks_parser.cc16
-rw-r--r--media/webm/webm_tracks_parser.h3
-rw-r--r--media/webm/webm_tracks_parser_unittest.cc34
6 files changed, 52 insertions, 8 deletions
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index 153c22a..70a958c 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -12,6 +12,9 @@ const char kAudioBufferSize[] = "audio-buffer-size";
// Enable EAC3 playback in MSE.
const char kEnableEac3Playback[] = "enable-eac3-playback";
+// Enables support for inband text tracks in media content.
+const char kEnableInbandTextTracks[] = "enable-inband-text-tracks";
+
// Enables Opus playback in media elements.
const char kEnableOpusPlayback[] = "enable-opus-playback";
diff --git a/media/base/media_switches.h b/media/base/media_switches.h
index 0462ada..590af80 100644
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -16,6 +16,8 @@ MEDIA_EXPORT extern const char kAudioBufferSize[];
MEDIA_EXPORT extern const char kEnableEac3Playback[];
+MEDIA_EXPORT extern const char kEnableInbandTextTracks[];
+
MEDIA_EXPORT extern const char kEnableOpusPlayback[];
MEDIA_EXPORT extern const char kEnableVp8AlphaPlayback[];
diff --git a/media/webm/webm_stream_parser.cc b/media/webm/webm_stream_parser.cc
index 27a01a8..828d318 100644
--- a/media/webm/webm_stream_parser.cc
+++ b/media/webm/webm_stream_parser.cc
@@ -177,7 +177,7 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) {
cur_size -= result;
bytes_parsed += result;
- WebMTracksParser tracks_parser(log_cb_);
+ WebMTracksParser tracks_parser(log_cb_, add_text_track_cb_.is_null());
result = tracks_parser.Parse(cur, cur_size);
if (result <= 0)
diff --git a/media/webm/webm_tracks_parser.cc b/media/webm/webm_tracks_parser.cc
index 93d0036..67bac04 100644
--- a/media/webm/webm_tracks_parser.cc
+++ b/media/webm/webm_tracks_parser.cc
@@ -28,11 +28,12 @@ static TextKind CodecIdToTextKind(const std::string& codec_id) {
return kTextNone;
}
-WebMTracksParser::WebMTracksParser(const LogCB& log_cb)
+WebMTracksParser::WebMTracksParser(const LogCB& log_cb, bool ignore_text_tracks)
: track_type_(-1),
track_num_(-1),
audio_track_num_(-1),
video_track_num_(-1),
+ ignore_text_tracks_(ignore_text_tracks),
log_cb_(log_cb),
audio_client_(log_cb),
video_client_(log_cb) {
@@ -185,10 +186,15 @@ bool WebMTracksParser::OnListEnd(int id) {
}
} else if (track_type_ == kWebMTrackTypeSubtitlesOrCaptions ||
track_type_ == kWebMTrackTypeDescriptionsOrMetadata) {
- TextTrackInfo& text_track_info = text_tracks_[track_num_];
- text_track_info.kind = text_track_kind;
- text_track_info.name = track_name_;
- text_track_info.language = track_language_;
+ if (ignore_text_tracks_) {
+ MEDIA_LOG(log_cb_) << "Ignoring text track " << track_num_;
+ ignored_tracks_.insert(track_num_);
+ } else {
+ TextTrackInfo& text_track_info = text_tracks_[track_num_];
+ text_track_info.kind = text_track_kind;
+ text_track_info.name = track_name_;
+ text_track_info.language = track_language_;
+ }
} else {
MEDIA_LOG(log_cb_) << "Unexpected TrackType " << track_type_;
return false;
diff --git a/media/webm/webm_tracks_parser.h b/media/webm/webm_tracks_parser.h
index a7ec0e3..81588e4 100644
--- a/media/webm/webm_tracks_parser.h
+++ b/media/webm/webm_tracks_parser.h
@@ -26,7 +26,7 @@ namespace media {
// Parser for WebM Tracks element.
class MEDIA_EXPORT WebMTracksParser : public WebMParserClient {
public:
- explicit WebMTracksParser(const LogCB& log_cb);
+ explicit WebMTracksParser(const LogCB& log_cb, bool ignore_text_tracks);
virtual ~WebMTracksParser();
// Parses a WebM Tracks element in |buf|.
@@ -87,6 +87,7 @@ class MEDIA_EXPORT WebMTracksParser : public WebMParserClient {
int64 audio_track_num_;
int64 video_track_num_;
+ bool ignore_text_tracks_;
TextTracks text_tracks_;
std::set<int64> ignored_tracks_;
std::string audio_encryption_key_id_;
diff --git a/media/webm/webm_tracks_parser_unittest.cc b/media/webm/webm_tracks_parser_unittest.cc
index 6d23669..a57d039 100644
--- a/media/webm/webm_tracks_parser_unittest.cc
+++ b/media/webm/webm_tracks_parser_unittest.cc
@@ -28,7 +28,7 @@ static void VerifyTextTrackInfo(const uint8* buffer,
TextKind text_kind,
const std::string& name,
const std::string& language) {
- scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB()));
+ scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), false));
int result = parser->Parse(buffer, buffer_size);
EXPECT_GT(result, 0);
@@ -90,4 +90,36 @@ TEST_F(WebMTracksParserTest, TestSubtitleYesNameYesLang) {
VerifyTextTrackInfo(&buf[0], buf.size(), kTextSubtitles, "Picard", "fre");
}
+TEST_F(WebMTracksParserTest, TestIgnoringTextTracks) {
+ InSequence s;
+
+ TracksBuilder tb;
+ tb.AddTrack(1, kWebMTrackTypeSubtitlesOrCaptions,
+ kWebMCodecSubtitles, "Subtitles", "fre");
+ tb.AddTrack(2, kWebMTrackTypeSubtitlesOrCaptions,
+ kWebMCodecSubtitles, "Commentary", "fre");
+
+ const std::vector<uint8> buf = tb.Finish();
+ scoped_ptr<WebMTracksParser> parser(new WebMTracksParser(LogCB(), true));
+
+ int result = parser->Parse(&buf[0], buf.size());
+ EXPECT_GT(result, 0);
+ EXPECT_EQ(result, static_cast<int>(buf.size()));
+
+ EXPECT_EQ(parser->text_tracks().size(), 0u);
+
+ const std::set<int64>& ignored_tracks = parser->ignored_tracks();
+ EXPECT_TRUE(ignored_tracks.find(1) != ignored_tracks.end());
+ EXPECT_TRUE(ignored_tracks.find(2) != ignored_tracks.end());
+
+ // Test again w/o ignoring the test tracks.
+ parser.reset(new WebMTracksParser(LogCB(), false));
+
+ result = parser->Parse(&buf[0], buf.size());
+ EXPECT_GT(result, 0);
+
+ EXPECT_EQ(parser->ignored_tracks().size(), 0u);
+ EXPECT_EQ(parser->text_tracks().size(), 2u);
+}
+
} // namespace media