• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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