1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <android/log.h> 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <unistd.h> 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/android/android_test/jni/org_webrtc_voiceengine_test_AndroidTest.h" 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/system_wrappers/interface/thread_wrapper.h" 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 20471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_audio_processing.h" 21471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_base.h" 22471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_codec.h" 23471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_file.h" 24471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_hardware.h" 25471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_network.h" 26471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_rtp_rtcp.h" 27471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_volume_control.h" 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 29471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_test_interface.h" 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//#define INIT_FROM_THREAD 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//#define START_CALL_FROM_THREAD 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_LOG_TAG "*WEBRTCN*" // As in WEBRTC Native... 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define VALIDATE_BASE_POINTER \ 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.base) \ 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, \ 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Base pointer doesn't exist"); \ 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define VALIDATE_CODEC_POINTER \ 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.codec) \ 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, \ 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Codec pointer doesn't exist"); \ 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define VALIDATE_FILE_POINTER \ 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.file) \ 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, \ 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "File pointer doesn't exist"); \ 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define VALIDATE_NETWORK_POINTER \ 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.netw) \ 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, \ 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Network pointer doesn't exist"); \ 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define VALIDATE_APM_POINTER \ 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.codec) \ 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, \ 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Apm pointer doesn't exist"); \ 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define VALIDATE_VOLUME_POINTER \ 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.volume) \ 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, \ 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Volume pointer doesn't exist"); \ 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define VALIDATE_HARDWARE_POINTER \ 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.hardware) \ 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, \ 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Hardware pointer doesn't exist"); \ 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define VALIDATE_RTP_RTCP_POINTER \ 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.rtp_rtcp) \ 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { \ 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, \ 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "RTP / RTCP pointer doesn't exist"); \ 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Register functions in JNI_OnLoad() 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// How do we ensure that VoE is deleted? JNI_OnUnload? 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// What happens if class is unloaded? When loaded again, NativeInit will be 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// called again. Keep what we have? 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Should we do something in JNI_OnUnload? 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// General design: create a class or keep global struct with "C" functions? 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Otherwise make sure symbols are as unique as possible. 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// TestType enumerator 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum TestType 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Invalid = -1, 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Standard = 0, 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Extended = 1, 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Stress = 2, 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Unit = 3, 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CPU = 4 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing namespace webrtc; 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass my_transportation; 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VoiceEngine data struct 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // VoiceEngine 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoiceEngine* ve; 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Sub-APIs 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEBase* base; 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoECodec* codec; 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEFile* file; 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoENetwork* netw; 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEAudioProcessing* apm; 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEVolumeControl* volume; 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEHardware* hardware; 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoERTP_RTCP* rtp_rtcp; 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Other 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org my_transportation* extTrans; 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JavaVM* jvm; 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} VoiceEngineData; 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// my_transportation is used when useExtTrans is enabled 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass my_transportation : public Transport 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org my_transportation(VoENetwork * network) : 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org netw(network) { 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int SendPacket(int channel,const void *data,int len); 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int SendRTCPPacket(int channel, const void *data, int len); 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private: 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoENetwork * netw; 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint my_transportation::SendPacket(int channel,const void *data,int len) 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org netw->ReceivedRTPPacket(channel, data, len); 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return len; 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint my_transportation::SendRTCPPacket(int channel, const void *data, int len) 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org netw->ReceivedRTCPPacket(channel, data, len); 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return len; 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//Global variables visible in this file 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstatic VoiceEngineData veData1; 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstatic VoiceEngineData veData2; 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// "Local" functions (i.e. not Java accessible) 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstatic bool GetSubApis(VoiceEngineData &veData); 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstatic bool ReleaseSubApis(VoiceEngineData &veData); 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ThreadTest 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ThreadTest(); 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~ThreadTest(); 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int RunTest(); 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int CloseTest(); 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static bool Run(void* ptr); 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool Process(); 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ThreadWrapper* _thread; 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgThreadTest::~ThreadTest() 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_thread) 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _thread->SetNotAlive(); 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_thread->Stop()) 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete _thread; 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _thread = NULL; 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgThreadTest::ThreadTest() : 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _thread(NULL) 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _thread = ThreadWrapper::CreateThread(Run, this, kNormalPriority, 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "ThreadTest thread"); 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool ThreadTest::Run(void* ptr) 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return static_cast<ThreadTest*> (ptr)->Process(); 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool ThreadTest::Process() 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Attach this thread to JVM 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /*JNIEnv* env = NULL; 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint res = veData1.jvm->AttachCurrentThread(&env, NULL); 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char msg[32]; 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org sprintf(msg, "res=%d, env=%d", res, env); 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, msg);*/ 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef INIT_FROM_THREAD 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.base->Init(); 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef START_CALL_FROM_THREAD 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // receiving instance 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.ve = VoiceEngine::Create(); 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetSubApis(veData2); 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.base->Init(); 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.base->CreateChannel(); 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(veData2.base->SetLocalReceiver(0, 1234) < 0) 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "set local receiver 2 failed"); 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.hardware->SetLoudspeakerStatus(false); 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.volume->SetSpeakerVolume(204); 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.base->StartReceive(0); 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(veData2.base->StartPlayout(0) < 0) 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "start playout failed"); 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "receiving instance started from thread"); 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // sending instance 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.ve = VoiceEngine::Create(); 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org GetSubApis(veData1); 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.base->Init(); 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(veData1.base->CreateChannel() < 0) 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "create channel failed"); 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(veData1.base->SetLocalReceiver(0, 1256) < 0) 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "set local receiver failed"); 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(veData1.base->SetSendDestination(0, 1234, "127.0.0.1") < 0) 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "set send destination failed"); 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if(veData1.base->StartSend(0) < 0) 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "start send failed"); 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "sending instance started from thread"); 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _thread->SetNotAlive(); 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _thread->Stop(); 275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //res = veData1.jvm->DetachCurrentThread(); 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint ThreadTest::RunTest() 282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_thread) 284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int id; 286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _thread->Start(id); 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint ThreadTest::CloseTest() 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.base->DeleteChannel(0); 296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.base->DeleteChannel(0); 297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.base->Terminate(); 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.base->Terminate(); 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Release sub-APIs 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ReleaseSubApis(veData1); 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ReleaseSubApis(veData2); 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Delete 305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoiceEngine::Delete(veData1.ve); 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoiceEngine::Delete(veData2.ve); 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.ve = NULL; 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.ve = NULL; 309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgThreadTest threadTest; 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org////////////////////////////////////////////////////////////////// 316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// General functions 317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org////////////////////////////////////////////////////////////////// 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// JNI_OnLoad 321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgjint JNI_OnLoad(JavaVM* vm, void* /*reserved*/) 323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!vm) 325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "JNI_OnLoad did not receive a valid VM pointer"); 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Get JNI 332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv* env; 333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (JNI_OK != vm->GetEnv(reinterpret_cast<void**> (&env), 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNI_VERSION_1_4)) 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "JNI_OnLoad could not get JNI env"); 338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Get class to register the native functions with 342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // jclass regClass = env->FindClass("webrtc/android/AndroidTest"); 343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // if (!regClass) { 344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // return -1; // Exception thrown 345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // } 346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Register native functions 348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // JNINativeMethod methods[1]; 349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // methods[0].name = NULL; 350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // methods[0].signature = NULL; 351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // methods[0].fnPtr = NULL; 352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // if (JNI_OK != env->RegisterNatives(regClass, methods, 1)) 353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // { 354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // return -1; 355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // } 356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Init VoiceEngine data 358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org memset(&veData1, 0, sizeof(veData1)); 359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org memset(&veData2, 0, sizeof(veData2)); 360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Store the JVM 362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.jvm = vm; 363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData2.jvm = vm; 364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return JNI_VERSION_1_4; 366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Native initialization 370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jboolean JNICALL 372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_NativeInit( 373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv * env, 374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jclass) 375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Look up and cache any interesting class, field and method IDs for 377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // any used java class here 378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Run auto standard test 384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_RunAutoTest( 386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *env, 387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject context, 388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint testType, 389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint extendedSel) 390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestType tType(Invalid); 392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch (testType) 394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 0: 396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 1: 398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tType = Standard; 399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 2: 401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tType = Extended; 402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 3: 404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tType = Stress; 405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 4: 407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tType = Unit; 408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "RunAutoTest - Invalid TestType"); 412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Set instance independent Java objects 416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoiceEngine::SetAndroidObjects(veData1.jvm, env, context); 417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Call voe test interface function 419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // TODO(leozwang) add autotest setAndroidObjects(veData1.jvm, context); 420a56c5b4327c6a89238ee5b1ffd3ace78b20afaefsolenberg@webrtc.org // jint retVal = runAutoTest(tType); 421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Clear instance independent Java objects 423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoiceEngine::SetAndroidObjects(NULL, NULL, NULL); 424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org////////////////////////////////////////////////////////////////// 429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VoiceEngine API wrapper functions 430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org////////////////////////////////////////////////////////////////// 431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Create VoiceEngine instance 434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jboolean JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Create( 436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *env, 437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject context) 438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Check if already created 440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.ve) 441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VoE already created"); 444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Set instance independent Java objects 448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoiceEngine::SetAndroidObjects(veData1.jvm, env, context); 449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef START_CALL_FROM_THREAD 451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org threadTest.RunTest(); 452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create 454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.ve = VoiceEngine::Create(); 455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.ve) 456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Create VoE failed"); 459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Get sub-APIs 463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!GetSubApis(veData1)) 464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // If not OK, release all sub-APIs and delete VoE 466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ReleaseSubApis(veData1); 467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!VoiceEngine::Delete(veData1.ve)) 468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Delete VoE failed"); 471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 475b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Delete VoiceEngine instance 481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jboolean JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Delete( 483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject) 485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef START_CALL_FROM_THREAD 487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org threadTest.CloseTest(); 488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Check if exists 490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData1.ve) 491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VoE does not exist"); 494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Release sub-APIs 498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ReleaseSubApis(veData1); 499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Delete 501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!VoiceEngine::Delete(veData1.ve)) 502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Delete VoE failed"); 505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.ve = NULL; 509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Clear instance independent Java objects 512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoiceEngine::SetAndroidObjects(NULL, NULL, NULL); 513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Initialize VoiceEngine 519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Init( 521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean enableTrace, 524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean useExtTrans) 525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enableTrace) 529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != VoiceEngine::SetTraceFile("/sdcard/trace.txt")) 531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not enable trace"); 534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != VoiceEngine::SetTraceFilter(kTraceAll)) 536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_WARN, WEBRTC_LOG_TAG, 538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not set trace filter"); 539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (useExtTrans) 543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_NETWORK_POINTER; 545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.extTrans = new my_transportation(veData1.netw); 546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int retVal = 0; 549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef INIT_FROM_THREAD 550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org threadTest.RunTest(); 551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org usleep(200000); 552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org retVal = veData1.base->Init(); 554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 557b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 559b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Terminate VoiceEngine 560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 561b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_Terminate( 562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject) 564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint retVal = veData1.base->Terminate(); 568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete veData1.extTrans; 570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData1.extTrans = NULL; 571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Create channel 577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_CreateChannel( 580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject) 582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel = veData1.base->CreateChannel(); 585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.extTrans) 587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_NETWORK_POINTER; 589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_print(ANDROID_LOG_DEBUG, WEBRTC_LOG_TAG, 590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Enabling external transport on channel %d", 591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel); 592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.netw->RegisterExternalTransport(channel, *veData1.extTrans) 593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org < 0) 594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not set external transport"); 597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channel; 602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Delete channel 606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_DeleteChannel( 609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.base->DeleteChannel(channel); 615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] SetLocalReceiver 619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_SetLocalReceiver( 621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 622b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel, 624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint port) 625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.base->SetLocalReceiver(channel, port); 628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] SetSendDestination 632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_SetSendDestination( 635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *env, 636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel, 638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint port, 639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jstring ipaddr) 640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* ipaddrNative = env->GetStringUTFChars(ipaddr, NULL); 644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!ipaddrNative) 645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not get UTF string"); 648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint retVal = veData1.base->SetSendDestination(channel, port, ipaddrNative); 652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org env->ReleaseStringUTFChars(ipaddr, ipaddrNative); 654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] StartListen 660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_StartListen( 662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int retVal = veData1.base->StartReceive(channel); 668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Start playout 674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_StartPlayout( 677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int retVal = veData1.base->StartPlayout(channel); 683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Start send 689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_StartSend( 691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 694b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* int dscp(0), serviceType(-1), overrideDscp(0), res(0); 696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool gqosEnabled(false), useSetSockOpt(false); 697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.netw->SetSendTOS(channel, 13, useSetSockOpt) != 0) 699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 701b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Failed to set TOS"); 702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 704b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 705b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org res = veData1.netw->GetSendTOS(channel, dscp, useSetSockOpt); 706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (res != 0 || dscp != 13 || useSetSockOpt != true) 707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Failed to get TOS"); 710b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } */ 712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 713dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org /* if (veData1.rtp_rtcp->SetREDStatus(channel, 1) != 0) 714b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 715b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 716dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "Failed to enable RED"); 717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 718b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } */ 719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int retVal = veData1.base->StartSend(channel); 722b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 726b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Stop listen 728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 729b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_StopListen( 730b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 731b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 732b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 733b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 734b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 735b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.base->StopReceive(channel); 736b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 737b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 738b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 739b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Stop playout 740b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 741b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_StopPlayout( 742b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 743b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 744b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 745b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 746b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 747b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.base->StopPlayout(channel); 748b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 749b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 750b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 751b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Base] Stop send 752b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 753b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_StopSend( 754b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 755b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 756b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 757b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 758dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org /* if (veData1.rtp_rtcp->SetREDStatus(channel, 0) != 0) 759b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 760b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 761dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "Failed to disable RED"); 762b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 763b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } */ 764b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 765b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_BASE_POINTER; 766b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.base->StopSend(channel); 767b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 768b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 769b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 770b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [codec] Number of codecs 771b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 772b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_NumOfCodecs( 773b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 774b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject) 775b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 776b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_CODEC_POINTER; 777b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.codec->NumOfCodecs(); 778b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 779b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 780b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 781b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [codec] Set send codec 782b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 783b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 784b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_SetSendCodec( 785b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 786b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 787b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel, 788b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint index) 789b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 790b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_CODEC_POINTER; 791b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 792b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CodecInst codec; 793b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 794b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.codec->GetCodec(index, codec) != 0) 795b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 796b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 797b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Failed to get codec"); 798b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 799b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 800b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 801b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.codec->SetSendCodec(channel, codec); 802b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 803b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 804b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 805b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [codec] Set VAD status 806b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 807b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 808b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_SetVADStatus( 809b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 810b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 811b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel, 812b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean enable, 813b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint mode) 814b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 815b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_CODEC_POINTER; 816b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 817b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VadModes VADmode = kVadConventional; 818b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 819b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch (mode) 820b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 821b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 0: 822b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; // already set 823b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 1: 824b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VADmode = kVadAggressiveLow; 825b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 826b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 2: 827b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VADmode = kVadAggressiveMid; 828b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 829b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 3: 830b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VADmode = kVadAggressiveHigh; 831b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 832b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 833b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VADmode = (VadModes) 17; // force error 834b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 835b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 836b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 837b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.codec->SetVADStatus(channel, enable, VADmode); 838b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 839b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 840b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 841b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [apm] SetNSStatus 842b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 843b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_SetNSStatus( 844b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 845b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 846b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean enable, 847b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint mode) 848b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 849b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_APM_POINTER; 850b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 851b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NsModes NSmode = kNsDefault; 852b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 853b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch (mode) 854b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 855b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 0: 856b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NSmode = kNsUnchanged; 857b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 858b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 1: 859b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; // already set 860b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 2: 861b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NSmode = kNsConference; 862b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 863b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 3: 864b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NSmode = kNsLowSuppression; 865b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 866b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 4: 867b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NSmode = kNsModerateSuppression; 868b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 869b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 5: 870b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NSmode = kNsHighSuppression; 871b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 872b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 6: 873b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NSmode = kNsVeryHighSuppression; 874b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 875b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 876b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NSmode = (NsModes) 17; // force error 877b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 878b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 879b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 880b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.apm->SetNsStatus(enable, NSmode); 881b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 882b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 883b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 884b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [apm] SetAGCStatus 885b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 886b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 887b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_SetAGCStatus( 888b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 889b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 890b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean enable, 891b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint mode) 892b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 893b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_APM_POINTER; 894b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 895b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AgcModes AGCmode = kAgcDefault; 896b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 897b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch (mode) 898b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 899b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 0: 900b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AGCmode = kAgcUnchanged; 901b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 902b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 1: 903b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; // already set 904b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 2: 905b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AGCmode = kAgcAdaptiveAnalog; 906b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 907b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 3: 908b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AGCmode = kAgcAdaptiveDigital; 909b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 910b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 4: 911b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AGCmode = kAgcFixedDigital; 912b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 913b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 914b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AGCmode = (AgcModes) 17; // force error 915b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 916b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 917b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 918b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* AgcConfig agcConfig; 919b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org agcConfig.targetLeveldBOv = 3; 920b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org agcConfig.digitalCompressionGaindB = 50; 921b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org agcConfig.limiterEnable = 0; 922b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 923b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.apm->SetAGCConfig(agcConfig) != 0) 924b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 925b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 926b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Failed to set AGC config"); 927b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 928b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } */ 929b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 930b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.apm->SetAgcStatus(enable, AGCmode); 931b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 932b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 933b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 934b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [apm] SetECStatus 935b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 936b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL Java_org_webrtc_voiceengine_test_AndroidTest_SetECStatus( 937b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 938b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 939b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean enable, 940b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint mode) 941b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 942b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_APM_POINTER; 943b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 944b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EcModes ECmode = kEcDefault; 945b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 946b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch (mode) 947b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 948b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 0: 949b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ECmode = kEcDefault; 950b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 951b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 1: 952b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; // already set 953b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 2: 954b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ECmode = kEcConference; 955b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 956b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 3: 957b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ECmode = kEcAec; 958b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 959b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 4: 960b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ECmode = kEcAecm; 961b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 962b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 963b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ECmode = (EcModes) 17; // force error 964b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 965b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 966b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 967b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.apm->SetEcStatus(enable, ECmode); 968b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 969b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 970b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 971b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [File] Start play file locally 972b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 973b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 974b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_StartPlayingFileLocally( 975b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv * env, 976b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 977b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel, 978b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jstring fileName, 979b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean loop) 980b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 981b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_FILE_POINTER; 982b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 983b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* fileNameNative = env->GetStringUTFChars(fileName, NULL); 984b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!fileNameNative) 985b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 986b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 987b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not get UTF string"); 988b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 989b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 990b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 991b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint retVal = veData1.file->StartPlayingFileLocally(channel, 992b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fileNameNative, loop); 993b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 994b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org env->ReleaseStringUTFChars(fileName, fileNameNative); 995b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 996b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 997b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 998b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 999b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 1000b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [File] Stop play file locally 1001b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 1002b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 1003b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_StopPlayingFileLocally( 1004b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 1005b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 1006b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 1007b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1008b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_FILE_POINTER; 1009b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.file->StopPlayingFileLocally(channel); 1010b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1011b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1012b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 1013b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Class: org_webrtc_voiceengine_test_AndroidTest 1014b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Method: StartRecordingPlayout 1015b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Signature: (ILjava/lang/String;Z)I 1016b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 1017b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 1018b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_StartRecordingPlayout( 1019b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv * env, 1020b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 1021b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel, 1022b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jstring fileName, 1023b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean) 1024b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1025b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_FILE_POINTER; 1026b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1027b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* fileNameNative = env->GetStringUTFChars(fileName, NULL); 1028b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!fileNameNative) 1029b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1030b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1031b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not get UTF string"); 1032b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1033b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1034b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1035b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint retVal = veData1.file->StartRecordingPlayout(channel, fileNameNative, 1036b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 0); 1037b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1038b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org env->ReleaseStringUTFChars(fileName, fileNameNative); 1039b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1040b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 1041b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1042b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1043b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 1044b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [File] Stop Recording Playout 1045b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 1046b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 1047b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_StopRecordingPlayout( 1048b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 1049b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 1050b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 1051b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1052b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_FILE_POINTER; 1053b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.file->StopRecordingPlayout(channel); 1054b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1055b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1056b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 1057b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [File] Start playing file as microphone 1058b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 1059b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 1060b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_StartPlayingFileAsMicrophone( 1061b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *env, 1062b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 1063b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel, 1064b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jstring fileName, 1065b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean loop) 1066b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1067b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_FILE_POINTER; 1068b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1069b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* fileNameNative = env->GetStringUTFChars(fileName, NULL); 1070b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!fileNameNative) 1071b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1072b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1073b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Could not get UTF string"); 1074b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1075b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1076b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1077b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint retVal = veData1.file->StartPlayingFileAsMicrophone(channel, 1078b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fileNameNative, 1079b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org loop); 1080b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1081b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org env->ReleaseStringUTFChars(fileName, fileNameNative); 1082b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1083b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return retVal; 1084b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1085b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1086b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 1087b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [File] Stop playing file as microphone 1088b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 1089b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 1090b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_StopPlayingFileAsMicrophone( 1091b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 1092b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 1093b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint channel) 1094b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1095b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_FILE_POINTER; 1096b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return veData1.file->StopPlayingFileAsMicrophone(channel); 1097b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1098b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1099b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 1100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Volume] Set speaker volume 1101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 1102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 1103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_SetSpeakerVolume( 1104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 1105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 1106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jint level) 1107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_VOLUME_POINTER; 1109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.volume->SetSpeakerVolume(level) != 0) 1110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int storedVolume = 0; 1115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.volume->GetSpeakerVolume(storedVolume) != 0) 1116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (storedVolume != level) 1121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 1129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// [Hardware] Set loudspeaker status 1130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 1131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJNIEXPORT jint JNICALL 1132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgJava_org_webrtc_voiceengine_test_AndroidTest_SetLoudspeakerStatus( 1133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JNIEnv *, 1134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject, 1135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jboolean enable) 1136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VALIDATE_HARDWARE_POINTER; 1138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData1.hardware->SetLoudspeakerStatus(enable) != 0) 1139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /*VALIDATE_RTP_RTCP_POINTER; 1144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1145dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org if (veData1.rtp_rtcp->SetREDStatus(0, enable, -1) != 0) 1146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1148dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "Could not set RED"); 1149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if(enable) 1152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1154dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "Could enable RED"); 1155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1159dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "Could disable RED"); 1160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }*/ 1161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org////////////////////////////////////////////////////////////////// 1166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// "Local" functions (i.e. not Java accessible) 1167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org////////////////////////////////////////////////////////////////// 1168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 1170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Get all sub-APIs 1171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 1172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool GetSubApis(VoiceEngineData &veData) 1173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool getOK = true; 1175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Base 1177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.base = VoEBase::GetInterface(veData.ve); 1178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData.base) 1179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Get base sub-API failed"); 1182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getOK = false; 1183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Codec 1186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.codec = VoECodec::GetInterface(veData.ve); 1187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData.codec) 1188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Get codec sub-API failed"); 1191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getOK = false; 1192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // File 1195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.file = VoEFile::GetInterface(veData.ve); 1196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData.file) 1197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Get file sub-API failed"); 1200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getOK = false; 1201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Network 1204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.netw = VoENetwork::GetInterface(veData.ve); 1205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData.netw) 1206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Get network sub-API failed"); 1209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getOK = false; 1210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // AudioProcessing module 1213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.apm = VoEAudioProcessing::GetInterface(veData.ve); 1214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData.apm) 1215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Get apm sub-API failed"); 1218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getOK = false; 1219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Volume 1222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.volume = VoEVolumeControl::GetInterface(veData.ve); 1223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData.volume) 1224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Get volume sub-API failed"); 1227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getOK = false; 1228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Hardware 1231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.hardware = VoEHardware::GetInterface(veData.ve); 1232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData.hardware) 1233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Get hardware sub-API failed"); 1236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getOK = false; 1237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // RTP / RTCP 1240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.rtp_rtcp = VoERTP_RTCP::GetInterface(veData.ve); 1241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!veData.rtp_rtcp) 1242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Get rtp_rtcp sub-API failed"); 1245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getOK = false; 1246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return getOK; 1249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org///////////////////////////////////////////// 1252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Release all sub-APIs 1253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 1254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool ReleaseSubApis(VoiceEngineData &veData) 1255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool releaseOK = true; 1257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Base 1259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData.base) 1260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != veData.base->Release()) 1262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Release base sub-API failed"); 1265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 1266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.base = NULL; 1270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Codec 1274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData.codec) 1275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != veData.codec->Release()) 1277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Release codec sub-API failed"); 1280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 1281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.codec = NULL; 1285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // File 1289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData.file) 1290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != veData.file->Release()) 1292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Release file sub-API failed"); 1295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 1296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.file = NULL; 1300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Network 1304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData.netw) 1305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != veData.netw->Release()) 1307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Release network sub-API failed"); 1310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 1311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.netw = NULL; 1315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // apm 1319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData.apm) 1320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != veData.apm->Release()) 1322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Release apm sub-API failed"); 1325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 1326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.apm = NULL; 1330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Volume 1334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData.volume) 1335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != veData.volume->Release()) 1337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Release volume sub-API failed"); 1340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 1341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.volume = NULL; 1345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Hardware 1349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData.hardware) 1350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != veData.hardware->Release()) 1352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Release hardware sub-API failed"); 1355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 1356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.hardware = NULL; 1360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // RTP RTCP 1364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (veData.rtp_rtcp) 1365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (0 != veData.rtp_rtcp->Release()) 1367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org __android_log_write(ANDROID_LOG_ERROR, WEBRTC_LOG_TAG, 1369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Release rtp_rtcp sub-API failed"); 1370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 1371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org veData.rtp_rtcp = NULL; 1375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return releaseOK; 1379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1380