Support Gainmap for shared memory allocation.
Bug: 267217209 Test: android.graphics.cts.ImageDecoderTest Change-Id: Ie07b5f3b6b2b563d8790a121be7b925e8a097bcb
This commit is contained in:
@@ -498,7 +498,7 @@ SkCodec::Result ImageDecoder::decode(void* pixels, size_t rowBytes) {
|
||||
return result;
|
||||
}
|
||||
|
||||
SkCodec::Result ImageDecoder::extractGainmap(Bitmap* destination) {
|
||||
SkCodec::Result ImageDecoder::extractGainmap(Bitmap* destination, bool isShared) {
|
||||
ATRACE_CALL();
|
||||
SkGainmapInfo gainmapInfo;
|
||||
std::unique_ptr<SkStream> gainmapStream;
|
||||
@@ -553,9 +553,12 @@ SkCodec::Result ImageDecoder::extractGainmap(Bitmap* destination) {
|
||||
return SkCodec::kInternalError;
|
||||
}
|
||||
|
||||
// TODO: We don't currently parcel the gainmap, but if we should then also support
|
||||
// the shared allocator
|
||||
sk_sp<Bitmap> nativeBitmap = Bitmap::allocateHeapBitmap(&bm);
|
||||
sk_sp<Bitmap> nativeBitmap;
|
||||
if (isShared) {
|
||||
nativeBitmap = Bitmap::allocateAshmemBitmap(&bm);
|
||||
} else {
|
||||
nativeBitmap = Bitmap::allocateHeapBitmap(&bm);
|
||||
}
|
||||
if (!nativeBitmap) {
|
||||
ALOGE("OOM allocating Bitmap with dimensions %i x %i", bitmapInfo.width(),
|
||||
bitmapInfo.height());
|
||||
|
||||
@@ -79,7 +79,7 @@ public:
|
||||
// Set whether the ImageDecoder should handle RestorePrevious frames.
|
||||
void setHandleRestorePrevious(bool handle);
|
||||
|
||||
SkCodec::Result extractGainmap(Bitmap* destination);
|
||||
SkCodec::Result extractGainmap(Bitmap* destination, bool isShared);
|
||||
|
||||
private:
|
||||
// State machine for keeping track of how to handle RestorePrevious (RP)
|
||||
|
||||
@@ -354,7 +354,8 @@ static jobject ImageDecoder_nDecodeBitmap(JNIEnv* env, jobject /*clazz*/, jlong
|
||||
// cost of RAM
|
||||
if (result == SkCodec::kSuccess && !jpostProcess && !preferRamOverQuality) {
|
||||
// The gainmap costs RAM to improve quality, so skip this if we're prioritizing RAM instead
|
||||
result = decoder->extractGainmap(nativeBitmap.get());
|
||||
result = decoder->extractGainmap(nativeBitmap.get(),
|
||||
allocator == kSharedMemory_Allocator ? true : false);
|
||||
jexception = get_and_clear_exception(env);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user