diff options
Diffstat (limited to 'native/graphics/jni/bitmap.cpp')
-rw-r--r-- | native/graphics/jni/bitmap.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/native/graphics/jni/bitmap.cpp b/native/graphics/jni/bitmap.cpp index 26c7f8d709e7..b8eb543ff835 100644 --- a/native/graphics/jni/bitmap.cpp +++ b/native/graphics/jni/bitmap.cpp @@ -15,6 +15,7 @@ */ #include <android/bitmap.h> +#include <android/data_space.h> #include <android/graphics/bitmap.h> #include <android/data_space.h> @@ -32,10 +33,14 @@ int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap, int32_t AndroidBitmap_getDataSpace(JNIEnv* env, jobject jbitmap) { if (NULL == env || NULL == jbitmap) { - return ADATASPACE_UNKNOWN; // Or return a real error? + return ADATASPACE_UNKNOWN; } android::graphics::Bitmap bitmap(env, jbitmap); + if (!bitmap.isValid()) { + return ADATASPACE_UNKNOWN; + } + return bitmap.getDataSpace(); } @@ -74,3 +79,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_CompressWriteFunc 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); +} |