summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-14 22:51:35 +0000
committerxhwang@chromium.org <xhwang@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-14 22:51:35 +0000
commit893f2828f68362365ab77045e7b4a1c0f5806d6c (patch)
tree7e857a87f4f3c748ca5852f5c38a30dc88697b5c /webkit
parent042e77c20d44abe5efe17cedb0484e0cb5492f4a (diff)
downloadchromium_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.cc10
-rw-r--r--webkit/media/crypto/key_systems_unittest.cc20
-rw-r--r--webkit/media/webmediaplayer_impl.cc17
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() {