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 "webrtc/test/configurable_frame_size_encoder.h" 12 13 #include <string.h> 14 15 #include "testing/gtest/include/gtest/gtest.h" 16 17 #include "webrtc/common_video/interface/video_image.h" 18 #include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h" 19 20 namespace webrtc { 21 namespace test { 22 23 ConfigurableFrameSizeEncoder::ConfigurableFrameSizeEncoder( 24 uint32_t max_frame_size) 25 : callback_(NULL), 26 max_frame_size_(max_frame_size), 27 current_frame_size_(max_frame_size), 28 buffer_(new uint8_t[max_frame_size]) { 29 memset(buffer_.get(), 0, max_frame_size); 30 } 31 32 ConfigurableFrameSizeEncoder::~ConfigurableFrameSizeEncoder() {} 33 34 int32_t ConfigurableFrameSizeEncoder::InitEncode( 35 const VideoCodec* codec_settings, 36 int32_t number_of_cores, 37 uint32_t max_payload_size) { 38 return WEBRTC_VIDEO_CODEC_OK; 39 } 40 41 int32_t ConfigurableFrameSizeEncoder::Encode( 42 const I420VideoFrame& inputImage, 43 const CodecSpecificInfo* codecSpecificInfo, 44 const std::vector<VideoFrameType>* frame_types) { 45 EncodedImage encodedImage( 46 buffer_.get(), current_frame_size_, max_frame_size_); 47 encodedImage._completeFrame = true; 48 encodedImage._encodedHeight = inputImage.height(); 49 encodedImage._encodedWidth = inputImage.width(); 50 encodedImage._frameType = kKeyFrame; 51 encodedImage._timeStamp = inputImage.timestamp(); 52 encodedImage.capture_time_ms_ = inputImage.render_time_ms(); 53 RTPFragmentationHeader* fragmentation = NULL; 54 CodecSpecificInfo specific; 55 memset(&specific, 0, sizeof(specific)); 56 callback_->Encoded(encodedImage, &specific, fragmentation); 57 58 return WEBRTC_VIDEO_CODEC_OK; 59 } 60 61 int32_t ConfigurableFrameSizeEncoder::RegisterEncodeCompleteCallback( 62 EncodedImageCallback* callback) { 63 callback_ = callback; 64 return WEBRTC_VIDEO_CODEC_OK; 65 } 66 67 int32_t ConfigurableFrameSizeEncoder::Release() { 68 return WEBRTC_VIDEO_CODEC_OK; 69 } 70 71 int32_t ConfigurableFrameSizeEncoder::SetChannelParameters(uint32_t packet_loss, 72 int rtt) { 73 return WEBRTC_VIDEO_CODEC_OK; 74 } 75 76 int32_t ConfigurableFrameSizeEncoder::SetRates(uint32_t new_bit_rate, 77 uint32_t frame_rate) { 78 return WEBRTC_VIDEO_CODEC_OK; 79 } 80 81 int32_t ConfigurableFrameSizeEncoder::SetPeriodicKeyFrames(bool enable) { 82 return WEBRTC_VIDEO_CODEC_OK; 83 } 84 85 int32_t ConfigurableFrameSizeEncoder::CodecConfigParameters(uint8_t* buffer, 86 int32_t size) { 87 return WEBRTC_VIDEO_CODEC_OK; 88 } 89 90 int32_t ConfigurableFrameSizeEncoder::SetFrameSize(uint32_t size) { 91 assert(size <= max_frame_size_); 92 current_frame_size_ = size; 93 return WEBRTC_VIDEO_CODEC_OK; 94 } 95 96 } // namespace test 97 } // namespace webrtc 98