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/include/video_image.h"
18 #include "webrtc/modules/video_coding/include/video_codec_interface.h"
19
20 namespace webrtc {
21 namespace test {
22
ConfigurableFrameSizeEncoder(size_t max_frame_size)23 ConfigurableFrameSizeEncoder::ConfigurableFrameSizeEncoder(
24 size_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
~ConfigurableFrameSizeEncoder()32 ConfigurableFrameSizeEncoder::~ConfigurableFrameSizeEncoder() {}
33
InitEncode(const VideoCodec * codec_settings,int32_t number_of_cores,size_t max_payload_size)34 int32_t ConfigurableFrameSizeEncoder::InitEncode(
35 const VideoCodec* codec_settings,
36 int32_t number_of_cores,
37 size_t max_payload_size) {
38 return WEBRTC_VIDEO_CODEC_OK;
39 }
40
Encode(const VideoFrame & inputImage,const CodecSpecificInfo * codecSpecificInfo,const std::vector<FrameType> * frame_types)41 int32_t ConfigurableFrameSizeEncoder::Encode(
42 const VideoFrame& inputImage,
43 const CodecSpecificInfo* codecSpecificInfo,
44 const std::vector<FrameType>* 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 = kVideoFrameKey;
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
RegisterEncodeCompleteCallback(EncodedImageCallback * callback)61 int32_t ConfigurableFrameSizeEncoder::RegisterEncodeCompleteCallback(
62 EncodedImageCallback* callback) {
63 callback_ = callback;
64 return WEBRTC_VIDEO_CODEC_OK;
65 }
66
Release()67 int32_t ConfigurableFrameSizeEncoder::Release() {
68 return WEBRTC_VIDEO_CODEC_OK;
69 }
70
SetChannelParameters(uint32_t packet_loss,int64_t rtt)71 int32_t ConfigurableFrameSizeEncoder::SetChannelParameters(uint32_t packet_loss,
72 int64_t rtt) {
73 return WEBRTC_VIDEO_CODEC_OK;
74 }
75
SetRates(uint32_t new_bit_rate,uint32_t frame_rate)76 int32_t ConfigurableFrameSizeEncoder::SetRates(uint32_t new_bit_rate,
77 uint32_t frame_rate) {
78 return WEBRTC_VIDEO_CODEC_OK;
79 }
80
SetPeriodicKeyFrames(bool enable)81 int32_t ConfigurableFrameSizeEncoder::SetPeriodicKeyFrames(bool enable) {
82 return WEBRTC_VIDEO_CODEC_OK;
83 }
84
SetFrameSize(size_t size)85 int32_t ConfigurableFrameSizeEncoder::SetFrameSize(size_t size) {
86 assert(size <= max_frame_size_);
87 current_frame_size_ = size;
88 return WEBRTC_VIDEO_CODEC_OK;
89 }
90
91 } // namespace test
92 } // namespace webrtc
93