summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2015-03-03 15:37:46 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-03-03 15:37:47 +0000
commit20eeaa9cdee7aa28d456f4a7ac3d494950c5aa1a (patch)
tree34f4c94c53a57410b805e64f7435a45d6b1e2718
parentab02f818aa312f0795152449c29cb994f72e4891 (diff)
parent478cf8b21905a315a8be53871c3efe018cfe115f (diff)
downloadneven-20eeaa9cdee7aa28d456f4a7ac3d494950c5aa1a.tar.gz
Merge "Switch to the public NDK API for bitmap"
-rw-r--r--Android.mk2
-rw-r--r--FaceDetector_jni.cpp21
2 files changed, 8 insertions, 15 deletions
diff --git a/Android.mk b/Android.mk
index f0b1fa7..9234fe4 100644
--- a/Android.mk
+++ b/Android.mk
@@ -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;
}