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