Commit a69c1dc6 authored by Hirokazu Honda's avatar Hirokazu Honda Committed by Commit Bot

media/gpu/test: Enable/Disable features in a test

There are some media features that needs to be overridden in
a test. For instance, we want to enable kVaapiVP9Encoder, which
is disabled by default now, and also kFFmpegDecodeOpaque to use
VpxVideoDecoder to decode vp8 bitstream for a verification.

There is no way to enable and disable features in our video
tests. After this CL, media::test::VideoTestEnvironment takes
feature sets to be either enabled or disabled in a test.

Bug: 1045825
Test: video_encode_accelerator_tests --codec=vp8 on eve
Change-Id: Ib66d96c124783ca47c3e943d396e6666ebac03ed
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2206872
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: default avatarDavid Staessens <dstaessens@chromium.org>
Cr-Commit-Position: refs/heads/master@{#771347}
parent 84014049
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "base/synchronization/waitable_event.h" #include "base/synchronization/waitable_event.h"
#include "media/base/decoder_buffer.h" #include "media/base/decoder_buffer.h"
#include "media/base/media_switches.h"
#include "media/base/video_decoder_config.h" #include "media/base/video_decoder_config.h"
#include "media/base/video_frame.h" #include "media/base/video_frame.h"
#include "media/filters/ffmpeg_video_decoder.h" #include "media/filters/ffmpeg_video_decoder.h"
...@@ -25,6 +26,7 @@ std::unique_ptr<VideoDecoder> CreateDecoder(VideoCodec codec) { ...@@ -25,6 +26,7 @@ std::unique_ptr<VideoDecoder> CreateDecoder(VideoCodec codec) {
if (codec == kCodecVP8 || codec == kCodecVP9) { if (codec == kCodecVP8 || codec == kCodecVP9) {
#if BUILDFLAG(ENABLE_LIBVPX) #if BUILDFLAG(ENABLE_LIBVPX)
LOG_ASSERT(!base::FeatureList::IsEnabled(kFFmpegDecodeOpaqueVP8));
decoder = std::make_unique<VpxVideoDecoder>(); decoder = std::make_unique<VpxVideoDecoder>();
#endif #endif
} }
......
...@@ -7,7 +7,10 @@ ...@@ -7,7 +7,10 @@
#include <algorithm> #include <algorithm>
#include <utility> #include <utility>
#include "build/buildflag.h"
#include "gpu/ipc/service/gpu_memory_buffer_factory.h" #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
#include "media/base/media_switches.h"
#include "media/gpu/buildflags.h"
#include "media/gpu/macros.h" #include "media/gpu/macros.h"
#include "media/gpu/test/video.h" #include "media/gpu/test/video.h"
...@@ -22,6 +25,25 @@ struct CodecParamToProfile { ...@@ -22,6 +25,25 @@ struct CodecParamToProfile {
{"h264main", H264PROFILE_MAIN}, {"vp8", VP8PROFILE_ANY}, {"h264main", H264PROFILE_MAIN}, {"vp8", VP8PROFILE_ANY},
{"vp9", VP9PROFILE_PROFILE0}, {"vp9", VP9PROFILE_PROFILE0},
}; };
const std::vector<base::Feature> kEnabledFeaturesForVideoEncoderTest = {
#if BUILDFLAG(USE_VAAPI)
// TODO(crbug.com/811912): remove once enabled by default.
kVaapiVP9Encoder,
// TODO(crbug.com/828482): Remove once H264 encoder on AMD is enabled by
// default.
kVaapiH264AMDEncoder,
#endif
};
const std::vector<base::Feature> kDisabledFeaturesForVideoEncoderTest = {
// FFmpegVideoDecoder is used for vp8 stream whose alpha mode is opaque in
// chromium browser. However, VpxVideoDecoder will be used to decode any vp8
// stream for the rightness (b/138840822), and currently be experimented
// with this feature flag. We disable the feature to use VpxVideoDecoder to
// decode any vp8 stream in BitstreamValidator.
kFFmpegDecodeOpaqueVP8,
};
} // namespace } // namespace
// static // static
...@@ -75,7 +97,9 @@ VideoEncoderTestEnvironment::VideoEncoderTestEnvironment( ...@@ -75,7 +97,9 @@ VideoEncoderTestEnvironment::VideoEncoderTestEnvironment(
std::unique_ptr<media::test::Video> video, std::unique_ptr<media::test::Video> video,
const base::FilePath& output_folder, const base::FilePath& output_folder,
VideoCodecProfile profile) VideoCodecProfile profile)
: video_(std::move(video)), : VideoTestEnvironment(kEnabledFeaturesForVideoEncoderTest,
kDisabledFeaturesForVideoEncoderTest),
video_(std::move(video)),
output_folder_(output_folder), output_folder_(output_folder),
profile_(profile), profile_(profile),
gpu_memory_buffer_factory_( gpu_memory_buffer_factory_(
......
...@@ -23,7 +23,11 @@ ...@@ -23,7 +23,11 @@
namespace media { namespace media {
namespace test { namespace test {
VideoTestEnvironment::VideoTestEnvironment() { VideoTestEnvironment::VideoTestEnvironment() : VideoTestEnvironment({}, {}) {}
VideoTestEnvironment::VideoTestEnvironment(
const std::vector<base::Feature>& enabled_features,
const std::vector<base::Feature>& disabled_features) {
// Using shared memory requires mojo to be initialized (crbug.com/849207). // Using shared memory requires mojo to be initialized (crbug.com/849207).
mojo::core::Init(); mojo::core::Init();
...@@ -41,6 +45,10 @@ VideoTestEnvironment::VideoTestEnvironment() { ...@@ -41,6 +45,10 @@ VideoTestEnvironment::VideoTestEnvironment() {
task_environment_ = std::make_unique<base::test::TaskEnvironment>( task_environment_ = std::make_unique<base::test::TaskEnvironment>(
base::test::TaskEnvironment::MainThreadType::UI); base::test::TaskEnvironment::MainThreadType::UI);
// Initialize features. Since some of them can be for VA-API, it is necessary
// to initialize them before calling VaapiWrapper::PreSandboxInitialization().
scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features);
// Perform all static initialization that is required when running video // Perform all static initialization that is required when running video
// decoders in a test environment. // decoders in a test environment.
#if BUILDFLAG(USE_VAAPI) #if BUILDFLAG(USE_VAAPI)
......
...@@ -8,9 +8,11 @@ ...@@ -8,9 +8,11 @@
#define MEDIA_GPU_TEST_VIDEO_TEST_ENVIRONMENT_H_ #define MEDIA_GPU_TEST_VIDEO_TEST_ENVIRONMENT_H_
#include <memory> #include <memory>
#include <vector>
#include "base/at_exit.h" #include "base/at_exit.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/test/scoped_feature_list.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace base { namespace base {
...@@ -25,6 +27,9 @@ namespace test { ...@@ -25,6 +27,9 @@ namespace test {
class VideoTestEnvironment : public ::testing::Environment { class VideoTestEnvironment : public ::testing::Environment {
public: public:
VideoTestEnvironment(); VideoTestEnvironment();
// Features are overridden by given features in this environment.
VideoTestEnvironment(const std::vector<base::Feature>& enabled_features,
const std::vector<base::Feature>& disabled_features);
virtual ~VideoTestEnvironment(); virtual ~VideoTestEnvironment();
// ::testing::Environment implementation. // ::testing::Environment implementation.
...@@ -39,6 +44,8 @@ class VideoTestEnvironment : public ::testing::Environment { ...@@ -39,6 +44,8 @@ class VideoTestEnvironment : public ::testing::Environment {
base::AtExitManager at_exit_manager; base::AtExitManager at_exit_manager;
std::unique_ptr<base::test::TaskEnvironment> task_environment_; std::unique_ptr<base::test::TaskEnvironment> task_environment_;
// Features to override default feature settings in this environment.
base::test::ScopedFeatureList scoped_feature_list_;
}; };
} // namespace test } // namespace test
......
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