From fc55e482211be6b1a84eb4c5a2be1bd375ae73e9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 5 Jan 2013 07:20:02 +0100 Subject: [PATCH] (Android) Cut down on g_android usage --- android/native/jni/android_general.h | 1 - android/native/jni/android_glue.h | 8 ++--- android/native/jni/input_android.c | 2 +- android/native/jni/input_autodetect.c | 12 +++++--- android/native/jni/input_autodetect.h | 2 +- android/native/jni/main.c | 44 ++++++++++++++++----------- gfx/context/androidegl_ctx.c | 6 ++-- 7 files changed, 42 insertions(+), 33 deletions(-) diff --git a/android/native/jni/android_general.h b/android/native/jni/android_general.h index 3307614c32..8424228058 100644 --- a/android/native/jni/android_general.h +++ b/android/native/jni/android_general.h @@ -23,7 +23,6 @@ struct droid { struct android_app* app; - char current_ime[PATH_MAX]; }; extern struct droid g_android; diff --git a/android/native/jni/android_glue.h b/android/native/jni/android_glue.h index fe04de906a..6d64fc4089 100644 --- a/android/native/jni/android_glue.h +++ b/android/native/jni/android_glue.h @@ -49,6 +49,7 @@ struct android_app int running; AInputQueue* pendingInputQueue; ANativeWindow* pendingWindow; + char current_ime[PATH_MAX]; }; enum { @@ -153,9 +154,8 @@ enum { APP_CMD_DEAD, }; -int8_t android_app_read_cmd(struct android_app* android_app); - -extern void engine_app_read_cmd(struct android_app *app); -extern void engine_handle_cmd(struct android_app* android_app, int32_t cmd); +int8_t android_app_read_cmd (void *data); +extern void engine_app_read_cmd (void *data); +extern void engine_handle_cmd (void *data, int32_t cmd); #endif /* _ANDROID_NATIVE_APP_GLUE_H */ diff --git a/android/native/jni/input_android.c b/android/native/jni/input_android.c index fa981a7a86..20dc252e8d 100644 --- a/android/native/jni/input_android.c +++ b/android/native/jni/input_android.c @@ -116,7 +116,7 @@ static void android_input_poll(void *data) state_id = pads_connected; state_device_ids[pads_connected++] = id; - input_autodetect_setup(state_id, id, source); + input_autodetect_setup(android_app, state_id, id, source); } int action = 0; diff --git a/android/native/jni/input_autodetect.c b/android/native/jni/input_autodetect.c index ae8dd2d114..567f7b8e3c 100644 --- a/android/native/jni/input_autodetect.c +++ b/android/native/jni/input_autodetect.c @@ -21,11 +21,12 @@ uint64_t keycode_lut[LAST_KEYCODE]; bool volume_enable; -static void input_autodetect_get_device_name(char *buf, size_t size, int id) +static void input_autodetect_get_device_name(void *data, char *buf, size_t size, int id) { + struct android_app *android_app = (struct android_app*)data; buf[0] = '\0'; - JavaVM *vm = g_android.app->activity->vm; + JavaVM *vm = android_app->activity->vm; JNIEnv *env = NULL; (*vm)->AttachCurrentThread(vm, &env, 0); @@ -77,8 +78,9 @@ void input_autodetect_init (void) volume_enable = true; } -void input_autodetect_setup(unsigned port, unsigned id, int source) +void input_autodetect_setup (void *data, unsigned port, unsigned id, int source) { + struct android_app *android_app = (struct android_app*)data; // Hack - we have to add '1' to the bit mask here because // RETRO_DEVICE_ID_JOYPAD_B is 0 @@ -99,11 +101,11 @@ void input_autodetect_setup(unsigned port, unsigned id, int source) g_settings.input.dpad_emulation[port] = DPAD_EMULATION_LSTICK; - char *current_ime = g_android.current_ime; + char *current_ime = android_app->current_ime; if (g_settings.input.autodetect_enable) { - input_autodetect_get_device_name(name_buf, sizeof(name_buf), id); + input_autodetect_get_device_name(android_app, name_buf, sizeof(name_buf), id); if (*name_buf) { if (strstr(name_buf, "Logitech")) diff --git a/android/native/jni/input_autodetect.h b/android/native/jni/input_autodetect.h index edaf0af635..64ddb404e6 100644 --- a/android/native/jni/input_autodetect.h +++ b/android/native/jni/input_autodetect.h @@ -64,6 +64,6 @@ extern uint64_t keycode_lut[LAST_KEYCODE]; extern bool volume_enable; void input_autodetect_init (void); -void input_autodetect_setup(unsigned port, unsigned id, int source); +void input_autodetect_setup (void *data, unsigned port, unsigned id, int source); #endif diff --git a/android/native/jni/main.c b/android/native/jni/main.c index 4702e8398d..4b925d8238 100644 --- a/android/native/jni/main.c +++ b/android/native/jni/main.c @@ -28,8 +28,9 @@ #include "../../../config.def.h" -static void print_cur_config(struct android_app* android_app) +static void print_cur_config (void *data) { + struct android_app *android_app = (struct android_app*)data; char lang[2], country[2]; AConfiguration_getLanguage(android_app->config, lang); AConfiguration_getCountry(android_app->config, country); @@ -57,8 +58,10 @@ static void print_cur_config(struct android_app* android_app) /** * Process the next main command. */ -void engine_handle_cmd(struct android_app* android_app, int32_t cmd) +void engine_handle_cmd (void *data, int32_t cmd) { + struct android_app *android_app = (struct android_app*)data; + switch (cmd) { case APP_CMD_INPUT_CHANGED: @@ -175,8 +178,9 @@ void engine_handle_cmd(struct android_app* android_app, int32_t cmd) #define MAX_ARGS 32 -static bool android_run_events(struct android_app* android_app) +static bool android_run_events (void *data) { + struct android_app *android_app = (struct android_app*)data; int id = ALooper_pollOnce(-1, NULL, NULL, NULL); if (id == LOOPER_ID_MAIN) @@ -236,8 +240,9 @@ static void jni_get(struct jni_params *in_params, struct jni_out_params_char *ou } } -static int android_app_set_argv(char** argv) +static int android_app_set_argv (void *data, char** argv) { + struct android_app *android_app = (struct android_app*)data; char rom_path[PATH_MAX]; char libretro_path[PATH_MAX]; char config_file[PATH_MAX]; @@ -245,10 +250,10 @@ static int android_app_set_argv(char** argv) struct jni_params in_params; struct jni_out_params_char out_args; - JNI_OnLoad(g_android.app->activity->vm, NULL); + JNI_OnLoad(android_app->activity->vm, NULL); - in_params.java_vm = g_android.app->activity->vm; - in_params.class_obj = g_android.app->activity->clazz; + in_params.java_vm = android_app->activity->vm; + in_params.class_obj = android_app->activity->clazz; strlcpy(in_params.method_name, "getIntent", sizeof(in_params.method_name)); strlcpy(in_params.method_signature, "()Landroid/content/Intent;", sizeof(in_params.method_signature)); @@ -274,8 +279,8 @@ static int android_app_set_argv(char** argv) jni_get(&in_params, &out_args); // Current IME - out_args.out = g_android.current_ime; - out_args.out_sizeof = sizeof(g_android.current_ime); + out_args.out = android_app->current_ime; + out_args.out_sizeof = sizeof(android_app->current_ime); strlcpy(out_args.in, "IME", sizeof(out_args.in)); jni_get(&in_params, &out_args); @@ -286,7 +291,7 @@ static int android_app_set_argv(char** argv) RARCH_LOG("ROM Filename: [%s].\n", rom_path); RARCH_LOG("Libretro path: [%s].\n", libretro_path); RARCH_LOG("Config file: [%s].\n", config_file); - RARCH_LOG("Current IME: [%s].\n", g_android.current_ime); + RARCH_LOG("Current IME: [%s].\n", android_app->current_ime); int argc = 0; @@ -304,9 +309,9 @@ static int android_app_set_argv(char** argv) return argc; } -static void* android_app_entry(void* param) +static void* android_app_entry(void *data) { - struct android_app* android_app = (struct android_app*)param; + struct android_app* android_app = (struct android_app*)data; int init_ret = -1; android_app->config = AConfiguration_new(); @@ -327,7 +332,7 @@ static void* android_app_entry(void* param) g_android.app = android_app; char *argv[MAX_ARGS] = {NULL}; - int argc = android_app_set_argv(argv); + int argc = android_app_set_argv(android_app, argv); RARCH_LOG("Native Activity started.\n"); rarch_main_clear_state(); @@ -352,14 +357,14 @@ static void* android_app_entry(void* param) rarch_init_msg_queue(); while ((input_key_pressed_func(RARCH_PAUSE_TOGGLE)) ? - android_run_events(g_android.app) : + android_run_events(android_app) : rarch_main_iterate()); RARCH_LOG("RetroArch stopped.\n"); } exit: - g_android.app->activityState = APP_CMD_DEAD; + android_app->activityState = APP_CMD_DEAD; RARCH_LOG("Deinitializing RetroArch...\n"); if (init_ret == 0) @@ -382,14 +387,16 @@ exit: exit(init_ret); } -static inline void android_app_write_cmd(struct android_app* android_app, int8_t cmd) +static inline void android_app_write_cmd (void *data, int8_t cmd) { + struct android_app *android_app = (struct android_app*)data; if (write(android_app->msgwrite, &cmd, sizeof(cmd)) != sizeof(cmd)) RARCH_ERR("Failure writing android_app cmd: %s\n", strerror(errno)); } -static void android_app_set_input(struct android_app* android_app, AInputQueue* inputQueue) +static void android_app_set_input (void *data, AInputQueue* inputQueue) { + struct android_app *android_app = (struct android_app*)data; pthread_mutex_lock(&android_app->mutex); android_app->pendingInputQueue = inputQueue; android_app_write_cmd(android_app, APP_CMD_INPUT_CHANGED); @@ -398,8 +405,9 @@ static void android_app_set_input(struct android_app* android_app, AInputQueue* pthread_mutex_unlock(&android_app->mutex); } -static void android_app_set_window(struct android_app* android_app, ANativeWindow* window) +static void android_app_set_window (void *data, ANativeWindow* window) { + struct android_app *android_app = (struct android_app*)data; pthread_mutex_lock(&android_app->mutex); if (android_app->pendingWindow != NULL) android_app_write_cmd(android_app, APP_CMD_TERM_WINDOW); diff --git a/gfx/context/androidegl_ctx.c b/gfx/context/androidegl_ctx.c index 2a57d7e2dc..a11e8363b0 100644 --- a/gfx/context/androidegl_ctx.c +++ b/gfx/context/androidegl_ctx.c @@ -80,7 +80,7 @@ static void gfx_ctx_get_video_size(unsigned *width, unsigned *height) static bool gfx_ctx_init(void) { - RARCH_LOG("gfx_ctx_init().\n"); + struct android_app *android_app = (struct android_app*)g_android.app; const EGLint attribs[] = { EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, @@ -128,9 +128,9 @@ static bool gfx_ctx_init(void) goto error; } - ANativeWindow_setBuffersGeometry(g_android.app->window, 0, 0, format); + ANativeWindow_setBuffersGeometry(android_app->window, 0, 0, format); - if (!(g_egl_surf = eglCreateWindowSurface(g_egl_dpy, g_config, g_android.app->window, 0))) + if (!(g_egl_surf = eglCreateWindowSurface(g_egl_dpy, g_config, android_app->window, 0))) { RARCH_ERR("eglCreateWindowSurface failed.\n"); goto error;