git-svn-id: http://webrtc.googlecode.com/svn/trunk@4 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
125
modules/audio_coding/main/test/Channel.h
Normal file
125
modules/audio_coding/main/test/Channel.h
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* 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
|
Reference in New Issue
Block a user