mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-24 16:57:50 +00:00
168 lines
4.0 KiB
C
168 lines
4.0 KiB
C
|
/*
|
||
|
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
||
|
*
|
||
|
* Use of this source code is governed by a BSD-style license
|
||
|
* that can be found in the LICENSE file in the root of the source
|
||
|
* tree. An additional intellectual property rights grant can be found
|
||
|
* in the file PATENTS. All contributing project authors may
|
||
|
* be found in the AUTHORS file in the root of the source tree.
|
||
|
*/
|
||
|
|
||
|
#ifndef WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_APITEST_H_
|
||
|
#define WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_APITEST_H_
|
||
|
|
||
|
#include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
|
||
|
#include "webrtc/modules/audio_coding/main/test/ACMTest.h"
|
||
|
#include "webrtc/modules/audio_coding/main/test/Channel.h"
|
||
|
#include "webrtc/modules/audio_coding/main/test/PCMFile.h"
|
||
|
#include "webrtc/modules/audio_coding/main/test/utility.h"
|
||
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||
|
#include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
|
||
|
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
|
||
|
|
||
|
namespace webrtc {
|
||
|
|
||
|
class Config;
|
||
|
|
||
|
enum APITESTAction {
|
||
|
TEST_CHANGE_CODEC_ONLY = 0,
|
||
|
DTX_TEST = 1
|
||
|
};
|
||
|
|
||
|
class APITest : public ACMTest {
|
||
|
public:
|
||
|
explicit APITest(const Config& config);
|
||
|
~APITest();
|
||
|
|
||
|
void Perform();
|
||
|
private:
|
||
|
int16_t SetUp();
|
||
|
|
||
|
static bool PushAudioThreadA(void* obj);
|
||
|
static bool PullAudioThreadA(void* obj);
|
||
|
static bool ProcessThreadA(void* obj);
|
||
|
static bool APIThreadA(void* obj);
|
||
|
|
||
|
static bool PushAudioThreadB(void* obj);
|
||
|
static bool PullAudioThreadB(void* obj);
|
||
|
static bool ProcessThreadB(void* obj);
|
||
|
static bool APIThreadB(void* obj);
|
||
|
|
||
|
void CheckVADStatus(char side);
|
||
|
|
||
|
// Set Min delay, get delay, playout timestamp
|
||
|
void TestDelay(char side);
|
||
|
|
||
|
// Unregister a codec & register again.
|
||
|
void TestRegisteration(char side);
|
||
|
|
||
|
// Playout Mode, background noise mode.
|
||
|
// Receiver Frequency, playout frequency.
|
||
|
void TestPlayout(char receiveSide);
|
||
|
|
||
|
//
|
||
|
void TestSendVAD(char side);
|
||
|
|
||
|
void CurrentCodec(char side);
|
||
|
|
||
|
void ChangeCodec(char side);
|
||
|
|
||
|
void Wait(uint32_t waitLengthMs);
|
||
|
|
||
|
void RunTest(char thread);
|
||
|
|
||
|
bool PushAudioRunA();
|
||
|
bool PullAudioRunA();
|
||
|
bool ProcessRunA();
|
||
|
bool APIRunA();
|
||
|
|
||
|
bool PullAudioRunB();
|
||
|
bool PushAudioRunB();
|
||
|
bool ProcessRunB();
|
||
|
bool APIRunB();
|
||
|
|
||
|
//--- ACMs
|
||
|
scoped_ptr<AudioCodingModule> _acmA;
|
||
|
scoped_ptr<AudioCodingModule> _acmB;
|
||
|
|
||
|
//--- Channels
|
||
|
Channel* _channel_A2B;
|
||
|
Channel* _channel_B2A;
|
||
|
|
||
|
//--- I/O files
|
||
|
// A
|
||
|
PCMFile _inFileA;
|
||
|
PCMFile _outFileA;
|
||
|
// B
|
||
|
PCMFile _outFileB;
|
||
|
PCMFile _inFileB;
|
||
|
|
||
|
//--- I/O params
|
||
|
// A
|
||
|
int32_t _outFreqHzA;
|
||
|
// B
|
||
|
int32_t _outFreqHzB;
|
||
|
|
||
|
// Should we write to file.
|
||
|
// we might skip writing to file if we
|
||
|
// run the test for a long time.
|
||
|
bool _writeToFile;
|
||
|
//--- Events
|
||
|
// A
|
||
|
EventWrapper* _pullEventA; // pulling data from ACM
|
||
|
EventWrapper* _pushEventA; // pushing data to ACM
|
||
|
EventWrapper* _processEventA; // process
|
||
|
EventWrapper* _apiEventA; // API calls
|
||
|
// B
|
||
|
EventWrapper* _pullEventB; // pulling data from ACM
|
||
|
EventWrapper* _pushEventB; // pushing data to ACM
|
||
|
EventWrapper* _processEventB; // process
|
||
|
EventWrapper* _apiEventB; // API calls
|
||
|
|
||
|
// keep track of the codec in either side.
|
||
|
uint8_t _codecCntrA;
|
||
|
uint8_t _codecCntrB;
|
||
|
|
||
|
// Is set to true if there is no encoder in either side
|
||
|
bool _thereIsEncoderA;
|
||
|
bool _thereIsEncoderB;
|
||
|
bool _thereIsDecoderA;
|
||
|
bool _thereIsDecoderB;
|
||
|
|
||
|
bool _sendVADA;
|
||
|
bool _sendDTXA;
|
||
|
ACMVADMode _sendVADModeA;
|
||
|
|
||
|
bool _sendVADB;
|
||
|
bool _sendDTXB;
|
||
|
ACMVADMode _sendVADModeB;
|
||
|
|
||
|
int32_t _minDelayA;
|
||
|
int32_t _minDelayB;
|
||
|
bool _payloadUsed[32];
|
||
|
|
||
|
AudioPlayoutMode _playoutModeA;
|
||
|
AudioPlayoutMode _playoutModeB;
|
||
|
|
||
|
bool _verbose;
|
||
|
|
||
|
int _dotPositionA;
|
||
|
int _dotMoveDirectionA;
|
||
|
int _dotPositionB;
|
||
|
int _dotMoveDirectionB;
|
||
|
|
||
|
char _movingDot[41];
|
||
|
|
||
|
DTMFDetector* _dtmfCallback;
|
||
|
VADCallback* _vadCallbackA;
|
||
|
VADCallback* _vadCallbackB;
|
||
|
RWLockWrapper& _apiTestRWLock;
|
||
|
bool _randomTest;
|
||
|
int _testNumA;
|
||
|
int _testNumB;
|
||
|
};
|
||
|
|
||
|
} // namespace webrtc
|
||
|
|
||
|
#endif // WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_APITEST_H_
|