/* * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_ENCODEDECODETEST_H_ #define WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_ENCODEDECODETEST_H_ #include #include "ACMTest.h" #include "audio_coding_module.h" #include "RTPFile.h" #include "PCMFile.h" #include "typedefs.h" namespace webrtc { #define MAX_INCOMING_PAYLOAD 8096 // TestPacketization callback which writes the encoded payloads to file class TestPacketization: public AudioPacketizationCallback { public: TestPacketization(RTPStream *rtpStream, WebRtc_UWord16 frequency); ~TestPacketization(); virtual WebRtc_Word32 SendData(const FrameType frameType, const WebRtc_UWord8 payloadType, const WebRtc_UWord32 timeStamp, const WebRtc_UWord8* payloadData, const WebRtc_UWord16 payloadSize, const RTPFragmentationHeader* fragmentation); private: static void MakeRTPheader(WebRtc_UWord8* rtpHeader, WebRtc_UWord8 payloadType, WebRtc_Word16 seqNo, WebRtc_UWord32 timeStamp, WebRtc_UWord32 ssrc); RTPStream* _rtpStream; WebRtc_Word32 _frequency; WebRtc_Word16 _seqNo; }; class Sender { public: Sender(); void Setup(AudioCodingModule *acm, RTPStream *rtpStream); void Teardown(); void Run(); bool Add10MsData(); bool Process(); //for auto_test and logging WebRtc_UWord8 testMode; WebRtc_UWord8 codeId; private: AudioCodingModule* _acm; PCMFile _pcmFile; AudioFrame _audioFrame; WebRtc_UWord16 _payloadSize; WebRtc_UWord32 _timeStamp; TestPacketization* _packetization; }; class Receiver { public: Receiver(); void Setup(AudioCodingModule *acm, RTPStream *rtpStream); void Teardown(); void Run(); bool IncomingPacket(); bool PlayoutData(); //for auto_test and logging WebRtc_UWord8 codeId; WebRtc_UWord8 testMode; private: AudioCodingModule* _acm; bool _rtpEOF; RTPStream* _rtpStream; PCMFile _pcmFile; WebRtc_Word16* _playoutBuffer; WebRtc_UWord16 _playoutLengthSmpls; WebRtc_Word8 _incomingPayload[MAX_INCOMING_PAYLOAD]; WebRtc_UWord16 _payloadSizeBytes; WebRtc_UWord16 _realPayloadSizeBytes; WebRtc_Word32 _frequency; bool _firstTime; WebRtcRTPHeader _rtpInfo; WebRtc_UWord32 _nextTime; }; class EncodeDecodeTest: public ACMTest { public: EncodeDecodeTest(); EncodeDecodeTest(int testMode); virtual void Perform(); WebRtc_UWord16 _playoutFreq; WebRtc_UWord8 _testMode; private: void EncodeToFile(int fileType, int codeId, int* codePars, int testMode); protected: Sender _sender; Receiver _receiver; }; } // namespace webrtc #endif