summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorxhwang <xhwang@chromium.org>2016-03-25 12:32:19 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-25 19:38:38 +0000
commit92d0fffc36695c099005bf05862145a89d918f28 (patch)
tree1ccb47b9880f2ccc3bf260be51e3e4db72d30a8b /content
parent0c5d30d1932954a34d417bf1f195ac1428d5aeed (diff)
downloadchromium_src-92d0fffc36695c099005bf05862145a89d918f28.zip
chromium_src-92d0fffc36695c099005bf05862145a89d918f28.tar.gz
chromium_src-92d0fffc36695c099005bf05862145a89d918f28.tar.bz2
media: Enable Unified Media Pipeline for MSE and EME on Android
Enables Mojo Media on Android to support EME in the unified media pipeline. This introduces MojoCdm, MojoAudioDecoder and encrytped stream support in AndroidVideoDecodeAccelerator. This CL also enables MSE in the unified media pipeline. The fallback logic for MSE (IsUnifiedMediaPipelineEnabledForMse()) is removed. Also partially reverts f92f4e5c849c028db73fbe06912685a77b978ee4 which added "LoadType" in createMediaPlayer() to implement the fallback logic for MSE. BUG=455905,521731 TEST=Encrypted audio/video plays in default Chrome for Android build with and without unified media pipeline. Review URL: https://codereview.chromium.org/1825763002 Cr-Commit-Position: refs/heads/master@{#383331}
Diffstat (limited to 'content')
-rw-r--r--content/renderer/render_frame_impl.cc62
-rw-r--r--content/renderer/render_frame_impl.h1
2 files changed, 37 insertions, 26 deletions
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b942092..67703b2 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -214,8 +214,10 @@
#endif
#if defined(ENABLE_PEPPER_CDMS)
+#include "content/renderer/media/cdm/render_cdm_factory.h"
#include "content/renderer/media/cdm/pepper_cdm_wrapper_impl.h"
#elif defined(ENABLE_BROWSER_CDMS)
+#include "content/renderer/media/cdm/render_cdm_factory.h"
#include "content/renderer/media/cdm/renderer_cdm_manager.h"
#endif
@@ -225,8 +227,6 @@
#if defined(ENABLE_MOJO_CDM)
#include "media/mojo/services/mojo_cdm_factory.h" // nogncheck
-#else
-#include "content/renderer/media/cdm/render_cdm_factory.h"
#endif
#if defined(ENABLE_MOJO_RENDERER)
@@ -760,17 +760,13 @@ bool IsContentWithCertificateErrorsRelevantToUI(
//
// Note that HLS and MP4 detection are pre-redirect and path-based. It is
// possible to load such a URL and find different content.
-bool UseWebMediaPlayerImpl(blink::WebMediaPlayer::LoadType load_type,
- const GURL& url) {
- if (load_type == blink::WebMediaPlayer::LoadTypeMediaSource)
- return media::IsUnifiedMediaPipelineEnabledForMse();
-
+bool UseWebMediaPlayerImpl(const GURL& url) {
// WMPI does not support HLS.
if (media::MediaCodecUtil::IsHLSPath(url))
return false;
// Don't use WMPI if the container likely contains a codec we can't decode in
- // software and hardware decoders are not available.
+ // software and platform decoders are not available.
if (base::EndsWith(url.path(), ".mp4",
base::CompareCase::INSENSITIVE_ASCII) &&
!media::HasPlatformDecoderSupport()) {
@@ -782,6 +778,24 @@ bool UseWebMediaPlayerImpl(blink::WebMediaPlayer::LoadType load_type,
}
#endif // defined(OS_ANDROID)
+#if defined(ENABLE_MOJO_CDM)
+// Returns whether mojo CDM should be used at runtime. Note that even when mojo
+// CDM is enabled at compile time (ENABLE_MOJO_CDM is defined), there are cases
+// where we want to choose other CDM types. For example, on Android when we use
+// WebMediaPlayerAndroid, we still want to use ProxyMediaKeys. In the future,
+// when we experiment mojo CDM on desktop, we will choose between mojo CDM and
+// pepper CDM at runtime.
+// TODO(xhwang): Remove this when we use mojo CDM for all remote CDM cases by
+// default.
+bool UseMojoCdm() {
+#if defined(OS_ANDROID)
+ return media::IsUnifiedMediaPipelineEnabled();
+#else
+ return true;
+#endif
+}
+#endif // defined(ENABLE_MOJO_CDM)
+
} // namespace
// static
@@ -2388,7 +2402,6 @@ blink::WebPlugin* RenderFrameImpl::createPlugin(
}
blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
- blink::WebMediaPlayer::LoadType load_type,
const blink::WebURL& url,
WebMediaPlayerClient* client,
WebMediaPlayerEncryptedMediaClient* encrypted_client,
@@ -2435,7 +2448,7 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
initial_cdm, media_surface_manager_, media_session);
#if defined(OS_ANDROID)
- if (!UseWebMediaPlayerImpl(load_type, url))
+ if (!UseWebMediaPlayerImpl(url))
return CreateAndroidWebMediaPlayer(client, encrypted_client, params);
#endif // defined(OS_ANDROID)
@@ -5916,26 +5929,25 @@ bool RenderFrameImpl::AreSecureCodecsSupported() {
}
media::CdmFactory* RenderFrameImpl::GetCdmFactory() {
-#if defined(ENABLE_BROWSER_CDMS)
- if (!cdm_manager_)
- cdm_manager_ = new RendererCdmManager(this);
-#endif // defined(ENABLE_BROWSER_CDMS)
-
- if (!cdm_factory_) {
- DCHECK(frame_);
+ if (cdm_factory_)
+ return cdm_factory_.get();
#if defined(ENABLE_MOJO_CDM)
+ if (UseMojoCdm()) {
cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider()));
-#else
- cdm_factory_.reset(new RenderCdmFactory(
+ return cdm_factory_.get();
+ }
+#endif // defined(ENABLE_MOJO_CDM)
+
#if defined(ENABLE_PEPPER_CDMS)
- base::Bind(&PepperCdmWrapperImpl::Create, frame_)
+ DCHECK(frame_);
+ cdm_factory_.reset(
+ new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_)));
#elif defined(ENABLE_BROWSER_CDMS)
- cdm_manager_
-#endif
- ));
-#endif // defined(ENABLE_MOJO_CDM)
- }
+ if (!cdm_manager_)
+ cdm_manager_ = new RendererCdmManager(this);
+ cdm_factory_.reset(new RenderCdmFactory(cdm_manager_));
+#endif // defined(ENABLE_PEPPER_CDMS)
return cdm_factory_.get();
}
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 6c09c8d..42f0f02 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -414,7 +414,6 @@ class CONTENT_EXPORT RenderFrameImpl
blink::WebPlugin* createPlugin(blink::WebLocalFrame* frame,
const blink::WebPluginParams& params) override;
blink::WebMediaPlayer* createMediaPlayer(
- blink::WebMediaPlayer::LoadType load_type,
const blink::WebURL& url,
blink::WebMediaPlayerClient* client,
blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,