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