diff options
Diffstat (limited to 'native')
-rw-r--r-- | native/graphics/jni/bitmap.cpp | 18 | ||||
-rw-r--r-- | native/graphics/jni/imagedecoder.cpp | 25 | ||||
-rw-r--r-- | native/graphics/jni/libjnigraphics.map.txt | 35 |
3 files changed, 41 insertions, 37 deletions
diff --git a/native/graphics/jni/bitmap.cpp b/native/graphics/jni/bitmap.cpp index 26c7f8d709e7..ea8a521c9d5f 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> @@ -74,3 +75,20 @@ int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap) { ABitmap_releaseRef(bitmap.get()); return 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); +} diff --git a/native/graphics/jni/imagedecoder.cpp b/native/graphics/jni/imagedecoder.cpp index 2ef203dd466f..51439672d404 100644 --- a/native/graphics/jni/imagedecoder.cpp +++ b/native/graphics/jni/imagedecoder.cpp @@ -225,13 +225,12 @@ AndroidBitmapFormat AImageDecoderHeaderInfo_getAndroidBitmapFormat( int AImageDecoderHeaderInfo_getAlphaFlags(const AImageDecoderHeaderInfo* info) { if (!info) { - // FIXME: Better invalid? - return -1; + return ANDROID_IMAGE_DECODER_BAD_PARAMETER; } switch (toDecoder(info)->mCodec->getInfo().alphaType()) { case kUnknown_SkAlphaType: LOG_ALWAYS_FATAL("Invalid alpha type"); - return -1; + return ANDROID_IMAGE_DECODER_INTERNAL_ERROR; case kUnpremul_SkAlphaType: // fall through. premul is the default. case kPremul_SkAlphaType: @@ -241,26 +240,12 @@ int AImageDecoderHeaderInfo_getAlphaFlags(const AImageDecoderHeaderInfo* info) { } } -SkAlphaType toAlphaType(int androidBitmapFlags) { - switch (androidBitmapFlags) { - case ANDROID_BITMAP_FLAGS_ALPHA_PREMUL: - return kPremul_SkAlphaType; - case ANDROID_BITMAP_FLAGS_ALPHA_UNPREMUL: - return kUnpremul_SkAlphaType; - case ANDROID_BITMAP_FLAGS_ALPHA_OPAQUE: - return kOpaque_SkAlphaType; - default: - return kUnknown_SkAlphaType; - } -} - -int AImageDecoder_setAlphaFlags(AImageDecoder* decoder, int alphaFlag) { - if (!decoder || alphaFlag < ANDROID_BITMAP_FLAGS_ALPHA_PREMUL - || alphaFlag > ANDROID_BITMAP_FLAGS_ALPHA_UNPREMUL) { +int AImageDecoder_setUnpremultipliedRequired(AImageDecoder* decoder, bool required) { + if (!decoder) { return ANDROID_IMAGE_DECODER_BAD_PARAMETER; } - return toDecoder(decoder)->setOutAlphaType(toAlphaType(alphaFlag)) + return toDecoder(decoder)->setUnpremultipliedRequired(required) ? ANDROID_IMAGE_DECODER_SUCCESS : ANDROID_IMAGE_DECODER_INVALID_CONVERSION; } diff --git a/native/graphics/jni/libjnigraphics.map.txt b/native/graphics/jni/libjnigraphics.map.txt index 832770ffb97e..6843e7a8552f 100644 --- a/native/graphics/jni/libjnigraphics.map.txt +++ b/native/graphics/jni/libjnigraphics.map.txt @@ -1,26 +1,27 @@ LIBJNIGRAPHICS { global: - AImageDecoder_createFromAAsset; - AImageDecoder_createFromFd; - AImageDecoder_createFromBuffer; - AImageDecoder_delete; - AImageDecoder_setAndroidBitmapFormat; - AImageDecoder_setAlphaFlags; - AImageDecoder_getHeaderInfo; - AImageDecoder_getMinimumStride; - AImageDecoder_decodeImage; - AImageDecoder_setTargetSize; - AImageDecoder_setCrop; - AImageDecoderHeaderInfo_getWidth; - AImageDecoderHeaderInfo_getHeight; - AImageDecoderHeaderInfo_getMimeType; - AImageDecoderHeaderInfo_getAlphaFlags; - AImageDecoderHeaderInfo_isAnimated; - AImageDecoderHeaderInfo_getAndroidBitmapFormat; + AImageDecoder_createFromAAsset; # introduced=30 + AImageDecoder_createFromFd; # introduced=30 + AImageDecoder_createFromBuffer; # introduced=30 + AImageDecoder_delete; # introduced=30 + AImageDecoder_setAndroidBitmapFormat; # introduced=30 + AImageDecoder_setUnpremultipliedRequired; # introduced=30 + AImageDecoder_getHeaderInfo; # introduced=30 + AImageDecoder_getMinimumStride; # introduced=30 + AImageDecoder_decodeImage; # introduced=30 + AImageDecoder_setTargetSize; # introduced=30 + AImageDecoder_setCrop; # introduced=30 + AImageDecoderHeaderInfo_getWidth; # introduced=30 + AImageDecoderHeaderInfo_getHeight; # introduced=30 + AImageDecoderHeaderInfo_getMimeType; # introduced=30 + AImageDecoderHeaderInfo_getAlphaFlags; # introduced=30 + AImageDecoderHeaderInfo_isAnimated; # introduced=30 + AImageDecoderHeaderInfo_getAndroidBitmapFormat; # introduced=30 AndroidBitmap_getInfo; AndroidBitmap_getDataSpace; AndroidBitmap_lockPixels; AndroidBitmap_unlockPixels; + AndroidBitmap_compress; # introduced=30 local: *; }; |