1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/* 2d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Use of this source code is governed by a BSD-style license 5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * that can be found in the LICENSE file in the root of the source 6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * tree. An additional intellectual property rights grant can be found 7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * in the file PATENTS. All contributing project authors may 8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * be found in the AUTHORS file in the root of the source tree. 9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */ 10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 113e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#ifndef WEBRTC_MODULES_AUDIO_CODING_TEST_CHANNEL_H_ 123e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#define WEBRTC_MODULES_AUDIO_CODING_TEST_CHANNEL_H_ 13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 14470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <stdio.h> 15470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 163e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#include "webrtc/modules/audio_coding/include/audio_coding_module.h" 17ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/include/module_common_types.h" 18a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org#include "webrtc/typedefs.h" 19470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 20554ae1ad4ed3e6d1d9d807f15324d2f875888d23tina.legrand@webrtc.orgnamespace webrtc { 21470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 22a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.orgclass CriticalSectionWrapper; 23a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org 24470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define MAX_NUM_PAYLOADS 50 25470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define MAX_NUM_FRAMESIZES 6 26470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 27c2d69d3229329ebc74e9b559bb1154695246b47dturaj@webrtc.org// TODO(turajs): Write constructor for this structure. 28d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgstruct ACMTestFrameSizeStats { 29d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint16_t frameSizeSample; 304591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t maxPayloadLen; 31d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t numPackets; 32d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t totalPayloadLenByte; 33d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t totalEncodedSamples; 34d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double rateBitPerSec; 35d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double usageLenSec; 36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}; 37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 38c2d69d3229329ebc74e9b559bb1154695246b47dturaj@webrtc.org// TODO(turajs): Write constructor for this structure. 39d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgstruct ACMTestPayloadStats { 40d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool newPacket; 41d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int16_t payloadType; 424591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t lastPayloadLenByte; 43d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t lastTimestamp; 44d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMTestFrameSizeStats frameSizeStats[MAX_NUM_FRAMESIZES]; 45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}; 46470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 47d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgclass Channel : public AudioPacketizationCallback { 48d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org public: 49d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 50d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel(int16_t chID = -1); 51d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ~Channel(); 52d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 5314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SendData(FrameType frameType, 5414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint8_t payloadType, 5514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32_t timeStamp, 5614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const uint8_t* payloadData, 5714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org size_t payloadSize, 5814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const RTPFragmentationHeader* fragmentation) override; 59d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 60d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org void RegisterReceiverACM(AudioCodingModule *acm); 61d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 62d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org void ResetStats(); 63d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 64d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int16_t Stats(CodecInst& codecInst, ACMTestPayloadStats& payloadStats); 65d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 66d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org void Stats(uint32_t* numPackets); 67d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 68d324546ced76d4e792338af4f7d02a5cd8819f92pkasting@chromium.org void Stats(uint8_t* payloadType, uint32_t* payloadLenByte); 69d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 70d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org void PrintStats(CodecInst& codecInst); 71d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 72d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org void SetIsStereo(bool isStereo) { 73d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _isStereo = isStereo; 74d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 75d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 76d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t LastInTimestamp(); 77d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 78d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org void SetFECTestWithPacketLoss(bool usePacketLoss) { 79d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _useFECTestWithPacketLoss = usePacketLoss; 80d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 81d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 82d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double BitRate(); 83d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 84a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org void set_send_timestamp(uint32_t new_send_ts) { 85a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org external_send_timestamp_ = new_send_ts; 86a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org } 87a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org 88a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org void set_sequence_number(uint16_t new_sequence_number) { 89a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org external_sequence_number_ = new_sequence_number; 90a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org } 91a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org 92a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org void set_num_packets_to_drop(int new_num_packets_to_drop) { 93a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org num_packets_to_drop_ = new_num_packets_to_drop; 94a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org } 95a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org 96d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org private: 974591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org void CalcStatistics(WebRtcRTPHeader& rtpInfo, size_t payloadSize); 98d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 99d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* _receiverACM; 100d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint16_t _seqNo; 101d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // 60msec * 32 sample(max)/msec * 2 description (maybe) * 2 bytes/sample 102d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint8_t _payloadData[60 * 32 * 2 * 2]; 103d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 104d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CriticalSectionWrapper* _channelCritSect; 105d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org FILE* _bitStreamFile; 106d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool _saveBitStream; 107d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int16_t _lastPayloadType; 108d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMTestPayloadStats _payloadStats[MAX_NUM_PAYLOADS]; 109d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool _isStereo; 110d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WebRtcRTPHeader _rtpInfo; 111d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool _leftChannel; 112d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t _lastInTimestamp; 1130561716ae262461eaa3fe5291f4626c76822108aminyue@webrtc.org bool _useLastFrameSize; 1140561716ae262461eaa3fe5291f4626c76822108aminyue@webrtc.org uint32_t _lastFrameSizeSample; 115d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // FEC Test variables 116d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int16_t _packetLoss; 117d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool _useFECTestWithPacketLoss; 118d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t _beginTime; 119d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t _totalBytes; 120a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org 121a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org // External timing info, defaulted to -1. Only used if they are 122a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org // non-negative. 123a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org int64_t external_send_timestamp_; 124a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org int32_t external_sequence_number_; 125a305e9612afb9feac6bdbced512beb3a2557c3e2turaj@webrtc.org int num_packets_to_drop_; 126470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}; 127470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 128d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org} // namespace webrtc 129470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1303e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#endif // WEBRTC_MODULES_AUDIO_CODING_TEST_CHANNEL_H_ 131