Chromium Code Reviews| Index: content/renderer/render_frame_impl.cc |
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
| index 3b26d3960814b3d34edddb01cd5555e1ff998597..b1d07d40a744ee53101ce164a600586e4729200b 100644 |
| --- a/content/renderer/render_frame_impl.cc |
| +++ b/content/renderer/render_frame_impl.cc |
| @@ -133,6 +133,7 @@ |
| #include "gin/modules/module_registry.h" |
| #include "media/audio/audio_output_device.h" |
| #include "media/base/audio_renderer_mixer_input.h" |
| +#include "media/base/media.h" |
| #include "media/base/media_log.h" |
| #include "media/base/media_switches.h" |
| #include "media/blink/url_index.h" |
| @@ -743,42 +744,33 @@ bool IsContentWithCertificateErrorsRelevantToUI( |
| } |
| #if defined(OS_ANDROID) |
| -// Returns true if WMPI must be used for playback because WMPA will not work. |
| -bool MustUseWebMediaPlayerImpl(blink::WebMediaPlayer::LoadType load_type, |
| - const GURL& url) { |
| - // WMPA can't play MSE if MediaCodec is unavailable. In this case WMPI may |
| - // still work (via libvpx). |
| - return (load_type == blink::WebMediaPlayer::LoadTypeMediaSource && |
| - !media::MediaCodecUtil::IsMediaCodecAvailable()); |
| -} |
| - |
| -// Returns true if WMPI can be used for playback, false if it may not work. |
| +// Returns true if WMPI should be used for playback, false otherwise. |
| // |
| -// Note that HLS and WebM detection are pre-redirect and path-based. It is |
| +// 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 CanUseWebMediaPlayerImpl(blink::WebMediaPlayer::LoadType load_type, |
| - const GURL& url) { |
| - if (MustUseWebMediaPlayerImpl(load_type, url)) |
| - return true; |
| +bool UseWebMediaPlayerImpl(blink::WebMediaPlayer::LoadType load_type, |
| + const GURL& url) { |
| + if (load_type == blink::WebMediaPlayer::LoadTypeMediaSource) |
| + return media::IsUnifiedMediaPipelineEnabledForMse(); |
| // WMPI does not support HLS. |
| if (media::MediaCodecUtil::IsHLSPath(url)) |
| return false; |
| - // Otherwise --enable-unified-media-pipeline always enables WMPI. |
| - if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kEnableUnifiedMediaPipeline)) { |
| - return true; |
| + // Don't use WMPI if the container likely contains h264 and hardware decoders |
|
ddorwin
2016/02/16 20:34:36
nit: s/h264/non-vpx codec/? IOW, if we don't have
DaleCurtis
2016/02/17 03:01:05
Done.
|
| + // are not available. |
| + if (base::EndsWith(url.path(), ".mp4", |
| + base::CompareCase::INSENSITIVE_ASCII) && |
| + (base::CommandLine::ForCurrentProcess()->HasSwitch( |
|
ddorwin
2016/02/16 20:34:36
Should this be a call to HasPlatformDecoderSupport
DaleCurtis
2016/02/17 03:01:05
Done.
|
| + switches::kDisableAcceleratedVideoDecode) || |
| + !media::MediaCodecUtil::IsMediaCodecAvailable())) { |
| + return false; |
| } |
| - // WMPI can always play WebM (via libvpx). |
| - if (base::EndsWith(url.path(), ".webm", base::CompareCase::INSENSITIVE_ASCII)) |
| - return true; |
| - |
| - // Otherwise, WMPI can only be used if AVDA is working. |
| - return (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kDisableAcceleratedVideoDecode) && |
| - media::MediaCodecUtil::IsMediaCodecAvailable()); |
| + // Otherwise enable WMPI if indicated via experiment or command line. Video |
| + // decode may still be blacklisted for some codecs and platforms based on |
|
ddorwin
2016/02/16 20:34:36
nit: Make it clearer that this means "there could
DaleCurtis
2016/02/17 03:01:05
Deleted this whole comment since I think it's just
|
| + // the GPU feature blacklist or the hardcoded blacklist inside MediaCodecUtil. |
| + return media::IsUnifiedMediaPipelineEnabled(); |
| } |
| #endif // defined(OS_ANDROID) |
| @@ -2494,27 +2486,8 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( |
| GetMediaPermission(), initial_cdm); |
| #if defined(OS_ANDROID) |
| - if (!CanUseWebMediaPlayerImpl(load_type, url)) { |
| + if (!UseWebMediaPlayerImpl(load_type, url)) |
| return CreateAndroidWebMediaPlayer(client, encrypted_client, params); |
| - } else if (!MustUseWebMediaPlayerImpl(load_type, url)) { |
| - // TODO(dalecurtis): This experiment is temporary and should be removed once |
| - // we have enough data to support the primacy of the unified media pipeline; |
| - // see http://crbug.com/533190 for details. |
| - // |
| - // Note: It's important to query the field trial state first, to ensure that |
| - // UMA reports the correct group. |
| - const std::string group_name = |
| - base::FieldTrialList::FindFullName("UnifiedMediaPipelineTrial"); |
| - const bool enabled_via_cli = |
| - base::CommandLine::ForCurrentProcess()->HasSwitch( |
| - switches::kEnableUnifiedMediaPipeline); |
| - const bool enable_unified_media_pipeline = |
| - enabled_via_cli || |
| - base::StartsWith(group_name, "Enabled", base::CompareCase::SENSITIVE); |
| - |
| - if (!enable_unified_media_pipeline) |
| - return CreateAndroidWebMediaPlayer(client, encrypted_client, params); |
| - } |
| #endif // defined(OS_ANDROID) |
| #if defined(ENABLE_MOJO_MEDIA) && !defined(OS_ANDROID) |