Home | History | Annotate | Download | only in test
      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_AUDIO_CODING_MAIN_TEST_ENCODEDECODETEST_H_
     12 #define WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_ENCODEDECODETEST_H_
     13 
     14 #include <stdio.h>
     15 #include <string.h>
     16 
     17 #include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
     18 #include "webrtc/modules/audio_coding/main/test/ACMTest.h"
     19 #include "webrtc/modules/audio_coding/main/test/PCMFile.h"
     20 #include "webrtc/modules/audio_coding/main/test/RTPFile.h"
     21 #include "webrtc/typedefs.h"
     22 
     23 namespace webrtc {
     24 
     25 #define MAX_INCOMING_PAYLOAD 8096
     26 
     27 // TestPacketization callback which writes the encoded payloads to file
     28 class TestPacketization : public AudioPacketizationCallback {
     29  public:
     30   TestPacketization(RTPStream *rtpStream, uint16_t frequency);
     31   ~TestPacketization();
     32   virtual int32_t SendData(
     33       const FrameType frameType, const uint8_t payloadType,
     34       const uint32_t timeStamp, const uint8_t* payloadData,
     35       const uint16_t payloadSize,
     36       const RTPFragmentationHeader* fragmentation) OVERRIDE;
     37 
     38  private:
     39   static void MakeRTPheader(uint8_t* rtpHeader, uint8_t payloadType,
     40                             int16_t seqNo, uint32_t timeStamp, uint32_t ssrc);
     41   RTPStream* _rtpStream;
     42   int32_t _frequency;
     43   int16_t _seqNo;
     44 };
     45 
     46 class Sender {
     47  public:
     48   Sender();
     49   void Setup(AudioCodingModule *acm, RTPStream *rtpStream,
     50              std::string in_file_name, int sample_rate, int channels);
     51   void Teardown();
     52   void Run();
     53   bool Add10MsData();
     54 
     55   //for auto_test and logging
     56   uint8_t testMode;
     57   uint8_t codeId;
     58 
     59  protected:
     60   AudioCodingModule* _acm;
     61 
     62  private:
     63   PCMFile _pcmFile;
     64   AudioFrame _audioFrame;
     65   TestPacketization* _packetization;
     66 };
     67 
     68 class Receiver {
     69  public:
     70   Receiver();
     71   virtual ~Receiver() {};
     72   void Setup(AudioCodingModule *acm, RTPStream *rtpStream,
     73              std::string out_file_name, int channels);
     74   void Teardown();
     75   void Run();
     76   virtual bool IncomingPacket();
     77   bool PlayoutData();
     78 
     79   //for auto_test and logging
     80   uint8_t codeId;
     81   uint8_t testMode;
     82 
     83  private:
     84   PCMFile _pcmFile;
     85   int16_t* _playoutBuffer;
     86   uint16_t _playoutLengthSmpls;
     87   int32_t _frequency;
     88   bool _firstTime;
     89 
     90  protected:
     91   AudioCodingModule* _acm;
     92   uint8_t _incomingPayload[MAX_INCOMING_PAYLOAD];
     93   RTPStream* _rtpStream;
     94   WebRtcRTPHeader _rtpInfo;
     95   uint16_t _realPayloadSizeBytes;
     96   uint16_t _payloadSizeBytes;
     97   uint32_t _nextTime;
     98 };
     99 
    100 class EncodeDecodeTest : public ACMTest {
    101  public:
    102   EncodeDecodeTest();
    103   explicit EncodeDecodeTest(int testMode);
    104   virtual void Perform() OVERRIDE;
    105 
    106   uint16_t _playoutFreq;
    107   uint8_t _testMode;
    108 
    109  private:
    110   void EncodeToFile(int fileType, int codeId, int* codePars, int testMode);
    111 
    112  protected:
    113   Sender _sender;
    114   Receiver _receiver;
    115 };
    116 
    117 }  // namespace webrtc
    118 
    119 #endif  // WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_ENCODEDECODETEST_H_
    120