1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This file contains the interface to I420 "codec"
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This is a dummy wrapper to allow VCM deal with raw I420 sequences
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_I420_CODEC_H_
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_I420_CODEC_H_
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass TbI420Encoder: public webrtc::VideoEncoder
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TbI420Encoder();
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual ~TbI420Encoder();
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org    virtual int32_t InitEncode(const webrtc::VideoCodec* codecSettings,
2867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org                               int32_t numberOfCores,
296b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org                               uint32_t maxPayloadSize) OVERRIDE;
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org    virtual int32_t Encode(
323bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org        const webrtc::I420VideoFrame& inputImage,
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const webrtc::CodecSpecificInfo* codecSpecificInfo,
346b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org        const std::vector<webrtc::VideoFrameType>* frameTypes) OVERRIDE;
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org    virtual int32_t RegisterEncodeCompleteCallback(
376b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org        webrtc::EncodedImageCallback* callback) OVERRIDE;
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
396b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org    virtual int32_t Release() OVERRIDE;
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
416b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org    virtual int32_t SetChannelParameters(uint32_t packetLoss, int rtt) OVERRIDE;
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
436b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org    virtual int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) OVERRIDE;
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
456b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org    virtual int32_t SetPeriodicKeyFrames(bool enable) OVERRIDE;
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
4767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org    virtual int32_t CodecConfigParameters(uint8_t* /*buffer*/,
486b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org                                          int32_t /*size*/) OVERRIDE;
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    struct FunctionCalls
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
5267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t InitEncode;
5367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t Encode;
5467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t RegisterEncodeCompleteCallback;
5567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t Release;
5667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t Reset;
5767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t SetChannelParameters;
5867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t SetRates;
5967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t SetPeriodicKeyFrames;
6067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t CodecConfigParameters;
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    };
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    FunctionCalls GetFunctionCalls();
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _inited;
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    webrtc::EncodedImage _encodedImage;
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    FunctionCalls _functionCalls;
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    webrtc::EncodedImageCallback* _encodedCompleteCallback;
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; // end of tbI420Encoder class
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/***************************/
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* tbI420Decoder class */
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/***************************/
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass TbI420Decoder: public webrtc::VideoDecoder
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TbI420Decoder();
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual ~TbI420Decoder();
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
8467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org    virtual int32_t InitDecode(const webrtc::VideoCodec* inst,
856b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org                               int32_t numberOfCores) OVERRIDE;
8667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org    virtual int32_t Decode(
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const webrtc::EncodedImage& inputImage,
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        bool missingFrames,
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const webrtc::RTPFragmentationHeader* fragmentation,
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const webrtc::CodecSpecificInfo* codecSpecificInfo = NULL,
916b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org        int64_t renderTimeMs = -1) OVERRIDE;
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
936b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org    virtual int32_t RegisterDecodeCompleteCallback(
946b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org        webrtc::DecodedImageCallback* callback) OVERRIDE;
956b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org    virtual int32_t Release() OVERRIDE;
966b0dab1b84bb8b6cccd9cffa15067099c1fcfa51henrik.lundin@webrtc.org    virtual int32_t Reset() OVERRIDE;
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    struct FunctionCalls
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
10067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t InitDecode;
10167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t Decode;
10267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t RegisterDecodeCompleteCallback;
10367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t Release;
10467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org        int32_t Reset;
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    };
106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    FunctionCalls GetFunctionCalls();
108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1113bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org    webrtc::I420VideoFrame _decodedImage;
11267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org    int32_t _width;
11367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org    int32_t _height;
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _inited;
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    FunctionCalls _functionCalls;
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    webrtc::DecodedImageCallback* _decodeCompleteCallback;
117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; // end of tbI420Decoder class
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_I420_CODEC_H_
121