diff options
Diffstat (limited to 'native/graphics/jni/bitmap.cpp')
-rw-r--r-- | native/graphics/jni/bitmap.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/native/graphics/jni/bitmap.cpp b/native/graphics/jni/bitmap.cpp index 1aebeaf1e7e8..4f21ccba2419 100644 --- a/native/graphics/jni/bitmap.cpp +++ b/native/graphics/jni/bitmap.cpp @@ -15,7 +15,9 @@ */ #include <android/bitmap.h> +#include <android/data_space.h> #include <android/graphics/bitmap.h> +#include <android/data_space.h> int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap, AndroidBitmapInfo* info) { @@ -29,6 +31,15 @@ int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap, return ANDROID_BITMAP_RESULT_SUCCESS; } +int32_t AndroidBitmap_getDataSpace(JNIEnv* env, jobject jbitmap) { + if (NULL == env || NULL == jbitmap) { + return ADATASPACE_UNKNOWN; // Or return a real error? + } + + android::graphics::Bitmap bitmap(env, jbitmap); + return bitmap.getDataSpace(); +} + int AndroidBitmap_lockPixels(JNIEnv* env, jobject jbitmap, void** addrPtr) { if (NULL == env || NULL == jbitmap) { return ANDROID_BITMAP_RESULT_BAD_PARAMETER; @@ -64,3 +75,35 @@ int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap) { ABitmap_releaseRef(bitmap.get()); 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, + int32_t format, int32_t quality, + void* userContext, + AndroidBitmap_compress_write_fn fn) { + if (NULL == info || NULL == pixels || NULL == fn) { + return ANDROID_BITMAP_RESULT_BAD_PARAMETER; + } + if (quality < 0 || quality > 100) { + return ANDROID_BITMAP_RESULT_BAD_PARAMETER; + } + + return ABitmap_compress(info, (ADataSpace) dataSpace, pixels, + (AndroidBitmapCompressFormat) format, quality, userContext, fn); +} |