Loading core/jni/android_hardware_camera2_CameraMetadata.cpp +23 −48 Original line number Diff line number Diff line Loading @@ -18,12 +18,8 @@ // #define LOG_NDEBUG 0 // #define LOG_NNDEBUG 0 #define LOG_TAG "CameraMetadata-JNI" #include <utils/Errors.h> #include <utils/Log.h> #include <utils/RefBase.h> #include <utils/Vector.h> #include <utils/SortedVector.h> #include <utils/KeyedVector.h> #include <string.h> #include "jni.h" Loading Loading @@ -487,20 +483,12 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN ALOGV("%s (key = '%s')", __FUNCTION__, key); sp<VendorTagDescriptor> vTags = VendorTagDescriptor::getGlobalVendorTagDescriptor(); SortedVector<String8> vendorSections = vTags->getAllSectionNames(); size_t vendorSectionCount = vendorSections.size(); // First, find the section by the longest string match const char *section = NULL; size_t sectionIndex = 0; size_t sectionLength = 0; size_t totalSectionCount = ANDROID_SECTION_COUNT + vendorSectionCount; for (size_t i = 0; i < totalSectionCount; ++i) { const char *str = (i < ANDROID_SECTION_COUNT) ? camera_metadata_section_names[i] : vendorSections[i - ANDROID_SECTION_COUNT].string(); for (size_t i = 0; i < ANDROID_SECTION_COUNT; ++i) { const char *str = camera_metadata_section_names[i]; ALOGVV("%s: Trying to match against section '%s'", __FUNCTION__, str); if (strstr(key, str) == key) { // key begins with the section name Loading @@ -514,11 +502,12 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN sectionIndex = i; sectionLength = strLength; ALOGVV("%s: Found new best section (%s)", __FUNCTION__, section); ALOGVV("%s: Found new best section (idx %d)", __FUNCTION__, sectionIndex); } } } // TODO: vendor ext // TODO: Make above get_camera_metadata_section_from_name ? if (section == NULL) { Loading @@ -535,17 +524,14 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN if (sectionLength + 1 >= keyLength) { jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "Key length too short for key '%s')", key); return 0; } // Match rest of name against the tag names in that section only uint32_t tag = 0; if (sectionIndex < ANDROID_SECTION_COUNT) { // Match built-in tags (typically android.*) uint32_t tagBegin, tagEnd; // [tagBegin, tagEnd) tagBegin = camera_metadata_section_bounds[sectionIndex][0]; tagEnd = camera_metadata_section_bounds[sectionIndex][1]; uint32_t tag; for (tag = tagBegin; tag < tagEnd; ++tag) { const char *tagName = get_camera_metadata_tag_name(tag); Loading @@ -556,25 +542,14 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN } } // TODO: vendor ext // TODO: Make above get_camera_metadata_tag_from_name ? if (tag == tagEnd) { jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "Could not find tag name for key '%s')", key); return 0; } } else { // Match vendor tags (typically com.*) const String8 sectionName(section); const String8 tagName(keyTagName); status_t res = OK; if ((res = vTags->lookupTag(tagName, sectionName, &tag)) != OK) { jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "%s: No vendor tag matches key '%s'", __FUNCTION__, key); return 0; } } // TODO: Make above get_camera_metadata_tag_from_name ? return tag; } Loading Loading
core/jni/android_hardware_camera2_CameraMetadata.cpp +23 −48 Original line number Diff line number Diff line Loading @@ -18,12 +18,8 @@ // #define LOG_NDEBUG 0 // #define LOG_NNDEBUG 0 #define LOG_TAG "CameraMetadata-JNI" #include <utils/Errors.h> #include <utils/Log.h> #include <utils/RefBase.h> #include <utils/Vector.h> #include <utils/SortedVector.h> #include <utils/KeyedVector.h> #include <string.h> #include "jni.h" Loading Loading @@ -487,20 +483,12 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN ALOGV("%s (key = '%s')", __FUNCTION__, key); sp<VendorTagDescriptor> vTags = VendorTagDescriptor::getGlobalVendorTagDescriptor(); SortedVector<String8> vendorSections = vTags->getAllSectionNames(); size_t vendorSectionCount = vendorSections.size(); // First, find the section by the longest string match const char *section = NULL; size_t sectionIndex = 0; size_t sectionLength = 0; size_t totalSectionCount = ANDROID_SECTION_COUNT + vendorSectionCount; for (size_t i = 0; i < totalSectionCount; ++i) { const char *str = (i < ANDROID_SECTION_COUNT) ? camera_metadata_section_names[i] : vendorSections[i - ANDROID_SECTION_COUNT].string(); for (size_t i = 0; i < ANDROID_SECTION_COUNT; ++i) { const char *str = camera_metadata_section_names[i]; ALOGVV("%s: Trying to match against section '%s'", __FUNCTION__, str); if (strstr(key, str) == key) { // key begins with the section name Loading @@ -514,11 +502,12 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN sectionIndex = i; sectionLength = strLength; ALOGVV("%s: Found new best section (%s)", __FUNCTION__, section); ALOGVV("%s: Found new best section (idx %d)", __FUNCTION__, sectionIndex); } } } // TODO: vendor ext // TODO: Make above get_camera_metadata_section_from_name ? if (section == NULL) { Loading @@ -535,17 +524,14 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN if (sectionLength + 1 >= keyLength) { jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "Key length too short for key '%s')", key); return 0; } // Match rest of name against the tag names in that section only uint32_t tag = 0; if (sectionIndex < ANDROID_SECTION_COUNT) { // Match built-in tags (typically android.*) uint32_t tagBegin, tagEnd; // [tagBegin, tagEnd) tagBegin = camera_metadata_section_bounds[sectionIndex][0]; tagEnd = camera_metadata_section_bounds[sectionIndex][1]; uint32_t tag; for (tag = tagBegin; tag < tagEnd; ++tag) { const char *tagName = get_camera_metadata_tag_name(tag); Loading @@ -556,25 +542,14 @@ static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyN } } // TODO: vendor ext // TODO: Make above get_camera_metadata_tag_from_name ? if (tag == tagEnd) { jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "Could not find tag name for key '%s')", key); return 0; } } else { // Match vendor tags (typically com.*) const String8 sectionName(section); const String8 tagName(keyTagName); status_t res = OK; if ((res = vTags->lookupTag(tagName, sectionName, &tag)) != OK) { jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "%s: No vendor tag matches key '%s'", __FUNCTION__, key); return 0; } } // TODO: Make above get_camera_metadata_tag_from_name ? return tag; } Loading