提交 6b2e09ee 编写于 作者: Z Zhang Rui

jni: fix incorrect AttachCurrentThread

上级 09c7f033
......@@ -428,21 +428,23 @@ long ijkmp_get_duration(IjkMediaPlayer *mp)
return retval;
}
void ijkmp_set_android_surface_l(IjkMediaPlayer *mp, jobject android_surface)
void ijkmp_set_android_surface_l(JNIEnv *env, IjkMediaPlayer *mp, jobject android_surface)
{
assert(mp);
assert(mp->ffplayer);
assert(mp->ffplayer->vout);
SDL_VoutAndroid_SetAndroidSurface(mp->ffplayer->vout, android_surface);
SDL_VoutAndroid_SetAndroidSurface(env, mp->ffplayer->vout, android_surface);
}
void ijkmp_set_android_surface(IjkMediaPlayer *mp, jobject android_surface)
void ijkmp_set_android_surface(JNIEnv *env, IjkMediaPlayer *mp, jobject android_surface)
{
assert(mp);
MPTRACE("ijkmp_set_android_surface(%p)", (void*)android_surface);
pthread_mutex_lock(&mp->mutex);
ijkmp_set_android_surface_l(mp, android_surface);
ijkmp_set_android_surface_l(env, mp, android_surface);
pthread_mutex_unlock(&mp->mutex);
MPTRACE("ijkmp_set_android_surface(%p)=void", (void*)android_surface);
}
void *ijkmp_set_weak_thiz(IjkMediaPlayer *mp, void *weak_thiz)
......
......@@ -163,7 +163,7 @@ long ijkmp_get_current_position(IjkMediaPlayer *mp);
long ijkmp_get_duration(IjkMediaPlayer *mp);
void ijkmp_reset(IjkMediaPlayer *mp);
void ijkmp_set_android_surface(IjkMediaPlayer *mp, jobject android_surface);
void ijkmp_set_android_surface(JNIEnv *env, IjkMediaPlayer *mp, jobject android_surface);
void *ijkmp_set_weak_thiz(IjkMediaPlayer *mp, void *weak_thiz);
......
......@@ -117,7 +117,7 @@ IjkMediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface)
IjkMediaPlayer *mp = jni_get_media_player(env, thiz);
JNI_CHECK_GOTO(mp, env, NULL, "mpjni: setVideoSurface: null mp", LABEL_RETURN);
ijkmp_set_android_surface(mp, jsurface);
ijkmp_set_android_surface(env, mp, jsurface);
LABEL_RETURN:
ijkmp_dec_ref_p(&mp);
......
......@@ -33,7 +33,7 @@ SDL_Vout *SDL_VoutAndroid_CreateForAndroidSurface()
return SDL_VoutAndroid_CreateForANativeWindow();
}
static void SDL_VoutAndroid_SetAndroidSurface_n(JNIEnv *env, SDL_Vout *vout, jobject android_surface)
void SDL_VoutAndroid_SetAndroidSurface(JNIEnv *env, SDL_Vout *vout, jobject android_surface)
{
if (!android_surface)
return;
......@@ -45,19 +45,3 @@ static void SDL_VoutAndroid_SetAndroidSurface_n(JNIEnv *env, SDL_Vout *vout, job
SDL_VoutAndroid_SetNativeWindow(vout, native_window);
ANativeWindow_release(native_window);
}
void SDL_VoutAndroid_SetAndroidSurface(SDL_Vout *vout, jobject android_surface)
{
if (!android_surface)
return;
JNIEnv *env = NULL;
if (JNI_OK != SDL_AndroidJni_AttachCurrentThread(&env)) {
ALOGE("SDL_VoutAndroid_SetAndroidSurface: AttachCurrentThread: failed");
return;
}
SDL_VoutAndroid_SetAndroidSurface_n(env, vout, android_surface);
SDL_AndroidJni_DetachCurrentThread();
}
......@@ -29,6 +29,6 @@
#include "../ijksdl_vout.h"
SDL_Vout *SDL_VoutAndroid_CreateForAndroidSurface();
void SDL_VoutAndroid_SetAndroidSurface(SDL_Vout *vout, jobject android_surface);
void SDL_VoutAndroid_SetAndroidSurface(JNIEnv*env, SDL_Vout *vout, jobject android_surface);
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册