summaryrefslogtreecommitdiffstats
path: root/media/webm
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-11 19:29:19 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-11 19:29:19 +0000
commit4386ac3500178307d398a5e67f27f3b2577811e1 (patch)
treebddce62c7b8d8ccab0388966c2c7e1d209421446 /media/webm
parentec29415cceaaaa098b68a110f182d4f978729d3f (diff)
downloadchromium_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.cc23
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)