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 #ifndef WEBRTC_MODULES_VIDEO_CODING_TEST_GENERIC_CODEC_TEST_H_ 12 #define WEBRTC_MODULES_VIDEO_CODING_TEST_GENERIC_CODEC_TEST_H_ 13 14 #include "webrtc/modules/video_coding/main/interface/video_coding.h" 15 16 #include <fstream> 17 #include <string.h> 18 19 #include "webrtc/modules/video_coding/main/test/test_callbacks.h" 20 #include "webrtc/modules/video_coding/main/test/test_util.h" 21 /* 22 Test consists of: 23 1. Sanity checks 24 2. Bit rate validation 25 3. Encoder control test / General API functionality 26 4. Decoder control test / General API functionality 27 28 */ 29 30 namespace webrtc { 31 32 int VCMGenericCodecTest(CmdArgs& args); 33 34 class SimulatedClock; 35 36 class GenericCodecTest 37 { 38 public: 39 GenericCodecTest(webrtc::VideoCodingModule* vcm, 40 webrtc::SimulatedClock* clock); 41 ~GenericCodecTest(); 42 static int RunTest(CmdArgs& args); 43 int32_t Perform(CmdArgs& args); 44 float WaitForEncodedFrame() const; 45 46 private: 47 void Setup(CmdArgs& args); 48 void Print(); 49 int32_t TearDown(); 50 void IncrementDebugClock(float frameRate); 51 52 webrtc::SimulatedClock* _clock; 53 webrtc::VideoCodingModule* _vcm; 54 webrtc::VideoCodec _sendCodec; 55 webrtc::VideoCodec _receiveCodec; 56 std::string _inname; 57 std::string _outname; 58 std::string _encodedName; 59 int32_t _sumEncBytes; 60 FILE* _sourceFile; 61 FILE* _decodedFile; 62 FILE* _encodedFile; 63 uint16_t _width; 64 uint16_t _height; 65 float _frameRate; 66 uint32_t _lengthSourceFrame; 67 uint32_t _timeStamp; 68 VCMDecodeCompleteCallback* _decodeCallback; 69 VCMEncodeCompleteCallback* _encodeCompleteCallback; 70 71 }; // end of GenericCodecTest class definition 72 73 class RTPSendCallback_SizeTest : public webrtc::Transport 74 { 75 public: 76 // constructor input: (receive side) rtp module to send encoded data to 77 RTPSendCallback_SizeTest() : _maxPayloadSize(0), _payloadSizeSum(0), _nPackets(0) {} 78 virtual int SendPacket(int channel, const void *data, int len); 79 virtual int SendRTCPPacket(int channel, const void *data, int len) {return 0;} 80 void SetMaxPayloadSize(uint32_t maxPayloadSize); 81 void Reset(); 82 float AveragePayloadSize() const; 83 private: 84 uint32_t _maxPayloadSize; 85 uint32_t _payloadSizeSum; 86 uint32_t _nPackets; 87 }; 88 89 class VCMEncComplete_KeyReqTest : public webrtc::VCMPacketizationCallback 90 { 91 public: 92 VCMEncComplete_KeyReqTest(webrtc::VideoCodingModule &vcm) : _vcm(vcm), _seqNo(0), _timeStamp(0) {} 93 int32_t SendData( 94 const webrtc::FrameType frameType, 95 const uint8_t payloadType, 96 uint32_t timeStamp, 97 int64_t capture_time_ms, 98 const uint8_t* payloadData, 99 const uint32_t payloadSize, 100 const webrtc::RTPFragmentationHeader& fragmentationHeader, 101 const webrtc::RTPVideoHeader* videoHdr); 102 private: 103 webrtc::VideoCodingModule& _vcm; 104 uint16_t _seqNo; 105 uint32_t _timeStamp; 106 }; // end of VCMEncodeCompleteCallback 107 108 } // namespace webrtc 109 110 #endif // WEBRTC_MODULES_VIDEO_CODING_TEST_GENERIC_CODEC_TEST_H_ 111