Fix AudioTrack break

master
Marc Salem 2013-01-29 12:10:24 -08:00
parent 6088afc49b
commit 092c6b20b9
2 changed files with 10 additions and 6 deletions

View File

@ -3,11 +3,17 @@
#include "alMain.h"
#include "apportable_openal_funcs.h"
static JavaVM *javaVM = NULL;
JavaVM *alcGetJavaVM(void) {
return javaVM;
}
jint JNI_OnLoad(JavaVM *vm, void *reserved) {
BackendFuncs func_list;
if (apportableOpenALFuncs.alc_android_set_java_vm) {
apportableOpenALFuncs.alc_android_set_java_vm(vm);
}
javaVM = vm;
return JNI_VERSION_1_4;
}

View File

@ -31,7 +31,7 @@
static const ALCchar android_device[] = "Android Default";
static JavaVM* javaVM = NULL;
JavaVM* alcGetJavaVM(void);
static JNIEnv* env;
static jclass cAudioTrack = NULL;
@ -65,6 +65,7 @@ static void* thread_function(void* arg)
ALCdevice* device = (ALCdevice*)arg;
AndroidData* data = (AndroidData*)device->ExtraData;
JavaVM *javaVM = alcGetJavaVM();
(*javaVM)->AttachCurrentThread(javaVM, &env, NULL);
(*env)->PushLocalFrame(env, 2);
@ -143,6 +144,7 @@ static void* thread_function(void* arg)
static ALCboolean android_open_playback(ALCdevice *device, const ALCchar *deviceName)
{
JavaVM *javaVM = alcGetJavaVM();
(*javaVM)->AttachCurrentThread(javaVM, &env, NULL);
AndroidData* data;
int channels;
@ -292,10 +294,6 @@ static void alc_audiotrack_resume()
}
}
static void alc_audiotrack_set_java_vm(JavaVM *vm)
{
javaVM = vm;
}
void alc_audiotrack_init(BackendFuncs *func_list)
{
@ -305,13 +303,13 @@ void alc_audiotrack_init(BackendFuncs *func_list)
&& apportableOpenALFuncs.alc_android_set_java_vm == NULL) {
apportableOpenALFuncs.alc_android_suspend = alc_audiotrack_suspend;
apportableOpenALFuncs.alc_android_resume = alc_audiotrack_resume;
apportableOpenALFuncs.alc_android_set_java_vm = alc_audiotrack_set_java_vm;
}
}
void alc_audiotrack_deinit(void)
{
/* release cached AudioTrack class */
JavaVM *javaVM = alcGetJavaVM();
(*env)->DeleteGlobalRef(env, cAudioTrack);
(*javaVM)->DetachCurrentThread(javaVM);
cAudioTrack = NULL;