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_TEST_CHANNEL_H_
     12 #define WEBRTC_MODULES_AUDIO_CODING_TEST_CHANNEL_H_
     13 
     14 #include <stdio.h>
     15 
     16 #include "webrtc/modules/audio_coding/include/audio_coding_module.h"
     17 #include "webrtc/modules/include/module_common_types.h"
     18 #include "webrtc/typedefs.h"
     19 
     20 namespace webrtc {
     21 
     22 class CriticalSectionWrapper;
     23 
     24 #define MAX_NUM_PAYLOADS   50
     25 #define MAX_NUM_FRAMESIZES  6
     26 
     27 // TODO(turajs): Write constructor for this structure.
     28 struct ACMTestFrameSizeStats {
     29   uint16_t frameSizeSample;
     30   size_t maxPayloadLen;
     31   uint32_t numPackets;
     32   uint64_t totalPayloadLenByte;
     33   uint64_t totalEncodedSamples;
     34   double rateBitPerSec;
     35   double usageLenSec;
     36 };
     37 
     38 // TODO(turajs): Write constructor for this structure.
     39 struct ACMTestPayloadStats {
     40   bool newPacket;
     41   int16_t payloadType;
     42   size_t lastPayloadLenByte;
     43   uint32_t lastTimestamp;
     44   ACMTestFrameSizeStats frameSizeStats[MAX_NUM_FRAMESIZES];
     45 };
     46 
     47 class Channel : public AudioPacketizationCallback {
     48  public:
     49 
     50   Channel(int16_t chID = -1);
     51   ~Channel();
     52 
     53   int32_t SendData(FrameType frameType,
     54                    uint8_t payloadType,
     55                    uint32_t timeStamp,
     56                    const uint8_t* payloadData,
     57                    size_t payloadSize,
     58                    const RTPFragmentationHeader* fragmentation) override;
     59 
     60   void RegisterReceiverACM(AudioCodingModule *acm);
     61 
     62   void ResetStats();
     63 
     64   int16_t Stats(CodecInst& codecInst, ACMTestPayloadStats& payloadStats);
     65 
     66   void Stats(uint32_t* numPackets);
     67 
     68   void Stats(uint8_t* payloadType, uint32_t* payloadLenByte);
     69 
     70   void PrintStats(CodecInst& codecInst);
     71 
     72   void SetIsStereo(bool isStereo) {
     73     _isStereo = isStereo;
     74   }
     75 
     76   uint32_t LastInTimestamp();
     77 
     78   void SetFECTestWithPacketLoss(bool usePacketLoss) {
     79     _useFECTestWithPacketLoss = usePacketLoss;
     80   }
     81 
     82   double BitRate();
     83 
     84   void set_send_timestamp(uint32_t new_send_ts) {
     85     external_send_timestamp_ = new_send_ts;
     86   }
     87 
     88   void set_sequence_number(uint16_t new_sequence_number) {
     89     external_sequence_number_ = new_sequence_number;
     90   }
     91 
     92   void set_num_packets_to_drop(int new_num_packets_to_drop) {
     93     num_packets_to_drop_ = new_num_packets_to_drop;
     94   }
     95 
     96  private:
     97   void CalcStatistics(WebRtcRTPHeader& rtpInfo, size_t payloadSize);
     98 
     99   AudioCodingModule* _receiverACM;
    100   uint16_t _seqNo;
    101   // 60msec * 32 sample(max)/msec * 2 description (maybe) * 2 bytes/sample
    102   uint8_t _payloadData[60 * 32 * 2 * 2];
    103 
    104   CriticalSectionWrapper* _channelCritSect;
    105   FILE* _bitStreamFile;
    106   bool _saveBitStream;
    107   int16_t _lastPayloadType;
    108   ACMTestPayloadStats _payloadStats[MAX_NUM_PAYLOADS];
    109   bool _isStereo;
    110   WebRtcRTPHeader _rtpInfo;
    111   bool _leftChannel;
    112   uint32_t _lastInTimestamp;
    113   bool _useLastFrameSize;
    114   uint32_t _lastFrameSizeSample;
    115   // FEC Test variables
    116   int16_t _packetLoss;
    117   bool _useFECTestWithPacketLoss;
    118   uint64_t _beginTime;
    119   uint64_t _totalBytes;
    120 
    121   // External timing info, defaulted to -1. Only used if they are
    122   // non-negative.
    123   int64_t external_send_timestamp_;
    124   int32_t external_sequence_number_;
    125   int num_packets_to_drop_;
    126 };
    127 
    128 }  // namespace webrtc
    129 
    130 #endif  // WEBRTC_MODULES_AUDIO_CODING_TEST_CHANNEL_H_
    131