126 lines
3.2 KiB
C++
126 lines
3.2 KiB
C++
/*
|
|
* 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 CHANNEL_H
|
|
#define CHANNEL_H
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "audio_coding_module.h"
|
|
#include "critical_section_wrapper.h"
|
|
#include "rw_lock_wrapper.h"
|
|
|
|
|
|
#define MAX_NUM_PAYLOADS 50
|
|
#define MAX_NUM_FRAMESIZES 6
|
|
|
|
|
|
struct ACMTestFrameSizeStats
|
|
{
|
|
WebRtc_UWord16 frameSizeSample;
|
|
WebRtc_Word16 maxPayloadLen;
|
|
WebRtc_UWord32 numPackets;
|
|
WebRtc_UWord64 totalPayloadLenByte;
|
|
WebRtc_UWord64 totalEncodedSamples;
|
|
double rateBitPerSec;
|
|
double usageLenSec;
|
|
|
|
};
|
|
|
|
struct ACMTestPayloadStats
|
|
{
|
|
bool newPacket;
|
|
WebRtc_Word16 payloadType;
|
|
WebRtc_Word16 lastPayloadLenByte;
|
|
WebRtc_UWord32 lastTimestamp;
|
|
ACMTestFrameSizeStats frameSizeStats[MAX_NUM_FRAMESIZES];
|
|
};
|
|
|
|
using namespace webrtc;
|
|
|
|
class Channel: public AudioPacketizationCallback
|
|
{
|
|
public:
|
|
|
|
Channel(
|
|
WebRtc_Word16 chID = -1);
|
|
~Channel();
|
|
|
|
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);
|
|
|
|
void RegisterReceiverACM(
|
|
AudioCodingModule *acm);
|
|
|
|
void ResetStats();
|
|
|
|
WebRtc_Word16 Stats(
|
|
CodecInst& codecInst,
|
|
ACMTestPayloadStats& payloadStats);
|
|
|
|
void Stats(
|
|
WebRtc_UWord32* numPackets);
|
|
|
|
void Stats(
|
|
WebRtc_UWord8* payloadLenByte,
|
|
WebRtc_UWord32* payloadType);
|
|
|
|
void PrintStats(
|
|
CodecInst& codecInst);
|
|
|
|
void SetIsStereo(bool isStereo)
|
|
{
|
|
_isStereo = isStereo;
|
|
}
|
|
|
|
WebRtc_UWord32 LastInTimestamp();
|
|
|
|
void SetFECTestWithPacketLoss(bool usePacketLoss)
|
|
{
|
|
_useFECTestWithPacketLoss = usePacketLoss;
|
|
}
|
|
|
|
double BitRate();
|
|
|
|
private:
|
|
void CalcStatistics(
|
|
WebRtcRTPHeader& rtpInfo,
|
|
WebRtc_UWord16 payloadSize);
|
|
|
|
AudioCodingModule* _receiverACM;
|
|
WebRtc_UWord16 _seqNo;
|
|
// 60 msec * 32 sample (max) / msec * 2 description (maybe) * 2 bytes / sample
|
|
WebRtc_UWord8 _payloadData[60 * 32 * 2 * 2];
|
|
|
|
CriticalSectionWrapper* _channelCritSect;
|
|
FILE* _bitStreamFile;
|
|
bool _saveBitStream;
|
|
WebRtc_Word16 _lastPayloadType;
|
|
ACMTestPayloadStats _payloadStats[MAX_NUM_PAYLOADS];
|
|
bool _isStereo;
|
|
WebRtcRTPHeader _rtpInfo;
|
|
bool _leftChannel;
|
|
WebRtc_UWord32 _lastInTimestamp;
|
|
// FEC Test variables
|
|
WebRtc_Word16 _packetLoss;
|
|
bool _useFECTestWithPacketLoss;
|
|
WebRtc_Word16 _chID;
|
|
WebRtc_UWord64 _beginTime;
|
|
WebRtc_UWord64 _totalBytes;
|
|
};
|
|
|
|
|
|
#endif
|