Commit 1415b635 authored by Chih-Yu Huang's avatar Chih-Yu Huang Committed by Commit Bot

media: Add kForceDisableNewAcceleratedVideoDecoder argument.

Currently, we used base::Feature "ChromeosVideoDecoder" to control VD
enabling. For those unsupported boards, we add the cmdline argument
"--disable-feature=ChromeosVideoDecoder" to disable the feature.
However, this argument doesn't affect at guest mode. So when we enable
the feature by default, those boards cannot play video at guest mode.

In this CL, we add a new cmdline flag "kForceDisableNewAcceleratedVideoDecoder".
We pass this flag to GPU process, and this flag forces to disable the
ChromeosVideoDecoder feature.

Bug: b:149797442
Test: Add/Remove "--force-disable-new-accelerated-video-decoder" at /etc/chrome_dev.conf
      then run `tast run $(DUT) video.Play.h264_guest`.
      Check VDA or VD is created as expected
Test: ./gpu_unittests --gtest_filter="GpuPreferencesTest.*"

Change-Id: I1257947fee388e0edbe52e258fbf3f6e5afca795
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2063511Reviewed-by: default avatarZhenyao Mo <zmo@chromium.org>
Reviewed-by: default avatarAlex Gough <ajgo@chromium.org>
Reviewed-by: default avatarDan Sanders <sandersd@chromium.org>
Reviewed-by: default avatarMiguel Casas <mcasas@chromium.org>
Reviewed-by: default avatarAndres Calderon Jaramillo <andrescj@chromium.org>
Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Commit-Queue: Chih-Yu Huang <akahuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748476}
parent 302931ee
...@@ -125,6 +125,9 @@ void DeriveCommandLine(const GURL& start_url, ...@@ -125,6 +125,9 @@ void DeriveCommandLine(const GURL& start_url,
::switches::kEnableZeroCopy, ::switches::kEnableZeroCopy,
::switches::kEnableHardwareOverlays, ::switches::kEnableHardwareOverlays,
::switches::kEdgeTouchFiltering, ::switches::kEdgeTouchFiltering,
#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
::switches::kForceDisableNewAcceleratedVideoDecoder,
#endif // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
::switches::kHostWindowBounds, ::switches::kHostWindowBounds,
::switches::kMainFrameResizesAreOrientationChanges, ::switches::kMainFrameResizesAreOrientationChanges,
::switches::kForceDeviceScaleFactor, ::switches::kForceDeviceScaleFactor,
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "gpu/command_buffer/service/service_utils.h" #include "gpu/command_buffer/service/service_utils.h"
#include "gpu/config/gpu_finch_features.h" #include "gpu/config/gpu_finch_features.h"
#include "gpu/config/gpu_switches.h" #include "gpu/config/gpu_switches.h"
#include "media/base/media_switches.h"
#include "media/media_buildflags.h" #include "media/media_buildflags.h"
#include "ui/gfx/switches.h" #include "ui/gfx/switches.h"
...@@ -110,6 +111,12 @@ const gpu::GpuPreferences GetGpuPreferencesFromCommandLine() { ...@@ -110,6 +111,12 @@ const gpu::GpuPreferences GetGpuPreferencesFromCommandLine() {
gpu_preferences.enable_native_gpu_memory_buffers = gpu_preferences.enable_native_gpu_memory_buffers =
command_line->HasSwitch(switches::kEnableNativeGpuMemoryBuffers); command_line->HasSwitch(switches::kEnableNativeGpuMemoryBuffers);
#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
gpu_preferences.force_disable_new_accelerated_video_decoder =
command_line->HasSwitch(
switches::kForceDisableNewAcceleratedVideoDecoder);
#endif
// Some of these preferences are set or adjusted in // Some of these preferences are set or adjusted in
// GpuDataManagerImplPrivate::AppendGpuCommandLine. // GpuDataManagerImplPrivate::AppendGpuCommandLine.
return gpu_preferences; return gpu_preferences;
......
...@@ -254,6 +254,12 @@ struct GPU_EXPORT GpuPreferences { ...@@ -254,6 +254,12 @@ struct GPU_EXPORT GpuPreferences {
// Enable native CPU-mappable GPU memory buffer support on Linux. // Enable native CPU-mappable GPU memory buffer support on Linux.
bool enable_native_gpu_memory_buffers = false; bool enable_native_gpu_memory_buffers = false;
// ===================================
// Settings from //media/base/media_switches.h
// Force to disable new VideoDecoder.
bool force_disable_new_accelerated_video_decoder = false;
// Please update gpu_preferences_unittest.cc when making additions or // Please update gpu_preferences_unittest.cc when making additions or
// changes to this struct. // changes to this struct.
}; };
......
...@@ -84,6 +84,8 @@ void CheckGpuPreferencesEqual(GpuPreferences left, GpuPreferences right) { ...@@ -84,6 +84,8 @@ void CheckGpuPreferencesEqual(GpuPreferences left, GpuPreferences right) {
#endif #endif
EXPECT_EQ(left.enable_native_gpu_memory_buffers, EXPECT_EQ(left.enable_native_gpu_memory_buffers,
right.enable_native_gpu_memory_buffers); right.enable_native_gpu_memory_buffers);
EXPECT_EQ(left.force_disable_new_accelerated_video_decoder,
right.force_disable_new_accelerated_video_decoder);
} }
} // namespace } // namespace
...@@ -176,6 +178,7 @@ TEST(GpuPreferencesTest, EncodeDecode) { ...@@ -176,6 +178,7 @@ TEST(GpuPreferencesTest, EncodeDecode) {
base::MessagePumpType::UI) base::MessagePumpType::UI)
#endif #endif
GPU_PREFERENCES_FIELD(enable_native_gpu_memory_buffers, true); GPU_PREFERENCES_FIELD(enable_native_gpu_memory_buffers, true);
GPU_PREFERENCES_FIELD(force_disable_new_accelerated_video_decoder, true);
input_prefs.texture_target_exception_list.emplace_back( input_prefs.texture_target_exception_list.emplace_back(
gfx::BufferUsage::SCANOUT, gfx::BufferFormat::RGBA_8888); gfx::BufferUsage::SCANOUT, gfx::BufferFormat::RGBA_8888);
......
...@@ -90,4 +90,6 @@ struct GpuPreferences { ...@@ -90,4 +90,6 @@ struct GpuPreferences {
mojo_base.mojom.MessagePumpType message_pump_type; mojo_base.mojom.MessagePumpType message_pump_type;
bool enable_native_gpu_memory_buffers; bool enable_native_gpu_memory_buffers;
bool force_disable_new_accelerated_video_decoder;
}; };
...@@ -182,6 +182,9 @@ struct StructTraits<gpu::mojom::GpuPreferencesDataView, gpu::GpuPreferences> { ...@@ -182,6 +182,9 @@ struct StructTraits<gpu::mojom::GpuPreferencesDataView, gpu::GpuPreferences> {
out->enable_native_gpu_memory_buffers = out->enable_native_gpu_memory_buffers =
prefs.enable_native_gpu_memory_buffers(); prefs.enable_native_gpu_memory_buffers();
out->force_disable_new_accelerated_video_decoder =
prefs.force_disable_new_accelerated_video_decoder();
return true; return true;
} }
...@@ -358,6 +361,10 @@ struct StructTraits<gpu::mojom::GpuPreferencesDataView, gpu::GpuPreferences> { ...@@ -358,6 +361,10 @@ struct StructTraits<gpu::mojom::GpuPreferencesDataView, gpu::GpuPreferences> {
const gpu::GpuPreferences& prefs) { const gpu::GpuPreferences& prefs) {
return prefs.enable_native_gpu_memory_buffers; return prefs.enable_native_gpu_memory_buffers;
} }
static bool force_disable_new_accelerated_video_decoder(
const gpu::GpuPreferences& prefs) {
return prefs.force_disable_new_accelerated_video_decoder;
}
}; };
} // namespace mojo } // namespace mojo
......
...@@ -184,6 +184,12 @@ const char kOverrideEnabledCdmInterfaceVersion[] = ...@@ -184,6 +184,12 @@ const char kOverrideEnabledCdmInterfaceVersion[] =
const char kOverrideHardwareSecureCodecsForTesting[] = const char kOverrideHardwareSecureCodecsForTesting[] =
"override-hardware-secure-codecs-for-testing"; "override-hardware-secure-codecs-for-testing";
#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
// Force to disable kChromeosVideoDecoder feature, used for unsupported boards.
const char kForceDisableNewAcceleratedVideoDecoder[] =
"force-disable-new-accelerated-video-decoder";
#endif // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
namespace autoplay { namespace autoplay {
// Autoplay policy that requires a document user activation. // Autoplay policy that requires a document user activation.
......
...@@ -55,6 +55,10 @@ MEDIA_EXPORT extern const char kForceProtectedVideoOutputBuffers[]; ...@@ -55,6 +55,10 @@ MEDIA_EXPORT extern const char kForceProtectedVideoOutputBuffers[];
MEDIA_EXPORT extern const char kEnableFuchsiaAudioConsumer[]; MEDIA_EXPORT extern const char kEnableFuchsiaAudioConsumer[];
#endif #endif
#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
MEDIA_EXPORT extern const char kForceDisableNewAcceleratedVideoDecoder[];
#endif
#if defined(USE_CRAS) #if defined(USE_CRAS)
MEDIA_EXPORT extern const char kUseCras[]; MEDIA_EXPORT extern const char kUseCras[];
#endif #endif
......
...@@ -99,6 +99,15 @@ D3D11VideoDecoder::GetD3D11DeviceCB GetD3D11DeviceCallback() { ...@@ -99,6 +99,15 @@ D3D11VideoDecoder::GetD3D11DeviceCB GetD3D11DeviceCallback() {
} }
#endif #endif
#if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
// Return true if we switch to use new HW-accelerated video decoder.
bool IsNewAcceleratedVideoDecoderUsed(
const gpu::GpuPreferences& gpu_preferences) {
return !gpu_preferences.force_disable_new_accelerated_video_decoder &&
base::FeatureList::IsEnabled(kChromeosVideoDecoder);
}
#endif // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
} // namespace } // namespace
GpuMojoMediaClient::GpuMojoMediaClient( GpuMojoMediaClient::GpuMojoMediaClient(
...@@ -156,7 +165,7 @@ GpuMojoMediaClient::GetSupportedVideoDecoderConfigs() { ...@@ -156,7 +165,7 @@ GpuMojoMediaClient::GetSupportedVideoDecoderConfigs() {
*d3d11_supported_configs_; *d3d11_supported_configs_;
#elif BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION) #elif BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
if (base::FeatureList::IsEnabled(kChromeosVideoDecoder)) { if (IsNewAcceleratedVideoDecoderUsed(gpu_preferences_)) {
if (!cros_supported_configs_) { if (!cros_supported_configs_) {
cros_supported_configs_ = cros_supported_configs_ =
ChromeosVideoDecoderFactory::GetSupportedConfigs(); ChromeosVideoDecoderFactory::GetSupportedConfigs();
...@@ -235,7 +244,7 @@ std::unique_ptr<VideoDecoder> GpuMojoMediaClient::CreateVideoDecoder( ...@@ -235,7 +244,7 @@ std::unique_ptr<VideoDecoder> GpuMojoMediaClient::CreateVideoDecoder(
std::move(ycbcr_helper))); std::move(ycbcr_helper)));
#elif BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION) #elif BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
if (base::FeatureList::IsEnabled(kChromeosVideoDecoder)) { if (IsNewAcceleratedVideoDecoderUsed(gpu_preferences_)) {
auto frame_pool = std::make_unique<PlatformVideoFramePool>( auto frame_pool = std::make_unique<PlatformVideoFramePool>(
gpu_memory_buffer_factory_); gpu_memory_buffer_factory_);
auto frame_converter = MailboxVideoFrameConverter::Create( auto frame_converter = MailboxVideoFrameConverter::Create(
......
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