100 |
100 |
101 midCreateGLContext = mEnv->GetStaticMethodID(mActivityClass, |
101 midCreateGLContext = mEnv->GetStaticMethodID(mActivityClass, |
102 "createGLContext","(II)Z"); |
102 "createGLContext","(II)Z"); |
103 midFlipBuffers = mEnv->GetStaticMethodID(mActivityClass, |
103 midFlipBuffers = mEnv->GetStaticMethodID(mActivityClass, |
104 "flipBuffers","()V"); |
104 "flipBuffers","()V"); |
105 midAudioInit = mEnv->GetStaticMethodID(mActivityClass, |
105 midAudioInit = mEnv->GetStaticMethodID(mActivityClass, |
106 "audioInit", "(IZZI)Ljava/lang/Object;"); |
106 "audioInit", "(IZZI)Ljava/lang/Object;"); |
107 midAudioWriteShortBuffer = mEnv->GetStaticMethodID(mActivityClass, |
107 midAudioWriteShortBuffer = mEnv->GetStaticMethodID(mActivityClass, |
108 "audioWriteShortBuffer", "([S)V"); |
108 "audioWriteShortBuffer", "([S)V"); |
109 midAudioWriteByteBuffer = mEnv->GetStaticMethodID(mActivityClass, |
109 midAudioWriteByteBuffer = mEnv->GetStaticMethodID(mActivityClass, |
110 "audioWriteByteBuffer", "([B)V"); |
110 "audioWriteByteBuffer", "([B)V"); |
255 { |
255 { |
256 int audioBufferFrames; |
256 int audioBufferFrames; |
257 |
257 |
258 int status; |
258 int status; |
259 JNIEnv *env; |
259 JNIEnv *env; |
260 static bool isAttached = false; |
260 static bool isAttached = false; |
261 status = mJavaVM->GetEnv((void **) &env, JNI_VERSION_1_4); |
261 status = mJavaVM->GetEnv((void **) &env, JNI_VERSION_1_4); |
262 if(status < 0) { |
262 if(status < 0) { |
263 LOGE("callback_handler: failed to get JNI environment, assuming native thread"); |
263 LOGE("callback_handler: failed to get JNI environment, assuming native thread"); |
264 status = mJavaVM->AttachCurrentThread(&env, NULL); |
264 status = mJavaVM->AttachCurrentThread(&env, NULL); |
265 if(status < 0) { |
265 if(status < 0) { |
267 return 0; |
267 return 0; |
268 } |
268 } |
269 isAttached = true; |
269 isAttached = true; |
270 } |
270 } |
271 |
271 |
272 |
272 |
273 __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device"); |
273 __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device"); |
274 audioBuffer16Bit = is16Bit; |
274 audioBuffer16Bit = is16Bit; |
275 audioBufferStereo = channelCount > 1; |
275 audioBufferStereo = channelCount > 1; |
276 |
276 |
277 audioBuffer = env->CallStaticObjectMethod(mActivityClass, midAudioInit, sampleRate, audioBuffer16Bit, audioBufferStereo, desiredBufferFrames); |
277 audioBuffer = env->CallStaticObjectMethod(mActivityClass, midAudioInit, sampleRate, audioBuffer16Bit, audioBufferStereo, desiredBufferFrames); |
291 audioBufferFrames = env->GetArrayLength((jbyteArray)audioBuffer); |
291 audioBufferFrames = env->GetArrayLength((jbyteArray)audioBuffer); |
292 } |
292 } |
293 if (audioBufferStereo) { |
293 if (audioBufferStereo) { |
294 audioBufferFrames /= 2; |
294 audioBufferFrames /= 2; |
295 } |
295 } |
296 |
296 |
297 if (isAttached) { |
297 if (isAttached) { |
298 mJavaVM->DetachCurrentThread(); |
298 mJavaVM->DetachCurrentThread(); |
299 } |
299 } |
300 |
300 |
301 return audioBufferFrames; |
301 return audioBufferFrames; |
321 |
321 |
322 extern "C" void Android_JNI_CloseAudioDevice() |
322 extern "C" void Android_JNI_CloseAudioDevice() |
323 { |
323 { |
324 int status; |
324 int status; |
325 JNIEnv *env; |
325 JNIEnv *env; |
326 static bool isAttached = false; |
326 static bool isAttached = false; |
327 status = mJavaVM->GetEnv((void **) &env, JNI_VERSION_1_4); |
327 status = mJavaVM->GetEnv((void **) &env, JNI_VERSION_1_4); |
328 if(status < 0) { |
328 if(status < 0) { |
329 LOGE("callback_handler: failed to get JNI environment, assuming native thread"); |
329 LOGE("callback_handler: failed to get JNI environment, assuming native thread"); |
330 status = mJavaVM->AttachCurrentThread(&env, NULL); |
330 status = mJavaVM->AttachCurrentThread(&env, NULL); |
331 if(status < 0) { |
331 if(status < 0) { |