blob: 7348e484fe2274a5029ad39731d304cffdf21ead [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "media/gpu/test/video_player/video_player_test_environment.h"
#include <utility>
#include "base/system/sys_info.h"
#include "build/chromeos_buildflags.h"
#include "media/base/media_switches.h"
#include "media/base/video_types.h"
#include "media/gpu/buildflags.h"
#include "media/gpu/test/video.h"
#include "media/gpu/test/video_player/video_decoder_client.h"
namespace media {
namespace test {
// Default video to be used if no test video was specified.
constexpr base::FilePath::CharType kDefaultTestVideoPath[] =
FILE_PATH_LITERAL("test-25fps.h264");
// static
VideoPlayerTestEnvironment* VideoPlayerTestEnvironment::Create(
const base::FilePath& video_path,
const base::FilePath& video_metadata_path,
ValidatorType validator_type,
const DecoderImplementation implementation,
const base::FilePath& output_folder,
const FrameOutputConfig& frame_output_config) {
auto video = std::make_unique<media::test::Video>(
video_path.empty() ? base::FilePath(kDefaultTestVideoPath) : video_path,
video_metadata_path);
if (!video->Load()) {
LOG(ERROR) << "Failed to load " << video_path;
return nullptr;
}
return new VideoPlayerTestEnvironment(std::move(video), validator_type,
implementation, output_folder,
frame_output_config);
}
VideoPlayerTestEnvironment::VideoPlayerTestEnvironment(
std::unique_ptr<media::test::Video> video,
ValidatorType validator_type,
const DecoderImplementation implementation,
const base::FilePath& output_folder,
const FrameOutputConfig& frame_output_config)
: VideoTestEnvironment(
/*enabled_features=*/
{
#if BUILDFLAG(USE_VAAPI)
// TODO(b/172217032): remove once enabled by default.
media::kVaapiAV1Decoder,
#endif
},
/*disabled_features=*/
{
#if BUILDFLAG(USE_VAAPI)
// Disable this feature so that the decoder test can test a
// resolution which is denied for the sake of performance. See
// b/171041334.
kVaapiEnforceVideoMinMaxResolution,
#endif
}),
video_(std::move(video)),
validator_type_(validator_type),
implementation_(implementation),
frame_output_config_(frame_output_config),
output_folder_(output_folder),
gpu_memory_buffer_factory_(
gpu::GpuMemoryBufferFactory::CreateNativeType(nullptr)) {
}
VideoPlayerTestEnvironment::~VideoPlayerTestEnvironment() = default;
const media::test::Video* VideoPlayerTestEnvironment::Video() const {
return video_.get();
}
gpu::GpuMemoryBufferFactory*
VideoPlayerTestEnvironment::GetGpuMemoryBufferFactory() const {
return gpu_memory_buffer_factory_.get();
}
bool VideoPlayerTestEnvironment::IsValidatorEnabled() const {
return validator_type_ != ValidatorType::kNone;
}
VideoPlayerTestEnvironment::ValidatorType
VideoPlayerTestEnvironment::GetValidatorType() const {
return validator_type_;
}
DecoderImplementation VideoPlayerTestEnvironment::GetDecoderImplementation()
const {
return implementation_;
}
FrameOutputMode VideoPlayerTestEnvironment::GetFrameOutputMode() const {
return frame_output_config_.output_mode;
}
VideoFrameFileWriter::OutputFormat
VideoPlayerTestEnvironment::GetFrameOutputFormat() const {
return frame_output_config_.output_format;
}
uint64_t VideoPlayerTestEnvironment::GetFrameOutputLimit() const {
return frame_output_config_.output_limit;
}
const base::FilePath& VideoPlayerTestEnvironment::OutputFolder() const {
return output_folder_;
}
} // namespace test
} // namespace media