From 84a2afcbfbfbbc91cbaf83d55a8ebccc987e66f1 Mon Sep 17 00:00:00 2001 From: Leon Scroggins III Date: Sun, 19 Jan 2020 19:27:16 -0500 Subject: Update NDK methods for HARDWARE Bitmaps Bug: 135133301 Test: I2c1e58c41e49c72fb4bdbc64989da103885d34bf _getInfo now sets a bit in AndroidBitmapInfo.flags to indicate whether the Bitmap has Config.HARDWARE. For a HARDWARE Bitmap, its AHardwareBuffer can now be retrieved with AndroidBitmap_getHardwareBuffer. Call AHardwareBuffer_acquire on the buffer so it will not be deleted while the client is using it. Change-Id: I9240c1928c1478053ecf7c252443a33dbd6fd6db --- native/graphics/jni/bitmap.cpp | 15 +++++++++++++++ native/graphics/jni/libjnigraphics.map.txt | 1 + 2 files changed, 16 insertions(+) (limited to 'native') diff --git a/native/graphics/jni/bitmap.cpp b/native/graphics/jni/bitmap.cpp index ea8a521c9d5f..4f21ccba2419 100644 --- a/native/graphics/jni/bitmap.cpp +++ b/native/graphics/jni/bitmap.cpp @@ -76,6 +76,21 @@ int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap) { return ANDROID_BITMAP_RESULT_SUCCESS; } +int AndroidBitmap_getHardwareBuffer(JNIEnv* env, jobject jbitmap, AHardwareBuffer** outBuffer) { + if (NULL == env || NULL == jbitmap || NULL == outBuffer) { + return ANDROID_BITMAP_RESULT_BAD_PARAMETER; + } + + android::graphics::Bitmap bitmap(env, jbitmap); + + if (!bitmap.isValid()) { + return ANDROID_BITMAP_RESULT_JNI_EXCEPTION; + } + + *outBuffer = bitmap.getHardwareBuffer(); + return *outBuffer == NULL ? ANDROID_BITMAP_RESULT_BAD_PARAMETER : ANDROID_BITMAP_RESULT_SUCCESS; +} + int AndroidBitmap_compress(const AndroidBitmapInfo* info, int32_t dataSpace, const void* pixels, diff --git a/native/graphics/jni/libjnigraphics.map.txt b/native/graphics/jni/libjnigraphics.map.txt index 6843e7a8552f..2e6c966b9d6b 100644 --- a/native/graphics/jni/libjnigraphics.map.txt +++ b/native/graphics/jni/libjnigraphics.map.txt @@ -22,6 +22,7 @@ LIBJNIGRAPHICS { AndroidBitmap_lockPixels; AndroidBitmap_unlockPixels; AndroidBitmap_compress; # introduced=30 + AndroidBitmap_getHardwareBuffer; #introduced=30 local: *; }; -- cgit v1.2.3