diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-18 09:01:14 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-18 09:01:14 +0000 |
commit | 47263cb1a4253ff51e157749499b293c8399dd48 (patch) | |
tree | bc48dbed2f321cffdaf503b6607c9f8368449e25 /media/webm | |
parent | 25da68564633432c51f8b3e72d5a56a7af58066e (diff) | |
download | chromium_src-47263cb1a4253ff51e157749499b293c8399dd48.zip chromium_src-47263cb1a4253ff51e157749499b293c8399dd48.tar.gz chromium_src-47263cb1a4253ff51e157749499b293c8399dd48.tar.bz2 |
Add is_encrypted() in VideoDecoderConfig.
This is needed so that decoders can check if the video stream is encrypted or not and decide if it can support decrypting and/or decodeing the stream.
BUG=141784
TEST=media_unittest, encrypted media demo.
Review URL: https://chromiumcodereview.appspot.com/10910293
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157324 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/webm')
-rw-r--r-- | media/webm/webm_stream_parser.cc | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/media/webm/webm_stream_parser.cc b/media/webm/webm_stream_parser.cc index db990cd..b0a18e3 100644 --- a/media/webm/webm_stream_parser.cc +++ b/media/webm/webm_stream_parser.cc @@ -346,27 +346,42 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { } FFmpegConfigHelper config_helper; - if (!config_helper.Parse(data, bytes_parsed)) { DVLOG(1) << "Failed to parse config data."; return -1; } - 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().empty()) { + bool is_video_encrypted = !tracks_parser.video_encryption_key_id().empty(); + + VideoDecoderConfig video_config; + if (is_video_encrypted) { + const VideoDecoderConfig& original_video_config = + config_helper.video_config(); + video_config.Initialize(original_video_config.codec(), + original_video_config.profile(), + original_video_config.format(), + original_video_config.coded_size(), + original_video_config.visible_rect(), + original_video_config.natural_size(), + original_video_config.extra_data(), + 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(); - CHECK_GT(key_id_size, 0); - CHECK_LT(key_id_size, 2048); + 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); + } else { + video_config.CopyFrom(config_helper.video_config()); + } + + if (!config_cb_.Run(config_helper.audio_config(), video_config)) { + DVLOG(1) << "New config data isn't allowed."; + return -1; } cluster_parser_.reset(new WebMClusterParser( |