diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-11 19:29:19 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-11 19:29:19 +0000 |
commit | 4386ac3500178307d398a5e67f27f3b2577811e1 (patch) | |
tree | bddce62c7b8d8ccab0388966c2c7e1d209421446 /media/webm | |
parent | ec29415cceaaaa098b68a110f182d4f978729d3f (diff) | |
download | chromium_src-4386ac3500178307d398a5e67f27f3b2577811e1.zip chromium_src-4386ac3500178307d398a5e67f27f3b2577811e1.tar.gz chromium_src-4386ac3500178307d398a5e67f27f3b2577811e1.tar.bz2 |
Update ChunkDemuxer to allow midstream initialization segments that match the first one.
BUG=122913
TEST=ChunkDemuxerTest.TestMultipleHeaders
Review URL: https://chromiumcodereview.appspot.com/10535058
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@141460 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/webm')
-rw-r--r-- | media/webm/webm_stream_parser.cc | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/media/webm/webm_stream_parser.cc b/media/webm/webm_stream_parser.cc index bd03148..c8ca10e 100644 --- a/media/webm/webm_stream_parser.cc +++ b/media/webm/webm_stream_parser.cc @@ -261,6 +261,7 @@ bool WebMStreamParser::Parse(const uint8* buf, int size) { } void WebMStreamParser::ChangeState(State new_state) { + DVLOG(1) << "ChangeState() : " << state_ << " -> " << new_state; state_ = new_state; } @@ -332,10 +333,16 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { FFmpegConfigHelper config_helper; - if (!config_helper.Parse(data, bytes_parsed)) + if (!config_helper.Parse(data, bytes_parsed)) { + DVLOG(1) << "Failed to parse config data."; return -1; + } - config_cb_.Run(config_helper.audio_config(),config_helper.video_config()); + if (!config_cb_.Run(config_helper.audio_config(), + config_helper.video_config())) { + DVLOG(1) << "New config data isn't allowed."; + return -1; + } // TODO(xhwang): Support decryption of audio (see http://crbug.com/123421). if (tracks_parser.video_encryption_key_id()) { @@ -354,8 +361,11 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { tracks_parser.video_encryption_key_id_size())); ChangeState(kParsingClusters); - init_cb_.Run(true, duration); - init_cb_.Reset(); + + if (!init_cb_.is_null()) { + init_cb_.Run(true, duration); + init_cb_.Reset(); + } return bytes_parsed; } @@ -380,6 +390,11 @@ int WebMStreamParser::ParseCluster(const uint8* data, int size) { return result + element_size; } + if (id == kWebMIdEBMLHeader) { + ChangeState(kParsingHeaders); + return 0; + } + int bytes_parsed = cluster_parser_->Parse(data, size); if (bytes_parsed <= 0) |