summaryrefslogtreecommitdiffstats
path: root/webkit/media
diff options
context:
space:
mode:
authorxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-17 23:07:06 +0000
committerxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-17 23:07:06 +0000
commit7004b73275d96ecd87f04644ccae0c9954adb09a (patch)
treeb6e7d86631aea8cec61fb1cfd2aa77ab204ae810 /webkit/media
parentbe7c1ac4c494b6f3de8297e915e87787ba561017 (diff)
downloadchromium_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.cc19
-rw-r--r--webkit/media/webmediaplayer_impl.cc17
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();