xref: /aosp_15_r20/external/webrtc/test/configurable_frame_size_encoder.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "test/configurable_frame_size_encoder.h"
12 
13 #include <string.h>
14 
15 #include <cstdint>
16 #include <type_traits>
17 #include <utility>
18 
19 #include "api/video/encoded_image.h"
20 #include "modules/video_coding/include/video_codec_interface.h"
21 #include "modules/video_coding/include/video_error_codes.h"
22 #include "rtc_base/checks.h"
23 
24 namespace webrtc {
25 namespace test {
26 
ConfigurableFrameSizeEncoder(size_t max_frame_size)27 ConfigurableFrameSizeEncoder::ConfigurableFrameSizeEncoder(
28     size_t max_frame_size)
29     : callback_(NULL),
30       current_frame_size_(max_frame_size),
31       codec_type_(kVideoCodecGeneric) {}
32 
~ConfigurableFrameSizeEncoder()33 ConfigurableFrameSizeEncoder::~ConfigurableFrameSizeEncoder() {}
34 
SetFecControllerOverride(FecControllerOverride * fec_controller_override)35 void ConfigurableFrameSizeEncoder::SetFecControllerOverride(
36     FecControllerOverride* fec_controller_override) {
37   // Ignored.
38 }
39 
InitEncode(const VideoCodec * codec_settings,const Settings & settings)40 int32_t ConfigurableFrameSizeEncoder::InitEncode(
41     const VideoCodec* codec_settings,
42     const Settings& settings) {
43   return WEBRTC_VIDEO_CODEC_OK;
44 }
45 
Encode(const VideoFrame & inputImage,const std::vector<VideoFrameType> * frame_types)46 int32_t ConfigurableFrameSizeEncoder::Encode(
47     const VideoFrame& inputImage,
48     const std::vector<VideoFrameType>* frame_types) {
49   EncodedImage encodedImage;
50   auto buffer = EncodedImageBuffer::Create(current_frame_size_);
51   memset(buffer->data(), 0, current_frame_size_);
52   encodedImage.SetEncodedData(buffer);
53   encodedImage._encodedHeight = inputImage.height();
54   encodedImage._encodedWidth = inputImage.width();
55   encodedImage._frameType = VideoFrameType::kVideoFrameKey;
56   encodedImage.SetTimestamp(inputImage.timestamp());
57   encodedImage.capture_time_ms_ = inputImage.render_time_ms();
58   CodecSpecificInfo specific{};
59   specific.codecType = codec_type_;
60   callback_->OnEncodedImage(encodedImage, &specific);
61   if (post_encode_callback_) {
62     (*post_encode_callback_)();
63   }
64   return WEBRTC_VIDEO_CODEC_OK;
65 }
66 
RegisterEncodeCompleteCallback(EncodedImageCallback * callback)67 int32_t ConfigurableFrameSizeEncoder::RegisterEncodeCompleteCallback(
68     EncodedImageCallback* callback) {
69   callback_ = callback;
70   return WEBRTC_VIDEO_CODEC_OK;
71 }
72 
Release()73 int32_t ConfigurableFrameSizeEncoder::Release() {
74   return WEBRTC_VIDEO_CODEC_OK;
75 }
76 
SetRates(const RateControlParameters & parameters)77 void ConfigurableFrameSizeEncoder::SetRates(
78     const RateControlParameters& parameters) {}
79 
SetFrameSize(size_t size)80 int32_t ConfigurableFrameSizeEncoder::SetFrameSize(size_t size) {
81   current_frame_size_ = size;
82   return WEBRTC_VIDEO_CODEC_OK;
83 }
84 
SetCodecType(VideoCodecType codec_type)85 void ConfigurableFrameSizeEncoder::SetCodecType(VideoCodecType codec_type) {
86   codec_type_ = codec_type;
87 }
88 
RegisterPostEncodeCallback(std::function<void (void)> post_encode_callback)89 void ConfigurableFrameSizeEncoder::RegisterPostEncodeCallback(
90     std::function<void(void)> post_encode_callback) {
91   post_encode_callback_ = std::move(post_encode_callback);
92 }
93 
94 }  // namespace test
95 }  // namespace webrtc
96