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)27ConfigurableFrameSizeEncoder::ConfigurableFrameSizeEncoder( 28 size_t max_frame_size) 29 : callback_(NULL), 30 current_frame_size_(max_frame_size), 31 codec_type_(kVideoCodecGeneric) {} 32 ~ConfigurableFrameSizeEncoder()33ConfigurableFrameSizeEncoder::~ConfigurableFrameSizeEncoder() {} 34 SetFecControllerOverride(FecControllerOverride * fec_controller_override)35void ConfigurableFrameSizeEncoder::SetFecControllerOverride( 36 FecControllerOverride* fec_controller_override) { 37 // Ignored. 38 } 39 InitEncode(const VideoCodec * codec_settings,const Settings & settings)40int32_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)46int32_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)67int32_t ConfigurableFrameSizeEncoder::RegisterEncodeCompleteCallback( 68 EncodedImageCallback* callback) { 69 callback_ = callback; 70 return WEBRTC_VIDEO_CODEC_OK; 71 } 72 Release()73int32_t ConfigurableFrameSizeEncoder::Release() { 74 return WEBRTC_VIDEO_CODEC_OK; 75 } 76 SetRates(const RateControlParameters & parameters)77void ConfigurableFrameSizeEncoder::SetRates( 78 const RateControlParameters& parameters) {} 79 SetFrameSize(size_t size)80int32_t ConfigurableFrameSizeEncoder::SetFrameSize(size_t size) { 81 current_frame_size_ = size; 82 return WEBRTC_VIDEO_CODEC_OK; 83 } 84 SetCodecType(VideoCodecType codec_type)85void ConfigurableFrameSizeEncoder::SetCodecType(VideoCodecType codec_type) { 86 codec_type_ = codec_type; 87 } 88 RegisterPostEncodeCallback(std::function<void (void)> post_encode_callback)89void 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