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#ifndef WEBRTC_TEST_CONFIGURABLE_FRAME_SIZE_ENCODER_H_
128b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org#define WEBRTC_TEST_CONFIGURABLE_FRAME_SIZE_ENCODER_H_
138b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
148b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org#include <vector>
158b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
1600b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org#include "webrtc/base/scoped_ptr.h"
17ab990ae43a2b84b103cb3c50bc38502375c13e68pbos@webrtc.org#include "webrtc/video_encoder.h"
188b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
198b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgnamespace webrtc {
208b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgnamespace test {
218b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
228b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.orgclass ConfigurableFrameSizeEncoder : public VideoEncoder {
238b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org public:
244591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org  explicit ConfigurableFrameSizeEncoder(size_t max_frame_size);
258b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  virtual ~ConfigurableFrameSizeEncoder();
268b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
2714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org  int32_t InitEncode(const VideoCodec* codec_settings,
2814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org                     int32_t number_of_cores,
2914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org                     size_t max_payload_size) override;
308b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
314765070b8d6f024509c717c04d9b708750666927Miguel Casas-Sanchez  int32_t Encode(const VideoFrame& input_image,
3214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org                 const CodecSpecificInfo* codec_specific_info,
3322993e1a0c114122fc1b9de0fc74d4096ec868bdpbos                 const std::vector<FrameType>* frame_types) override;
348b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
3514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org  int32_t RegisterEncodeCompleteCallback(
3614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org      EncodedImageCallback* callback) override;
378b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
3814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org  int32_t Release() override;
398b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
4014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org  int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) override;
418b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
4214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org  int32_t SetRates(uint32_t new_bit_rate, uint32_t frame_rate) override;
438b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
4414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org  int32_t SetPeriodicKeyFrames(bool enable) override;
458b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
464591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org  int32_t SetFrameSize(size_t size);
478b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
488b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org private:
498b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org  EncodedImageCallback* callback_;
504591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org  const size_t max_frame_size_;
514591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org  size_t current_frame_size_;
5200b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<uint8_t[]> buffer_;
538b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org};
548b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
558b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}  // namespace test
568b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org}  // namespace webrtc
578b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org
588b8819262f4ec2333656aa6eb0b76e7a893b683asprang@webrtc.org#endif  // WEBRTC_TEST_CONFIGURABLE_FRAME_SIZE_ENCODER_H_
59