diff options
author | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-14 22:51:35 +0000 |
---|---|---|
committer | xhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-14 22:51:35 +0000 |
commit | 893f2828f68362365ab77045e7b4a1c0f5806d6c (patch) | |
tree | 7e857a87f4f3c748ca5852f5c38a30dc88697b5c /webkit | |
parent | 042e77c20d44abe5efe17cedb0484e0cb5492f4a (diff) | |
download | chromium_src-893f2828f68362365ab77045e7b4a1c0f5806d6c.zip chromium_src-893f2828f68362365ab77045e7b4a1c0f5806d6c.tar.gz chromium_src-893f2828f68362365ab77045e7b4a1c0f5806d6c.tar.bz2 |
Encrypted Media: Support Audio Decrypt-Only.
- Add AudioDecoderSelector to facilitate AudioDecoder selection.
- Add AudioDecoderSelectorTest.
- Update key_system.cc to support audio in clearkey key system.
- Update content_browsertests to test audio decrypt-only.
BUG=123421
TEST=both decrypt-only and decrypt-and-decode works for audio!
Review URL: https://codereview.chromium.org/11492003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173235 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/media/crypto/key_systems.cc | 10 | ||||
-rw-r--r-- | webkit/media/crypto/key_systems_unittest.cc | 20 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 17 |
3 files changed, 18 insertions, 29 deletions
diff --git a/webkit/media/crypto/key_systems.cc b/webkit/media/crypto/key_systems.cc index f742b5a..4a43f114 100644 --- a/webkit/media/crypto/key_systems.cc +++ b/webkit/media/crypto/key_systems.cc @@ -38,8 +38,6 @@ struct KeySystemPluginTypePair { const char* plugin_type; }; -// TODO(xhwang): Remove this and ifdefs after fixing http://crbug.com/123421. -#define DECRYPT_ONLY_AUDIO_NOT_SUPPORTED // TODO(ddorwin): Automatically support parent systems: http://crbug.com/164303. static const char kWidevineBaseKeySystem[] = "com.widevine"; @@ -51,20 +49,12 @@ static const char kWidevineBaseKeySystem[] = "com.widevine"; // entries in KeySystems::key_system_map_. static const MediaFormatAndKeySystem kSupportedFormatKeySystemCombinations[] = { // Clear Key. -#if defined(DECRYPT_ONLY_AUDIO_NOT_SUPPORTED) - { "video/webm", "vp8,vp8.0,", kClearKeyKeySystem }, -#else { "video/webm", "vorbis,vp8,vp8.0,", kClearKeyKeySystem }, { "audio/webm", "vorbis,", kClearKeyKeySystem }, -#endif #if defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS) -#if defined(DECRYPT_ONLY_AUDIO_NOT_SUPPORTED) - { "video/mp4", "avc1,", kClearKeyKeySystem }, -#else { "video/mp4", "avc1,mp4a,", kClearKeyKeySystem }, { "audio/mp4", "mp4a,", kClearKeyKeySystem }, #endif -#endif // External Clear Key (used for testing). { "video/webm", "vorbis,vp8,vp8.0,", kExternalClearKeyKeySystem }, diff --git a/webkit/media/crypto/key_systems_unittest.cc b/webkit/media/crypto/key_systems_unittest.cc index 73f3a57..ed5bf54 100644 --- a/webkit/media/crypto/key_systems_unittest.cc +++ b/webkit/media/crypto/key_systems_unittest.cc @@ -216,10 +216,9 @@ TEST_F(KeySystemsTest, IsSupportedKeySystemWithMediaMimeType_ClearKey_WebM) { "video/webm", vp8_codec(), kClearKey)); EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( "video/webm", vp80_codec(), kClearKey)); - // These two should be true. See http://crbug.com/123421. - EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( + EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( "video/webm", vp8_and_vorbis_codecs(), kClearKey)); - EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( + EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( "video/webm", vorbis_codec(), kClearKey)); // Non-Webm codecs. @@ -231,10 +230,9 @@ TEST_F(KeySystemsTest, IsSupportedKeySystemWithMediaMimeType_ClearKey_WebM) { "video/webm", mixed_codecs(), kClearKey)); // Valid audio types. - // Should be true. See http://crbug.com/123421. - EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( + EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( "audio/webm", no_codecs(), kClearKey)); - EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( + EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( "audio/webm", vorbis_codec(), kClearKey)); // Non-audio codecs. @@ -257,10 +255,9 @@ TEST_F(KeySystemsTest, IsSupportedKeySystemWithMediaMimeType_ClearKey_MP4) { "video/mp4", no_codecs(), "webkit-org.w3")); EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType( "video/mp4", avc1_codec(), kClearKey)); - // These two should be true. See http://crbug.com/123421. - EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( + EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType( "video/mp4", avc1_and_aac_codecs(), kClearKey)); - EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( + EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType( "video/mp4", aac_codec(), kClearKey)); // Extended codecs fail because this is handled by SimpleWebMimeRegistryImpl. @@ -283,10 +280,9 @@ TEST_F(KeySystemsTest, IsSupportedKeySystemWithMediaMimeType_ClearKey_MP4) { "video/mp4", mixed_codecs(), kClearKey)); // Valid audio types. - // Should be true. See http://crbug.com/123421. - EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( + EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType( "audio/mp4", no_codecs(), kClearKey)); - EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( + EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType( "audio/mp4", aac_codec(), kClearKey)); // Non-audio codecs. diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index 9e907e1..1f04c50 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -188,17 +188,20 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( filter_collection_->AddVideoRenderer(video_renderer); proxy_->set_frame_provider(video_renderer); - // Create default audio renderer using the null sink if no sink was provided. - if (!audio_renderer_sink) { - audio_renderer_sink = new media::NullAudioSink(); - } - filter_collection_->AddAudioRenderer( - new media::AudioRendererImpl(audio_renderer_sink)); - + 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(); + + filter_collection_->AddAudioRenderer(new media::AudioRendererImpl( + audio_renderer_sink, set_decryptor_ready_cb)); } WebMediaPlayerImpl::~WebMediaPlayerImpl() { |