diff options
author | xhwang <xhwang@chromium.org> | 2016-03-26 00:19:38 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-26 07:20:41 +0000 |
commit | ae2b3a4690087a0160600563edc316118efbdec7 (patch) | |
tree | da11357ff782a1831008890aa8d0bf017241e797 /content/renderer | |
parent | 885133a46da15cb6f60c0349a2b4a517c4b09971 (diff) | |
download | chromium_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/renderer')
-rw-r--r-- | content/renderer/render_frame_impl.cc | 62 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.h | 1 |
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, |