#ifndef MEDIA_GPU_TEST_VIDEO_ENCODER_VIDEO_ENCODER_TEST_ENVIRONMENT_H_
#define MEDIA_GPU_TEST_VIDEO_ENCODER_VIDEO_ENCODER_TEST_ENVIRONMENT_H_
#include <limits>
#include <memory>
#include <optional>
#include <string>
#include "base/files/file_path.h"
#include "media/base/video_bitrate_allocation.h"
#include "media/base/video_codecs.h"
#include "media/gpu/test/video_test_environment.h"
#include "media/video/video_encode_accelerator.h"
namespace media {
class Bitrate;
namespace test {
class RawVideo;
class VideoEncoderTestEnvironment : public VideoTestEnvironment {
public:
enum class TestType {
kValidation,
kQualityPerformance,
kSpeedPerformance,
};
static VideoEncoderTestEnvironment* Create(
TestType test_type,
const base::FilePath& video_path,
const base::FilePath& video_metadata_path,
const base::FilePath& output_folder,
const std::string& codec,
const std::string& svc_mode,
VideoEncodeAccelerator::Config::ContentType content_type,
bool save_output_bitstream,
std::optional<uint32_t> output_bitrate,
Bitrate::Mode bitrate_mode,
bool reverse,
const FrameOutputConfig& frame_output_config = FrameOutputConfig(),
const std::vector<base::test::FeatureRef>& enabled_features = {},
const std::vector<base::test::FeatureRef>& disabled_features = {});
~VideoEncoderTestEnvironment() override;
media::test::RawVideo* Video() const;
media::test::RawVideo* GenerateNV12Video();
TestType RunTestType() const;
const base::FilePath& OutputFolder() const;
VideoCodecProfile Profile() const;
const std::vector<VideoEncodeAccelerator::Config::SpatialLayer>&
SpatialLayers() const;
SVCInterLayerPredMode InterLayerPredMode() const;
VideoEncodeAccelerator::Config::ContentType ContentType() const;
const VideoBitrateAllocation& BitrateAllocation() const;
bool SaveOutputBitstream() const;
base::FilePath OutputFilePath(const VideoCodec& codec,
bool svc_enable = false,
int spatial_idx = 0,
int temporal_idx = 0) const;
bool Reverse() const;
std::optional<base::FilePath> OutputBitstreamFilePath() const;
const FrameOutputConfig& ImageOutputConfig() const;
void SetUp() override;
void TearDown() override;
private:
VideoEncoderTestEnvironment(
TestType test_type,
std::unique_ptr<media::test::RawVideo> video,
const base::FilePath& output_folder,
const base::FilePath& output_bitstream_file_base_name,
VideoCodecProfile profile,
SVCInterLayerPredMode inter_layer_pred_mode,
size_t num_temporal_layers,
size_t num_spatial_layers,
VideoEncodeAccelerator::Config::ContentType content_type,
const media::VideoBitrateAllocation& bitrate,
bool save_output_bitstream,
bool reverse,
const FrameOutputConfig& frame_output_config,
const std::vector<base::test::FeatureRef>& enabled_features,
const std::vector<base::test::FeatureRef>& disabled_features);
const TestType test_type_;
const std::unique_ptr<media::test::RawVideo> video_;
std::unique_ptr<media::test::RawVideo> nv12_video_;
const base::FilePath output_folder_;
const base::FilePath output_bitstream_file_base_name_;
const VideoCodecProfile profile_;
const SVCInterLayerPredMode inter_layer_pred_mode_;
const VideoBitrateAllocation bitrate_;
std::vector<VideoEncodeAccelerator::Config::SpatialLayer> spatial_layers_;
VideoEncodeAccelerator::Config::ContentType content_type_;
const bool save_output_bitstream_;
const bool reverse_;
const FrameOutputConfig frame_output_config_;
};
}
}
#endif