diff options
author | John Reck <jreck@google.com> | 2015-03-03 15:37:46 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-03-03 15:37:47 +0000 |
commit | 20eeaa9cdee7aa28d456f4a7ac3d494950c5aa1a (patch) | |
tree | 34f4c94c53a57410b805e64f7435a45d6b1e2718 | |
parent | ab02f818aa312f0795152449c29cb994f72e4891 (diff) | |
parent | 478cf8b21905a315a8be53871c3efe018cfe115f (diff) | |
download | neven-20eeaa9cdee7aa28d456f4a7ac3d494950c5aa1a.tar.gz |
Merge "Switch to the public NDK API for bitmap"
-rw-r--r-- | Android.mk | 2 | ||||
-rw-r--r-- | FaceDetector_jni.cpp | 21 |
2 files changed, 8 insertions, 15 deletions
@@ -117,7 +117,7 @@ LOCAL_SHARED_LIBRARIES := \ libnativehelper \ libutils \ liblog \ - libskia \ + libjnigraphics \ libcutils LOCAL_MODULE:= libFFTEm diff --git a/FaceDetector_jni.cpp b/FaceDetector_jni.cpp index 7b44c75..6f59749 100644 --- a/FaceDetector_jni.cpp +++ b/FaceDetector_jni.cpp @@ -24,7 +24,7 @@ #include <utils/String8.h> #include <utils/Log.h> -#include <SkBitmap.h> +#include <android/bitmap.h> #include "jni.h" #include "JNIHelp.h" @@ -66,8 +66,6 @@ struct FaceDetectorOffsets jfieldID bwbuffer; } gFaceDetectorOffsets; -jfieldID nativeBitmapID; - // --------------------------------------------------------------------------- static void getFaceData(btk_HDCR hdcr, FaceData* fdata) @@ -111,9 +109,6 @@ nativeClassInit gFaceOffsets.eulerx = _env->GetFieldID(faceClass, "mPoseEulerX", "F"); gFaceOffsets.eulery = _env->GetFieldID(faceClass, "mPoseEulerY", "F"); gFaceOffsets.eulerz = _env->GetFieldID(faceClass, "mPoseEulerZ", "F"); - - jclass bitmapClass = _env->FindClass("android/graphics/Bitmap"); - nativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "J"); } // --------------------------------------------------------------------------- @@ -209,21 +204,18 @@ detect(JNIEnv *_env, jobject _this, jbyteArray bwbufferObject = (jbyteArray) _env->GetObjectField(_this, gFaceDetectorOffsets.bwbuffer); - // get to the native bitmap - SkBitmap const * nativeBitmap = - (SkBitmap const *)_env->GetLongField(bitmap, nativeBitmapID); - // get to our BW temporary buffer jbyte* bwbuffer = _env->GetByteArrayElements(bwbufferObject, 0); // convert the image to B/W uint8_t* dst = (uint8_t*)bwbuffer; - // manage the life-time of locking our pixels - SkAutoLockPixels alp(*nativeBitmap); + uint16_t const* src; + AndroidBitmapInfo bitmapInfo; + AndroidBitmap_getInfo(_env, bitmap, &bitmapInfo); + AndroidBitmap_lockPixels(_env, bitmap, (void**) &src); - uint16_t const* src = (uint16_t const*)nativeBitmap->getPixels(); - int wpr = nativeBitmap->rowBytes() / 2; + int wpr = bitmapInfo.stride / 2; for (u32 y=0 ; y<height; y++) { for (u32 x=0 ; x<width ; x++) { uint16_t rgb = src[x]; @@ -248,6 +240,7 @@ detect(JNIEnv *_env, jobject _this, } // release the arrays we're using + AndroidBitmap_unlockPixels(_env, bitmap); _env->ReleaseByteArrayElements(bwbufferObject, bwbuffer, 0); return numberOfFaces; } |