APITest.cc revision 1bd0e03ce56ed5384c3377b6da171951ec654706
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 1312dc1a38ca54a000e4fecfbc6d41138b895c9ca5pbos@webrtc.org#include <ctype.h> 14543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <stdio.h> 15543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <stdlib.h> 16543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org#include <string.h> 1773222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org 185e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org#include <iostream> 195e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org#include <ostream> 205e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org#include <string> 215e7ca608d54043a09ce62193f372bb7b3ba7d8e1tina.legrand@webrtc.org 2273222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 236ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org#include "webrtc/common.h" 2473222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/common_types.h" 2573222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/engine_configurations.h" 26532f3dc5487ee1cedaef5719fe71bf71614d7ee7turaj@webrtc.org#include "webrtc/modules/audio_coding/main/acm2/acm_common_defs.h" 2773222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/modules/audio_coding/main/test/utility.h" 2873222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/event_wrapper.h" 2973222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/thread_wrapper.h" 3073222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/tick_util.h" 3173222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 3273222cff1a64cbc8eade9277cc63d516f7c20947tina.legrand@webrtc.org#include "webrtc/test/testsupport/fileutils.h" 33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 34554ae1ad4ed3e6d1d9d807f15324d2f875888d23tina.legrand@webrtc.orgnamespace webrtc { 35554ae1ad4ed3e6d1d9d807f15324d2f875888d23tina.legrand@webrtc.org 36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TEST_DURATION_SEC 600 37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define NUMBER_OF_SENDER_TESTS 6 38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define MAX_FILE_NAME_LENGTH_BYTE 500 395490c71a1b1b2aa1758924b592e4359b3ec7d891kjellander@webrtc.org#define CHECK_THREAD_NULLITY(myThread, S) \ 40d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if(myThread != NULL) { \ 4186639737b83d8877abc4810100e30a8af863189dpbos@webrtc.org (myThread)->Start(); \ 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 576ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.orgAPITest::APITest(const Config& config) 58adaf80961280dfecd3fdcc23bd3fa0a312ce42dehenrik.lundin@webrtc.org : _acmA(AudioCodingModule::Create(1)), 59adaf80961280dfecd3fdcc23bd3fa0a312ce42dehenrik.lundin@webrtc.org _acmB(AudioCodingModule::Create(2)), 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 _vadCallbackA(NULL), 90d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB(NULL), 91d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiTestRWLock(*RWLockWrapper::CreateRWLock()), 92d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest(false), 93d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _testNumA(0), 94d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _testNumB(1) { 95d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int n; 96d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (n = 0; n < 32; n++) { 97d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _payloadUsed[n] = false; 98d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 99d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 100d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[40] = '\0'; 101d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 102d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (int n = 0; n < 40; n++) { 103d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[n] = ' '; 104d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 105470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 106470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 107d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgAPITest::~APITest() { 108d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_channel_A2B); 109d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_channel_B2A); 110470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 111d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pushEventA); 112d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pullEventA); 113d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_processEventA); 114d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_apiEventA); 115470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 116d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pushEventB); 117d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_pullEventB); 118d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_processEventB); 119d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_apiEventB); 120470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 121d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Close(); 122d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Close(); 123470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 124d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Close(); 125d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Close(); 126470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 127d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_vadCallbackA); 128d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org DELETE_POINTER(_vadCallbackB); 129470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 130d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete &_apiTestRWLock; 131470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 132470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 133d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgint16_t APITest::SetUp() { 134d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst dummyCodec; 135d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int lastPayloadType = 0; 136d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 137d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int16_t numCodecs = _acmA->NumberOfCodecs(); 138d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (uint8_t n = 0; n < numCodecs; n++) { 139d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n, &dummyCodec); 140d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((STR_CASE_CMP(dummyCodec.plname, "CN") == 0) 141d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org && (dummyCodec.plfreq == 32000)) { 142d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org continue; 143d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 144d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 145d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Register Receive Codec %s ", dummyCodec.plname); 146d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 147d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n != 0) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 148d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Check registration with an already occupied payload type 149d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int currentPayloadType = dummyCodec.pltype; 150d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = 97; //lastPayloadType; 151d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR(_acmB->RegisterReceiveCodec(dummyCodec)); 152d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = currentPayloadType; 153d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 154d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 155d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n < numCodecs - 1) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 156d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // test if re-registration works; 157d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst nextCodec; 158d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int currentPayloadType = dummyCodec.pltype; 159d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n + 1, &nextCodec); 160d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = nextCodec.pltype; 161d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!FixedPayloadTypeCodec(nextCodec.plname)) { 162d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterReceiveCodec(dummyCodec); 163d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 164d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dummyCodec.pltype = currentPayloadType; 165d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 166d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 167d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((n < numCodecs - 1) && !FixedPayloadTypeCodec(dummyCodec.plname)) { 168d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // test if un-registration works; 169d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst nextCodec; 170d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(n + 1, &nextCodec); 171d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org nextCodec.pltype = dummyCodec.pltype; 172d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!FixedPayloadTypeCodec(nextCodec.plname)) { 173d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterReceiveCodec(nextCodec)); 174d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->UnregisterReceiveCodec(nextCodec.pltype)); 175d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 176d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 177d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 178d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterReceiveCodec(dummyCodec)); 179d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf(" side A done!"); 180d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterReceiveCodec(dummyCodec)); 181d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf(" side B done!\n"); 182d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 183d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!strcmp(dummyCodec.plname, "CN")) { 184d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterSendCodec(dummyCodec)); 185d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterSendCodec(dummyCodec)); 186d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 187d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org lastPayloadType = dummyCodec.pltype; 188d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((lastPayloadType >= 96) && (lastPayloadType <= 127)) { 189d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _payloadUsed[lastPayloadType - 96] = true; 190d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 191d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 192d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderA = true; 193d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsDecoderB = true; 194d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 195d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Register Send Codec 196d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec((uint8_t) _codecCntrA, &dummyCodec); 197d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterSendCodec(dummyCodec)); 198d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderA = true; 199d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // 200d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec((uint8_t) _codecCntrB, &dummyCodec); 201d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterSendCodec(dummyCodec)); 202d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _thereIsEncoderB = true; 203d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 204d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint16_t frequencyHz; 205d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 206d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\n\nAPI Test\n"); 207d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("========\n"); 208d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Hit enter to accept the default values indicated in []\n\n"); 209d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 210d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Input A 211d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string file_name = webrtc::test::ResourcePath( 212d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "audio_coding/testfile32kHz", "pcm"); 213d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org frequencyHz = 32000; 214d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter input file at side A [%s]: ", file_name.c_str()); 215d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&file_name, 499, &frequencyHz); 216d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Open(file_name, frequencyHz, "rb", true); 217d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 218d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Output A 219d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string out_file_a = webrtc::test::OutputPath() + "outA.pcm"; 220d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter output file at side A [%s]: ", out_file_a.c_str()); 221d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&out_file_a, 499, &frequencyHz); 222d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Open(out_file_a, frequencyHz, "wb"); 223d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 224d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Input B 225d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org file_name = webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm"); 226d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\n\nEnter input file at side B [%s]: ", file_name.c_str()); 227d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&file_name, 499, &frequencyHz); 228d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Open(file_name, frequencyHz, "rb", true); 229d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 230d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Output B 231d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::string out_file_b = webrtc::test::OutputPath() + "outB.pcm"; 232d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("Enter output file at side B [%s]: ", out_file_b.c_str()); 233d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org PCMFile::ChooseFile(&out_file_b, 499, &frequencyHz); 234d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Open(out_file_b, frequencyHz, "wb"); 235d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 236d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Set A-to-B channel 237d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_A2B = new Channel(2); 238d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmA->RegisterTransportCallback(_channel_A2B)); 2396ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org _channel_A2B->RegisterReceiverACM(_acmB.get()); 240d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 241d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- Set B-to-A channel 242d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _channel_B2A = new Channel(1); 243d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(_acmB->RegisterTransportCallback(_channel_B2A)); 2446ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org _channel_B2A->RegisterReceiverACM(_acmA.get()); 245d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 246d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- EVENT TIMERS 247d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 24864c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _pullEventA = EventTimerWrapper::Create(); 24964c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _pushEventA = EventTimerWrapper::Create(); 25064c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _processEventA = EventTimerWrapper::Create(); 251d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventA = EventWrapper::Create(); 252d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 25364c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _pullEventB = EventTimerWrapper::Create(); 25464c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _pushEventB = EventTimerWrapper::Create(); 25564c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström _processEventB = EventTimerWrapper::Create(); 256d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventB = EventWrapper::Create(); 257d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 258d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- I/O params 259d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 260d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFreqHzA = _outFileA.SamplingFrequency(); 261d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 262d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFreqHzB = _outFileB.SamplingFrequency(); 263d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 264d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //Trace::SetEncryptedTraceFile("ACMAPITestEncrypted.txt"); 265d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 266d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org char print[11]; 267d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 268d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Create a trace file. 269d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Trace::CreateTrace(); 270d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Trace::SetTraceFile( 271d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (webrtc::test::OutputPath() + "acm_api_trace.txt").c_str()); 272d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 273d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\nRandom Test (y/n)?"); 274d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EXPECT_TRUE(fgets(print, 10, stdin) != NULL); 275d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org print[10] = '\0'; 276d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (strstr(print, "y") != NULL) { 277d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest = true; 278d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _verbose = false; 279d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _writeToFile = false; 280d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 281d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _randomTest = false; 282d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org printf("\nPrint Tests (y/n)? "); 283543c3eaa46434a7e3974012c4d33ed82fc81fd33kjellander@webrtc.org EXPECT_TRUE(fgets(print, 10, stdin) != NULL); 284470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com print[10] = '\0'; 285d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (strstr(print, "y") == NULL) { 286d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EXPECT_TRUE(freopen("APITest_log.txt", "w", stdout) != 0); 287d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _verbose = false; 288470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 289d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 290470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 291d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA = new VADCallback; 292d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB = new VADCallback; 293d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org 294d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return 0; 295470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 296470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 297d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioThreadA(void* obj) { 298d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PushAudioRunA(); 299470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 300470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 301d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioThreadB(void* obj) { 302d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PushAudioRunB(); 303470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 304470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 305d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioThreadA(void* obj) { 306d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PullAudioRunA(); 307470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 308470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 309d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioThreadB(void* obj) { 310d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->PullAudioRunB(); 311470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 312470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 313d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessThreadA(void* obj) { 314d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->ProcessRunA(); 315470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 316470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 317d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessThreadB(void* obj) { 318d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->ProcessRunB(); 319470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 320470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 321d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIThreadA(void* obj) { 322d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->APIRunA(); 323470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 324470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 325d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIThreadB(void* obj) { 326d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return static_cast<APITest*>(obj)->APIRunB(); 327470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 328470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 329d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioRunA() { 330d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA->Wait(100); 331d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 332d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmA->PlayoutData10Ms(_outFreqHzA, &audioFrame) < 0) { 333d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsDecoder; 334470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 335d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 336d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = _thereIsDecoderA; 337470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 338d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsDecoder) { 339d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>>>> cannot pull audio A <<<<<<<< \n"); 340d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 341d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 342d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_writeToFile) { 343d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileA.Write10MsData(audioFrame); 344470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 345d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 346d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 347470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 348470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 349d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PullAudioRunB() { 350d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB->Wait(100); 351d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 352d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmB->PlayoutData10Ms(_outFreqHzB, &audioFrame) < 0) { 353d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsDecoder; 354470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 355d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 356d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = _thereIsDecoderB; 357470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 358d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsDecoder) { 359d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>>>> cannot pull audio B <<<<<<<< \n"); 360d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "%d %d\n", _testNumA, _testNumB); 361d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 362d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 363d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_writeToFile) { 364d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _outFileB.Write10MsData(audioFrame); 365d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org } 366d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 367d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 368470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 369470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 370d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioRunA() { 371d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA->Wait(100); 372d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 373d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileA.Read10MsData(audioFrame); 374d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmA->Add10MsData(audioFrame) < 0) { 375d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsEncoder; 376470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 377d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 378d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = _thereIsEncoderA; 379d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 380d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsEncoder) { 381d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>> add10MsData at A failed <<<<\n"); 382470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 383d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 384d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 385470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 386470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 387d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::PushAudioRunB() { 388d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB->Wait(100); 389d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioFrame audioFrame; 390d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _inFileB.Read10MsData(audioFrame); 391d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_acmB->Add10MsData(audioFrame) < 0) { 392d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool thereIsEncoder; 393470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 394d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 395d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = _thereIsEncoderB; 396d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 397470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 398d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thereIsEncoder) { 399d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "\n>>>> cannot add audio to B <<<<"); 400470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 401d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 402470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 403d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 404470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 405470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 406d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessRunA() { 407d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA->Wait(100); 408d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 409470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 410470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 411d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::ProcessRunB() { 412d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB->Wait(100); 413d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 414470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 415470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 416470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*/ 417470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 418470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * In side A we test the APIs which are related to sender Side. 419470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 420470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*/ 421470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 422d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::RunTest(char thread) { 423d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int testNum; 424d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 425d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped cs(_apiTestRWLock); 426d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (thread == 'A') { 4271bd0e03ce56ed5384c3377b6da171951ec654706henrik.lundin _testNumA = (_testNumB + 1 + (rand() % 3)) % 4; 428d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org testNum = _testNumA; 429d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 430d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionA] = ' '; 431d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionA == 0) { 432d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionA = 1; 433d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 434d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionA == 19) { 435d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionA = -1; 436d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 437d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionA += _dotMoveDirectionA; 438d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionA] = (_dotMoveDirectionA > 0) ? '>' : '<'; 439d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 4401bd0e03ce56ed5384c3377b6da171951ec654706henrik.lundin _testNumB = (_testNumA + 1 + (rand() % 3)) % 4; 441d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org testNum = _testNumB; 442d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 443d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionB] = ' '; 444d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionB == 20) { 445d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionB = 1; 446d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 447d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_dotPositionB == 39) { 448d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotMoveDirectionB = -1; 449d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 450d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _dotPositionB += _dotMoveDirectionB; 451d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _movingDot[_dotPositionB] = (_dotMoveDirectionB > 0) ? '>' : '<'; 452d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 453d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fprintf(stderr, "%c: %d \n", thread, testNum); 454d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fflush(stderr); 455d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 456d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (testNum) { 457470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 0: 458d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CurrentCodec('A'); 459d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ChangeCodec('A'); 460d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 461470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com case 1: 462d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 463d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nTesting Delay ...\n"); 464d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 465d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestDelay('A'); 466d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 4671bd0e03ce56ed5384c3377b6da171951ec654706henrik.lundin case 2: 468d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestSendVAD('A'); 469d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 4701bd0e03ce56ed5384c3377b6da171951ec654706henrik.lundin case 3: 471d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestRegisteration('A'); 472d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 473470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com default: 474d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "Wrong Test Number\n"); 4754765ca55f9203df57966317379d686904483fb63marpan@webrtc.org getc(stdin); 476d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org exit(1); 477d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 478470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 479470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 480d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIRunA() { 481d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventA->Wait(50); 482d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 483d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool randomTest; 484d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 485d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 486d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org randomTest = _randomTest; 487d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 488d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (randomTest) { 489d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org RunTest('A'); 490d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 491d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CurrentCodec('A'); 492d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ChangeCodec('A'); 493d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_codecCntrA == 0) { 494d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nTesting Delay ...\n"); 495d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestDelay('A'); 496d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 497d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // VAD TEST 498d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestSendVAD('A'); 499d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org TestRegisteration('A'); 500d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 501d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 502470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 503470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 504d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgbool APITest::APIRunB() { 505d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _apiEventB->Wait(50); 506d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool randomTest; 507d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 508d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ReadLockScoped rl(_apiTestRWLock); 509d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org randomTest = _randomTest; 510d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 511d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventB->Wait(2000); 512d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (randomTest) { 513d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org RunTest('B'); 514d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 515d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 516d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return true; 517470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 518470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 519d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::Perform() { 520d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org SetUp(); 521d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 522d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //--- THREADS 523d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // A 524d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PUSH 525361981faa86668cd9b20a2837d0b166fc024cd9btommi@webrtc.org rtc::scoped_ptr<ThreadWrapper> myPushAudioThreadA = 52638492c5b6fbb615159fa32b9cc24cd887295573btommi@webrtc.org ThreadWrapper::CreateThread(PushAudioThreadA, this, "PushAudioThreadA"); 527d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myPushAudioThreadA, "Unable to start A::PUSH thread"); 528d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PULL 529361981faa86668cd9b20a2837d0b166fc024cd9btommi@webrtc.org rtc::scoped_ptr<ThreadWrapper> myPullAudioThreadA = 53038492c5b6fbb615159fa32b9cc24cd887295573btommi@webrtc.org ThreadWrapper::CreateThread(PullAudioThreadA, this, "PullAudioThreadA"); 531d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myPullAudioThreadA, "Unable to start A::PULL thread"); 532d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Process 533361981faa86668cd9b20a2837d0b166fc024cd9btommi@webrtc.org rtc::scoped_ptr<ThreadWrapper> myProcessThreadA = ThreadWrapper::CreateThread( 53438492c5b6fbb615159fa32b9cc24cd887295573btommi@webrtc.org ProcessThreadA, this, "ProcessThreadA"); 535d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myProcessThreadA, "Unable to start A::Process thread"); 536d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // API 537361981faa86668cd9b20a2837d0b166fc024cd9btommi@webrtc.org rtc::scoped_ptr<ThreadWrapper> myAPIThreadA = ThreadWrapper::CreateThread( 53838492c5b6fbb615159fa32b9cc24cd887295573btommi@webrtc.org APIThreadA, this, "APIThreadA"); 539d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myAPIThreadA, "Unable to start A::API thread"); 540d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // B 541d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PUSH 542361981faa86668cd9b20a2837d0b166fc024cd9btommi@webrtc.org rtc::scoped_ptr<ThreadWrapper> myPushAudioThreadB = 54338492c5b6fbb615159fa32b9cc24cd887295573btommi@webrtc.org ThreadWrapper::CreateThread(PushAudioThreadB, this, "PushAudioThreadB"); 544d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myPushAudioThreadB, "Unable to start B::PUSH thread"); 545d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // PULL 546361981faa86668cd9b20a2837d0b166fc024cd9btommi@webrtc.org rtc::scoped_ptr<ThreadWrapper> myPullAudioThreadB = 54738492c5b6fbb615159fa32b9cc24cd887295573btommi@webrtc.org ThreadWrapper::CreateThread(PullAudioThreadB, this, "PullAudioThreadB"); 548d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myPullAudioThreadB, "Unable to start B::PULL thread"); 549d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Process 550361981faa86668cd9b20a2837d0b166fc024cd9btommi@webrtc.org rtc::scoped_ptr<ThreadWrapper> myProcessThreadB = ThreadWrapper::CreateThread( 55138492c5b6fbb615159fa32b9cc24cd887295573btommi@webrtc.org ProcessThreadB, this, "ProcessThreadB"); 552d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myProcessThreadB, "Unable to start B::Process thread"); 553d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // API 554361981faa86668cd9b20a2837d0b166fc024cd9btommi@webrtc.org rtc::scoped_ptr<ThreadWrapper> myAPIThreadB = ThreadWrapper::CreateThread( 55538492c5b6fbb615159fa32b9cc24cd887295573btommi@webrtc.org APIThreadB, this, "APIThreadB"); 556d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_THREAD_NULLITY(myAPIThreadB, "Unable to start B::API thread"); 557d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 558d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventA->StartTimer(true, 5000); 559d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //_apiEventB->StartTimer(true, 5000); 560d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 561d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventA->StartTimer(true, 10); 562d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _processEventB->StartTimer(true, 10); 563d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 564d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventA->StartTimer(true, 10); 565d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pullEventB->StartTimer(true, 10); 566d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 567d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventA->StartTimer(true, 10); 568d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _pushEventB->StartTimer(true, 10); 569d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 570d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Keep main thread waiting for sender/receiver 571d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // threads to complete 572d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* completeEvent = EventWrapper::Create(); 573d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t startTime = TickTime::MillisecondTimestamp(); 574d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint64_t currentTime; 575d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Run test in 2 minutes (120000 ms). 576d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org do { 577d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 578d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //ReadLockScoped rl(_apiTestRWLock); 579d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fprintf(stderr, "\r%s", _movingDot); 580d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 581d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //fflush(stderr); 582d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org completeEvent->Wait(50); 583d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org currentTime = TickTime::MillisecondTimestamp(); 584d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } while ((currentTime - startTime) < 120000); 585d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 586d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //completeEvent->Wait(0xFFFFFFFF); 587d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //(unsigned long)((unsigned long)TEST_DURATION_SEC * (unsigned long)1000)); 588d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete completeEvent; 589d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 590d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myPushAudioThreadA->Stop(); 591d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myPullAudioThreadA->Stop(); 592d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myProcessThreadA->Stop(); 593d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myAPIThreadA->Stop(); 594d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 595d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myPushAudioThreadB->Stop(); 596d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myPullAudioThreadB->Stop(); 597d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myProcessThreadB->Stop(); 598d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myAPIThreadB->Stop(); 599470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 600470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 601d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::CheckVADStatus(char side) { 602d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 603d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool dtxEnabled; 604d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool vadEnabled; 605d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode vadMode; 606d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 607d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 608d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->VAD(&dtxEnabled, &vadEnabled, &vadMode); 609d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterVADCallback(NULL); 610d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA->Reset(); 611d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->RegisterVADCallback(_vadCallbackA); 612d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 613d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 614d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 615d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d", dtxEnabled ? "ON" : "OFF", 616d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vadEnabled ? "ON" : "OFF", (int) vadMode); 617d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 618d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " => bit-rate %3.0f kbps\n", _channel_A2B->BitRate()); 619d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 620d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 621d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d => bit-rate %3.0f kbps\n", 622d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtxEnabled ? "ON" : "OFF", vadEnabled ? "ON" : "OFF", 623d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (int) vadMode, _channel_A2B->BitRate()); 624d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 625d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackA->PrintFrameTypes(); 626d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 627d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 628d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (dtxEnabled != _sendDTXA) { 629d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling DTX <<<\n"); 630d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 631d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadEnabled != _sendVADA) && (!dtxEnabled)) { 632d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling VAD <<<\n"); 633d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 634d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadMode != _sendVADModeA) && vadEnabled) { 635d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error setting VAD-mode <<<\n"); 636d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 637d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 638d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->VAD(&dtxEnabled, &vadEnabled, &vadMode); 639d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 640d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterVADCallback(NULL); 641d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB->Reset(); 642d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->RegisterVADCallback(_vadCallbackB); 643d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 644d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 645d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 646d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d", dtxEnabled ? "ON" : "OFF", 647d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vadEnabled ? "ON" : "OFF", (int) vadMode); 648d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 649d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " => bit-rate %3.0f kbps\n", _channel_B2A->BitRate()); 650d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 651d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(5000); 652d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "DTX %3s, VAD %3s, Mode %d => bit-rate %3.0f kbps\n", 653d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtxEnabled ? "ON" : "OFF", vadEnabled ? "ON" : "OFF", 654d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (int) vadMode, _channel_B2A->BitRate()); 655d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 656d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _vadCallbackB->PrintFrameTypes(); 657d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 658d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 659d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (dtxEnabled != _sendDTXB) { 660d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling DTX <<<\n"); 661d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 662d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadEnabled != _sendVADB) && (!dtxEnabled)) { 663d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error Enabling VAD <<<\n"); 664d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 665d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((vadMode != _sendVADModeB) && vadEnabled) { 666d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, ">>> Error setting VAD-mode <<<\n"); 667d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 668d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 669470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 670470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 671470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Set Min delay, get delay, playout timestamp 672d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestDelay(char side) { 673d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 674d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 675d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int32_t* myMinDelay; 67664c0366908f7a966cbb28a4b07a810f2597a888aPeter Boström EventTimerWrapper* myEvent = EventTimerWrapper::Create(); 677d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 678d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t inTimestamp = 0; 679d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint32_t outTimestamp = 0; 680d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double estimDelay = 0; 681d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 682d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double averageEstimDelay = 0; 683d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org double averageDelay = 0; 684d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 685d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CircularBuffer estimDelayCB(100); 686d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.SetArithMean(true); 687d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 688d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 6896ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmA.get(); 690d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 691d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myMinDelay = &_minDelayA; 692d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 6936ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmB.get(); 694d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 695d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myMinDelay = &_minDelayB; 696d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 697d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 698d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetMinimumPlayoutDelay(*myMinDelay)); 699d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 700d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org inTimestamp = myChannel->LastInTimestamp(); 701d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->PlayoutTimestamp(&outTimestamp)); 702d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 703d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 704d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->StartTimer(true, 30); 705d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int n = 0; 706d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int settlePoint = 5000; 707d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org while (n < settlePoint + 400) { 708d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(1000); 709d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 710d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org inTimestamp = myChannel->LastInTimestamp(); 711d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->PlayoutTimestamp(&outTimestamp)); 712d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 713d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout << outTimestamp << std::endl << std::flush; 714d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelay = (double) ((uint32_t)(inTimestamp - outTimestamp)) 715d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org / ((double) myACM->ReceiveFrequency() / 1000.0); 716d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 717d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.Update(estimDelay); 718d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 719d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org estimDelayCB.ArithMean(averageEstimDelay); 720d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //printf("\n %6.1f \n", estimDelay); 721d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout << " " << std::flush; 722d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 723d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_verbose) { 724d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 725d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "\rExpected: %4d, retreived: %6.1f, measured: %6.1f", 726d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *myMinDelay, averageDelay, averageEstimDelay); 727d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org std::cout << " " << std::flush; 728d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 729d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((averageDelay > *myMinDelay) && (n < settlePoint)) { 730d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org settlePoint = n; 731d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 732d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org n++; 733d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 734d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->StopTimer(); 735d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 736d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 737d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if ((!_verbose) && (!_randomTest)) { 738d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\nExpected: %4d, retreived: %6.1f, measured: %6.1f", 739470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *myMinDelay, averageDelay, averageEstimDelay); 740d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 741d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 742d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *myMinDelay = (rand() % 1000) + 1; 743d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 744c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org NetworkStatistics networkStat; 745c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org CHECK_ERROR_MT(myACM->GetNetworkStatistics(&networkStat)); 746d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 747d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 748d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\nJitter Statistics at Side %c\n", side); 749d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "--------------------------------------\n"); 750d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "buffer-size............. %d\n", 751d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentBufferSize); 752d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Preferred buffer-size... %d\n", 753d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.preferredBufferSize); 754d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Peaky jitter mode........%d\n", 755d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.jitterPeaksFound); 756d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "packet-size rate........ %d\n", 757d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentPacketLossRate); 758d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "discard rate............ %d\n", 759d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentDiscardRate); 760d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "expand rate............. %d\n", 761d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentExpandRate); 762c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org fprintf(stdout, "speech expand rate...... %d\n", 763c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org networkStat.currentSpeechExpandRate); 764d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Preemptive rate......... %d\n", 765d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentPreemptiveRate); 766d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Accelerate rate......... %d\n", 767d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.currentAccelerateRate); 768c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org fprintf(stdout, "Secondary decoded rate.. %d\n", 769c0bd7be0df67735d63f5cdd302a3b85f88239874minyue@webrtc.org networkStat.currentSecondaryDecodedRate); 770d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Clock-drift............. %d\n", networkStat.clockDriftPPM); 771d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Mean waiting time....... %d\n", 772d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.meanWaitingTimeMs); 773d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Median waiting time..... %d\n", 774d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.medianWaitingTimeMs); 775d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Min waiting time........ %d\n", 776d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.minWaitingTimeMs); 777d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Max waiting time........ %d\n", 778d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org networkStat.maxWaitingTimeMs); 779d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 780d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 781d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetMinimumPlayoutDelay(*myMinDelay)); 782d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 783d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 784d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(500); 785d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 786d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 787d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 788d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myEvent; 789470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 790470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 791470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Unregister a codec & register again. 792d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestRegisteration(char sendSide) { 793d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* sendACM; 794d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* receiveACM; 795d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* thereIsDecoder; 796d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org EventWrapper* myEvent = EventWrapper::Create(); 797d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 798d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 799d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 800d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 801d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 802d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Unregister/register Receive Codec\n"); 803d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 804d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 805d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 806d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 807d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (sendSide) { 808d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case 'A': { 8096ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org sendACM = _acmA.get(); 8106ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org receiveACM = _acmB.get(); 811d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = &_thereIsDecoderB; 812d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 813d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 814d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case 'B': { 8156ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org sendACM = _acmB.get(); 8166ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org receiveACM = _acmA.get(); 817d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsDecoder = &_thereIsDecoderA; 818d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 819470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 820470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com default: 821d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stderr, "Invalid sender-side in TestRegistration(%c)\n", 822d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org sendSide); 823d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org exit(-1); 824d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 825d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 826d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 827d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (sendACM->SendCodec(&myCodec) < 0) { 828d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(_codecCntrA, &myCodec); 829d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 830d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 831d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 832d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Unregistering reveive codec, NO AUDIO.\n"); 833d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 834d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 835d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 836d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 837d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = false; 838d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 839d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 840d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec.pltype)); 841d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 842d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 843d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int currentPayload = myCodec.pltype; 844d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 845d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!FixedPayloadTypeCodec(myCodec.plname)) { 846d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org int32_t i; 847d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org for (i = 0; i < 32; i++) { 848d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_payloadUsed[i]) { 849d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 850d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 851d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with new Payload, AUDIO BACK.\n"); 852470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 853d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myCodec.pltype = i + 96; 854d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 855d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(sendACM->RegisterSendCodec(myCodec)); 856d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 857d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //{ 858d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // WriteLockScoped wl(_apiTestRWLock); 859d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // *thereIsDecoder = true; 860d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //} 861d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 862d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 863d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 864d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Unregistering reveive codec, NO AUDIO.\n"); 865470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 866d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //{ 867d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // WriteLockScoped wl(_apiTestRWLock); 868d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // *thereIsDecoder = false; 869d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //} 870d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //myEvent->Wait(20); 871d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec.pltype)); 872d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 873d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 874d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myCodec.pltype = currentPayload; 875d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 876d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 877d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with default Payload, AUDIO BACK.\n"); 878d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 879470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 880470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 881d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(sendACM->RegisterSendCodec(myCodec)); 882470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com myEvent->Wait(20); 883470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com { 884d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 885d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 886470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 887d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(1000); 888d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 889d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 890d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 891470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 892d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (i == 32) { 893d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 894d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 895d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 896d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 897d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 898d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 899d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 900d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 901d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 902d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "Register receive codec with fixed Payload, AUDIO BACK.\n"); 903d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fflush (stdout); 904d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 905d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 906d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(receiveACM->UnregisterReceiveCodec(myCodec.pltype)); 907d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //CHECK_ERROR_MT(receiveACM->RegisterReceiveCodec(myCodec)); 908d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myEvent->Wait(20); 909d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 910d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 911d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsDecoder = true; 912d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 913d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 914d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org delete myEvent; 915d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 916d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, 917d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org "---------------------------------------------------------\n"); 918d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 919470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 920470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 921d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::TestSendVAD(char side) { 922d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (_randomTest) { 923d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org return; 924d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 925d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 926d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* vad; 927d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* dtx; 928d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode* mode; 929d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 930d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 931d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 932d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 933d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 934d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 935d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 936d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Test VAD API\n"); 937d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 938d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 939d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 940d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 941d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(_codecCntrA, &myCodec); 942d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADA; 943d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXA; 944d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeA; 945d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 9466ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmA.get(); 947d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 948d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(_codecCntrB, &myCodec); 949d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADB; 950d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXB; 951d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeB; 952d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 9536ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmB.get(); 954d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 955d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 956d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CheckVADStatus(side); 957d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 958d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 959d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 960d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 961d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org switch (*mode) { 962d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADNormal: 963d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 964d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 965d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADAggr; 966d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 967d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADLowBitrate: 968d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 969d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 970d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADVeryAggr; 971d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 972d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADAggr: 973d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = true; 974d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = true; 975d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADLowBitrate; 976d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 977d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org case VADVeryAggr: 978d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = false; 979d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 980d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADNormal; 981d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org break; 982d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org default: 983d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *mode = VADNormal; 984d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 985470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 986d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = (myCodec.plfreq == 32000) ? false : *dtx; 987470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 988d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetVAD(*dtx, *vad, *mode)); 989d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel->ResetStats(); 990d7a71d0719251db2a31b71a9d6e9fef4f60ba778andrew@webrtc.org 991d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CheckVADStatus(side); 992d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 993d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n"); 994d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "-----------------------------------------------\n"); 995d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 996470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 997d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Fault Test 998d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_PROTECTED_MT(myACM->SetVAD(false, true, (ACMVADMode) - 1)); 999d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_PROTECTED_MT(myACM->SetVAD(false, true, (ACMVADMode) 4)); 1000470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1001470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1002470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1003d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::CurrentCodec(char side) { 1004d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 1005d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 1006d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmA->SendCodec(&myCodec); 1007d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 1008d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _acmB->SendCodec(&myCodec); 1009d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1010d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1011d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1012d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "\n\n"); 1013d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Send codec in Side A\n"); 1014d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "----------------------------\n"); 1015d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Name................. %s\n", myCodec.plname); 1016d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Sampling Frequency... %d\n", myCodec.plfreq); 1017d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Rate................. %d\n", myCodec.rate); 1018d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Payload-type......... %d\n", myCodec.pltype); 1019d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Packet-size.......... %d\n", myCodec.pacsize); 1020d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1021d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1022d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(100); 1023470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1024470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1025d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.orgvoid APITest::ChangeCodec(char side) { 1026d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CodecInst myCodec; 1027d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule* myACM; 1028d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org uint8_t* codecCntr; 1029d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* thereIsEncoder; 1030d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* vad; 1031d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org bool* dtx; 1032d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org ACMVADMode* mode; 1033d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Channel* myChannel; 1034d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Reset and Wait 1035d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1036d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, "Reset Encoder Side A \n"); 1037d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1038d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (side == 'A') { 10396ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmA.get(); 1040d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org codecCntr = &_codecCntrA; 1041d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1042d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1043d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = &_thereIsEncoderA; 1044d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1045d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADA; 1046d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXA; 1047d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeA; 1048d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_A2B; 1049d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } else { 10506ea3d1cc9e45ca5661b06ec3390282fa50ded349turaj@webrtc.org myACM = _acmB.get(); 1051d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org codecCntr = &_codecCntrB; 1052d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1053d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1054d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org thereIsEncoder = &_thereIsEncoderB; 1055d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1056d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org vad = &_sendVADB; 1057d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org dtx = &_sendDTXB; 1058d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org mode = &_sendVADModeB; 1059d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel = _channel_B2A; 1060d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1061d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1062d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(100); 1063d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1064d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // Register the next codec 1065d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org do { 1066d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *codecCntr = 1067d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (*codecCntr < AudioCodingModule::NumberOfCodecs() - 1) ? 1068d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org (*codecCntr + 1) : 0; 1069d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1070d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (*codecCntr == 0) { 1071d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //printf("Initialize Sender Side A \n"); 1072d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1073d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1074d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsEncoder = false; 1075d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1076d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // After Initialization CN is lost, re-register them 1077d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (AudioCodingModule::Codec("CN", &myCodec, 8000, 1) >= 0) { 1078d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1079d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1080d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (AudioCodingModule::Codec("CN", &myCodec, 16000, 1) >= 0) { 1081d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1082d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1083d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // VAD & DTX are disabled after initialization 1084d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *vad = false; 1085d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 1086d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org _writeToFile = false; 1087d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1088d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1089d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org AudioCodingModule::Codec(*codecCntr, &myCodec); 1090d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } while (!STR_CASE_CMP(myCodec.plname, "CN") 1091d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org || !STR_CASE_CMP(myCodec.plname, "telephone-event") 1092d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org || !STR_CASE_CMP(myCodec.plname, "RED")); 1093d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org 1094d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (!_randomTest) { 1095d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout,"\n=====================================================\n"); 1096d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org fprintf(stdout, " Registering New Codec %s, %d kHz, %d kbps\n", 1097470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com myCodec.plname, myCodec.plfreq / 1000, myCodec.rate / 1000); 1098d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1099d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org //std::cout<< std::flush; 1100470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1101d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org // NO DTX for supe-wideband codec at this point 1102d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org if (myCodec.plfreq == 32000) { 1103d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *dtx = false; 1104d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->SetVAD(*dtx, *vad, *mode)); 1105470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1106d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1107470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1108d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org CHECK_ERROR_MT(myACM->RegisterSendCodec(myCodec)); 1109d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org myChannel->ResetStats(); 1110d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org { 1111d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org WriteLockScoped wl(_apiTestRWLock); 1112d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org *thereIsEncoder = true; 1113d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org } 1114d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org Wait(500); 1115470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 1116470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1117d5726a1286ce53c47ebd2d21d61b2772fc24aaedtina.legrand@webrtc.org} // namespace webrtc 1118