blob: 98fc50483527d7015391ee94c6418752a2e6acb6 [file]
/*
* Copyright (c) 2026 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef API_VIDEO_CODECS_VIDEO_ENCODER_BUILDERS_FOR_TEST_H_
#define API_VIDEO_CODECS_VIDEO_ENCODER_BUILDERS_FOR_TEST_H_
#include <cstdint>
#include <memory>
#include <optional>
#include <utility>
#include <vector>
#include "api/units/data_rate.h"
#include "api/units/time_delta.h"
#include "api/video/resolution.h"
#include "api/video_codecs/video_encoder_builders.h"
#include "api/video_codecs/video_encoder_interface.h"
namespace webrtc {
struct TestEncodedOutput {
std::vector<uint8_t> bitstream;
VideoEncoderInterface::EncodeResult res;
};
class FrameEncodeSettingsBuilderForTest : public FrameEncodeSettingsBuilder {
public:
FrameEncodeSettingsBuilderForTest() = default;
// Implicit conversion!
operator VideoEncoderInterface::FrameEncodeSettings() { return Build(); }
// Overridden base class methods returning FrameEncodeSettingsBuilderForTest&
FrameEncodeSettingsBuilderForTest& CqpRateOptions(int target_qp) {
FrameEncodeSettingsBuilder::CqpRateOptions(target_qp);
return *this;
}
FrameEncodeSettingsBuilderForTest& CbrRateOptions(TimeDelta duration,
DataRate target_bitrate) {
FrameEncodeSettingsBuilder::CbrRateOptions(duration, target_bitrate);
return *this;
}
FrameEncodeSettingsBuilderForTest& FrameType(
VideoEncoderInterface::FrameType frame_type) {
FrameEncodeSettingsBuilder::FrameType(frame_type);
return *this;
}
FrameEncodeSettingsBuilderForTest& TemporalId(int temporal_id) {
FrameEncodeSettingsBuilder::TemporalId(temporal_id);
return *this;
}
FrameEncodeSettingsBuilderForTest& SpatialId(int spatial_id) {
FrameEncodeSettingsBuilder::SpatialId(spatial_id);
return *this;
}
FrameEncodeSettingsBuilderForTest& Resolution(webrtc::Resolution resolution) {
FrameEncodeSettingsBuilder::Resolution(resolution);
return *this;
}
FrameEncodeSettingsBuilderForTest& ReferenceBuffers(
std::vector<int> reference_buffers) {
FrameEncodeSettingsBuilder::ReferenceBuffers(std::move(reference_buffers));
return *this;
}
FrameEncodeSettingsBuilderForTest& UpdateBuffer(
std::optional<int> update_buffer) {
FrameEncodeSettingsBuilder::UpdateBuffer(update_buffer);
return *this;
}
FrameEncodeSettingsBuilderForTest& EffortLevel(int effort_level) {
FrameEncodeSettingsBuilder::EffortLevel(effort_level);
return *this;
}
FrameEncodeSettingsBuilderForTest& FrameOutput(
std::unique_ptr<VideoEncoderInterface::FrameOutput> frame_output) {
FrameEncodeSettingsBuilder::FrameOutput(std::move(frame_output));
return *this;
}
// Shorthand methods!
FrameEncodeSettingsBuilderForTest& Cbr(
const VideoEncoderInterface::FrameEncodeSettings::Cbr& cbr_settings);
FrameEncodeSettingsBuilderForTest& Cqp(int target_qp);
FrameEncodeSettingsBuilderForTest& S(int spatial_id);
FrameEncodeSettingsBuilderForTest& T(int temporal_id);
FrameEncodeSettingsBuilderForTest& Res(int width, int height);
FrameEncodeSettingsBuilderForTest& Upd(std::optional<int> update_buffer);
FrameEncodeSettingsBuilderForTest& Ref(std::vector<int> reference_buffers);
FrameEncodeSettingsBuilderForTest& Key();
FrameEncodeSettingsBuilderForTest& Start();
FrameEncodeSettingsBuilderForTest& Delta();
FrameEncodeSettingsBuilderForTest& Effort(int effort_level);
FrameEncodeSettingsBuilderForTest& Out(TestEncodedOutput& out);
};
} // namespace webrtc
#endif // API_VIDEO_CODECS_VIDEO_ENCODER_BUILDERS_FOR_TEST_H_