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#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAWEWORK_TEST_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAWEWORK_TEST_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 143f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <stdlib.h> 153f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org 16a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include <fstream> 17a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include <string> 183f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org 19a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/modules/interface/module_common_types.h" 20a557f436b9d694d5a0a045e0295e1794f2df48eapbos@webrtc.org#include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h" 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CodecTest 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecTest(std::string name, std::string description); 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecTest(std::string name, std::string description, 2748c4b75e8d0d02294460e357ddb3a07ce295b964pbos@webrtc.org uint32_t bitRate); 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~CodecTest() {}; 29076aa8444d4b002fb083bc08f9dfa6e4ecaf2043mikhal@webrtc.org virtual void Setup(); 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void Perform()=0; 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void Print(); 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetEncoder(webrtc::VideoEncoder *encoder); 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetDecoder(webrtc::VideoDecoder *decoder); 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetLog(std::fstream* log); 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected: 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void CodecSettings(int width, 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int height, 3948c4b75e8d0d02294460e357ddb3a07ce295b964pbos@webrtc.org uint32_t frameRate=30, 4048c4b75e8d0d02294460e357ddb3a07ce295b964pbos@webrtc.org uint32_t bitRate=0); 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void Teardown(); 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org double ActualBitRate(int nFrames); 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool PacketLoss(double lossRate, int /*thrown*/); 44bcf0a1019f34cac346bd8349c2206f9d06adbe4epbos@webrtc.org static double RandUniform() { return (rand() + 1.0)/(RAND_MAX + 1.0); } 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static void VideoEncodedBufferToEncodedImage( 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoFrame& videoBuffer, 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::EncodedImage &image); 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoEncoder* _encoder; 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoDecoder* _decoder; 5148c4b75e8d0d02294460e357ddb3a07ce295b964pbos@webrtc.org uint32_t _bitRate; 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int _lengthSourceFrame; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned char* _sourceBuffer; 543bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org webrtc::I420VideoFrame _inputVideoBuffer; 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(mikhal): For now using VideoFrame for encodedBuffer, should use a 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // designated class. 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoFrame _encodedVideoBuffer; 583bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org webrtc::I420VideoFrame _decodedVideoBuffer; 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoCodec _inst; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::fstream* _log; 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string _inname; 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string _outname; 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string _encodedName; 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _sumEncBytes; 656bbb5554f3a5037af9bdf323fcfffad60579b267mikhal@webrtc.org int _width; 666bbb5554f3a5037af9bdf323fcfffad60579b267mikhal@webrtc.org int _halfWidth; 676bbb5554f3a5037af9bdf323fcfffad60579b267mikhal@webrtc.org int _height; 686bbb5554f3a5037af9bdf323fcfffad60579b267mikhal@webrtc.org int _halfHeight; 696bbb5554f3a5037af9bdf323fcfffad60579b267mikhal@webrtc.org int _sizeY; 706bbb5554f3a5037af9bdf323fcfffad60579b267mikhal@webrtc.org int _sizeUv; 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string _name; 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::string _description; 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_FRAWEWORK_TEST_H_ 78