project_files/Android-build/SDL-android-project/jni/SDL/src/core/android/SDL_android.cpp
changeset 10017 de822cd3df3a
parent 7185 92a045156255
equal deleted inserted replaced
10015:4feced261c68 10017:de822cd3df3a
   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");
   163 }
   163 }
   164 
   164 
   165 // Quit
   165 // Quit
   166 extern "C" void Java_org_hedgewars_hedgeroid_SDLActivity_nativeQuit(
   166 extern "C" void Java_org_hedgewars_hedgeroid_SDLActivity_nativeQuit(
   167                                     JNIEnv* env, jclass cls)
   167                                     JNIEnv* env, jclass cls)
   168 {    
   168 {
   169     // Inject a SDL_QUIT event
   169     // Inject a SDL_QUIT event
   170     SDL_SendQuit();
   170     SDL_SendQuit();
   171 }
   171 }
   172 
   172 
   173 // Pause
   173 // Pause
   212     }
   212     }
   213 }
   213 }
   214 
   214 
   215 extern "C" void Android_JNI_SwapWindow()
   215 extern "C" void Android_JNI_SwapWindow()
   216 {
   216 {
   217     mEnv->CallStaticVoidMethod(mActivityClass, midFlipBuffers); 
   217     mEnv->CallStaticVoidMethod(mActivityClass, midFlipBuffers);
   218 }
   218 }
   219 
   219 
   220 extern "C" void Android_JNI_SetActivityTitle(const char *title)
   220 extern "C" void Android_JNI_SetActivityTitle(const char *title)
   221 {
   221 {
   222     jmethodID mid;
   222     jmethodID mid;
   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) {
   333             return;
   333             return;
   334         }
   334         }
   335         isAttached = true;
   335         isAttached = true;
   336     }
   336     }
   337 
   337 
   338     env->CallStaticVoidMethod(mActivityClass, midAudioQuit); 
   338     env->CallStaticVoidMethod(mActivityClass, midAudioQuit);
   339 
   339 
   340     if (audioBuffer) {
   340     if (audioBuffer) {
   341         env->DeleteGlobalRef(audioBuffer);
   341         env->DeleteGlobalRef(audioBuffer);
   342         audioBuffer = NULL;
   342         audioBuffer = NULL;
   343         audioBufferPinned = NULL;
   343         audioBufferPinned = NULL;