summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorxhwang <xhwang@chromium.org>2016-03-26 00:19:38 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-26 07:20:41 +0000
commitae2b3a4690087a0160600563edc316118efbdec7 (patch)
treeda11357ff782a1831008890aa8d0bf017241e797 /content
parent885133a46da15cb6f60c0349a2b4a517c4b09971 (diff)
downloadchromium_src-ae2b3a4690087a0160600563edc316118efbdec7.zip
chromium_src-ae2b3a4690087a0160600563edc316118efbdec7.tar.gz
chromium_src-ae2b3a4690087a0160600563edc316118efbdec7.tar.bz2
(reland) media: Enable Unified Media Pipeline for MSE and EME on Android
This relands commit 92d0fffc36695c099005bf05862145a89d918f28. The test failure is fixed in https://chromiumcodereview.appspot.com/1837673002/. Original Description: 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. TBR=dalecurtis@chromium.org,ddorwin@chromium.org,pfeldman@chromium.org,wolenetz@chromium.org 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/1838703002 Cr-Commit-Position: refs/heads/master@{#383450}
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 d7eaf80..d51a402 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -215,7 +215,9 @@
#if defined(ENABLE_PEPPER_CDMS)
#include "content/renderer/media/cdm/pepper_cdm_wrapper_impl.h"
+#include "content/renderer/media/cdm/render_cdm_factory.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)
@@ -755,17 +755,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()) {
@@ -777,6 +773,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
@@ -2383,7 +2397,6 @@ blink::WebPlugin* RenderFrameImpl::createPlugin(
}
blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
- blink::WebMediaPlayer::LoadType load_type,
const blink::WebURL& url,
WebMediaPlayerClient* client,
WebMediaPlayerEncryptedMediaClient* encrypted_client,
@@ -2430,7 +2443,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)
@@ -5902,26 +5915,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 f392f2d..729c949 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,