1/*
2 *  Copyright (c) 2012 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/*
12 * This file contains the interface to I420 "codec"
13 * This is a dummy wrapper to allow VCM deal with raw I420 sequences
14 */
15
16#ifndef WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_I420_CODEC_H_
17#define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_I420_CODEC_H_
18
19#include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
20
21class TbI420Encoder: public webrtc::VideoEncoder
22{
23public:
24    TbI420Encoder();
25    virtual ~TbI420Encoder();
26
27    virtual int32_t InitEncode(const webrtc::VideoCodec* codecSettings,
28                               int32_t numberOfCores,
29                               uint32_t maxPayloadSize) OVERRIDE;
30
31    virtual int32_t Encode(
32        const webrtc::I420VideoFrame& inputImage,
33        const webrtc::CodecSpecificInfo* codecSpecificInfo,
34        const std::vector<webrtc::VideoFrameType>* frameTypes) OVERRIDE;
35
36    virtual int32_t RegisterEncodeCompleteCallback(
37        webrtc::EncodedImageCallback* callback) OVERRIDE;
38
39    virtual int32_t Release() OVERRIDE;
40
41    virtual int32_t SetChannelParameters(uint32_t packetLoss, int rtt) OVERRIDE;
42
43    virtual int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) OVERRIDE;
44
45    virtual int32_t SetPeriodicKeyFrames(bool enable) OVERRIDE;
46
47    virtual int32_t CodecConfigParameters(uint8_t* /*buffer*/,
48                                          int32_t /*size*/) OVERRIDE;
49
50    struct FunctionCalls
51    {
52        int32_t InitEncode;
53        int32_t Encode;
54        int32_t RegisterEncodeCompleteCallback;
55        int32_t Release;
56        int32_t Reset;
57        int32_t SetChannelParameters;
58        int32_t SetRates;
59        int32_t SetPeriodicKeyFrames;
60        int32_t CodecConfigParameters;
61
62    };
63
64    FunctionCalls GetFunctionCalls();
65private:
66    bool _inited;
67    webrtc::EncodedImage _encodedImage;
68    FunctionCalls _functionCalls;
69    webrtc::EncodedImageCallback* _encodedCompleteCallback;
70
71}; // end of tbI420Encoder class
72
73
74/***************************/
75/* tbI420Decoder class */
76/***************************/
77
78class TbI420Decoder: public webrtc::VideoDecoder
79{
80public:
81    TbI420Decoder();
82    virtual ~TbI420Decoder();
83
84    virtual int32_t InitDecode(const webrtc::VideoCodec* inst,
85                               int32_t numberOfCores) OVERRIDE;
86    virtual int32_t Decode(
87        const webrtc::EncodedImage& inputImage,
88        bool missingFrames,
89        const webrtc::RTPFragmentationHeader* fragmentation,
90        const webrtc::CodecSpecificInfo* codecSpecificInfo = NULL,
91        int64_t renderTimeMs = -1) OVERRIDE;
92
93    virtual int32_t RegisterDecodeCompleteCallback(
94        webrtc::DecodedImageCallback* callback) OVERRIDE;
95    virtual int32_t Release() OVERRIDE;
96    virtual int32_t Reset() OVERRIDE;
97
98    struct FunctionCalls
99    {
100        int32_t InitDecode;
101        int32_t Decode;
102        int32_t RegisterDecodeCompleteCallback;
103        int32_t Release;
104        int32_t Reset;
105    };
106
107    FunctionCalls GetFunctionCalls();
108
109private:
110
111    webrtc::I420VideoFrame _decodedImage;
112    int32_t _width;
113    int32_t _height;
114    bool _inited;
115    FunctionCalls _functionCalls;
116    webrtc::DecodedImageCallback* _decodeCompleteCallback;
117
118}; // end of tbI420Decoder class
119
120#endif // WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_I420_CODEC_H_
121