Commit ce3934bb authored by xhwang@chromium.org's avatar xhwang@chromium.org

Add --mediadrm-enable-non-compositing flag for Chrome on Android.

When this flag is enabled, we'll use a non-compositing decoder in
MediaDrm by default. Otherwise, a compositing decoder will be used
by default.

TBR=ddorwin@chromium.org, qinmin@chromium.org
BUG=163552
TEST=Tried on Nexus 7 with and without this flag.

Review URL: https://codereview.chromium.org/23903023

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@222181 0039d316-1c4b-4281-b951-d872f2087c98
parent 4e3ca1c2
...@@ -6044,6 +6044,14 @@ Keep your key file in a safe place. You will need it to create new versions of y ...@@ -6044,6 +6044,14 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_FLAGS_ENCRYPTED_MEDIA_CANPLAYTYPE_OVERRIDE_DESCRIPTION" desc="Description for the flag to override suppressed affirmative responses to canPlayType()."> <message name="IDS_FLAGS_ENCRYPTED_MEDIA_CANPLAYTYPE_OVERRIDE_DESCRIPTION" desc="Description for the flag to override suppressed affirmative responses to canPlayType().">
Enable appropriate responses to canPlayType() for key systems that return the empty string by default. Enable appropriate responses to canPlayType() for key systems that return the empty string by default.
</message> </message>
<if expr="is_android">
<message name="IDS_FLAGS_MEDIADRM_ENABLE_NON_COMPOSITING_NAME" desc="Title for the flag to enable non-conmpositing decoding in MediaDrm for encrypted content.">
Enable non-compositing decoding.
</message>
<message name="IDS_FLAGS_MEDIADRM_ENABLE_NON_COMPOSITING_DESCRIPTION" desc="Description for the flag to enable non-conmpositing decoding in MediaDrm for encrypted content.">
Enable non-compositing decoding in MediaDrm by default for Encrypted Media Extensions.
</message>
</if>
<message name="IDS_FLAGS_ENABLE_OPUS_PLAYBACK_NAME" desc="Title for the flag to enable Opus playback in &lt;video&gt; elements."> <message name="IDS_FLAGS_ENABLE_OPUS_PLAYBACK_NAME" desc="Title for the flag to enable Opus playback in &lt;video&gt; elements.">
Enable Opus playback in &lt;video&gt; elements. Enable Opus playback in &lt;video&gt; elements.
</message> </message>
......
...@@ -755,6 +755,15 @@ const Experiment kExperiments[] = { ...@@ -755,6 +755,15 @@ const Experiment kExperiments[] = {
kOsMac | kOsWin | kOsAndroid, kOsMac | kOsWin | kOsAndroid,
SINGLE_VALUE_TYPE(switches::kOverrideEncryptedMediaCanPlayType) SINGLE_VALUE_TYPE(switches::kOverrideEncryptedMediaCanPlayType)
}, },
#if defined(OS_ANDROID)
{
"mediadrm-enable-non-compositing",
IDS_FLAGS_MEDIADRM_ENABLE_NON_COMPOSITING_NAME,
IDS_FLAGS_MEDIADRM_ENABLE_NON_COMPOSITING_DESCRIPTION,
kOsAndroid,
SINGLE_VALUE_TYPE(switches::kMediaDrmEnableNonCompositing)
},
#endif // defined(OS_ANDROID)
{ {
"enable-opus-playback", "enable-opus-playback",
IDS_FLAGS_ENABLE_OPUS_PLAYBACK_NAME, IDS_FLAGS_ENABLE_OPUS_PLAYBACK_NAME,
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "content/browser/android/browser_media_player_manager.h" #include "content/browser/android/browser_media_player_manager.h"
#include "base/command_line.h"
#include "content/browser/android/content_view_core_impl.h" #include "content/browser/android/content_view_core_impl.h"
#include "content/browser/android/media_resource_getter_impl.h" #include "content/browser/android/media_resource_getter_impl.h"
#include "content/browser/web_contents/web_contents_view_android.h" #include "content/browser/web_contents/web_contents_view_android.h"
...@@ -14,6 +15,7 @@ ...@@ -14,6 +15,7 @@
#include "content/public/browser/storage_partition.h" #include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "media/base/android/media_drm_bridge.h" #include "media/base/android/media_drm_bridge.h"
#include "media/base/media_switches.h"
using media::MediaDrmBridge; using media::MediaDrmBridge;
using media::MediaPlayerAndroid; using media::MediaPlayerAndroid;
...@@ -520,12 +522,18 @@ void BrowserMediaPlayerManager::RemovePlayer(int player_id) { ...@@ -520,12 +522,18 @@ void BrowserMediaPlayerManager::RemovePlayer(int player_id) {
void BrowserMediaPlayerManager::AddDrmBridge(int media_keys_id, void BrowserMediaPlayerManager::AddDrmBridge(int media_keys_id,
const std::vector<uint8>& uuid) { const std::vector<uint8>& uuid) {
DCHECK(!GetDrmBridge(media_keys_id)); DCHECK(!GetDrmBridge(media_keys_id));
// TODO(qinmin): Pass the security level to MediaDrmBridge instead of using // TODO(xhwang/ddorwin): Pass the security level from key system.
// the default L3. std::string security_level = "L3";
if (CommandLine::ForCurrentProcess()
->HasSwitch(switches::kMediaDrmEnableNonCompositing)) {
security_level = "L1";
}
scoped_ptr<MediaDrmBridge> drm_bridge( scoped_ptr<MediaDrmBridge> drm_bridge(
MediaDrmBridge::Create(media_keys_id, uuid, "L3", this)); MediaDrmBridge::Create(media_keys_id, uuid, security_level, this));
if (!drm_bridge) { if (!drm_bridge) {
DVLOG(1) << "failed to create drm bridge."; DVLOG(1) << "failed to create drm bridge.";
OnKeyError(media_keys_id, "", media::MediaKeys::kUnknownError, 0);
return; return;
} }
......
...@@ -898,6 +898,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( ...@@ -898,6 +898,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
switches::kEnableEncryptedMedia, switches::kEnableEncryptedMedia,
switches::kDisableLegacyEncryptedMedia, switches::kDisableLegacyEncryptedMedia,
switches::kOverrideEncryptedMediaCanPlayType, switches::kOverrideEncryptedMediaCanPlayType,
#if defined(OS_ANDROID)
switches::kMediaDrmEnableNonCompositing,
#endif
switches::kEnableExperimentalWebPlatformFeatures, switches::kEnableExperimentalWebPlatformFeatures,
switches::kEnableFixedLayout, switches::kEnableFixedLayout,
switches::kEnableDeferredImageDecoding, switches::kEnableDeferredImageDecoding,
......
...@@ -28,6 +28,12 @@ const char kOverrideEncryptedMediaCanPlayType[] = ...@@ -28,6 +28,12 @@ const char kOverrideEncryptedMediaCanPlayType[] =
// Enables MP3 stream parser for Media Source Extensions. // Enables MP3 stream parser for Media Source Extensions.
const char kEnableMP3StreamParser[] = "enable-mp3-stream-parser"; const char kEnableMP3StreamParser[] = "enable-mp3-stream-parser";
#if defined(OS_ANDROID)
// Enables use of non-compositing MediaDrm decoding by default for Encrypted
// Media Extensions implementation.
const char kMediaDrmEnableNonCompositing[] = "mediadrm-enable-non-compositing";
#endif
#if defined(GOOGLE_TV) #if defined(GOOGLE_TV)
// Use external video surface for video with more than or equal pixels to // Use external video surface for video with more than or equal pixels to
// specified value. For example, value of 0 will enable external video surface // specified value. For example, value of 0 will enable external video surface
......
...@@ -26,6 +26,10 @@ MEDIA_EXPORT extern const char kOverrideEncryptedMediaCanPlayType[]; ...@@ -26,6 +26,10 @@ MEDIA_EXPORT extern const char kOverrideEncryptedMediaCanPlayType[];
MEDIA_EXPORT extern const char kEnableMP3StreamParser[]; MEDIA_EXPORT extern const char kEnableMP3StreamParser[];
#if defined(OS_ANDROID)
MEDIA_EXPORT extern const char kMediaDrmEnableNonCompositing[];
#endif
#if defined(GOOGLE_TV) #if defined(GOOGLE_TV)
MEDIA_EXPORT extern const char kUseExternalVideoSurfaceThresholdInPixels[]; MEDIA_EXPORT extern const char kUseExternalVideoSurfaceThresholdInPixels[];
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment