diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-29 14:27:10 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-29 14:27:10 +0000 |
commit | 7afb1bb34951825dc3dad9579d9a58892fd7d5ba (patch) | |
tree | 1c23f591f0b02fcbf2c404cb11e126f091c2b7c6 /media | |
parent | 020df7960f6073f8ca0a5750327c5ae058694b21 (diff) | |
download | chromium_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.cc | 3 | ||||
-rw-r--r-- | media/base/media_switches.h | 2 | ||||
-rw-r--r-- | media/webm/webm_stream_parser.cc | 2 | ||||
-rw-r--r-- | media/webm/webm_tracks_parser.cc | 16 | ||||
-rw-r--r-- | media/webm/webm_tracks_parser.h | 3 | ||||
-rw-r--r-- | media/webm/webm_tracks_parser_unittest.cc | 34 |
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 |