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
20namespace webrtc {
21namespace test {
22
23ConfigurableFrameSizeEncoder::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
32ConfigurableFrameSizeEncoder::~ConfigurableFrameSizeEncoder() {}
33
34int32_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
41int32_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
61int32_t ConfigurableFrameSizeEncoder::RegisterEncodeCompleteCallback(
62    EncodedImageCallback* callback) {
63  callback_ = callback;
64  return WEBRTC_VIDEO_CODEC_OK;
65}
66
67int32_t ConfigurableFrameSizeEncoder::Release() {
68  return WEBRTC_VIDEO_CODEC_OK;
69}
70
71int32_t ConfigurableFrameSizeEncoder::SetChannelParameters(uint32_t packet_loss,
72                                                           int rtt) {
73  return WEBRTC_VIDEO_CODEC_OK;
74}
75
76int32_t ConfigurableFrameSizeEncoder::SetRates(uint32_t new_bit_rate,
77                                               uint32_t frame_rate) {
78  return WEBRTC_VIDEO_CODEC_OK;
79}
80
81int32_t ConfigurableFrameSizeEncoder::SetPeriodicKeyFrames(bool enable) {
82  return WEBRTC_VIDEO_CODEC_OK;
83}
84
85int32_t ConfigurableFrameSizeEncoder::CodecConfigParameters(uint8_t* buffer,
86                                                            int32_t size) {
87  return WEBRTC_VIDEO_CODEC_OK;
88}
89
90int32_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