diff options
author | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2011-03-12 00:35:18 +0000 |
---|---|---|
committer | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2011-03-12 00:35:18 +0000 |
commit | 8aa90b6b0be0125ba645af30757524055acbb185 (patch) | |
tree | 32888a41d6aae1386077884d940c3986b3d12e5a /firmware/target | |
parent | 204ac257fe97dafdcd106c9051386ccf09710c4f (diff) | |
download | rockbox-8aa90b6b0be0125ba645af30757524055acbb185.tar.gz rockbox-8aa90b6b0be0125ba645af30757524055acbb185.zip |
Android: allocate native_buffer locally, which does away with the need to hold
a global reference to it (fixes bug).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29576 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/hosted/android/lcd-android.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c index 172e832c2a..19f077010f 100644 --- a/firmware/target/hosted/android/lcd-android.c +++ b/firmware/target/hosted/android/lcd-android.c | |||
@@ -34,7 +34,6 @@ static jobject RockboxFramebuffer_instance; | |||
34 | static jmethodID java_lcd_update; | 34 | static jmethodID java_lcd_update; |
35 | static jmethodID java_lcd_update_rect; | 35 | static jmethodID java_lcd_update_rect; |
36 | static jmethodID java_lcd_init; | 36 | static jmethodID java_lcd_init; |
37 | static jobject native_buffer; | ||
38 | 37 | ||
39 | static int dpi; | 38 | static int dpi; |
40 | static int scroll_threshold; | 39 | static int scroll_threshold; |
@@ -69,15 +68,17 @@ void connect_with_java(JNIEnv* env, jobject fb_instance) | |||
69 | java_lcd_init = e->GetMethodID(env, fb_class, | 68 | java_lcd_init = e->GetMethodID(env, fb_class, |
70 | "java_lcd_init", | 69 | "java_lcd_init", |
71 | "(IILjava/nio/ByteBuffer;)V"); | 70 | "(IILjava/nio/ByteBuffer;)V"); |
72 | 71 | ||
73 | native_buffer = e->NewDirectByteBuffer(env, | ||
74 | lcd_framebuffer, | ||
75 | (jlong)sizeof(lcd_framebuffer)); | ||
76 | have_class = true; | 72 | have_class = true; |
77 | } | 73 | } |
74 | |||
75 | /* Create native_buffer */ | ||
76 | jobject buffer = (*env)->NewDirectByteBuffer(env, lcd_framebuffer, | ||
77 | (jlong) sizeof(lcd_framebuffer)); | ||
78 | |||
78 | /* we need to setup parts for the java object every time */ | 79 | /* we need to setup parts for the java object every time */ |
79 | (*env)->CallVoidMethod(env, fb_instance, java_lcd_init, | 80 | (*env)->CallVoidMethod(env, fb_instance, java_lcd_init, |
80 | (jint)LCD_WIDTH, (jint)LCD_HEIGHT, native_buffer); | 81 | (jint)LCD_WIDTH, (jint)LCD_HEIGHT, buffer); |
81 | } | 82 | } |
82 | 83 | ||
83 | /* | 84 | /* |
@@ -116,8 +117,10 @@ Java_org_rockbox_RockboxFramebuffer_surfaceCreated(JNIEnv *env, jobject this, | |||
116 | jobject surfaceholder) | 117 | jobject surfaceholder) |
117 | { | 118 | { |
118 | (void)surfaceholder; | 119 | (void)surfaceholder; |
120 | |||
119 | /* Update RockboxFramebuffer_instance */ | 121 | /* Update RockboxFramebuffer_instance */ |
120 | RockboxFramebuffer_instance = (*env)->NewGlobalRef(env, this); | 122 | RockboxFramebuffer_instance = (*env)->NewGlobalRef(env, this); |
123 | |||
121 | /* possibly a new instance - reconnect */ | 124 | /* possibly a new instance - reconnect */ |
122 | connect_with_java(env, this); | 125 | connect_with_java(env, this); |
123 | display_on = true; | 126 | display_on = true; |