diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-17 23:07:06 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-17 23:07:06 +0000 |
commit | 7004b73275d96ecd87f04644ccae0c9954adb09a (patch) | |
tree | b6e7d86631aea8cec61fb1cfd2aa77ab204ae810 /webkit/media | |
parent | be7c1ac4c494b6f3de8297e915e87787ba561017 (diff) | |
download | chromium_src-7004b73275d96ecd87f04644ccae0c9954adb09a.zip chromium_src-7004b73275d96ecd87f04644ccae0c9954adb09a.tar.gz chromium_src-7004b73275d96ecd87f04644ccae0c9954adb09a.tar.bz2 |
Encrypted Media: Refactor Video Decrypt-Only to use DecryptingDemuxerStream.
- Add VideoDecoderSelector to facilitate VideoDecoder initialization/selection.
- Add VideoDecoderSelectorTest.
- Remove DecryptingVideoDecoder from default decoder list.
- Disable decryption in FFmpegVideoDecoder.
- Updated all unittests.
After this CL, FFmpegVideoDecoder and ProxyDecryptor need to be cleaned.
BUG=141786
TEST=all tests pass; EME demos work.
Review URL: https://codereview.chromium.org/11573047
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173562 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/media')
-rw-r--r-- | webkit/media/filter_helpers.cc | 19 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 17 |
2 files changed, 10 insertions, 26 deletions
diff --git a/webkit/media/filter_helpers.cc b/webkit/media/filter_helpers.cc index 1c1206c..362810c 100644 --- a/webkit/media/filter_helpers.cc +++ b/webkit/media/filter_helpers.cc @@ -7,7 +7,6 @@ #include "base/bind.h" #include "media/base/filter_collection.h" #include "media/filters/chunk_demuxer.h" -#include "media/filters/decrypting_video_decoder.h" #include "media/filters/dummy_demuxer.h" #include "media/filters/ffmpeg_audio_decoder.h" #include "media/filters/ffmpeg_demuxer.h" @@ -23,8 +22,7 @@ namespace webkit_media { // audio/video decoder in the |filter_collection| that supports the input // audio/video stream will be selected as the audio/video decoder in the media // pipeline. This is done by trying to initialize the decoder with the input -// stream. Some decoder may only accept certain types of streams. For example, -// DecryptingVideoDecoder only supports encrypted video stream. +// stream. Some decoder may only accept certain types of streams. static void AddDefaultDecodersToCollection( const scoped_refptr<base::MessageLoopProxy>& message_loop, media::FilterCollection* filter_collection, @@ -33,21 +31,6 @@ static void AddDefaultDecodersToCollection( new media::FFmpegAudioDecoder(message_loop); filter_collection->GetAudioDecoders()->push_back(ffmpeg_audio_decoder); - if (proxy_decryptor) { - scoped_refptr<media::DecryptingVideoDecoder> decrypting_video_decoder = - new media::DecryptingVideoDecoder( - message_loop, - base::Bind(&ProxyDecryptor::SetDecryptorReadyCB, - base::Unretained(proxy_decryptor))); - // TODO(xhwang): Ideally we should have decrypting video decoder after - // regular video decoder since in the real world most videos are not - // encrypted. For now FFmpegVideoDecoder can also do decryption - // (decrypt-only), and we perfer DecryptingVideoDecoder (decrypt-and-decode) - // to FFmpegVideoDecoder. Fix this order when we move decryption out of - // FFmpegVideoDecoder. - filter_collection->GetVideoDecoders()->push_back(decrypting_video_decoder); - } - scoped_refptr<media::FFmpegVideoDecoder> ffmpeg_video_decoder = new media::FFmpegVideoDecoder(message_loop, proxy_decryptor); filter_collection->GetVideoDecoders()->push_back(ffmpeg_video_decoder); diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index 37f0889..f9cb47c 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -178,24 +178,25 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( // Also we want to be notified of |main_loop_| destruction. main_loop_->AddDestructionObserver(this); + media::SetDecryptorReadyCB set_decryptor_ready_cb; + if (WebKit::WebRuntimeFeatures::isEncryptedMediaEnabled()) { + decryptor_.reset(new ProxyDecryptor(message_loop_factory_->GetMessageLoop( + media::MessageLoopFactory::kPipeline), proxy_.get(), client, frame)); + set_decryptor_ready_cb = base::Bind(&ProxyDecryptor::SetDecryptorReadyCB, + base::Unretained(decryptor_.get())); + } + // Create default video renderer. scoped_refptr<media::VideoRendererBase> video_renderer = new media::VideoRendererBase( pipeline_message_loop, + set_decryptor_ready_cb, base::Bind(&WebMediaPlayerProxy::Repaint, proxy_), BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::SetOpaque), true); filter_collection_->AddVideoRenderer(video_renderer); proxy_->set_frame_provider(video_renderer); - media::SetDecryptorReadyCB set_decryptor_ready_cb; - if (WebKit::WebRuntimeFeatures::isEncryptedMediaEnabled()) { - decryptor_.reset(new ProxyDecryptor(message_loop_factory_->GetMessageLoop( - media::MessageLoopFactory::kPipeline), proxy_.get(), client, frame)); - set_decryptor_ready_cb = base::Bind(&ProxyDecryptor::SetDecryptorReadyCB, - base::Unretained(decryptor_.get())); - } - // Create default audio renderer using the null sink if no sink was provided. if (!audio_renderer_sink) audio_renderer_sink = new media::NullAudioSink(); |