APITest.cc revision d5726a1286ce53c47ebd2d21d61b2772fc24aaed
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 1173222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/modules/audio_coding/main/test/APITest.h" 1273222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org 13543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <stdio.h> 14543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <stdlib.h> 15543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <string.h> 1673222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org 175e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org#include <cctype> 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" 2373222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/common_types.h" 2473222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/engine_configurations.h" 2573222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/modules/audio_coding/main/source/acm_common_defs.h" 2673222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/modules/audio_coding/main/test/utility.h" 2773222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/event_wrapper.h" 2873222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/thread_wrapper.h" 2973222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/tick_util.h" 3073222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 3173222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 33554ae1ad4ed3e6d1d9d807f15324d2f875888d23tina.legrand@webrtc.orgnamespace webrtc { 34554ae1ad4ed3e6d1d9d807f15324d2f875888d23tina.legrand@webrtc.org 35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TEST_DURATION_SEC 600 36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define NUMBER_OF_SENDER_TESTS 6 37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define MAX_FILE_NAME_LENGTH_BYTE 500 385490c71a1b1b2aa1758924b592e4359b3ec7d891kjellander@webrtc.org#define CHECK_THREAD_NULLITY(myThread, S) \ 39d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if(myThread != NULL) { \ 40d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org unsigned int i; \ 41d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (myThread)->Start(i); \ 42d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { \ 43d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ADD_FAILURE() << S; \ 44d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 45d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 46d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::Wait(uint32_t waitLengthMs) { 47d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_randomTest) { 48d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return; 49d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 50d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* myEvent = EventWrapper::Create(); 51d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(waitLengthMs); 52d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myEvent; 53d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return; 54d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 55470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 56470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 57d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgAPITest::APITest() 58d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org : _acmA(NULL), 59d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB(NULL), 60d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_A2B(NULL), 61d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_B2A(NULL), 62d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _writeToFile(true), 63d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA(NULL), 64d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA(NULL), 65d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA(NULL), 66d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventA(NULL), 67d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB(NULL), 68d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB(NULL), 69d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB(NULL), 70d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventB(NULL), 71d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _codecCntrA(0), 72d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _codecCntrB(0), 73d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderA(false), 74d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderB(false), 75d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderA(false), 76d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderB(false), 77d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendVADA(false), 78d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendDTXA(false), 79d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendVADModeA(VADNormal), 80d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendVADB(false), 81d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendDTXB(false), 82d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _sendVADModeB(VADNormal), 83d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _minDelayA(0), 84d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _minDelayB(0), 85d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionA(0), 86d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionA(1), 87d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionB(39), 88d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionB(-1), 89d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dtmfCallback(NULL), 90d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA(NULL), 91d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB(NULL), 92d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiTestRWLock(*RWLockWrapper::CreateRWLock()), 93d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest(false), 94d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _testNumA(0), 95d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _testNumB(1) { 96d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int n; 97d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (n = 0; n < 32; n++) { 98d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _payloadUsed[n] = false; 99d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 100d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 101d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (n = 0; n < 3; n++) { 102d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _receiveVADActivityA[n] = 0; 103d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _receiveVADActivityB[n] = 0; 104d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 105d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 106d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[40] = '\0'; 107d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 108d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (int n = 0; n < 40; n++) { 109d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[n] = ' '; 110d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 111470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 112470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 113d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgAPITest::~APITest() { 114d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DESTROY_ACM(_acmA); 115d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DESTROY_ACM(_acmB); 116470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 117d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_channel_A2B); 118d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_channel_B2A); 119470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 120d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pushEventA); 121d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pullEventA); 122d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_processEventA); 123d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_apiEventA); 124470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 125d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pushEventB); 126d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pullEventB); 127d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_processEventB); 128d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_apiEventB); 129470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 130d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Close(); 131d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Close(); 132470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 133d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Close(); 134d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Close(); 135470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 136d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_dtmfCallback); 137d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_vadCallbackA); 138d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_vadCallbackB); 139470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 140d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete &_apiTestRWLock; 141470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 142470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 143d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgint16_t APITest::SetUp() { 144d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA = AudioCodingModule::Create(1); 145d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB = AudioCodingModule::Create(2); 146d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 147d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst dummyCodec; 148d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int lastPayloadType = 0; 149d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 150d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int16_t numCodecs = _acmA->NumberOfCodecs(); 151d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (uint8_t n = 0; n < numCodecs; n++) { 152d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n, &dummyCodec); 153d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((STR_CASE_CMP(dummyCodec.plname, "CN") == 0) 154d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org && (dummyCodec.plfreq == 32000)) { 155d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org continue; 156d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 157d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 158d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Register Receive Codec %s ", dummyCodec.plname); 159d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 160d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n != 0) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 161d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Check registration with an already occupied payload type 162d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int currentPayloadType = dummyCodec.pltype; 163d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = 97; //lastPayloadType; 164d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR(_acmB->RegisterReceiveCodec(dummyCodec)); 165d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = currentPayloadType; 166d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 167d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 168d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n < numCodecs - 1) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 169d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // test if re-registration works; 170d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst nextCodec; 171d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int currentPayloadType = dummyCodec.pltype; 172d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n + 1, &nextCodec); 173d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = nextCodec.pltype; 174d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!FixedPayloadTypeCodec(nextCodec.plname)) { 175d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterReceiveCodec(dummyCodec); 176d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 177d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = currentPayloadType; 178d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 179d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 180d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n < numCodecs - 1) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 181d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // test if un-registration works; 182d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst nextCodec; 183d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n + 1, &nextCodec); 184d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org nextCodec.pltype = dummyCodec.pltype; 185d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!FixedPayloadTypeCodec(nextCodec.plname)) { 186d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterReceiveCodec(nextCodec)); 187d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->UnregisterReceiveCodec(nextCodec.pltype)); 188d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 189d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 190d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 191d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterReceiveCodec(dummyCodec)); 192d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf(" side A done!"); 193d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterReceiveCodec(dummyCodec)); 194d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf(" side B done!\n"); 195d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 196d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!strcmp(dummyCodec.plname, "CN")) { 197d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterSendCodec(dummyCodec)); 198d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterSendCodec(dummyCodec)); 199d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 200d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org lastPayloadType = dummyCodec.pltype; 201d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((lastPayloadType >= 96) && (lastPayloadType <= 127)) { 202d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _payloadUsed[lastPayloadType - 96] = true; 203d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 204d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 205d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderA = true; 206d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderB = true; 207d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 208d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Register Send Codec 209d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec((uint8_t) _codecCntrA, &dummyCodec); 210d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterSendCodec(dummyCodec)); 211d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderA = true; 212d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // 213d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec((uint8_t) _codecCntrB, &dummyCodec); 214d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterSendCodec(dummyCodec)); 215d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderB = true; 216d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 217d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint16_t frequencyHz; 218d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 219d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\n\nAPI Test\n"); 220d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("========\n"); 221d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Hit enter to accept the default values indicated in []\n\n"); 222d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 223d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Input A 224d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string file_name = webrtc::test::ResourcePath( 225d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "audio_coding/testfile32kHz", "pcm"); 226d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org frequencyHz = 32000; 227d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter input file at side A [%s]: ", file_name.c_str()); 228d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&file_name, 499, &frequencyHz); 229d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Open(file_name, frequencyHz, "rb", true); 230d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 231d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Output A 232d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string out_file_a = webrtc::test::OutputPath() + "outA.pcm"; 233d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter output file at side A [%s]: ", out_file_a.c_str()); 234d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&out_file_a, 499, &frequencyHz); 235d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Open(out_file_a, frequencyHz, "wb"); 236d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 237d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Input B 238d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org file_name = webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm"); 239d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\n\nEnter input file at side B [%s]: ", file_name.c_str()); 240d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&file_name, 499, &frequencyHz); 241d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Open(file_name, frequencyHz, "rb", true); 242d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 243d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Output B 244d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string out_file_b = webrtc::test::OutputPath() + "outB.pcm"; 245d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter output file at side B [%s]: ", out_file_b.c_str()); 246d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&out_file_b, 499, &frequencyHz); 247d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Open(out_file_b, frequencyHz, "wb"); 248d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 249d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Set A-to-B channel 250d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_A2B = new Channel(2); 251d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterTransportCallback(_channel_A2B)); 252d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_A2B->RegisterReceiverACM(_acmB); 253d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 254d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Set B-to-A channel 255d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_B2A = new Channel(1); 256d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterTransportCallback(_channel_B2A)); 257d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_B2A->RegisterReceiverACM(_acmA); 258d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 259d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- EVENT TIMERS 260d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 261d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA = EventWrapper::Create(); 262d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA = EventWrapper::Create(); 263d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA = EventWrapper::Create(); 264d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventA = EventWrapper::Create(); 265d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 266d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB = EventWrapper::Create(); 267d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB = EventWrapper::Create(); 268d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB = EventWrapper::Create(); 269d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventB = EventWrapper::Create(); 270d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 271d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- I/O params 272d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 273d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFreqHzA = _outFileA.SamplingFrequency(); 274d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 275d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFreqHzB = _outFileB.SamplingFrequency(); 276d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 277d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //Trace::SetEncryptedTraceFile("ACMAPITestEncrypted.txt"); 278d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 279d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org char print[11]; 280d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 281d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Create a trace file. 282d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Trace::CreateTrace(); 283d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Trace::SetTraceFile( 284d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (webrtc::test::OutputPath() + "acm_api_trace.txt").c_str()); 285d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 286d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\nRandom Test (y/n)?"); 287d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EXPECT_TRUE(fgets(print, 10, stdin) != NULL); 288d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org print[10] = '\0'; 289d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (strstr(print, "y") != NULL) { 290d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest = true; 291d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _verbose = false; 292d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _writeToFile = false; 293d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 294d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest = false; 295d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\nPrint Tests (y/n)? "); 296543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org EXPECT_TRUE(fgets(print, 10, stdin) != NULL); 297470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com print[10] = '\0'; 298d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (strstr(print, "y") == NULL) { 299d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EXPECT_TRUE(freopen("APITest_log.txt", "w", stdout) != 0); 300d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _verbose = false; 301470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 302d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 303470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 304470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef WEBRTC_DTMF_DETECTION 305d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dtmfCallback = new DTMFDetector; 306470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif 307d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA = new VADCallback; 308d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB = new VADCallback; 309d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org 310d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return 0; 311470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 312470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 313d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioThreadA(void* obj) { 314d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PushAudioRunA(); 315470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 316470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 317d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioThreadB(void* obj) { 318d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PushAudioRunB(); 319470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 320470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 321d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioThreadA(void* obj) { 322d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PullAudioRunA(); 323470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 324470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 325d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioThreadB(void* obj) { 326d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PullAudioRunB(); 327470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 328470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 329d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessThreadA(void* obj) { 330d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->ProcessRunA(); 331470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 332470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 333d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessThreadB(void* obj) { 334d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->ProcessRunB(); 335470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 336470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 337d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIThreadA(void* obj) { 338d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->APIRunA(); 339470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 340470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 341d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIThreadB(void* obj) { 342d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->APIRunB(); 343470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 344470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 345d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioRunA() { 346d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA->Wait(100); 347d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 348d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmA->PlayoutData10Ms(_outFreqHzA, &audioFrame) < 0) { 349d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsDecoder; 350470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 351d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 352d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = _thereIsDecoderA; 353470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 354d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsDecoder) { 355d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>>>> cannot pull audio A <<<<<<<< \n"); 356d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 357d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 358d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_writeToFile) { 359d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Write10MsData(audioFrame); 360470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 361d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _receiveVADActivityA[(int) audioFrame.vad_activity_]++; 362d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 363d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 364470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 365470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 366d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioRunB() { 367d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB->Wait(100); 368d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 369d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmB->PlayoutData10Ms(_outFreqHzB, &audioFrame) < 0) { 370d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsDecoder; 371470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 372d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 373d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = _thereIsDecoderB; 374470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 375d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsDecoder) { 376d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>>>> cannot pull audio B <<<<<<<< \n"); 377d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "%d %d\n", _testNumA, _testNumB); 378d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 379d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 380d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_writeToFile) { 381d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Write10MsData(audioFrame); 382d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org } 383d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _receiveVADActivityB[(int) audioFrame.vad_activity_]++; 384d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 385d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 386470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 387470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 388d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioRunA() { 389d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA->Wait(100); 390d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 391d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Read10MsData(audioFrame); 392d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmA->Add10MsData(audioFrame) < 0) { 393d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsEncoder; 394470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 395d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 396d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = _thereIsEncoderA; 397d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 398d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsEncoder) { 399d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>> add10MsData at A failed <<<<\n"); 400470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 401d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 402d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 403470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 404470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 405d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioRunB() { 406d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB->Wait(100); 407d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 408d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Read10MsData(audioFrame); 409d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmB->Add10MsData(audioFrame) < 0) { 410d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsEncoder; 411470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 412d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 413d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = _thereIsEncoderB; 414d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 415470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 416d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsEncoder) { 417d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>> cannot add audio to B <<<<"); 418470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 419d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 420470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 421d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 422470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 423470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 424d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessRunA() { 425d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA->Wait(100); 426d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmA->Process() < 0) { 427d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // do not print error message if there is no encoder 428d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsEncoder; 429470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 430d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 431d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = _thereIsEncoderA; 432d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 433470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 434d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsEncoder) { 435d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>>> Process Failed at A <<<<<\n"); 436470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 437d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 438d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 439470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 440470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 441d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessRunB() { 442d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB->Wait(100); 443d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmB->Process() < 0) { 444d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsEncoder; 445470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 446d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 447d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = _thereIsEncoderB; 448470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 449d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsEncoder) { 450d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>>> Process Failed at B <<<<<\n"); 451d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 452d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 453d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 454470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 455470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 456470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*/ 457470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 458470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * In side A we test the APIs which are related to sender Side. 459470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 460470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*/ 461470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 462d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::RunTest(char thread) { 463d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int testNum; 464d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 465d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped cs(_apiTestRWLock); 466d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thread == 'A') { 467d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _testNumA = (_testNumB + 1 + (rand() % 6)) % 7; 468d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org testNum = _testNumA; 469d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 470d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionA] = ' '; 471d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionA == 0) { 472d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionA = 1; 473d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 474d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionA == 19) { 475d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionA = -1; 476d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 477d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionA += _dotMoveDirectionA; 478d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionA] = (_dotMoveDirectionA > 0) ? '>' : '<'; 479d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 480d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _testNumB = (_testNumA + 1 + (rand() % 6)) % 7; 481d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org testNum = _testNumB; 482d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 483d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionB] = ' '; 484d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionB == 20) { 485d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionB = 1; 486d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 487d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionB == 39) { 488d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionB = -1; 489d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 490d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionB += _dotMoveDirectionB; 491d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionB] = (_dotMoveDirectionB > 0) ? '>' : '<'; 492d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 493d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fprintf(stderr, "%c: %d \n", thread, testNum); 494d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fflush(stderr); 495d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 496d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (testNum) { 497470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 0: 498d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CurrentCodec('A'); 499d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ChangeCodec('A'); 500d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 501470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 1: 502d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestPlayout('B'); 503d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 504470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 2: 505d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 506d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nTesting Delay ...\n"); 507d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 508d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestDelay('A'); 509d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 510470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 3: 511d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestSendVAD('A'); 512d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 513470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 4: 514d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestRegisteration('A'); 515d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 516470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 5: 517d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestReceiverVAD('A'); 518d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 519470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 6: 520470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef WEBRTC_DTMF_DETECTION 521d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org LookForDTMF('A'); 522470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif 523d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 524470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com default: 525d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "Wrong Test Number\n"); 526d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org getchar(); 527d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org exit(1); 528d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 529470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 530470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 531d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIRunA() { 532d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventA->Wait(50); 533d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 534d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool randomTest; 535d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 536d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 537d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org randomTest = _randomTest; 538d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 539d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (randomTest) { 540d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org RunTest('A'); 541d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 542d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CurrentCodec('A'); 543d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ChangeCodec('A'); 544d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestPlayout('B'); 545d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_codecCntrA == 0) { 546d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nTesting Delay ...\n"); 547d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestDelay('A'); 548d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 549d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // VAD TEST 550d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestSendVAD('A'); 551d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestRegisteration('A'); 552d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestReceiverVAD('A'); 553470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef WEBRTC_DTMF_DETECTION 554d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org LookForDTMF('A'); 555470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif 556d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 557d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 558470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 559470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 560d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIRunB() { 561d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventB->Wait(50); 562d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool randomTest; 563d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 564d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 565d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org randomTest = _randomTest; 566d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 567d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventB->Wait(2000); 568d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (randomTest) { 569d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org RunTest('B'); 570d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 571d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 572d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 573470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 574470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 575d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::Perform() { 576d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org SetUp(); 577d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 578d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- THREADS 579d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 580d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PUSH 581d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ThreadWrapper* myPushAudioThreadA = ThreadWrapper::CreateThread( 582d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PushAudioThreadA, this, kNormalPriority, "PushAudioThreadA"); 583d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myPushAudioThreadA, "Unable to start A::PUSH thread"); 584d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PULL 585d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ThreadWrapper* myPullAudioThreadA = ThreadWrapper::CreateThread( 586d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PullAudioThreadA, this, kNormalPriority, "PullAudioThreadA"); 587d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myPullAudioThreadA, "Unable to start A::PULL thread"); 588d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Process 589d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ThreadWrapper* myProcessThreadA = ThreadWrapper::CreateThread( 590d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ProcessThreadA, this, kNormalPriority, "ProcessThreadA"); 591d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myProcessThreadA, "Unable to start A::Process thread"); 592d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // API 593d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ThreadWrapper* myAPIThreadA = ThreadWrapper::CreateThread(APIThreadA, this, 594d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org kNormalPriority, 595d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "APIThreadA"); 596d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myAPIThreadA, "Unable to start A::API thread"); 597d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 598d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PUSH 599d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ThreadWrapper* myPushAudioThreadB = ThreadWrapper::CreateThread( 600d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PushAudioThreadB, this, kNormalPriority, "PushAudioThreadB"); 601d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myPushAudioThreadB, "Unable to start B::PUSH thread"); 602d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PULL 603d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ThreadWrapper* myPullAudioThreadB = ThreadWrapper::CreateThread( 604d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PullAudioThreadB, this, kNormalPriority, "PullAudioThreadB"); 605d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myPullAudioThreadB, "Unable to start B::PULL thread"); 606d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Process 607d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ThreadWrapper* myProcessThreadB = ThreadWrapper::CreateThread( 608d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ProcessThreadB, this, kNormalPriority, "ProcessThreadB"); 609d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myProcessThreadB, "Unable to start B::Process thread"); 610d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // API 611d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ThreadWrapper* myAPIThreadB = ThreadWrapper::CreateThread(APIThreadB, this, 612d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org kNormalPriority, 613d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "APIThreadB"); 614d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myAPIThreadB, "Unable to start B::API thread"); 615d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 616d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventA->StartTimer(true, 5000); 617d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventB->StartTimer(true, 5000); 618d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 619d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA->StartTimer(true, 10); 620d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB->StartTimer(true, 10); 621d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 622d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA->StartTimer(true, 10); 623d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB->StartTimer(true, 10); 624d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 625d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA->StartTimer(true, 10); 626d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB->StartTimer(true, 10); 627d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 628d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Keep main thread waiting for sender/receiver 629d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // threads to complete 630d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* completeEvent = EventWrapper::Create(); 631d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t startTime = TickTime::MillisecondTimestamp(); 632d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t currentTime; 633d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Run test in 2 minutes (120000 ms). 634d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org do { 635d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 636d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //ReadLockScoped rl(_apiTestRWLock); 637d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fprintf(stderr, "\r%s", _movingDot); 638d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 639d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fflush(stderr); 640d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org completeEvent->Wait(50); 641d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org currentTime = TickTime::MillisecondTimestamp(); 642d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } while ((currentTime - startTime) < 120000); 643d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 644d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //completeEvent->Wait(0xFFFFFFFF); 645d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //(unsigned long)((unsigned long)TEST_DURATION_SEC * (unsigned long)1000)); 646d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete completeEvent; 647d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 648d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myPushAudioThreadA->Stop(); 649d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myPullAudioThreadA->Stop(); 650d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myProcessThreadA->Stop(); 651d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myAPIThreadA->Stop(); 652d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 653d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myPushAudioThreadA; 654d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myPullAudioThreadA; 655d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myProcessThreadA; 656d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myAPIThreadA; 657d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 658d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myPushAudioThreadB->Stop(); 659d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myPullAudioThreadB->Stop(); 660d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myProcessThreadB->Stop(); 661d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myAPIThreadB->Stop(); 662d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 663d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myPushAudioThreadB; 664d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myPullAudioThreadB; 665d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myProcessThreadB; 666d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myAPIThreadB; 667470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 668470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 669d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::CheckVADStatus(char side) { 670d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 671d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool dtxEnabled; 672d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool vadEnabled; 673d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode vadMode; 674d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 675d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 676d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->VAD(&dtxEnabled, &vadEnabled, &vadMode); 677d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterVADCallback(NULL); 678d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA->Reset(); 679d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterVADCallback(_vadCallbackA); 680d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 681d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 682d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 683d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d", dtxEnabled ? "ON" : "OFF", 684d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vadEnabled ? "ON" : "OFF", (int) vadMode); 685d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 686d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " => bit-rate %3.0f kbps\n", _channel_A2B->BitRate()); 687d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 688d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 689d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d => bit-rate %3.0f kbps\n", 690d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtxEnabled ? "ON" : "OFF", vadEnabled ? "ON" : "OFF", 691d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (int) vadMode, _channel_A2B->BitRate()); 692d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 693d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA->PrintFrameTypes(); 694d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 695d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 696d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (dtxEnabled != _sendDTXA) { 697d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling DTX <<<\n"); 698d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 699d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadEnabled != _sendVADA) && (!dtxEnabled)) { 700d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling VAD <<<\n"); 701d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 702d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadMode != _sendVADModeA) && vadEnabled) { 703d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error setting VAD-mode <<<\n"); 704d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 705d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 706d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->VAD(&dtxEnabled, &vadEnabled, &vadMode); 707d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 708d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterVADCallback(NULL); 709d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB->Reset(); 710d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterVADCallback(_vadCallbackB); 711d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 712d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 713d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 714d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d", dtxEnabled ? "ON" : "OFF", 715d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vadEnabled ? "ON" : "OFF", (int) vadMode); 716d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 717d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " => bit-rate %3.0f kbps\n", _channel_B2A->BitRate()); 718d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 719d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 720d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d => bit-rate %3.0f kbps\n", 721d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtxEnabled ? "ON" : "OFF", vadEnabled ? "ON" : "OFF", 722d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (int) vadMode, _channel_B2A->BitRate()); 723d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 724d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB->PrintFrameTypes(); 725d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 726d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 727d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (dtxEnabled != _sendDTXB) { 728d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling DTX <<<\n"); 729d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 730d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadEnabled != _sendVADB) && (!dtxEnabled)) { 731d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling VAD <<<\n"); 732d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 733d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadMode != _sendVADModeB) && vadEnabled) { 734d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error setting VAD-mode <<<\n"); 735d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 736d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 737470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 738470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 739470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Set Min delay, get delay, playout timestamp 740d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestDelay(char side) { 741d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 742d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 743d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int32_t* myMinDelay; 744d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* myEvent = EventWrapper::Create(); 745d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 746d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t inTimestamp = 0; 747d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t outTimestamp = 0; 748d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double estimDelay = 0; 749d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 750d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double averageEstimDelay = 0; 751d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double averageDelay = 0; 752d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 753d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CircularBuffer estimDelayCB(100); 754d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.SetArithMean(true); 755d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 756d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 757d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM = _acmA; 758d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 759d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myMinDelay = &_minDelayA; 760d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 761d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM = _acmB; 762d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 763d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myMinDelay = &_minDelayB; 764d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 765d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 766d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetMinimumPlayoutDelay(*myMinDelay)); 767d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 768d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org inTimestamp = myChannel->LastInTimestamp(); 769d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->PlayoutTimestamp(&outTimestamp)); 770d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 771d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 772d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->StartTimer(true, 30); 773d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int n = 0; 774d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int settlePoint = 5000; 775d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org while (n < settlePoint + 400) { 776d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(1000); 777d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 778d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org inTimestamp = myChannel->LastInTimestamp(); 779d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->PlayoutTimestamp(&outTimestamp)); 780d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 781d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout << outTimestamp << std::endl << std::flush; 782d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelay = (double) ((uint32_t)(inTimestamp - outTimestamp)) 783d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org / ((double) myACM->ReceiveFrequency() / 1000.0); 784d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 785d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.Update(estimDelay); 786d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 787d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.ArithMean(averageEstimDelay); 788d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //printf("\n %6.1f \n", estimDelay); 789d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout << " " << std::flush; 790d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 791d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 792d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 793d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "\rExpected: %4d, retreived: %6.1f, measured: %6.1f", 794d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *myMinDelay, averageDelay, averageEstimDelay); 795d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::cout << " " << std::flush; 796d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 797d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((averageDelay > *myMinDelay) && (n < settlePoint)) { 798d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org settlePoint = n; 799d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 800d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org n++; 801d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 802d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->StopTimer(); 803d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 804d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 805d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((!_verbose) && (!_randomTest)) { 806d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nExpected: %4d, retreived: %6.1f, measured: %6.1f", 807470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *myMinDelay, averageDelay, averageEstimDelay); 808d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 809d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 810d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *myMinDelay = (rand() % 1000) + 1; 811d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 812d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMNetworkStatistics networkStat; 813d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->NetworkStatistics(&networkStat)); 814d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 815d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 816d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\nJitter Statistics at Side %c\n", side); 817d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "--------------------------------------\n"); 818d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "buffer-size............. %d\n", 819d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentBufferSize); 820d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Preferred buffer-size... %d\n", 821d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.preferredBufferSize); 822d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Peaky jitter mode........%d\n", 823d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.jitterPeaksFound); 824d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "packet-size rate........ %d\n", 825d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentPacketLossRate); 826d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "discard rate............ %d\n", 827d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentDiscardRate); 828d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "expand rate............. %d\n", 829d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentExpandRate); 830d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Preemptive rate......... %d\n", 831d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentPreemptiveRate); 832d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Accelerate rate......... %d\n", 833d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentAccelerateRate); 834d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Clock-drift............. %d\n", networkStat.clockDriftPPM); 835d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Mean waiting time....... %d\n", 836d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.meanWaitingTimeMs); 837d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Median waiting time..... %d\n", 838d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.medianWaitingTimeMs); 839d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Min waiting time........ %d\n", 840d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.minWaitingTimeMs); 841d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Max waiting time........ %d\n", 842d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.maxWaitingTimeMs); 843d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 844d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 845d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetMinimumPlayoutDelay(*myMinDelay)); 846d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 847d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 848d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(500); 849d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 850d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 851d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 852d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myEvent; 853470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 854470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 855470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Unregister a codec & register again. 856d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestRegisteration(char sendSide) { 857d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* sendACM; 858d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* receiveACM; 859d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* thereIsDecoder; 860d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* myEvent = EventWrapper::Create(); 861d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 862d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 863d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 864d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 865d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 866d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Unregister/register Receive Codec\n"); 867d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 868d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 869d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 870d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 871d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (sendSide) { 872d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case 'A': { 873d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org sendACM = _acmA; 874d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org receiveACM = _acmB; 875d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = &_thereIsDecoderB; 876d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 877d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 878d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case 'B': { 879d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org sendACM = _acmB; 880d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org receiveACM = _acmA; 881d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = &_thereIsDecoderA; 882d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 883470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 884470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com default: 885d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "Invalid sender-side in TestRegistration(%c)\n", 886d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org sendSide); 887d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org exit(-1); 888d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 889d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 890d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 891d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (sendACM->SendCodec(&myCodec) < 0) { 892d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(_codecCntrA, &myCodec); 893d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 894d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 895d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 896d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Unregistering reveive codec, NO AUDIO.\n"); 897d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 898d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 899d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 900d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 901d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = false; 902d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 903d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 904d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec.pltype)); 905d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 906d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 907d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int currentPayload = myCodec.pltype; 908d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 909d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!FixedPayloadTypeCodec(myCodec.plname)) { 910d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int32_t i; 911d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (i = 0; i < 32; i++) { 912d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_payloadUsed[i]) { 913d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 914d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 915d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with new Payload, AUDIO BACK.\n"); 916470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 917d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myCodec.pltype = i + 96; 918d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 919d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(sendACM->RegisterSendCodec(myCodec)); 920d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 921d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //{ 922d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // WriteLockScoped wl(_apiTestRWLock); 923d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // *thereIsDecoder = true; 924d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //} 925d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 926d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 927d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 928d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Unregistering reveive codec, NO AUDIO.\n"); 929470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 930d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //{ 931d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // WriteLockScoped wl(_apiTestRWLock); 932d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // *thereIsDecoder = false; 933d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //} 934d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 935d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec.pltype)); 936d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 937d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 938d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myCodec.pltype = currentPayload; 939d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 940d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 941d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with default Payload, AUDIO BACK.\n"); 942d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 943470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 944470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 945d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(sendACM->RegisterSendCodec(myCodec)); 946470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com myEvent->Wait(20); 947470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 948d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 949d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 950470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 951d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 952d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 953d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 954d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 955470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 956d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (i == 32) { 957d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 958d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 959d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 960d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 961d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 962d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 963d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 964d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 965d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 966d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with fixed Payload, AUDIO BACK.\n"); 967d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 968d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 969d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 970d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec.pltype)); 971d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 972d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(20); 973d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 974d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 975d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 976d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 977d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 978d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myEvent; 979d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 980d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 981d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 982d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 983470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 984470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 985470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Playout Mode, background noise mode. 986470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Receiver Frequency, playout frequency. 987d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestPlayout(char receiveSide) { 988d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* receiveACM; 989d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioPlayoutMode* playoutMode = NULL; 990d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMBackgroundNoiseMode* bgnMode = NULL; 991d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (receiveSide) { 992d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case 'A': { 993d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org receiveACM = _acmA; 994d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org playoutMode = &_playoutModeA; 995d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bgnMode = &_bgnModeA; 996d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 997d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 998d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case 'B': { 999d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org receiveACM = _acmB; 1000d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org playoutMode = &_playoutModeB; 1001d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bgnMode = &_bgnModeB; 1002d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1003470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 1004470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com default: 1005d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org receiveACM = _acmA; 1006d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1007470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1008d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int32_t receiveFreqHz = receiveACM->ReceiveFrequency(); 1009d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int32_t playoutFreqHz = receiveACM->PlayoutFrequency(); 1010470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1011d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveFreqHz); 1012d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(playoutFreqHz); 1013470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1014d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org char bgnString[25]; 1015d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (*bgnMode) { 1016d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case On: { 1017d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *bgnMode = Fade; 1018d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org strncpy(bgnString, "Fade", 25); 1019d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1020470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 1021d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case Fade: { 1022d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *bgnMode = Off; 1023d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org strncpy(bgnString, "OFF", 25); 1024d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1025470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 1026d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case Off: { 1027d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *bgnMode = On; 1028d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org strncpy(bgnString, "ON", 25); 1029d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1030470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 1031d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org default: 1032d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *bgnMode = On; 1033d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org strncpy(bgnString, "ON", 25); 1034d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1035d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveACM->SetBackgroundNoiseMode(*bgnMode)); 1036d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bgnString[24] = '\0'; 1037d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1038d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org char playoutString[25]; 1039d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (*playoutMode) { 1040d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case voice: { 1041d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *playoutMode = fax; 1042d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org strncpy(playoutString, "FAX", 25); 1043d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1044d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1045d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case fax: { 1046d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *playoutMode = streaming; 1047d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org strncpy(playoutString, "Streaming", 25); 1048d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1049d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1050d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case streaming: { 1051d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *playoutMode = voice; 1052d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org strncpy(playoutString, "Voice", 25); 1053d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1054470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 1055d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org default: 1056d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *playoutMode = voice; 1057d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org strncpy(playoutString, "Voice", 25); 1058d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1059d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveACM->SetPlayoutMode(*playoutMode)); 1060d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org playoutString[24] = '\0'; 1061d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1062d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1063d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 1064d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "In Side %c\n", receiveSide); 1065d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "---------------------------------\n"); 1066d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Receive Frequency....... %d Hz\n", receiveFreqHz); 1067d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Playout Frequency....... %d Hz\n", playoutFreqHz); 1068d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Audio Playout Mode...... %s\n", playoutString); 1069d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Background Noise Mode... %s\n", bgnString); 1070d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1071470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1072470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1073d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org// set/get receiver VAD status & mode. 1074d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestReceiverVAD(char side) { 1075d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 1076d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int* myReceiveVADActivity; 1077d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1078d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 1079d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM = _acmA; 1080d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myReceiveVADActivity = _receiveVADActivityA; 1081d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 1082d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM = _acmB; 1083d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myReceiveVADActivity = _receiveVADActivityB; 1084d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1085d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1086d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode mode = myACM->ReceiveVADMode(); 1087d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1088d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(mode); 1089d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1090d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1091d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\nCurrent Receive VAD at side %c\n", side); 1092d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "----------------------------------\n"); 1093d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "mode.......... %d\n", (int) mode); 1094d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "VAD Active.... %d\n", myReceiveVADActivity[0]); 1095d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "VAD Passive... %d\n", myReceiveVADActivity[1]); 1096d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "VAD Unknown... %d\n", myReceiveVADActivity[2]); 1097d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1098d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1099d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1100d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nChange Receive VAD at side %c\n\n", side); 1101d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1102d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1103d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (mode) { 1104470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case VADNormal: 1105d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = VADAggr; 1106d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1107470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case VADLowBitrate: 1108d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = VADVeryAggr; 1109d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1110470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case VADAggr: 1111d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = VADLowBitrate; 1112d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1113470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case VADVeryAggr: 1114d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = VADNormal; 1115d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1116470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com default: 1117d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = VADNormal; 1118470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1119d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetReceiveVADMode(mode)); 1120d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1121d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (int n = 0; n < 3; n++) { 1122d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myReceiveVADActivity[n] = 0; 1123d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1124d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org} 1125470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1126d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestSendVAD(char side) { 1127d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_randomTest) { 1128d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return; 1129d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1130d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1131d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* vad; 1132d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* dtx; 1133d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode* mode; 1134d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 1135d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 1136d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1137d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 1138d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1139d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 1140d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 1141d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Test VAD API\n"); 1142d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 1143d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1144d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1145d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 1146d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(_codecCntrA, &myCodec); 1147d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADA; 1148d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXA; 1149d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeA; 1150d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 1151d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM = _acmA; 1152d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 1153d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(_codecCntrB, &myCodec); 1154d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADB; 1155d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXB; 1156d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeB; 1157d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 1158d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM = _acmB; 1159d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1160d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1161d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CheckVADStatus(side); 1162d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1163d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 1164d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1165d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1166d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (*mode) { 1167d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADNormal: 1168d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 1169d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 1170d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADAggr; 1171d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1172d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADLowBitrate: 1173d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 1174d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 1175d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADVeryAggr; 1176d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1177d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADAggr: 1178d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 1179d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 1180d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADLowBitrate; 1181d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1182d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADVeryAggr: 1183d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = false; 1184d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 1185d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADNormal; 1186d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 1187d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org default: 1188d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADNormal; 1189d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1190470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1191d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = (myCodec.plfreq == 32000) ? false : *dtx; 1192470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1193d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetVAD(*dtx, *vad, *mode)); 1194d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel->ResetStats(); 1195d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org 1196d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CheckVADStatus(side); 1197d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1198d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 1199d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 1200d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1201470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1202d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Fault Test 1203d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_PROTECTED_MT(myACM->SetVAD(false, true, (ACMVADMode) - 1)); 1204d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_PROTECTED_MT(myACM->SetVAD(false, true, (ACMVADMode) 4)); 1205470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1206470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1207470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1208d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::CurrentCodec(char side) { 1209d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 1210d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 1211d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->SendCodec(&myCodec); 1212d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 1213d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->SendCodec(&myCodec); 1214d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1215d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1216d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1217d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 1218d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Send codec in Side A\n"); 1219d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "----------------------------\n"); 1220d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Name................. %s\n", myCodec.plname); 1221d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Sampling Frequency... %d\n", myCodec.plfreq); 1222d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Rate................. %d\n", myCodec.rate); 1223d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Payload-type......... %d\n", myCodec.pltype); 1224d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Packet-size.......... %d\n", myCodec.pacsize); 1225d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1226d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1227d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(100); 1228470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1229470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1230d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::ChangeCodec(char side) { 1231d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 1232d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 1233d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint8_t* codecCntr; 1234d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* thereIsEncoder; 1235d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* vad; 1236d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* dtx; 1237d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode* mode; 1238d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 1239d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Reset and Wait 1240d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1241d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Reset Encoder Side A \n"); 1242d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1243d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 1244d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM = _acmA; 1245d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org codecCntr = &_codecCntrA; 1246d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1247d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1248d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = &_thereIsEncoderA; 1249d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1250d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADA; 1251d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXA; 1252d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeA; 1253d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 1254d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 1255d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM = _acmB; 1256d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org codecCntr = &_codecCntrB; 1257d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1258d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1259d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = &_thereIsEncoderB; 1260d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1261d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADB; 1262d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXB; 1263d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeB; 1264d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 1265d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1266d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1267d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myACM->ResetEncoder(); 1268d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(100); 1269d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1270d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Register the next codec 1271d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org do { 1272d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *codecCntr = 1273d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (*codecCntr < AudioCodingModule::NumberOfCodecs() - 1) ? 1274d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (*codecCntr + 1) : 0; 1275d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1276d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (*codecCntr == 0) { 1277d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //printf("Initialize Sender Side A \n"); 1278d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1279d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1280d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsEncoder = false; 1281d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1282d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->InitializeSender()); 1283d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 1284d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1285d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // After Initialization CN is lost, re-register them 1286d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (AudioCodingModule::Codec("CN", &myCodec, 8000, 1) >= 0) { 1287d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1288d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1289d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (AudioCodingModule::Codec("CN", &myCodec, 16000, 1) >= 0) { 1290d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1291d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1292d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // VAD & DTX are disabled after initialization 1293d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = false; 1294d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 1295d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _writeToFile = false; 1296d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1297d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1298d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(*codecCntr, &myCodec); 1299d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } while (!STR_CASE_CMP(myCodec.plname, "CN") 1300d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org || !STR_CASE_CMP(myCodec.plname, "telephone-event") 1301d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org || !STR_CASE_CMP(myCodec.plname, "RED")); 1302d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1303d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1304d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout,"\n=====================================================\n"); 1305d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Registering New Codec %s, %d kHz, %d kbps\n", 1306470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com myCodec.plname, myCodec.plfreq / 1000, myCodec.rate / 1000); 1307d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1308d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout<< std::flush; 1309470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1310d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // NO DTX for supe-wideband codec at this point 1311d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (myCodec.plfreq == 32000) { 1312d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 1313d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetVAD(*dtx, *vad, *mode)); 1314470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1315d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1316470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1317d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1318d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel->ResetStats(); 1319d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1320d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1321d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsEncoder = true; 1322d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1323d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(500); 1324470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1325470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1326d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::LookForDTMF(char side) { 1327d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1328d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\nLooking for DTMF Signal in Side %c\n", side); 1329d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "----------------------------------------\n"); 1330d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1331d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org 1332d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 1333d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterIncomingMessagesCallback(NULL); 1334d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterIncomingMessagesCallback(_dtmfCallback); 1335d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 1336d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterIncomingMessagesCallback(NULL); 1337d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 1338d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterIncomingMessagesCallback(NULL); 1339d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterIncomingMessagesCallback(_dtmfCallback); 1340d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 1341d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterIncomingMessagesCallback(NULL); 1342d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1343470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1344554ae1ad4ed3e6d1d9d807f15324d2f875888d23tina.legrand@webrtc.org 1345d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org} // namespace webrtc 1346