mirror of
https://github.com/libretro/RetroArch
synced 2025-03-23 19:21:03 +00:00
more android camera work. no longer crashes, but still no image
This commit is contained in:
parent
82104bc7e2
commit
894b2870c0
@ -43,7 +43,7 @@ public final class RetroActivity extends NativeActivity
|
|||||||
public boolean onCameraPoll()
|
public boolean onCameraPoll()
|
||||||
{
|
{
|
||||||
boolean ret;
|
boolean ret;
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
|
if (texture != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
|
||||||
{
|
{
|
||||||
long newTimestamp = texture.getTimestamp();
|
long newTimestamp = texture.getTimestamp();
|
||||||
if (newTimestamp != lastTimestamp)
|
if (newTimestamp != lastTimestamp)
|
||||||
|
@ -29,6 +29,13 @@ typedef struct android_camera
|
|||||||
{
|
{
|
||||||
JNIEnv *env;
|
JNIEnv *env;
|
||||||
JavaVM *java_vm;
|
JavaVM *java_vm;
|
||||||
|
jclass class;
|
||||||
|
jmethodID onCameraInit;
|
||||||
|
jmethodID onCameraFree;
|
||||||
|
jmethodID onCameraPoll;
|
||||||
|
jmethodID onCameraStart;
|
||||||
|
jmethodID onCameraStop;
|
||||||
|
jmethodID onCameraSetTexture;
|
||||||
GLuint tex;
|
GLuint tex;
|
||||||
} androidcamera_t;
|
} androidcamera_t;
|
||||||
|
|
||||||
@ -50,14 +57,38 @@ static void *android_camera_init(const char *device, uint64_t caps, unsigned wid
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
androidcamera->java_vm = (JavaVM*)android_app->activity->vm;
|
androidcamera->java_vm = (JavaVM*)android_app->activity->vm;
|
||||||
(*androidcamera->java_vm)->AttachCurrentThread(androidcamera->java_vm, &androidcamera->env, 0);
|
if ((*androidcamera->java_vm)->AttachCurrentThread(androidcamera->java_vm, &androidcamera->env, 0) != JNI_OK)
|
||||||
|
|
||||||
jmethodID onCameraInit = NULL;
|
|
||||||
GET_METHOD_ID(androidcamera->env, onCameraInit, globalMyNativeActivityClass, "onCameraInit", "()V");
|
|
||||||
if (!onCameraInit)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
CALL_VOID_METHOD(androidcamera->env, globalMyNativeActivityClass, onCameraInit);
|
GET_OBJECT_CLASS(androidcamera->env, androidcamera->class, android_app->activity->clazz);
|
||||||
|
if (androidcamera->class == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
GET_METHOD_ID(androidcamera->env, androidcamera->onCameraInit, androidcamera->class, "onCameraInit", "()V");
|
||||||
|
if (!androidcamera->onCameraInit)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
GET_METHOD_ID(androidcamera->env, androidcamera->onCameraFree, androidcamera->class, "onCameraFree", "()V");
|
||||||
|
if (!androidcamera->onCameraFree)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
GET_METHOD_ID(androidcamera->env, androidcamera->onCameraSetTexture, androidcamera->class, "onCameraSetTexture", "(I)V");
|
||||||
|
if (!androidcamera->onCameraSetTexture)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
GET_METHOD_ID(androidcamera->env, androidcamera->onCameraStart, androidcamera->class, "onCameraStart", "()V");
|
||||||
|
if (!androidcamera->onCameraStart)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
GET_METHOD_ID(androidcamera->env, androidcamera->onCameraStop, androidcamera->class, "onCameraStop", "()V");
|
||||||
|
if (!androidcamera->onCameraStop)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
GET_METHOD_ID(androidcamera->env, androidcamera->onCameraPoll, androidcamera->class, "onCameraPoll", "()Z");
|
||||||
|
if (!androidcamera->onCameraPoll)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
CALL_VOID_METHOD(androidcamera->env, android_app->activity->clazz, androidcamera->onCameraInit);
|
||||||
|
|
||||||
return androidcamera;
|
return androidcamera;
|
||||||
}
|
}
|
||||||
@ -68,14 +99,8 @@ static void android_camera_free(void *data)
|
|||||||
androidcamera_t *androidcamera = (androidcamera_t*)data;
|
androidcamera_t *androidcamera = (androidcamera_t*)data;
|
||||||
(void)android_app;
|
(void)android_app;
|
||||||
|
|
||||||
jmethodID onCameraFree = NULL;
|
CALL_VOID_METHOD(androidcamera->env, android_app->activity->clazz, androidcamera->onCameraFree);
|
||||||
GET_METHOD_ID(androidcamera->env, onCameraFree, globalMyNativeActivityClass, "onCameraFree", "()V");
|
|
||||||
if (!onCameraFree)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
CALL_VOID_METHOD(androidcamera->env, globalMyNativeActivityClass, onCameraFree);
|
|
||||||
|
|
||||||
end:
|
|
||||||
(*androidcamera->java_vm)->DetachCurrentThread(androidcamera->java_vm);
|
(*androidcamera->java_vm)->DetachCurrentThread(androidcamera->java_vm);
|
||||||
|
|
||||||
free(androidcamera);
|
free(androidcamera);
|
||||||
@ -91,24 +116,11 @@ static bool android_camera_start(void *data)
|
|||||||
|
|
||||||
glGenTextures(1, &androidcamera->tex);
|
glGenTextures(1, &androidcamera->tex);
|
||||||
|
|
||||||
jmethodID onCameraSetTexture = NULL;
|
CALL_VOID_METHOD_PARAM(androidcamera->env, android_app->activity->clazz, androidcamera->onCameraSetTexture, (int) androidcamera->tex);
|
||||||
GET_METHOD_ID(androidcamera->env, onCameraSetTexture, globalMyNativeActivityClass, "onCameraSetTexture", "(I)V");
|
|
||||||
if (!onCameraSetTexture)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
CALL_VOID_METHOD_PARAM(androidcamera->env, globalMyNativeActivityClass, onCameraSetTexture, (int) androidcamera->tex);
|
CALL_VOID_METHOD(androidcamera->env, android_app->activity->clazz, androidcamera->onCameraStart);
|
||||||
|
|
||||||
jmethodID onCameraStart = NULL;
|
|
||||||
GET_METHOD_ID(androidcamera->env, onCameraSetTexture, globalMyNativeActivityClass, "onCameraStart", "()V");
|
|
||||||
if (!onCameraStart)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
CALL_VOID_METHOD(androidcamera->env, globalMyNativeActivityClass, onCameraStart);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
end:
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_camera_stop(void *data)
|
static void android_camera_stop(void *data)
|
||||||
@ -118,12 +130,7 @@ static void android_camera_stop(void *data)
|
|||||||
(void)android_app;
|
(void)android_app;
|
||||||
(void)androidcamera;
|
(void)androidcamera;
|
||||||
|
|
||||||
jmethodID onCameraStop = NULL;
|
CALL_VOID_METHOD(androidcamera->env, android_app->activity->clazz, androidcamera->onCameraStop);
|
||||||
GET_METHOD_ID(androidcamera->env, onCameraStop, globalMyNativeActivityClass, "onCameraStop", "()V");
|
|
||||||
if (!onCameraStop)
|
|
||||||
return;
|
|
||||||
|
|
||||||
CALL_VOID_METHOD(androidcamera->env, globalMyNativeActivityClass, onCameraStop);
|
|
||||||
|
|
||||||
if (androidcamera->tex)
|
if (androidcamera->tex)
|
||||||
glDeleteTextures(1, &androidcamera->tex);
|
glDeleteTextures(1, &androidcamera->tex);
|
||||||
@ -138,13 +145,8 @@ static bool android_camera_poll(void *data, retro_camera_frame_raw_framebuffer_t
|
|||||||
(void)androidcamera;
|
(void)androidcamera;
|
||||||
(void)frame_raw_cb;
|
(void)frame_raw_cb;
|
||||||
|
|
||||||
jmethodID onCameraPoll = NULL;
|
|
||||||
GET_METHOD_ID(androidcamera->env, onCameraPoll, globalMyNativeActivityClass, "onCameraPoll", "()Z");
|
|
||||||
if (!onCameraPoll)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
jboolean newFrame;
|
jboolean newFrame;
|
||||||
CALL_BOOLEAN_METHOD(androidcamera->env, newFrame, globalMyNativeActivityClass, onCameraPoll);
|
CALL_BOOLEAN_METHOD(androidcamera->env, newFrame, android_app->activity->clazz, androidcamera->onCameraPoll);
|
||||||
|
|
||||||
if (newFrame)
|
if (newFrame)
|
||||||
{
|
{
|
||||||
@ -162,7 +164,6 @@ static bool android_camera_poll(void *data, retro_camera_frame_raw_framebuffer_t
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -383,7 +383,7 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved)
|
|||||||
if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6) != JNI_OK)
|
if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6) != JNI_OK)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
globalMyNativeActivityClass = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "com/retroarch/browser/RetroActivity"));
|
//globalMyNativeActivityClass = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "com/retroarch/browser/RetroActivity"));
|
||||||
|
|
||||||
return JNI_VERSION_1_6;
|
return JNI_VERSION_1_6;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user