18b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org/*
28b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
38b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org *
48b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org *  Use of this source code is governed by a BSD-style license
58b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org *  that can be found in the LICENSE file in the root of the source
68b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org *  tree. An additional intellectual property rights grant can be found
78b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org *  in the file PATENTS.  All contributing project authors may
88b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
98b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org */
108b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
118b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org#include "webrtc/test/configurable_frame_size_encoder.h"
128b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
138b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org#include <string.h>
148b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
15307d3dbdeed71d42edf38d3828081b11a5a416fbhenrikg@webrtc.org#include "testing/gtest/include/gtest/gtest.h"
16b420191743fc135222c862deeaa4cf9dec249fe3pbos@webrtc.org
176f8ce060a21fcdc1c951fbf06768eb0cc0083b2fkjellander#include "webrtc/common_video/include/video_image.h"
182557b86e7648ffebc5781df9f093ca5a84efc219Henrik Kjellander#include "webrtc/modules/video_coding/include/video_codec_interface.h"
19ab990ae43a2b84b103cb3c50bc38502375c13e68pbos@webrtc.org
208b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgnamespace webrtc {
218b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgnamespace test {
228b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
238b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgConfigurableFrameSizeEncoder::ConfigurableFrameSizeEncoder(
244591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org    size_t max_frame_size)
258b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org    : callback_(NULL),
268b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org      max_frame_size_(max_frame_size),
278b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org      current_frame_size_(max_frame_size),
288b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org      buffer_(new uint8_t[max_frame_size]) {
298b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  memset(buffer_.get(), 0, max_frame_size);
308b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
318b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
328b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgConfigurableFrameSizeEncoder::~ConfigurableFrameSizeEncoder() {}
338b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
348b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgint32_t ConfigurableFrameSizeEncoder::InitEncode(
358b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org    const VideoCodec* codec_settings,
368b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org    int32_t number_of_cores,
374591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org    size_t max_payload_size) {
388b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  return WEBRTC_VIDEO_CODEC_OK;
398b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
408b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
418b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgint32_t ConfigurableFrameSizeEncoder::Encode(
424765070b8d6f024509c717c04d9b708750666927Miguel Casas-Sanchez    const VideoFrame& inputImage,
438b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org    const CodecSpecificInfo* codecSpecificInfo,
4422993e1a0c114122fc1b9de0fc74d4096ec868bdpbos    const std::vector<FrameType>* frame_types) {
458b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  EncodedImage encodedImage(
468b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org      buffer_.get(), current_frame_size_, max_frame_size_);
478b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  encodedImage._completeFrame = true;
488b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  encodedImage._encodedHeight = inputImage.height();
498b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  encodedImage._encodedWidth = inputImage.width();
5049e196af4060624d620297a6bc017699daa33550Peter Boström  encodedImage._frameType = kVideoFrameKey;
518b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  encodedImage._timeStamp = inputImage.timestamp();
528b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  encodedImage.capture_time_ms_ = inputImage.render_time_ms();
538b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  RTPFragmentationHeader* fragmentation = NULL;
54346094cb01ef2ffbf0398f465d61c9a4f77b465csprang@webrtc.org  CodecSpecificInfo specific;
55346094cb01ef2ffbf0398f465d61c9a4f77b465csprang@webrtc.org  memset(&specific, 0, sizeof(specific));
56346094cb01ef2ffbf0398f465d61c9a4f77b465csprang@webrtc.org  callback_->Encoded(encodedImage, &specific, fragmentation);
578b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
588b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  return WEBRTC_VIDEO_CODEC_OK;
598b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
608b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
618b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgint32_t ConfigurableFrameSizeEncoder::RegisterEncodeCompleteCallback(
628b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org    EncodedImageCallback* callback) {
638b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  callback_ = callback;
648b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  return WEBRTC_VIDEO_CODEC_OK;
658b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
668b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
678b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgint32_t ConfigurableFrameSizeEncoder::Release() {
688b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  return WEBRTC_VIDEO_CODEC_OK;
698b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
708b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
718b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgint32_t ConfigurableFrameSizeEncoder::SetChannelParameters(uint32_t packet_loss,
7216825b1a828bb4ff40f7682040e43a239b7b8ca3pkasting@chromium.org                                                           int64_t rtt) {
738b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  return WEBRTC_VIDEO_CODEC_OK;
748b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
758b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
768b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgint32_t ConfigurableFrameSizeEncoder::SetRates(uint32_t new_bit_rate,
778b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org                                               uint32_t frame_rate) {
788b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  return WEBRTC_VIDEO_CODEC_OK;
798b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
808b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
818b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgint32_t ConfigurableFrameSizeEncoder::SetPeriodicKeyFrames(bool enable) {
828b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  return WEBRTC_VIDEO_CODEC_OK;
838b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
848b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
854591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.orgint32_t ConfigurableFrameSizeEncoder::SetFrameSize(size_t size) {
868b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  assert(size <= max_frame_size_);
878b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  current_frame_size_ = size;
888b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  return WEBRTC_VIDEO_CODEC_OK;
898b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}
908b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
918b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}  // namespace test
928b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}  // namespace webrtc
93