From 0ab9851308c02928c34e7261c4d4521c07e64f0e Mon Sep 17 00:00:00 2001 From: Owen Lin Date: Wed, 29 Sep 2010 23:08:49 +0800 Subject: [PATCH] Fix a initialization bug in BitmapRegionDecoder. Change-Id: I6c1151fd34970a84d4de52d664d9a5dc464892c5 --- .../jni/android/graphics/BitmapRegionDecoder.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp index 45038524bdbf7..f700791baf8dc 100644 --- a/core/jni/android/graphics/BitmapRegionDecoder.cpp +++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp @@ -297,9 +297,25 @@ static JNINativeMethod gBitmapRegionDecoderMethods[] = { #define kClassPathName "android/graphics/BitmapRegionDecoder" +static jclass make_globalref(JNIEnv* env, const char classname[]) { + jclass c = env->FindClass(classname); + SkASSERT(c); + return (jclass)env->NewGlobalRef(c); +} + +static jfieldID getFieldIDCheck(JNIEnv* env, jclass clazz, + const char fieldname[], const char type[]) { + jfieldID id = env->GetFieldID(clazz, fieldname, type); + SkASSERT(id); + return id; +} + int register_android_graphics_BitmapRegionDecoder(JNIEnv* env); int register_android_graphics_BitmapRegionDecoder(JNIEnv* env) { + + gFileDescriptor_class = make_globalref(env, "java/io/FileDescriptor"); + gFileDescriptor_descriptor = getFieldIDCheck(env, gFileDescriptor_class, "descriptor", "I"); return android::AndroidRuntime::registerNativeMethods(env, kClassPathName, gBitmapRegionDecoderMethods, SK_ARRAY_COUNT(gBitmapRegionDecoderMethods)); }