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