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 @@
#include "base/optional.h"
#include "base/synchronization/waitable_event.h"
#include "media/base/decoder_buffer.h"
#include "media/base/media_switches.h"
#include "media/base/video_decoder_config.h"
#include "media/base/video_frame.h"
#include "media/filters/ffmpeg_video_decoder.h"
......@@ -25,6 +26,7 @@ std::unique_ptr<VideoDecoder> CreateDecoder(VideoCodec codec) {
if (codec == kCodecVP8 || codec == kCodecVP9) {
#if BUILDFLAG(ENABLE_LIBVPX)
LOG_ASSERT(!base::FeatureList::IsEnabled(kFFmpegDecodeOpaqueVP8));
decoder = std::make_unique<VpxVideoDecoder>();
#endif
}
......
......@@ -7,7 +7,10 @@
#include <algorithm>
#include <utility>
#include "build/buildflag.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/test/video.h"
......@@ -22,6 +25,25 @@ struct CodecParamToProfile {
{"h264main", H264PROFILE_MAIN}, {"vp8", VP8PROFILE_ANY},
{"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
// static
......@@ -75,7 +97,9 @@ VideoEncoderTestEnvironment::VideoEncoderTestEnvironment(
std::unique_ptr<media::test::Video> video,
const base::FilePath& output_folder,
VideoCodecProfile profile)
: video_(std::move(video)),
: VideoTestEnvironment(kEnabledFeaturesForVideoEncoderTest,
kDisabledFeaturesForVideoEncoderTest),
video_(std::move(video)),
output_folder_(output_folder),
profile_(profile),
gpu_memory_buffer_factory_(
......
......@@ -23,7 +23,11 @@
namespace media {
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).
mojo::core::Init();
......@@ -41,6 +45,10 @@ VideoTestEnvironment::VideoTestEnvironment() {
task_environment_ = std::make_unique<base::test::TaskEnvironment>(
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
// decoders in a test environment.
#if BUILDFLAG(USE_VAAPI)
......
......@@ -8,9 +8,11 @@
#define MEDIA_GPU_TEST_VIDEO_TEST_ENVIRONMENT_H_
#include <memory>
#include <vector>
#include "base/at_exit.h"
#include "base/files/file_path.h"
#include "base/test/scoped_feature_list.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
......@@ -25,6 +27,9 @@ namespace test {
class VideoTestEnvironment : public ::testing::Environment {
public:
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();
// ::testing::Environment implementation.
......@@ -39,6 +44,8 @@ class VideoTestEnvironment : public ::testing::Environment {
base::AtExitManager at_exit_manager;
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
......
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