1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/* 263a509858d3988299726640c664b699d6229a1d4andrew@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#include "webrtc/modules/audio_coding/test/APITest.h" 1273222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org 1312dc1a38ca54a000e4fecfbc6d41138b895c9ca5pbos@webrtc.org#include <ctype.h> 14543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <stdio.h> 15543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <stdlib.h> 16543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <string.h> 1773222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org 185e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org#include <iostream> 195e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org#include <ostream> 205e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org#include <string> 215e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org 2273222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 2312411ef40e08c5e28ccde54ab3418c96676ffcbcpbos#include "webrtc/base/platform_thread.h" 246ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org#include "webrtc/common.h" 2573222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/common_types.h" 2673222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/engine_configurations.h" 273e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#include "webrtc/modules/audio_coding/acm2/acm_common_defs.h" 283e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#include "webrtc/modules/audio_coding/test/utility.h" 2998f53510b222f71fdd8b799b2f33737ceeb28c61Henrik Kjellander#include "webrtc/system_wrappers/include/event_wrapper.h" 3098f53510b222f71fdd8b799b2f33737ceeb28c61Henrik Kjellander#include "webrtc/system_wrappers/include/tick_util.h" 3198f53510b222f71fdd8b799b2f33737ceeb28c61Henrik Kjellander#include "webrtc/system_wrappers/include/trace.h" 3273222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 34554ae1ad4ed3e6d1d9d807f15324d2f875888d23tina.legrand@webrtc.orgnamespace webrtc { 35554ae1ad4ed3e6d1d9d807f15324d2f875888d23tina.legrand@webrtc.org 36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TEST_DURATION_SEC 600 37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define NUMBER_OF_SENDER_TESTS 6 38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define MAX_FILE_NAME_LENGTH_BYTE 500 39d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 40d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::Wait(uint32_t waitLengthMs) { 41d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_randomTest) { 42d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return; 43d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 44d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* myEvent = EventWrapper::Create(); 45d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(waitLengthMs); 46d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myEvent; 47d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return; 48d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 49470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 516ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.orgAPITest::APITest(const Config& config) 52adaf80961280dfecd3fdcc23bd3fa0a312ce42dehenrik.lundin@webrtc.org : _acmA(AudioCodingModule::Create(1)), 53adaf80961280dfecd3fdcc23bd3fa0a312ce42dehenrik.lundin@webrtc.org _acmB(AudioCodingModule::Create(2)), 54d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_A2B(NULL), 55d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_B2A(NULL), 56d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _writeToFile(true), 57d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA(NULL), 58d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA(NULL), 59d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA(NULL), 60d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventA(NULL), 61d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB(NULL), 62d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB(NULL), 63d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB(NULL), 64d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventB(NULL), 65d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _codecCntrA(0), 66d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _codecCntrB(0), 67d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderA(false), 68d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderB(false), 69d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderA(false), 70d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderB(false), 71d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendVADA(false), 72d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendDTXA(false), 73d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendVADModeA(VADNormal), 74d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendVADB(false), 75d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendDTXB(false), 76d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendVADModeB(VADNormal), 77d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _minDelayA(0), 78d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _minDelayB(0), 79d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionA(0), 80d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionA(1), 81d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionB(39), 82d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionB(-1), 83d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA(NULL), 84d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB(NULL), 85d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiTestRWLock(*RWLockWrapper::CreateRWLock()), 86d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest(false), 87d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _testNumA(0), 88d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _testNumB(1) { 89d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int n; 90d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (n = 0; n < 32; n++) { 91d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _payloadUsed[n] = false; 92d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 93d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 94d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[40] = '\0'; 95d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 96d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (int n = 0; n < 40; n++) { 97d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[n] = ' '; 98d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 99470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 100470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 101d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgAPITest::~APITest() { 102d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_channel_A2B); 103d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_channel_B2A); 104470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 105d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pushEventA); 106d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pullEventA); 107d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_processEventA); 108d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_apiEventA); 109470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 110d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pushEventB); 111d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pullEventB); 112d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_processEventB); 113d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_apiEventB); 114470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 115d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Close(); 116d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Close(); 117470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 118d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Close(); 119d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Close(); 120470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 121d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_vadCallbackA); 122d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_vadCallbackB); 123470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 124d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete &_apiTestRWLock; 125470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 126470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 127d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgint16_t APITest::SetUp() { 128d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst dummyCodec; 129d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int lastPayloadType = 0; 130d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 131d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int16_t numCodecs = _acmA->NumberOfCodecs(); 132d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (uint8_t n = 0; n < numCodecs; n++) { 133d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n, &dummyCodec); 134d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((STR_CASE_CMP(dummyCodec.plname, "CN") == 0) 135d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org && (dummyCodec.plfreq == 32000)) { 136d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org continue; 137d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 138d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 139d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Register Receive Codec %s ", dummyCodec.plname); 140d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 141d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n != 0) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 142d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Check registration with an already occupied payload type 143d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int currentPayloadType = dummyCodec.pltype; 144d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = 97; //lastPayloadType; 145d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR(_acmB->RegisterReceiveCodec(dummyCodec)); 146d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = currentPayloadType; 147d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 148d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 149d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n < numCodecs - 1) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 150d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // test if re-registration works; 151d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst nextCodec; 152d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int currentPayloadType = dummyCodec.pltype; 153d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n + 1, &nextCodec); 154d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = nextCodec.pltype; 155d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!FixedPayloadTypeCodec(nextCodec.plname)) { 156d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterReceiveCodec(dummyCodec); 157d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 158d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = currentPayloadType; 159d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 160d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 161d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n < numCodecs - 1) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 162d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // test if un-registration works; 163d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst nextCodec; 164d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n + 1, &nextCodec); 165d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org nextCodec.pltype = dummyCodec.pltype; 166d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!FixedPayloadTypeCodec(nextCodec.plname)) { 167d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterReceiveCodec(nextCodec)); 168d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->UnregisterReceiveCodec(nextCodec.pltype)); 169d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 170d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 171d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 172d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterReceiveCodec(dummyCodec)); 173d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf(" side A done!"); 174d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterReceiveCodec(dummyCodec)); 175d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf(" side B done!\n"); 176d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 177d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!strcmp(dummyCodec.plname, "CN")) { 178d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterSendCodec(dummyCodec)); 179d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterSendCodec(dummyCodec)); 180d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 181d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org lastPayloadType = dummyCodec.pltype; 182d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((lastPayloadType >= 96) && (lastPayloadType <= 127)) { 183d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _payloadUsed[lastPayloadType - 96] = true; 184d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 185d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 186d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderA = true; 187d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderB = true; 188d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 189d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Register Send Codec 190d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec((uint8_t) _codecCntrA, &dummyCodec); 191d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterSendCodec(dummyCodec)); 192d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderA = true; 193d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // 194d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec((uint8_t) _codecCntrB, &dummyCodec); 195d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterSendCodec(dummyCodec)); 196d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderB = true; 197d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 198d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint16_t frequencyHz; 199d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 200d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\n\nAPI Test\n"); 201d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("========\n"); 202d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Hit enter to accept the default values indicated in []\n\n"); 203d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 204d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Input A 205d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string file_name = webrtc::test::ResourcePath( 206d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "audio_coding/testfile32kHz", "pcm"); 207d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org frequencyHz = 32000; 208d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter input file at side A [%s]: ", file_name.c_str()); 209d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&file_name, 499, &frequencyHz); 210d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Open(file_name, frequencyHz, "rb", true); 211d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 212d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Output A 213d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string out_file_a = webrtc::test::OutputPath() + "outA.pcm"; 214d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter output file at side A [%s]: ", out_file_a.c_str()); 215d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&out_file_a, 499, &frequencyHz); 216d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Open(out_file_a, frequencyHz, "wb"); 217d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 218d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Input B 219d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org file_name = webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm"); 220d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\n\nEnter input file at side B [%s]: ", file_name.c_str()); 221d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&file_name, 499, &frequencyHz); 222d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Open(file_name, frequencyHz, "rb", true); 223d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 224d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Output B 225d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string out_file_b = webrtc::test::OutputPath() + "outB.pcm"; 226d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter output file at side B [%s]: ", out_file_b.c_str()); 227d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&out_file_b, 499, &frequencyHz); 228d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Open(out_file_b, frequencyHz, "wb"); 229d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 230d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Set A-to-B channel 231d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_A2B = new Channel(2); 232d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterTransportCallback(_channel_A2B)); 2336ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org _channel_A2B->RegisterReceiverACM(_acmB.get()); 234d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 235d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Set B-to-A channel 236d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_B2A = new Channel(1); 237d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterTransportCallback(_channel_B2A)); 2386ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org _channel_B2A->RegisterReceiverACM(_acmA.get()); 239d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 240d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- EVENT TIMERS 241d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 24264c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _pullEventA = EventTimerWrapper::Create(); 24364c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _pushEventA = EventTimerWrapper::Create(); 24464c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _processEventA = EventTimerWrapper::Create(); 245d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventA = EventWrapper::Create(); 246d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 24764c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _pullEventB = EventTimerWrapper::Create(); 24864c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _pushEventB = EventTimerWrapper::Create(); 24964c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _processEventB = EventTimerWrapper::Create(); 250d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventB = EventWrapper::Create(); 251d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 252d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- I/O params 253d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 254d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFreqHzA = _outFileA.SamplingFrequency(); 255d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 256d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFreqHzB = _outFileB.SamplingFrequency(); 257d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 258d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //Trace::SetEncryptedTraceFile("ACMAPITestEncrypted.txt"); 259d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 260d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org char print[11]; 261d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 262d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Create a trace file. 263d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Trace::CreateTrace(); 264d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Trace::SetTraceFile( 265d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (webrtc::test::OutputPath() + "acm_api_trace.txt").c_str()); 266d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 267d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\nRandom Test (y/n)?"); 268d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EXPECT_TRUE(fgets(print, 10, stdin) != NULL); 269d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org print[10] = '\0'; 270d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (strstr(print, "y") != NULL) { 271d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest = true; 272d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _verbose = false; 273d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _writeToFile = false; 274d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 275d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest = false; 276d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\nPrint Tests (y/n)? "); 277543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org EXPECT_TRUE(fgets(print, 10, stdin) != NULL); 278470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com print[10] = '\0'; 279d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (strstr(print, "y") == NULL) { 280d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EXPECT_TRUE(freopen("APITest_log.txt", "w", stdout) != 0); 281d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _verbose = false; 282470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 283d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 284470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 285d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA = new VADCallback; 286d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB = new VADCallback; 287d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org 288d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return 0; 289470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 290470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 291d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioThreadA(void* obj) { 292d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PushAudioRunA(); 293470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 294470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 295d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioThreadB(void* obj) { 296d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PushAudioRunB(); 297470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 298470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 299d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioThreadA(void* obj) { 300d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PullAudioRunA(); 301470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 302470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 303d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioThreadB(void* obj) { 304d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PullAudioRunB(); 305470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 306470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 307d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessThreadA(void* obj) { 308d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->ProcessRunA(); 309470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 310470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 311d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessThreadB(void* obj) { 312d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->ProcessRunB(); 313470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 314470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 315d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIThreadA(void* obj) { 316d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->APIRunA(); 317470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 318470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 319d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIThreadB(void* obj) { 320d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->APIRunB(); 321470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 322470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 323d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioRunA() { 324d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA->Wait(100); 325d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 326d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmA->PlayoutData10Ms(_outFreqHzA, &audioFrame) < 0) { 327d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsDecoder; 328470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 329d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 330d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = _thereIsDecoderA; 331470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 332d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsDecoder) { 333d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>>>> cannot pull audio A <<<<<<<< \n"); 334d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 335d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 336d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_writeToFile) { 337d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Write10MsData(audioFrame); 338470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 339d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 340d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 341470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 342470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 343d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioRunB() { 344d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB->Wait(100); 345d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 346d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmB->PlayoutData10Ms(_outFreqHzB, &audioFrame) < 0) { 347d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsDecoder; 348470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 349d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 350d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = _thereIsDecoderB; 351470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 352d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsDecoder) { 353d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>>>> cannot pull audio B <<<<<<<< \n"); 354d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "%d %d\n", _testNumA, _testNumB); 355d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 356d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 357d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_writeToFile) { 358d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Write10MsData(audioFrame); 359d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org } 360d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 361d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 362470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 363470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 364d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioRunA() { 365d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA->Wait(100); 366d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 367d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Read10MsData(audioFrame); 368d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmA->Add10MsData(audioFrame) < 0) { 369d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsEncoder; 370470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 371d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 372d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = _thereIsEncoderA; 373d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 374d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsEncoder) { 375d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>> add10MsData at A failed <<<<\n"); 376470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 377d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 378d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 379470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 380470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 381d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioRunB() { 382d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB->Wait(100); 383d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 384d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Read10MsData(audioFrame); 385d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmB->Add10MsData(audioFrame) < 0) { 386d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsEncoder; 387470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 388d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 389d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = _thereIsEncoderB; 390d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 391470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 392d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsEncoder) { 393d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>> cannot add audio to B <<<<"); 394470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 395d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 396470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 397d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 398470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 399470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 400d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessRunA() { 401d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA->Wait(100); 402d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 403470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 404470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 405d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessRunB() { 406d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB->Wait(100); 407d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 408470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 409470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 410470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*/ 411470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 412470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * In side A we test the APIs which are related to sender Side. 413470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 414470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*/ 415470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 416d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::RunTest(char thread) { 417d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int testNum; 418d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 419d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped cs(_apiTestRWLock); 420d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thread == 'A') { 4211bd0e03ce56ed5384c3377b6da171951ec654706henrik.lundin _testNumA = (_testNumB + 1 + (rand() % 3)) % 4; 422d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org testNum = _testNumA; 423d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 424d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionA] = ' '; 425d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionA == 0) { 426d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionA = 1; 427d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 428d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionA == 19) { 429d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionA = -1; 430d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 431d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionA += _dotMoveDirectionA; 432d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionA] = (_dotMoveDirectionA > 0) ? '>' : '<'; 433d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 4341bd0e03ce56ed5384c3377b6da171951ec654706henrik.lundin _testNumB = (_testNumA + 1 + (rand() % 3)) % 4; 435d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org testNum = _testNumB; 436d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 437d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionB] = ' '; 438d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionB == 20) { 439d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionB = 1; 440d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 441d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionB == 39) { 442d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionB = -1; 443d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 444d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionB += _dotMoveDirectionB; 445d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionB] = (_dotMoveDirectionB > 0) ? '>' : '<'; 446d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 447d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fprintf(stderr, "%c: %d \n", thread, testNum); 448d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fflush(stderr); 449d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 450d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (testNum) { 451470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 0: 452d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CurrentCodec('A'); 453d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ChangeCodec('A'); 454d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 455470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 1: 456d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 457d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nTesting Delay ...\n"); 458d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 459d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestDelay('A'); 460d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 4611bd0e03ce56ed5384c3377b6da171951ec654706henrik.lundin case 2: 462d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestSendVAD('A'); 463d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 4641bd0e03ce56ed5384c3377b6da171951ec654706henrik.lundin case 3: 465d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestRegisteration('A'); 466d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 467470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com default: 468d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "Wrong Test Number\n"); 4694765ca55f9203df57966317379d686904483fb63marpan@webrtc.org getc(stdin); 470d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org exit(1); 471d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 472470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 473470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 474d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIRunA() { 475d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventA->Wait(50); 476d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 477d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool randomTest; 478d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 479d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 480d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org randomTest = _randomTest; 481d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 482d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (randomTest) { 483d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org RunTest('A'); 484d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 485d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CurrentCodec('A'); 486d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ChangeCodec('A'); 487d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_codecCntrA == 0) { 488d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nTesting Delay ...\n"); 489d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestDelay('A'); 490d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 491d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // VAD TEST 492d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestSendVAD('A'); 493d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestRegisteration('A'); 494d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 495d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 496470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 497470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 498d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIRunB() { 499d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventB->Wait(50); 500d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool randomTest; 501d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 502d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 503d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org randomTest = _randomTest; 504d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 505d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventB->Wait(2000); 506d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (randomTest) { 507d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org RunTest('B'); 508d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 509d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 510d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 511470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 512470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 513d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::Perform() { 514d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org SetUp(); 515d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 516d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- THREADS 517d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 518d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PUSH 5198c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström rtc::PlatformThread myPushAudioThreadA(PushAudioThreadA, this, 5208c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström "PushAudioThreadA"); 5218c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myPushAudioThreadA.Start(); 522d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PULL 5238c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström rtc::PlatformThread myPullAudioThreadA(PullAudioThreadA, this, 5248c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström "PullAudioThreadA"); 5258c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myPullAudioThreadA.Start(); 526d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Process 5278c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström rtc::PlatformThread myProcessThreadA(ProcessThreadA, this, "ProcessThreadA"); 5288c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myProcessThreadA.Start(); 529d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // API 5308c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström rtc::PlatformThread myAPIThreadA(APIThreadA, this, "APIThreadA"); 5318c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myAPIThreadA.Start(); 532d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 533d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PUSH 5348c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström rtc::PlatformThread myPushAudioThreadB(PushAudioThreadB, this, 5358c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström "PushAudioThreadB"); 5368c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myPushAudioThreadB.Start(); 537d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PULL 5388c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström rtc::PlatformThread myPullAudioThreadB(PullAudioThreadB, this, 5398c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström "PullAudioThreadB"); 5408c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myPullAudioThreadB.Start(); 541d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Process 5428c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström rtc::PlatformThread myProcessThreadB(ProcessThreadB, this, "ProcessThreadB"); 5438c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myProcessThreadB.Start(); 544d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // API 5458c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström rtc::PlatformThread myAPIThreadB(APIThreadB, this, "APIThreadB"); 5468c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myAPIThreadB.Start(); 547d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 548d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventA->StartTimer(true, 5000); 549d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventB->StartTimer(true, 5000); 550d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 551d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA->StartTimer(true, 10); 552d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB->StartTimer(true, 10); 553d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 554d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA->StartTimer(true, 10); 555d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB->StartTimer(true, 10); 556d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 557d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA->StartTimer(true, 10); 558d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB->StartTimer(true, 10); 559d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 560d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Keep main thread waiting for sender/receiver 561d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // threads to complete 562d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* completeEvent = EventWrapper::Create(); 563d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t startTime = TickTime::MillisecondTimestamp(); 564d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t currentTime; 565d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Run test in 2 minutes (120000 ms). 566d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org do { 567d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 568d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //ReadLockScoped rl(_apiTestRWLock); 569d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fprintf(stderr, "\r%s", _movingDot); 570d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 571d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fflush(stderr); 572d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org completeEvent->Wait(50); 573d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org currentTime = TickTime::MillisecondTimestamp(); 574d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } while ((currentTime - startTime) < 120000); 575d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 576d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //completeEvent->Wait(0xFFFFFFFF); 577d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //(unsigned long)((unsigned long)TEST_DURATION_SEC * (unsigned long)1000)); 578d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete completeEvent; 579d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 5808c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myPushAudioThreadA.Stop(); 5818c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myPullAudioThreadA.Stop(); 5828c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myProcessThreadA.Stop(); 5838c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myAPIThreadA.Stop(); 584d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 5858c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myPushAudioThreadB.Stop(); 5868c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myPullAudioThreadB.Stop(); 5878c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myProcessThreadB.Stop(); 5888c38e8b9b96d72317d6ce94c1442113b4e385dcbPeter Boström myAPIThreadB.Stop(); 589470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 590470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 591d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::CheckVADStatus(char side) { 592d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 593d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool dtxEnabled; 594d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool vadEnabled; 595d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode vadMode; 596d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 597d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 598d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->VAD(&dtxEnabled, &vadEnabled, &vadMode); 599d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterVADCallback(NULL); 600d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA->Reset(); 601d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterVADCallback(_vadCallbackA); 602d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 603d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 604d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 605d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d", dtxEnabled ? "ON" : "OFF", 606d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vadEnabled ? "ON" : "OFF", (int) vadMode); 607d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 608d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " => bit-rate %3.0f kbps\n", _channel_A2B->BitRate()); 609d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 610d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 611d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d => bit-rate %3.0f kbps\n", 612d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtxEnabled ? "ON" : "OFF", vadEnabled ? "ON" : "OFF", 613d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (int) vadMode, _channel_A2B->BitRate()); 614d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 615d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA->PrintFrameTypes(); 616d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 617d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 618d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (dtxEnabled != _sendDTXA) { 619d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling DTX <<<\n"); 620d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 621d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadEnabled != _sendVADA) && (!dtxEnabled)) { 622d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling VAD <<<\n"); 623d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 624d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadMode != _sendVADModeA) && vadEnabled) { 625d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error setting VAD-mode <<<\n"); 626d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 627d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 628d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->VAD(&dtxEnabled, &vadEnabled, &vadMode); 629d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 630d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterVADCallback(NULL); 631d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB->Reset(); 632d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterVADCallback(_vadCallbackB); 633d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 634d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 635d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 636d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d", dtxEnabled ? "ON" : "OFF", 637d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vadEnabled ? "ON" : "OFF", (int) vadMode); 638d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 639d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " => bit-rate %3.0f kbps\n", _channel_B2A->BitRate()); 640d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 641d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 642d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d => bit-rate %3.0f kbps\n", 643d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtxEnabled ? "ON" : "OFF", vadEnabled ? "ON" : "OFF", 644d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (int) vadMode, _channel_B2A->BitRate()); 645d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 646d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB->PrintFrameTypes(); 647d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 648d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 649d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (dtxEnabled != _sendDTXB) { 650d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling DTX <<<\n"); 651d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 652d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadEnabled != _sendVADB) && (!dtxEnabled)) { 653d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling VAD <<<\n"); 654d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 655d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadMode != _sendVADModeB) && vadEnabled) { 656d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error setting VAD-mode <<<\n"); 657d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 658d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 659470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 660470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 661470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Set Min delay, get delay, playout timestamp 662d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestDelay(char side) { 663d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 664d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 665d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int32_t* myMinDelay; 66664c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström EventTimerWrapper* myEvent = EventTimerWrapper::Create(); 667d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 668d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t inTimestamp = 0; 669d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t outTimestamp = 0; 670d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double estimDelay = 0; 671d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 672d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double averageEstimDelay = 0; 673d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double averageDelay = 0; 674d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 675d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CircularBuffer estimDelayCB(100); 676d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.SetArithMean(true); 677d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 678d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 6796ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmA.get(); 680d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 681d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myMinDelay = &_minDelayA; 682d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 6836ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmB.get(); 684d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 685d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myMinDelay = &_minDelayB; 686d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 687d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 688d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetMinimumPlayoutDelay(*myMinDelay)); 689d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 690d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org inTimestamp = myChannel->LastInTimestamp(); 691d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->PlayoutTimestamp(&outTimestamp)); 692d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 693d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 694d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->StartTimer(true, 30); 695d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int n = 0; 696d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int settlePoint = 5000; 697d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org while (n < settlePoint + 400) { 698d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(1000); 699d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 700d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org inTimestamp = myChannel->LastInTimestamp(); 701d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->PlayoutTimestamp(&outTimestamp)); 702d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 703d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout << outTimestamp << std::endl << std::flush; 704d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelay = (double) ((uint32_t)(inTimestamp - outTimestamp)) 705d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org / ((double) myACM->ReceiveFrequency() / 1000.0); 706d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 707d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.Update(estimDelay); 708d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 709d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.ArithMean(averageEstimDelay); 710d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //printf("\n %6.1f \n", estimDelay); 711d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout << " " << std::flush; 712d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 713d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 714d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 715d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "\rExpected: %4d, retreived: %6.1f, measured: %6.1f", 716d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *myMinDelay, averageDelay, averageEstimDelay); 717d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::cout << " " << std::flush; 718d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 719d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((averageDelay > *myMinDelay) && (n < settlePoint)) { 720d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org settlePoint = n; 721d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 722d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org n++; 723d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 724d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->StopTimer(); 725d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 726d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 727d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((!_verbose) && (!_randomTest)) { 728d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nExpected: %4d, retreived: %6.1f, measured: %6.1f", 729470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *myMinDelay, averageDelay, averageEstimDelay); 730d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 731d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 732d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *myMinDelay = (rand() % 1000) + 1; 733d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 734c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org NetworkStatistics networkStat; 735c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org CHECK_ERROR_MT(myACM->GetNetworkStatistics(&networkStat)); 736d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 737d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 738d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\nJitter Statistics at Side %c\n", side); 739d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "--------------------------------------\n"); 740d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "buffer-size............. %d\n", 741d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentBufferSize); 742d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Preferred buffer-size... %d\n", 743d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.preferredBufferSize); 744d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Peaky jitter mode........%d\n", 745d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.jitterPeaksFound); 746d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "packet-size rate........ %d\n", 747d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentPacketLossRate); 748d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "discard rate............ %d\n", 749d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentDiscardRate); 750d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "expand rate............. %d\n", 751d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentExpandRate); 752c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org fprintf(stdout, "speech expand rate...... %d\n", 753c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org networkStat.currentSpeechExpandRate); 754d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Preemptive rate......... %d\n", 755d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentPreemptiveRate); 756d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Accelerate rate......... %d\n", 757d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentAccelerateRate); 758c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org fprintf(stdout, "Secondary decoded rate.. %d\n", 759c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org networkStat.currentSecondaryDecodedRate); 760d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Clock-drift............. %d\n", networkStat.clockDriftPPM); 761d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Mean waiting time....... %d\n", 762d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.meanWaitingTimeMs); 763d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Median waiting time..... %d\n", 764d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.medianWaitingTimeMs); 765d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Min waiting time........ %d\n", 766d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.minWaitingTimeMs); 767d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Max waiting time........ %d\n", 768d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.maxWaitingTimeMs); 769d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 770d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 771d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetMinimumPlayoutDelay(*myMinDelay)); 772d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 773d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 774d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(500); 775d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 776d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 777d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 778d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myEvent; 779470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 780470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 781470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Unregister a codec & register again. 782d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestRegisteration(char sendSide) { 783d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* sendACM; 784d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* receiveACM; 785d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* thereIsDecoder; 786d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* myEvent = EventWrapper::Create(); 787d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 788d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 789d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 790d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 791d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 792d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Unregister/register Receive Codec\n"); 793d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 794d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 795d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 796d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 797d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (sendSide) { 798d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case 'A': { 7996ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org sendACM = _acmA.get(); 8006ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org receiveACM = _acmB.get(); 801d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = &_thereIsDecoderB; 802d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 803d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 804d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case 'B': { 8056ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org sendACM = _acmB.get(); 8066ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org receiveACM = _acmA.get(); 807d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = &_thereIsDecoderA; 808d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 809470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 810470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com default: 811d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "Invalid sender-side in TestRegistration(%c)\n", 812d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org sendSide); 813d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org exit(-1); 814d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 815d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 8161fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg auto myCodec = sendACM->SendCodec(); 8171fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg if (!myCodec) { 8181fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg CodecInst ci; 8191fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg AudioCodingModule::Codec(_codecCntrA, &ci); 820be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg myCodec = rtc::Optional<CodecInst>(ci); 821d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 822d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 823d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 824d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Unregistering reveive codec, NO AUDIO.\n"); 825d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 826d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 827d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 828d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 829d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = false; 830d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 831d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 8321fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec->pltype)); 833d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 834d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 8351fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg int currentPayload = myCodec->pltype; 836d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 8371fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg if (!FixedPayloadTypeCodec(myCodec->plname)) { 838d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int32_t i; 839d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (i = 0; i < 32; i++) { 840d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_payloadUsed[i]) { 841d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 842d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 843d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with new Payload, AUDIO BACK.\n"); 844470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 8451fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg //myCodec->pltype = i + 96; 8461fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg //CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(*myCodec)); 8471fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg //CHECK_ERROR_MT(sendACM->RegisterSendCodec(*myCodec)); 848d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 849d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //{ 850d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // WriteLockScoped wl(_apiTestRWLock); 851d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // *thereIsDecoder = true; 852d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //} 853d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 854d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 855d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 856d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Unregistering reveive codec, NO AUDIO.\n"); 857470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 858d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //{ 859d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // WriteLockScoped wl(_apiTestRWLock); 860d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // *thereIsDecoder = false; 861d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //} 862d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 8631fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg //CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec->pltype)); 864d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 865d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 8661fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg myCodec->pltype = currentPayload; 867d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 868d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 869d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with default Payload, AUDIO BACK.\n"); 870d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 871470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 8721fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(*myCodec)); 8731fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg //CHECK_ERROR_MT(sendACM->RegisterSendCodec(*myCodec)); 874470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com myEvent->Wait(20); 875470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 876d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 877d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 878470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 879d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 880d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 881d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 882d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 883470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 884d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (i == 32) { 8851fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(*myCodec)); 886d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 887d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 888d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 889d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 890d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 891d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 892d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 893d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 894d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with fixed Payload, AUDIO BACK.\n"); 895d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 896d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 8971fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(*myCodec)); 8981fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg //CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec->pltype)); 8991fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg //CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(*myCodec)); 900d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(20); 901d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 902d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 903d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 904d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 905d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 906d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myEvent; 907d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 908d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 909d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 910d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 911470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 912470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 913d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestSendVAD(char side) { 914d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_randomTest) { 915d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return; 916d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 917d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 918d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* vad; 919d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* dtx; 920d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode* mode; 921d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 922d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 923d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 924d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 925d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 926d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 927d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 928d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Test VAD API\n"); 929d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 930d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 931d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 932d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 933d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(_codecCntrA, &myCodec); 934d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADA; 935d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXA; 936d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeA; 937d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 9386ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmA.get(); 939d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 940d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(_codecCntrB, &myCodec); 941d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADB; 942d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXB; 943d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeB; 944d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 9456ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmB.get(); 946d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 947d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 948d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CheckVADStatus(side); 949d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 950d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 951d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 952d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 953d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (*mode) { 954d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADNormal: 955d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 956d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 957d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADAggr; 958d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 959d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADLowBitrate: 960d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 961d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 962d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADVeryAggr; 963d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 964d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADAggr: 965d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 966d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 967d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADLowBitrate; 968d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 969d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADVeryAggr: 970d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = false; 971d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 972d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADNormal; 973d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 974d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org default: 975d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADNormal; 976d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 977470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 978d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = (myCodec.plfreq == 32000) ? false : *dtx; 979470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 980d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetVAD(*dtx, *vad, *mode)); 981d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel->ResetStats(); 982d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org 983d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CheckVADStatus(side); 984d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 985d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 986d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 987d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 988470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 989d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Fault Test 990d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_PROTECTED_MT(myACM->SetVAD(false, true, (ACMVADMode) - 1)); 991d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_PROTECTED_MT(myACM->SetVAD(false, true, (ACMVADMode) 4)); 992470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 993470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 994470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 995d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::CurrentCodec(char side) { 9961fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg auto myCodec = (side == 'A' ? _acmA : _acmB)->SendCodec(); 997d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 998d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 999d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 1000d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Send codec in Side A\n"); 1001d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "----------------------------\n"); 10021fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg fprintf(stdout, "Name................. %s\n", myCodec->plname); 10031fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg fprintf(stdout, "Sampling Frequency... %d\n", myCodec->plfreq); 10041fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg fprintf(stdout, "Rate................. %d\n", myCodec->rate); 10051fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg fprintf(stdout, "Payload-type......... %d\n", myCodec->pltype); 10061fd4a4ab35f1fcb08b551befca180de9a1f55dfckwiberg fprintf(stdout, "Packet-size.......... %d\n", myCodec->pacsize); 1007d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1008d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1009d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(100); 1010470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1011470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1012d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::ChangeCodec(char side) { 1013d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 1014d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 1015d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint8_t* codecCntr; 1016d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* thereIsEncoder; 1017d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* vad; 1018d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* dtx; 1019d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode* mode; 1020d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 1021d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Reset and Wait 1022d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1023d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Reset Encoder Side A \n"); 1024d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1025d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 10266ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmA.get(); 1027d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org codecCntr = &_codecCntrA; 1028d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1029d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1030d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = &_thereIsEncoderA; 1031d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1032d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADA; 1033d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXA; 1034d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeA; 1035d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 1036d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 10376ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmB.get(); 1038d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org codecCntr = &_codecCntrB; 1039d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1040d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1041d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = &_thereIsEncoderB; 1042d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1043d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADB; 1044d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXB; 1045d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeB; 1046d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 1047d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1048d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1049d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(100); 1050d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1051d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Register the next codec 1052d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org do { 1053d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *codecCntr = 1054d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (*codecCntr < AudioCodingModule::NumberOfCodecs() - 1) ? 1055d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (*codecCntr + 1) : 0; 1056d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1057d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (*codecCntr == 0) { 1058d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //printf("Initialize Sender Side A \n"); 1059d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1060d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1061d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsEncoder = false; 1062d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1063d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // After Initialization CN is lost, re-register them 1064d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (AudioCodingModule::Codec("CN", &myCodec, 8000, 1) >= 0) { 1065d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1066d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1067d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (AudioCodingModule::Codec("CN", &myCodec, 16000, 1) >= 0) { 1068d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1069d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1070d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // VAD & DTX are disabled after initialization 1071d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = false; 1072d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 1073d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _writeToFile = false; 1074d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1075d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1076d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(*codecCntr, &myCodec); 1077d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } while (!STR_CASE_CMP(myCodec.plname, "CN") 1078d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org || !STR_CASE_CMP(myCodec.plname, "telephone-event") 1079d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org || !STR_CASE_CMP(myCodec.plname, "RED")); 1080d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1081d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1082d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout,"\n=====================================================\n"); 1083d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Registering New Codec %s, %d kHz, %d kbps\n", 1084470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com myCodec.plname, myCodec.plfreq / 1000, myCodec.rate / 1000); 1085d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1086d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout<< std::flush; 1087470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1088d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // NO DTX for supe-wideband codec at this point 1089d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (myCodec.plfreq == 32000) { 1090d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 1091d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetVAD(*dtx, *vad, *mode)); 1092470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1093d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1094470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1095d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1096d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel->ResetStats(); 1097d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1098d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1099d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsEncoder = true; 1100d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1101d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(500); 1102470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1103470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1104d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org} // namespace webrtc 1105