Chromium Code Reviews| Index: media/webm/webm_cluster_parser.cc |
| diff --git a/media/webm/webm_cluster_parser.cc b/media/webm/webm_cluster_parser.cc |
| index df9e4ce244bb17d3f7bda4b39d16bbc71dd33e18..4ac888df859d93acfb39f8f327e41140dccd9ad1 100644 |
| --- a/media/webm/webm_cluster_parser.cc |
| +++ b/media/webm/webm_cluster_parser.cc |
| @@ -345,13 +345,30 @@ bool WebMClusterParser::OnBlock(bool is_simple_block, int track_num, |
| scoped_refptr<StreamParserBuffer> buffer; |
| if (!is_text) { |
| - buffer = StreamParserBuffer::CopyFrom(data, size, |
| - additional, additional_size, |
| - is_keyframe); |
| + // Every encrypted Block has a signal byte and IV prepended to it. Current |
| + // encrypted WebM request for comments specification is here |
| + // http://wiki.webmproject.org/encryption/webm-encryption-rfc |
| + scoped_ptr<DecryptConfig> decrypt_config; |
| + int data_offset = 0; |
| + if (!encryption_key_id.empty() && |
| + !WebMCreateDecryptConfig( |
| + data, size, |
| + reinterpret_cast<const uint8*>(encryption_key_id.data()), |
| + encryption_key_id.size(), |
| + &decrypt_config, &data_offset)) { |
| + return false; |
| + } |
| + |
| + buffer = StreamParserBuffer::CopyFrom( |
| + data + data_offset, size - data_offset, |
| + additional, additional_size, |
| + is_keyframe); |
| + |
| + if (decrypt_config) |
| + buffer->set_decrypt_config(decrypt_config.Pass()); |
| } else { |
|
DaleCurtis
2014/01/02 19:31:09
Does this not need a DecryptConfig? Presumably we
xhwang
2014/01/08 00:43:36
As you can see from l.314-l.319, encryption_key_id
|
| std::string id, settings, content; |
| - WebMWebVTTParser::Parse(data, size, |
| - &id, &settings, &content); |
| + WebMWebVTTParser::Parse(data, size, &id, &settings, &content); |
| std::vector<uint8> side_data; |
| MakeSideData(id.begin(), id.end(), |
| @@ -366,19 +383,6 @@ bool WebMClusterParser::OnBlock(bool is_simple_block, int track_num, |
| is_keyframe); |
| } |
| - // Every encrypted Block has a signal byte and IV prepended to it. Current |
| - // encrypted WebM request for comments specification is here |
| - // http://wiki.webmproject.org/encryption/webm-encryption-rfc |
| - if (!encryption_key_id.empty()) { |
| - scoped_ptr<DecryptConfig> config(WebMCreateDecryptConfig( |
| - data, size, |
| - reinterpret_cast<const uint8*>(encryption_key_id.data()), |
| - encryption_key_id.size())); |
| - if (!config) |
| - return false; |
| - buffer->set_decrypt_config(config.Pass()); |
| - } |
| - |
| buffer->set_timestamp(timestamp); |
| if (cluster_start_time_ == kNoTimestamp()) |
| cluster_start_time_ = timestamp; |