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

Commit 9824f774 authored by Leon Scroggins's avatar Leon Scroggins Committed by android-build-merger
Browse files

Merge "Encode F16 Bitmaps to 8-bit P3" into pi-dev

am: 5a0b48a1

Change-Id: Iea3b44fcb680f1632d02595886d18145d61cf0f4
parents 73fd2565 5a0b48a1
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -921,6 +921,28 @@ static jboolean Bitmap_compress(JNIEnv* env, jobject clazz, jlong bitmapHandle,

    SkBitmap skbitmap;
    bitmap->getSkBitmap(&skbitmap);
    if (skbitmap.colorType() == kRGBA_F16_SkColorType) {
        // Convert to P3 before encoding. This matches SkAndroidCodec::computeOutputColorSpace
        // for wide gamuts.
        auto cs = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma,
                                        SkColorSpace::kDCIP3_D65_Gamut);
        auto info = skbitmap.info().makeColorType(kRGBA_8888_SkColorType)
                                   .makeColorSpace(std::move(cs));
        SkBitmap p3;
        if (!p3.tryAllocPixels(info)) {
            return JNI_FALSE;
        }
        auto xform = SkColorSpaceXform::New(skbitmap.colorSpace(), info.colorSpace());
        if (!xform) {
            return JNI_FALSE;
        }
        if (!xform->apply(SkColorSpaceXform::kRGBA_8888_ColorFormat, p3.getPixels(),
                          SkColorSpaceXform::kRGBA_F16_ColorFormat, skbitmap.getPixels(),
                          info.width() * info.height(), kUnpremul_SkAlphaType)) {
            return JNI_FALSE;
        }
        skbitmap = p3;
    }
    return SkEncodeImage(strm.get(), skbitmap, fm, quality) ? JNI_TRUE : JNI_FALSE;
}