diff options
3 files changed, 9 insertions, 58 deletions
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java index 0e450d76ea62..4d92ab1ccbb9 100644 --- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java +++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java @@ -1097,7 +1097,6 @@ public class CameraMetadataNative implements Parcelable { throws IllegalArgumentException; private static native int nativeGetTypeFromTag(int tag) throws IllegalArgumentException; - private static native void nativeClassInit(); /** * <p>Perform a 0-copy swap of the internal metadata with another object.</p> @@ -1289,10 +1288,6 @@ public class CameraMetadataNative implements Parcelable { } static { - /* - * We use a class initializer to allow the native code to cache some field offsets - */ - nativeClassInit(); registerAllMarshalers(); } } diff --git a/core/java/android/hardware/camera2/marshal/impl/MarshalQueryableString.java b/core/java/android/hardware/camera2/marshal/impl/MarshalQueryableString.java index d2c390864d09..c81e18d8ce6c 100644 --- a/core/java/android/hardware/camera2/marshal/impl/MarshalQueryableString.java +++ b/core/java/android/hardware/camera2/marshal/impl/MarshalQueryableString.java @@ -33,7 +33,9 @@ public class MarshalQueryableString implements MarshalQueryable<String> { private static final String TAG = MarshalQueryableString.class.getSimpleName(); private static final boolean DEBUG = false; - private static final Charset UTF8_CHARSET = Charset.forName("UTF-8"); + private static class PreloadHolder { + public static final Charset UTF8_CHARSET = Charset.forName("UTF-8"); + } private static final byte NUL = (byte)'\0'; // used as string terminator private class MarshalerString extends Marshaler<String> { @@ -44,7 +46,7 @@ public class MarshalQueryableString implements MarshalQueryable<String> { @Override public void marshal(String value, ByteBuffer buffer) { - byte[] arr = value.getBytes(UTF8_CHARSET); + byte[] arr = value.getBytes(PreloadHolder.UTF8_CHARSET); buffer.put(arr); buffer.put(NUL); // metadata strings are NUL-terminated @@ -52,7 +54,7 @@ public class MarshalQueryableString implements MarshalQueryable<String> { @Override public int calculateMarshalSize(String value) { - byte[] arr = value.getBytes(UTF8_CHARSET); + byte[] arr = value.getBytes(PreloadHolder.UTF8_CHARSET); return arr.length + 1; // metadata strings are NUL-terminated } @@ -88,7 +90,7 @@ public class MarshalQueryableString implements MarshalQueryable<String> { buffer.get(strBytes, /*dstOffset*/0, stringLength + 1); // including null character // not including null character - return new String(strBytes, /*offset*/0, stringLength, UTF8_CHARSET); + return new String(strBytes, /*offset*/0, stringLength, PreloadHolder.UTF8_CHARSET); } @Override diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp index 518f99e86434..78a5735279ea 100644 --- a/core/jni/android_hardware_camera2_CameraMetadata.cpp +++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp @@ -161,7 +161,6 @@ struct Helpers { extern "C" { -static void CameraMetadata_classInit(JNIEnv *env, jobject thiz); static jobject CameraMetadata_getAllVendorKeys(JNIEnv* env, jobject thiz, jclass keyType); static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyName); static jint CameraMetadata_getTypeFromTag(JNIEnv *env, jobject thiz, jint tag); @@ -529,9 +528,6 @@ static void CameraMetadata_writeToParcel(JNIEnv *env, jobject thiz, jobject parc static const JNINativeMethod gCameraMetadataMethods[] = { // static methods - { "nativeClassInit", - "()V", - (void *)CameraMetadata_classInit }, { "nativeGetAllVendorKeys", "(Ljava/lang/Class;)Ljava/util/ArrayList;", (void *)CameraMetadata_getAllVendorKeys}, @@ -581,35 +577,6 @@ static const JNINativeMethod gCameraMetadataMethods[] = { (void *)CameraMetadata_writeToParcel }, }; -struct field { - const char *class_name; - const char *field_name; - const char *field_type; - jfieldID *jfield; -}; - -static int find_fields(JNIEnv *env, field *fields, int count) -{ - for (int i = 0; i < count; i++) { - field *f = &fields[i]; - jclass clazz = env->FindClass(f->class_name); - if (clazz == NULL) { - ALOGE("Can't find %s", f->class_name); - return -1; - } - - jfieldID field = env->GetFieldID(clazz, f->field_name, f->field_type); - if (field == NULL) { - ALOGE("Can't find %s.%s", f->class_name, f->field_name); - return -1; - } - - *(f->jfield) = field; - } - - return 0; -} - // Get all the required offsets in java class and register native functions int register_android_hardware_camera2_CameraMetadata(JNIEnv *env) { @@ -651,6 +618,9 @@ int register_android_hardware_camera2_CameraMetadata(JNIEnv *env) gMetadataOffsets.mArrayListAdd = GetMethodIDOrDie(env, gMetadataOffsets.mArrayList, "add", "(Ljava/lang/Object;)Z"); + jclass cameraMetadataClazz = FindClassOrDie(env, CAMERA_METADATA_CLASS_NAME); + fields.metadata_ptr = GetFieldIDOrDie(env, cameraMetadataClazz, "mMetadataPtr", "J"); + // Register native functions return RegisterMethodsOrDie(env, CAMERA_METADATA_CLASS_NAME, @@ -660,22 +630,6 @@ int register_android_hardware_camera2_CameraMetadata(JNIEnv *env) extern "C" { -static void CameraMetadata_classInit(JNIEnv *env, jobject thiz) { - // XX: Why do this separately instead of doing it in the register function? - ALOGV("%s", __FUNCTION__); - - field fields_to_find[] = { - { CAMERA_METADATA_CLASS_NAME, "mMetadataPtr", "J", &fields.metadata_ptr }, - }; - - // Do this here instead of in register_native_methods, - // since otherwise it will fail to find the fields. - if (find_fields(env, fields_to_find, NELEM(fields_to_find)) < 0) - return; - - env->FindClass(CAMERA_METADATA_CLASS_NAME); -} - static jobject CameraMetadata_getAllVendorKeys(JNIEnv* env, jobject thiz, jclass keyType) { // Get all vendor tags |