blob: 24de205c5283d7da919566509fc85c550ce54354 [file] [log] [blame]
Phil Burk0433d8f2018-11-21 16:41:25 -08001/*
2 * Copyright 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#define MODULE_NAME "OboeTester"
18
19#include <cassert>
20#include <cstring>
21#include <jni.h>
22#include <stdint.h>
23#include <thread>
24
25#include "common/OboeDebug.h"
26#include "oboe/Oboe.h"
27
28#include "NativeAudioContext.h"
29
Phil Burk0af43bb2019-03-12 14:11:38 -070030NativeAudioContext engine;
Phil Burk0433d8f2018-11-21 16:41:25 -080031
32/*********************************************************************************/
33/********************** JNI Prototypes *****************************************/
34/*********************************************************************************/
35extern "C" {
36
Phil Burk0433d8f2018-11-21 16:41:25 -080037JNIEXPORT jint JNICALL
38Java_com_google_sample_oboe_manualtest_OboeAudioStream_openNative(JNIEnv *env, jobject,
Phil Burk6c16ce92019-03-05 16:07:38 -080039 jint nativeApi,
Phil Burk0433d8f2018-11-21 16:41:25 -080040 jint sampleRate,
41 jint channelCount,
42 jint format,
43 jint sharingMode,
44 jint performanceMode,
45 jint deviceId,
46 jint sessionId,
47 jint framesPerBurst,
Phil Burk301b0662019-06-06 11:36:30 -070048 jboolean channelConversionAllowed,
Phil Burk59273982019-08-29 09:10:37 -070049 jboolean formatConversionAllowed,
Phil Burk301b0662019-06-06 11:36:30 -070050 jint rateConversionQuality,
Phil Burk0433d8f2018-11-21 16:41:25 -080051 jboolean isInput);
52JNIEXPORT void JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -080053Java_com_google_sample_oboe_manualtest_OboeAudioStream_close(JNIEnv *env, jobject, jint);
Phil Burk0af43bb2019-03-12 14:11:38 -070054
Phil Burk0433d8f2018-11-21 16:41:25 -080055JNIEXPORT jint JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -080056Java_com_google_sample_oboe_manualtest_OboeAudioStream_setThresholdInFrames(JNIEnv *env, jobject, jint, jint);
Phil Burk0433d8f2018-11-21 16:41:25 -080057JNIEXPORT jint JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -080058Java_com_google_sample_oboe_manualtest_OboeAudioStream_getThresholdInFrames(JNIEnv *env, jobject, jint);
Phil Burk0433d8f2018-11-21 16:41:25 -080059JNIEXPORT jint JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -080060Java_com_google_sample_oboe_manualtest_OboeAudioStream_getBufferCapacityInFrames(JNIEnv *env, jobject, jint);
Phil Burk0433d8f2018-11-21 16:41:25 -080061JNIEXPORT jint JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -080062Java_com_google_sample_oboe_manualtest_OboeAudioStream_setNativeApi(JNIEnv *env, jobject, jint, jint);
Phil Burk0433d8f2018-11-21 16:41:25 -080063
64JNIEXPORT void JNICALL
65Java_com_google_sample_oboe_manualtest_OboeAudioStream_setUseCallback(JNIEnv *env, jclass type,
Phil Burk6fb1d802018-12-21 15:28:07 -080066 jboolean useCallback);
67JNIEXPORT void JNICALL
68Java_com_google_sample_oboe_manualtest_OboeAudioStream_setCallbackReturnStop(JNIEnv *env,
69 jclass type,
70 jboolean b);
Phil Burk0433d8f2018-11-21 16:41:25 -080071JNIEXPORT void JNICALL
72Java_com_google_sample_oboe_manualtest_OboeAudioStream_setCallbackSize(JNIEnv *env, jclass type,
73 jint callbackSize);
74
75// ================= OboeAudioOutputStream ================================
76
77JNIEXPORT void JNICALL
78Java_com_google_sample_oboe_manualtest_OboeAudioOutputStream_setToneEnabled(JNIEnv *env, jobject, jboolean);
79JNIEXPORT void JNICALL
80Java_com_google_sample_oboe_manualtest_OboeAudioOutputStream_setToneType(JNIEnv *env, jobject, jint);
81JNIEXPORT void JNICALL
82Java_com_google_sample_oboe_manualtest_OboeAudioOutputStream_setAmplitude(JNIEnv *env, jobject, jdouble);
83
84/*********************************************************************************/
85/********************** JNI Implementations *************************************/
86/*********************************************************************************/
Phil Burk6c16ce92019-03-05 16:07:38 -080087
Phil Burk0433d8f2018-11-21 16:41:25 -080088JNIEXPORT jint JNICALL
89Java_com_google_sample_oboe_manualtest_OboeAudioStream_openNative(
90 JNIEnv *env, jobject synth,
Phil Burk6c16ce92019-03-05 16:07:38 -080091 jint nativeApi,
Phil Burk0433d8f2018-11-21 16:41:25 -080092 jint sampleRate,
93 jint channelCount,
94 jint format,
95 jint sharingMode,
96 jint performanceMode,
97 jint deviceId,
98 jint sessionId,
99 jint framesPerBurst,
Phil Burk301b0662019-06-06 11:36:30 -0700100 jboolean channelConversionAllowed,
Phil Burk59273982019-08-29 09:10:37 -0700101 jboolean formatConversionAllowed,
Phil Burk301b0662019-06-06 11:36:30 -0700102 jint rateConversionQuality,
Phil Burk0433d8f2018-11-21 16:41:25 -0800103 jboolean isInput) {
104 LOGD("OboeAudioStream_openNative: sampleRate = %d, framesPerBurst = %d", sampleRate, framesPerBurst);
105
Phil Burk0af43bb2019-03-12 14:11:38 -0700106 return (jint) engine.getCurrentActivity()->open(nativeApi,
Phil Burk6c16ce92019-03-05 16:07:38 -0800107 sampleRate,
Phil Burk0433d8f2018-11-21 16:41:25 -0800108 channelCount,
109 format,
110 sharingMode,
111 performanceMode,
112 deviceId,
113 sessionId,
114 framesPerBurst,
Phil Burk301b0662019-06-06 11:36:30 -0700115 channelConversionAllowed,
Phil Burk59273982019-08-29 09:10:37 -0700116 formatConversionAllowed,
Phil Burk301b0662019-06-06 11:36:30 -0700117 rateConversionQuality,
Phil Burk0433d8f2018-11-21 16:41:25 -0800118 isInput);
119}
120
121JNIEXPORT jint JNICALL
Phil Burk03bdc0a2019-03-06 15:56:25 -0800122Java_com_google_sample_oboe_manualtest_TestAudioActivity_startNative(JNIEnv *env, jobject) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700123 return (jint) engine.getCurrentActivity()->start();
Phil Burk0433d8f2018-11-21 16:41:25 -0800124}
125
126JNIEXPORT jint JNICALL
Phil Burk03bdc0a2019-03-06 15:56:25 -0800127Java_com_google_sample_oboe_manualtest_TestAudioActivity_pauseNative(JNIEnv *env, jobject) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700128 return (jint) engine.getCurrentActivity()->pause();
Phil Burk0433d8f2018-11-21 16:41:25 -0800129}
130
131JNIEXPORT jint JNICALL
Phil Burk03bdc0a2019-03-06 15:56:25 -0800132Java_com_google_sample_oboe_manualtest_TestAudioActivity_stopNative(JNIEnv *env, jobject) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700133 return (jint) engine.getCurrentActivity()->stop();
Phil Burk0433d8f2018-11-21 16:41:25 -0800134}
135
136JNIEXPORT jint JNICALL
137Java_com_google_sample_oboe_manualtest_OboeAudioStream_startPlaybackNative(JNIEnv *env, jobject) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700138 return (jint) engine.getCurrentActivity()->startPlayback();
Phil Burk0433d8f2018-11-21 16:41:25 -0800139}
140
141JNIEXPORT void JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -0800142Java_com_google_sample_oboe_manualtest_OboeAudioStream_close(JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700143 engine.getCurrentActivity()->close(streamIndex);
Phil Burk0433d8f2018-11-21 16:41:25 -0800144}
145
146JNIEXPORT jint JNICALL
147Java_com_google_sample_oboe_manualtest_OboeAudioStream_setBufferSizeInFrames(
Phil Burk6c16ce92019-03-05 16:07:38 -0800148 JNIEnv *env, jobject, jint streamIndex, jint threshold) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700149 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800150 if (oboeStream != nullptr) {
151 auto result = oboeStream->setBufferSizeInFrames(threshold);
Phil Burk0433d8f2018-11-21 16:41:25 -0800152 return (!result)
153 ? (jint) result.error()
154 : (jint) result.value();
155 }
156 return (jint) oboe::Result::ErrorNull;
157}
158
159JNIEXPORT jint JNICALL
160Java_com_google_sample_oboe_manualtest_OboeAudioStream_getBufferSizeInFrames(
Phil Burk6c16ce92019-03-05 16:07:38 -0800161 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800162 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700163 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800164 if (oboeStream != nullptr) {
165 result = oboeStream->getBufferSizeInFrames();
Phil Burk0433d8f2018-11-21 16:41:25 -0800166 }
167 return result;
168}
169
170JNIEXPORT jint JNICALL
171Java_com_google_sample_oboe_manualtest_OboeAudioStream_getBufferCapacityInFrames(
Phil Burk6c16ce92019-03-05 16:07:38 -0800172 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800173 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700174 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800175 if (oboeStream != nullptr) {
176 result = oboeStream->getBufferCapacityInFrames();
Phil Burk0433d8f2018-11-21 16:41:25 -0800177 }
178 return result;
179}
180
181static int convertAudioApiToNativeApi(oboe::AudioApi audioApi) {
182 switch(audioApi) {
183 case oboe::AudioApi::Unspecified:
184 return NATIVE_MODE_UNSPECIFIED;
185 case oboe::AudioApi::OpenSLES:
186 return NATIVE_MODE_OPENSLES;
187 case oboe::AudioApi::AAudio:
188 return NATIVE_MODE_AAUDIO;
189 default:
190 return -1;
191 }
192}
193
194JNIEXPORT jint JNICALL
195Java_com_google_sample_oboe_manualtest_OboeAudioStream_getNativeApi(
Phil Burk6c16ce92019-03-05 16:07:38 -0800196 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800197 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700198 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800199 if (oboeStream != nullptr) {
200 oboe::AudioApi audioApi = oboeStream->getAudioApi();
Phil Burk0433d8f2018-11-21 16:41:25 -0800201 result = convertAudioApiToNativeApi(audioApi);
202 LOGD("OboeAudioStream_getNativeApi got %d", result);
203 }
204 return result;
205}
206
207JNIEXPORT jint JNICALL
208Java_com_google_sample_oboe_manualtest_OboeAudioStream_getSampleRate(
Phil Burk6c16ce92019-03-05 16:07:38 -0800209 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800210 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700211 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800212 if (oboeStream != nullptr) {
213 result = oboeStream->getSampleRate();
Phil Burk0433d8f2018-11-21 16:41:25 -0800214 }
215 return result;
216}
217
218JNIEXPORT jint JNICALL
219Java_com_google_sample_oboe_manualtest_OboeAudioStream_getSharingMode(
Phil Burk6c16ce92019-03-05 16:07:38 -0800220 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800221 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700222 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800223 if (oboeStream != nullptr) {
224 result = (jint) oboeStream->getSharingMode();
Phil Burk0433d8f2018-11-21 16:41:25 -0800225 }
226 return result;
227}
228
229JNIEXPORT jint JNICALL
230Java_com_google_sample_oboe_manualtest_OboeAudioStream_getPerformanceMode(
Phil Burk6c16ce92019-03-05 16:07:38 -0800231 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800232 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700233 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800234 if (oboeStream != nullptr) {
235 result = (jint) oboeStream->getPerformanceMode();
Phil Burk0433d8f2018-11-21 16:41:25 -0800236 }
237 return result;
238}
239
240JNIEXPORT jint JNICALL
241Java_com_google_sample_oboe_manualtest_OboeAudioStream_getFramesPerBurst(
Phil Burk6c16ce92019-03-05 16:07:38 -0800242 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800243 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700244 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800245 if (oboeStream != nullptr) {
246 result = oboeStream->getFramesPerBurst();
Phil Burk0433d8f2018-11-21 16:41:25 -0800247 }
248 return result;
249}
250
251JNIEXPORT jint JNICALL
252Java_com_google_sample_oboe_manualtest_OboeAudioStream_getChannelCount(
Phil Burk6c16ce92019-03-05 16:07:38 -0800253 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800254 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700255 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800256 if (oboeStream != nullptr) {
257 result = oboeStream->getChannelCount();
Phil Burk0433d8f2018-11-21 16:41:25 -0800258 }
259 return result;
260}
261
262JNIEXPORT jint JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -0800263Java_com_google_sample_oboe_manualtest_OboeAudioStream_getFormat(JNIEnv *env, jobject instance, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800264 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700265 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800266 if (oboeStream != nullptr) {
267 result = (jint) oboeStream->getFormat();
268 }
269 return result;
Phil Burk0433d8f2018-11-21 16:41:25 -0800270}
271
272JNIEXPORT jint JNICALL
273Java_com_google_sample_oboe_manualtest_OboeAudioStream_getDeviceId(
Phil Burk6c16ce92019-03-05 16:07:38 -0800274 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800275 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700276 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800277 if (oboeStream != nullptr) {
278 result = oboeStream->getDeviceId();
Phil Burk0433d8f2018-11-21 16:41:25 -0800279 }
280 return result;
281}
282
283JNIEXPORT jint JNICALL
284Java_com_google_sample_oboe_manualtest_OboeAudioStream_getSessionId(
Phil Burk6c16ce92019-03-05 16:07:38 -0800285 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800286 jint result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700287 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800288 if (oboeStream != nullptr) {
289 result = oboeStream->getSessionId();
Phil Burk0433d8f2018-11-21 16:41:25 -0800290 }
291 return result;
292}
293
294JNIEXPORT jlong JNICALL
295Java_com_google_sample_oboe_manualtest_OboeAudioStream_getFramesWritten(
Phil Burk6c16ce92019-03-05 16:07:38 -0800296 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800297 jlong result = (jint) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700298 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800299 if (oboeStream != nullptr) {
300 result = oboeStream->getFramesWritten();
Phil Burk0433d8f2018-11-21 16:41:25 -0800301 }
302 return result;
303}
304
305JNIEXPORT jlong JNICALL
306Java_com_google_sample_oboe_manualtest_OboeAudioStream_getFramesRead(
Phil Burk6c16ce92019-03-05 16:07:38 -0800307 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk0433d8f2018-11-21 16:41:25 -0800308 jlong result = (jlong) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700309 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800310 if (oboeStream != nullptr) {
311 result = oboeStream->getFramesRead();
Phil Burk0433d8f2018-11-21 16:41:25 -0800312 }
313 return result;
314}
315
Phil Burk5cb621f2019-02-14 17:51:30 -0800316JNIEXPORT jint JNICALL
317Java_com_google_sample_oboe_manualtest_OboeAudioStream_getXRunCount(
Phil Burk6c16ce92019-03-05 16:07:38 -0800318 JNIEnv *env, jobject, jint streamIndex) {
Phil Burk5cb621f2019-02-14 17:51:30 -0800319 jint result = (jlong) oboe::Result::ErrorNull;
Phil Burk0af43bb2019-03-12 14:11:38 -0700320 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800321 if (oboeStream != nullptr) {
322 auto oboeResult = oboeStream->getXRunCount();
Phil Burk5cb621f2019-02-14 17:51:30 -0800323 if (!oboeResult) {
324 result = (jint) oboeResult.error();
325 } else {
326 result = oboeResult.value();
327 }
328 }
329 return result;
330}
331
Phil Burk6fb1d802018-12-21 15:28:07 -0800332JNIEXPORT jlong JNICALL
333Java_com_google_sample_oboe_manualtest_OboeAudioStream_getCallbackCount(
334 JNIEnv *env, jobject) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700335 return engine.getCurrentActivity()->getCallbackCount();
Phil Burk6fb1d802018-12-21 15:28:07 -0800336}
337
Phil Burk0433d8f2018-11-21 16:41:25 -0800338JNIEXPORT jdouble JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -0800339Java_com_google_sample_oboe_manualtest_OboeAudioStream_getLatency(JNIEnv *env, jobject instance, jint streamIndex) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700340 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800341 if (oboeStream != nullptr) {
342 auto result = oboeStream->calculateLatencyMillis();
Phil Burk0433d8f2018-11-21 16:41:25 -0800343 return (!result) ? -1.0 : result.value();
344 }
345 return -1.0;
346}
347
348JNIEXPORT jint JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -0800349Java_com_google_sample_oboe_manualtest_OboeAudioStream_getState(JNIEnv *env, jobject instance, jint streamIndex) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700350 oboe::AudioStream *oboeStream = engine.getCurrentActivity()->getStream(streamIndex);
Phil Burk6c16ce92019-03-05 16:07:38 -0800351 if (oboeStream != nullptr) {
352 auto state = oboeStream->getState();
Phil Burk0433d8f2018-11-21 16:41:25 -0800353 if (state != oboe::StreamState::Starting && state != oboe::StreamState::Started) {
Phil Burk6c16ce92019-03-05 16:07:38 -0800354 oboe::Result result = oboeStream->waitForStateChange(
Phil Burk0433d8f2018-11-21 16:41:25 -0800355 oboe::StreamState::Uninitialized,
356 &state, 0);
357 if (result != oboe::Result::OK) state = oboe::StreamState::Unknown;
358 }
359 return (jint) state;
360 }
361 return -1;
362}
363
364JNIEXPORT jdouble JNICALL
365Java_com_google_sample_oboe_manualtest_AudioInputTester_getPeakLevel(JNIEnv *env,
366 jobject instance,
367 jint index) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700368 return engine.getCurrentActivity()->getPeakLevel(index);
Phil Burk0433d8f2018-11-21 16:41:25 -0800369}
370
371JNIEXPORT void JNICALL
372Java_com_google_sample_oboe_manualtest_OboeAudioStream_setUseCallback(JNIEnv *env, jclass type,
Phil Burk6fb1d802018-12-21 15:28:07 -0800373 jboolean useCallback) {
Phil Burkbd76d6a2019-06-01 08:48:03 -0700374 ActivityContext::mUseCallback = useCallback;
Phil Burk6fb1d802018-12-21 15:28:07 -0800375}
Phil Burk0433d8f2018-11-21 16:41:25 -0800376
Phil Burk6fb1d802018-12-21 15:28:07 -0800377JNIEXPORT void JNICALL
378Java_com_google_sample_oboe_manualtest_OboeAudioStream_setCallbackReturnStop(JNIEnv *env, jclass type,
379 jboolean b) {
Phil Burk6f1d5c12019-04-05 15:33:07 -0700380 OboeStreamCallbackProxy::setCallbackReturnStop(b);
Phil Burk0433d8f2018-11-21 16:41:25 -0800381}
382
383JNIEXPORT void JNICALL
384Java_com_google_sample_oboe_manualtest_OboeAudioStream_setCallbackSize(JNIEnv *env, jclass type,
385 jint callbackSize) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700386 ActivityContext::callbackSize = callbackSize;
Phil Burk0433d8f2018-11-21 16:41:25 -0800387}
388
389JNIEXPORT jboolean JNICALL
Phil Burk6c16ce92019-03-05 16:07:38 -0800390Java_com_google_sample_oboe_manualtest_OboeAudioStream_isMMap(JNIEnv *env, jobject instance, jint streamIndex) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700391 return engine.getCurrentActivity()->isMMapUsed(streamIndex);
Phil Burk0433d8f2018-11-21 16:41:25 -0800392}
393
394// ================= OboeAudioOutputStream ================================
395
396JNIEXPORT void JNICALL
397Java_com_google_sample_oboe_manualtest_OboeAudioOutputStream_setToneEnabled(
398 JNIEnv *env, jobject, jboolean enabled) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700399 engine.getCurrentActivity()->setEnabled(enabled);
Phil Burk0433d8f2018-11-21 16:41:25 -0800400}
401
402JNIEXPORT void JNICALL
403Java_com_google_sample_oboe_manualtest_OboeAudioOutputStream_setToneType(
404 JNIEnv *env, jobject, jint toneType) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700405// FIXME engine.getCurrentActivity()->setToneType(toneType);
Phil Burk0433d8f2018-11-21 16:41:25 -0800406}
407
408JNIEXPORT void JNICALL
409Java_com_google_sample_oboe_manualtest_OboeAudioOutputStream_setAmplitude(
410 JNIEnv *env, jobject, jdouble amplitude) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700411 engine.getCurrentActivity()->setAmplitude(amplitude);
Phil Burk0433d8f2018-11-21 16:41:25 -0800412
413}
414
Phil Burke5985ed2018-12-06 11:38:30 -0800415JNIEXPORT void JNICALL
416Java_com_google_sample_oboe_manualtest_OboeAudioOutputStream_setChannelEnabled(
417 JNIEnv *env, jobject, jint channelIndex, jboolean enabled) {
Phil Burk0af43bb2019-03-12 14:11:38 -0700418 engine.getCurrentActivity()->setChannelEnabled(channelIndex, enabled);
Phil Burke5985ed2018-12-06 11:38:30 -0800419}
420
Phil Burk0a784e62019-07-20 12:43:15 -0700421JNIEXPORT void JNICALL
422Java_com_google_sample_oboe_manualtest_OboeAudioOutputStream_setSignalType(
423 JNIEnv *env, jobject, jint signalType) {
424 engine.getCurrentActivity()->setSignalType(signalType);
425}
426
Phil Burk7386a832019-03-21 16:07:27 -0700427// ==========================================================================
Phil Burk03bdc0a2019-03-06 15:56:25 -0800428JNIEXPORT void JNICALL
429Java_com_google_sample_oboe_manualtest_TestAudioActivity_setActivityType(JNIEnv *env,
430 jobject instance,
431 jint activityType) {
432 engine.setActivityType(activityType);
433}
434
Phil Burk7386a832019-03-21 16:07:27 -0700435// ==========================================================================
Phil Burk327361c2019-04-13 14:45:27 -0700436JNIEXPORT jint JNICALL
437Java_com_google_sample_oboe_manualtest_TestInputActivity_saveWaveFile(JNIEnv *env,
438 jobject instance,
439 jstring fileName) {
440 const char *str = env->GetStringUTFChars(fileName, nullptr);
441 LOGD("nativeSaveFile(%s)", str);
442 jint result = engine.getCurrentActivity()->saveWaveFile(str);
443 env->ReleaseStringUTFChars(fileName, str);
444 return result;
445}
446
447// ==========================================================================
Phil Burk1d17a602019-03-12 15:37:56 -0700448JNIEXPORT void JNICALL
Phil Burkbbde5bb2019-09-02 16:00:18 -0700449Java_com_google_sample_oboe_manualtest_TestInputActivity_setMinimumFramesBeforeRead(JNIEnv *env,
450 jobject instance,
451 jint numFrames) {
452 engine.getCurrentActivity()->setMinimumFramesBeforeRead(numFrames);
453}
454
455// ==========================================================================
456JNIEXPORT void JNICALL
Phil Burk1d17a602019-03-12 15:37:56 -0700457Java_com_google_sample_oboe_manualtest_EchoActivity_setDelayTime(JNIEnv *env,
458 jobject instance,
459 jdouble delayTimeSeconds) {
460 engine.setDelayTime(delayTimeSeconds);
461}
462
Phil Burk7386a832019-03-21 16:07:27 -0700463// ==========================================================================
Phil Burk80d83d82019-03-15 12:03:37 -0700464JNIEXPORT jint JNICALL
465Java_com_google_sample_oboe_manualtest_RoundTripLatencyActivity_getAnalyzerProgress(JNIEnv *env,
Phil Burk3873e882019-03-18 10:15:13 -0700466 jobject instance) {
Phil Burkd2dd5272019-03-18 16:05:25 -0700467 return engine.mActivityRoundTripLatency.getLatencyAnalyzer()->getProgress();
Phil Burk80d83d82019-03-15 12:03:37 -0700468}
469
Phil Burkcd12e2c2019-07-29 20:39:42 -0700470JNIEXPORT jint JNICALL
Phil Burk80d83d82019-03-15 12:03:37 -0700471Java_com_google_sample_oboe_manualtest_RoundTripLatencyActivity_getMeasuredLatency(JNIEnv *env,
472 jobject instance) {
Phil Burkd2dd5272019-03-18 16:05:25 -0700473 return engine.mActivityRoundTripLatency.getLatencyAnalyzer()->getMeasuredLatency();
Phil Burk80d83d82019-03-15 12:03:37 -0700474}
475
476JNIEXPORT jdouble JNICALL
477Java_com_google_sample_oboe_manualtest_RoundTripLatencyActivity_getMeasuredConfidence(JNIEnv *env,
Phil Burkd2dd5272019-03-18 16:05:25 -0700478 jobject instance) {
479 return engine.mActivityRoundTripLatency.getLatencyAnalyzer()->getMeasuredConfidence();
480}
481
Phil Burkcd12e2c2019-07-29 20:39:42 -0700482JNIEXPORT jdouble JNICALL
483Java_com_google_sample_oboe_manualtest_RoundTripLatencyActivity_getBackgroundRMS(JNIEnv *env,
484 jobject instance) {
485 return engine.mActivityRoundTripLatency.getLatencyAnalyzer()->getBackgroundRMS();
486}
487
488JNIEXPORT jdouble JNICALL
489Java_com_google_sample_oboe_manualtest_RoundTripLatencyActivity_getSignalRMS(JNIEnv *env,
490 jobject instance) {
491 return engine.mActivityRoundTripLatency.getLatencyAnalyzer()->getSignalRMS();
492}
493
494JNIEXPORT jint JNICALL
495Java_com_google_sample_oboe_manualtest_AnalyzerActivity_getMeasuredResult(JNIEnv *env,
496 jobject instance) {
497 return engine.mActivityRoundTripLatency.getLatencyAnalyzer()->getResult();
498}
499
Phil Burk7386a832019-03-21 16:07:27 -0700500// ==========================================================================
Phil Burkd2dd5272019-03-18 16:05:25 -0700501JNIEXPORT jint JNICALL
Phil Burk7386a832019-03-21 16:07:27 -0700502Java_com_google_sample_oboe_manualtest_AnalyzerActivity_getAnalyzerState(JNIEnv *env,
503 jobject instance) {
504 return ((ActivityFullDuplex *)engine.getCurrentActivity())->getState();
505}
506
507JNIEXPORT jboolean JNICALL
508Java_com_google_sample_oboe_manualtest_AnalyzerActivity_isAnalyzerDone(JNIEnv *env,
509 jobject instance) {
510 return ((ActivityFullDuplex *)engine.getCurrentActivity())->isAnalyzerDone();
511}
512
513JNIEXPORT jint JNICALL
Phil Burkcd818322019-03-22 16:51:40 -0700514Java_com_google_sample_oboe_manualtest_AnalyzerActivity_getResetCount(JNIEnv *env,
515 jobject instance) {
516 return ((ActivityFullDuplex *)engine.getCurrentActivity())->getResetCount();
517}
Phil Burk7386a832019-03-21 16:07:27 -0700518
519// ==========================================================================
520JNIEXPORT jint JNICALL
521Java_com_google_sample_oboe_manualtest_GlitchActivity_getGlitchCount(JNIEnv *env,
522 jobject instance) {
Phil Burk7386a832019-03-21 16:07:27 -0700523 return engine.mActivityGlitches.getGlitchAnalyzer()->getGlitchCount();
Phil Burk0433d8f2018-11-21 16:41:25 -0800524}
Phil Burk7386a832019-03-21 16:07:27 -0700525
Phil Burkbbde5bb2019-09-02 16:00:18 -0700526JNIEXPORT jint JNICALL
527Java_com_google_sample_oboe_manualtest_GlitchActivity_getStateFrameCount(JNIEnv *env,
528 jobject instance,
529 jint state) {
530 return engine.mActivityGlitches.getGlitchAnalyzer()->getStateFrameCount(state);
531}
532
Phil Burk7386a832019-03-21 16:07:27 -0700533JNIEXPORT jdouble JNICALL
534Java_com_google_sample_oboe_manualtest_GlitchActivity_getSignalToNoiseDB(JNIEnv *env,
535 jobject instance) {
Phil Burk7386a832019-03-21 16:07:27 -0700536 return engine.mActivityGlitches.getGlitchAnalyzer()->getSignalToNoiseDB();
537}
Phil Burke87667d2019-04-30 14:01:42 -0700538JNIEXPORT jdouble JNICALL
539Java_com_google_sample_oboe_manualtest_GlitchActivity_getPeakAmplitude(JNIEnv *env,
540 jobject instance) {
541 return engine.mActivityGlitches.getGlitchAnalyzer()->getPeakAmplitude();
542}
Phil Burk7386a832019-03-21 16:07:27 -0700543
544}