| Index: media/webm/webm_stream_parser.cc
|
| diff --git a/media/webm/webm_stream_parser.cc b/media/webm/webm_stream_parser.cc
|
| index b0a18e3659860bd0a653bacc1981b274960b9464..2e34ed96c80885831af4c1a9d133da694d2c9ca9 100644
|
| --- a/media/webm/webm_stream_parser.cc
|
| +++ b/media/webm/webm_stream_parser.cc
|
| @@ -351,6 +351,25 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) {
|
| return -1;
|
| }
|
|
|
| + bool is_audio_encrypted = !tracks_parser.audio_encryption_key_id().empty();
|
| + AudioDecoderConfig audio_config;
|
| + if (is_audio_encrypted) {
|
| + const AudioDecoderConfig& original_audio_config =
|
| + config_helper.audio_config();
|
| +
|
| + audio_config.Initialize(original_audio_config.codec(),
|
| + original_audio_config.bits_per_channel(),
|
| + original_audio_config.channel_layout(),
|
| + original_audio_config.samples_per_second(),
|
| + original_audio_config.extra_data(),
|
| + original_audio_config.extra_data_size(),
|
| + is_audio_encrypted, false);
|
| +
|
| + FireNeedKey(tracks_parser.audio_encryption_key_id());
|
| + } else {
|
| + audio_config.CopyFrom(config_helper.audio_config());
|
| + }
|
| +
|
| // TODO(xhwang): Support decryption of audio (see http://crbug.com/123421).
|
| bool is_video_encrypted = !tracks_parser.video_encryption_key_id().empty();
|
|
|
| @@ -368,18 +387,12 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) {
|
| original_video_config.extra_data_size(),
|
| is_video_encrypted, false);
|
|
|
| - // Fire needkey event.
|
| - std::string key_id = tracks_parser.video_encryption_key_id();
|
| - int key_id_size = key_id.size();
|
| - DCHECK_GT(key_id_size, 0);
|
| - scoped_array<uint8> key_id_array(new uint8[key_id_size]);
|
| - memcpy(key_id_array.get(), key_id.data(), key_id_size);
|
| - need_key_cb_.Run(key_id_array.Pass(), key_id_size);
|
| + FireNeedKey(tracks_parser.video_encryption_key_id());
|
| } else {
|
| video_config.CopyFrom(config_helper.video_config());
|
| }
|
|
|
| - if (!config_cb_.Run(config_helper.audio_config(), video_config)) {
|
| + if (!config_cb_.Run(audio_config, video_config)) {
|
| DVLOG(1) << "New config data isn't allowed.";
|
| return -1;
|
| }
|
| @@ -388,6 +401,7 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) {
|
| info_parser.timecode_scale(),
|
| tracks_parser.audio_track_num(),
|
| tracks_parser.video_track_num(),
|
| + tracks_parser.audio_encryption_key_id(),
|
| tracks_parser.video_encryption_key_id()));
|
|
|
| ChangeState(kParsingClusters);
|
| @@ -455,4 +469,12 @@ int WebMStreamParser::ParseCluster(const uint8* data, int size) {
|
| return bytes_parsed;
|
| }
|
|
|
| +void WebMStreamParser::FireNeedKey(const std::string& key_id) {
|
| + int key_id_size = key_id.size();
|
| + DCHECK_GT(key_id_size, 0);
|
| + scoped_array<uint8> key_id_array(new uint8[key_id_size]);
|
| + memcpy(key_id_array.get(), key_id.data(), key_id_size);
|
| + need_key_cb_.Run(key_id_array.Pass(), key_id_size);
|
| +}
|
| +
|
| } // namespace media
|
|
|