| /* |
| * 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_ |