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