Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1803298 authored by Sally Qi's avatar Sally Qi Committed by Automerger Merge Worker
Browse files

Merge "Support Gainmap for shared memory allocation." into udc-dev am: 44b487a0 am: f5f4ee4d

parents c5bdc8a2 f5f4ee4d
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -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());
+1 −1
Original line number Diff line number Diff line
@@ -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)
+2 −1
Original line number Diff line number Diff line
@@ -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);
    }