Loading core/jni/android/graphics/Bitmap.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -437,6 +437,10 @@ static FromColorProc ChooseFromColorProc(const SkBitmap& bitmap) { return NULL; } static bool IsColorSpaceSRGB(SkColorSpace* colorSpace) { return colorSpace == nullptr || colorSpace->isSRGB(); } bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int srcStride, int x, int y, int width, int height, const SkBitmap& dstBitmap) { void* dst = dstBitmap.getPixels(); Loading @@ -453,8 +457,7 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int dst = dstBitmap.getAddr(x, y); SkColorSpace* colorSpace = dstBitmap.colorSpace(); if (dstBitmap.colorType() == kRGBA_F16_SkColorType || GraphicsJNI::isColorSpaceSRGB(colorSpace)) { if (dstBitmap.colorType() == kRGBA_F16_SkColorType || IsColorSpaceSRGB(colorSpace)) { // now copy/convert each scanline for (int y = 0; y < height; y++) { proc(dst, src, width, x, y); Loading Loading @@ -673,8 +676,8 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, SkBitmap bitmap; sk_sp<SkColorSpace> colorSpace; if (colorType != kN32_SkColorType || xyzD50 == nullptr || transferParameters == nullptr) { colorSpace = GraphicsJNI::colorSpaceForType(colorType); if (xyzD50 == nullptr || transferParameters == nullptr) { colorSpace = SkColorSpace::MakeSRGB(); } else { SkColorSpaceTransferFn p = GraphicsJNI::getNativeTransferParameters(env, transferParameters); SkMatrix44 xyzMatrix = GraphicsJNI::getNativeXYZMatrix(env, xyzD50); Loading Loading @@ -1268,7 +1271,7 @@ static jboolean Bitmap_isSRGB(JNIEnv* env, jobject, jlong bitmapHandle) { if (!bitmapHolder.valid()) return JNI_TRUE; SkColorSpace* colorSpace = bitmapHolder->info().colorSpace(); return GraphicsJNI::isColorSpaceSRGB(colorSpace); return IsColorSpaceSRGB(colorSpace); } static jboolean Bitmap_isSRGBLinear(JNIEnv* env, jobject, jlong bitmapHandle) { Loading Loading @@ -1340,8 +1343,7 @@ static jint Bitmap_getPixel(JNIEnv* env, jobject, jlong bitmapHandle, proc(dst, src, 1); SkColorSpace* colorSpace = bitmap.colorSpace(); if (bitmap.colorType() != kRGBA_F16_SkColorType && !GraphicsJNI::isColorSpaceSRGB(colorSpace)) { if (bitmap.colorType() != kRGBA_F16_SkColorType && !IsColorSpaceSRGB(colorSpace)) { auto sRGB = SkColorSpace::MakeSRGB(); auto xform = SkColorSpaceXform::New(colorSpace, sRGB.get()); xform->apply(SkColorSpaceXform::kBGRA_8888_ColorFormat, &dst[0], Loading Loading @@ -1371,8 +1373,7 @@ static void Bitmap_getPixels(JNIEnv* env, jobject, jlong bitmapHandle, SkColor* d = (SkColor*)dst + offset; SkColorSpace* colorSpace = bitmap.colorSpace(); if (bitmap.colorType() == kRGBA_F16_SkColorType || GraphicsJNI::isColorSpaceSRGB(colorSpace)) { if (bitmap.colorType() == kRGBA_F16_SkColorType || IsColorSpaceSRGB(colorSpace)) { while (--height >= 0) { proc(d, src, width); d += stride; Loading Loading @@ -1414,8 +1415,7 @@ static void Bitmap_setPixel(JNIEnv* env, jobject, jlong bitmapHandle, } SkColorSpace* colorSpace = bitmap.colorSpace(); if (bitmap.colorType() != kRGBA_F16_SkColorType && !GraphicsJNI::isColorSpaceSRGB(colorSpace)) { if (bitmap.colorType() != kRGBA_F16_SkColorType && !IsColorSpaceSRGB(colorSpace)) { auto sRGB = SkColorSpace::MakeSRGB(); auto xform = SkColorSpaceXform::New(sRGB.get(), colorSpace); xform->apply(SkColorSpaceXform::kBGRA_8888_ColorFormat, &color, Loading core/jni/android/graphics/BitmapFactory.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -360,7 +360,7 @@ static jobject doDecode(JNIEnv* env, std::unique_ptr<SkStreamRewindable> stream, // use the default. SkImageInfo bitmapInfo = decodeInfo; if (decodeInfo.colorSpace() && decodeInfo.colorSpace()->isSRGB()) { bitmapInfo = bitmapInfo.makeColorSpace(GraphicsJNI::colorSpaceForType(decodeColorType)); bitmapInfo = bitmapInfo.makeColorSpace(decodeInfo.refColorSpace()); } if (decodeColorType == kGray_8_SkColorType) { Loading core/jni/android/graphics/GraphicBuffer.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -196,8 +196,7 @@ static jboolean android_graphics_GraphicBuffer_lockCanvas(JNIEnv* env, jobject, SkBitmap bitmap; bitmap.setInfo(SkImageInfo::Make(buffer->getWidth(), buffer->getHeight(), convertPixelFormat(buffer->getPixelFormat()), kPremul_SkAlphaType, GraphicsJNI::defaultColorSpace()), kPremul_SkAlphaType), bytesCount); if (buffer->getWidth() > 0 && buffer->getHeight() > 0) { Loading core/jni/android/graphics/Graphics.cpp +0 −25 Original line number Diff line number Diff line Loading @@ -454,31 +454,6 @@ android::Bitmap* GraphicsJNI::mapAshmemBitmap(JNIEnv* env, SkBitmap* bitmap, return wrapper; } sk_sp<SkColorSpace> GraphicsJNI::defaultColorSpace() { #ifdef ANDROID_ENABLE_LINEAR_BLENDING return SkColorSpace::MakeSRGB(); #else return nullptr; #endif } sk_sp<SkColorSpace> GraphicsJNI::linearColorSpace() { return SkColorSpace::MakeSRGBLinear(); } sk_sp<SkColorSpace> GraphicsJNI::colorSpaceForType(SkColorType type) { switch (type) { case kRGBA_F16_SkColorType: return linearColorSpace(); default: return defaultColorSpace(); } } bool GraphicsJNI::isColorSpaceSRGB(SkColorSpace* colorSpace) { return colorSpace == nullptr || colorSpace->isSRGB(); } SkColorSpaceTransferFn GraphicsJNI::getNativeTransferParameters(JNIEnv* env, jobject transferParams) { SkColorSpaceTransferFn p; p.fA = (float) env->GetDoubleField(transferParams, gTransferParams_aFieldID); Loading core/jni/android/graphics/GraphicsJNI.h +0 −5 Original line number Diff line number Diff line Loading @@ -104,11 +104,6 @@ public: int srcStride, int x, int y, int width, int height, const SkBitmap& dstBitmap); static sk_sp<SkColorSpace> defaultColorSpace(); static sk_sp<SkColorSpace> linearColorSpace(); static sk_sp<SkColorSpace> colorSpaceForType(SkColorType type); static bool isColorSpaceSRGB(SkColorSpace* colorSpace); static SkColorSpaceTransferFn getNativeTransferParameters(JNIEnv* env, jobject transferParams); static SkMatrix44 getNativeXYZMatrix(JNIEnv* env, jfloatArray xyzD50); static sk_sp<SkColorSpace> getNativeColorSpace(JNIEnv* env, jobject colorSpace); Loading Loading
core/jni/android/graphics/Bitmap.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -437,6 +437,10 @@ static FromColorProc ChooseFromColorProc(const SkBitmap& bitmap) { return NULL; } static bool IsColorSpaceSRGB(SkColorSpace* colorSpace) { return colorSpace == nullptr || colorSpace->isSRGB(); } bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int srcStride, int x, int y, int width, int height, const SkBitmap& dstBitmap) { void* dst = dstBitmap.getPixels(); Loading @@ -453,8 +457,7 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int dst = dstBitmap.getAddr(x, y); SkColorSpace* colorSpace = dstBitmap.colorSpace(); if (dstBitmap.colorType() == kRGBA_F16_SkColorType || GraphicsJNI::isColorSpaceSRGB(colorSpace)) { if (dstBitmap.colorType() == kRGBA_F16_SkColorType || IsColorSpaceSRGB(colorSpace)) { // now copy/convert each scanline for (int y = 0; y < height; y++) { proc(dst, src, width, x, y); Loading Loading @@ -673,8 +676,8 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, SkBitmap bitmap; sk_sp<SkColorSpace> colorSpace; if (colorType != kN32_SkColorType || xyzD50 == nullptr || transferParameters == nullptr) { colorSpace = GraphicsJNI::colorSpaceForType(colorType); if (xyzD50 == nullptr || transferParameters == nullptr) { colorSpace = SkColorSpace::MakeSRGB(); } else { SkColorSpaceTransferFn p = GraphicsJNI::getNativeTransferParameters(env, transferParameters); SkMatrix44 xyzMatrix = GraphicsJNI::getNativeXYZMatrix(env, xyzD50); Loading Loading @@ -1268,7 +1271,7 @@ static jboolean Bitmap_isSRGB(JNIEnv* env, jobject, jlong bitmapHandle) { if (!bitmapHolder.valid()) return JNI_TRUE; SkColorSpace* colorSpace = bitmapHolder->info().colorSpace(); return GraphicsJNI::isColorSpaceSRGB(colorSpace); return IsColorSpaceSRGB(colorSpace); } static jboolean Bitmap_isSRGBLinear(JNIEnv* env, jobject, jlong bitmapHandle) { Loading Loading @@ -1340,8 +1343,7 @@ static jint Bitmap_getPixel(JNIEnv* env, jobject, jlong bitmapHandle, proc(dst, src, 1); SkColorSpace* colorSpace = bitmap.colorSpace(); if (bitmap.colorType() != kRGBA_F16_SkColorType && !GraphicsJNI::isColorSpaceSRGB(colorSpace)) { if (bitmap.colorType() != kRGBA_F16_SkColorType && !IsColorSpaceSRGB(colorSpace)) { auto sRGB = SkColorSpace::MakeSRGB(); auto xform = SkColorSpaceXform::New(colorSpace, sRGB.get()); xform->apply(SkColorSpaceXform::kBGRA_8888_ColorFormat, &dst[0], Loading Loading @@ -1371,8 +1373,7 @@ static void Bitmap_getPixels(JNIEnv* env, jobject, jlong bitmapHandle, SkColor* d = (SkColor*)dst + offset; SkColorSpace* colorSpace = bitmap.colorSpace(); if (bitmap.colorType() == kRGBA_F16_SkColorType || GraphicsJNI::isColorSpaceSRGB(colorSpace)) { if (bitmap.colorType() == kRGBA_F16_SkColorType || IsColorSpaceSRGB(colorSpace)) { while (--height >= 0) { proc(d, src, width); d += stride; Loading Loading @@ -1414,8 +1415,7 @@ static void Bitmap_setPixel(JNIEnv* env, jobject, jlong bitmapHandle, } SkColorSpace* colorSpace = bitmap.colorSpace(); if (bitmap.colorType() != kRGBA_F16_SkColorType && !GraphicsJNI::isColorSpaceSRGB(colorSpace)) { if (bitmap.colorType() != kRGBA_F16_SkColorType && !IsColorSpaceSRGB(colorSpace)) { auto sRGB = SkColorSpace::MakeSRGB(); auto xform = SkColorSpaceXform::New(sRGB.get(), colorSpace); xform->apply(SkColorSpaceXform::kBGRA_8888_ColorFormat, &color, Loading
core/jni/android/graphics/BitmapFactory.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -360,7 +360,7 @@ static jobject doDecode(JNIEnv* env, std::unique_ptr<SkStreamRewindable> stream, // use the default. SkImageInfo bitmapInfo = decodeInfo; if (decodeInfo.colorSpace() && decodeInfo.colorSpace()->isSRGB()) { bitmapInfo = bitmapInfo.makeColorSpace(GraphicsJNI::colorSpaceForType(decodeColorType)); bitmapInfo = bitmapInfo.makeColorSpace(decodeInfo.refColorSpace()); } if (decodeColorType == kGray_8_SkColorType) { Loading
core/jni/android/graphics/GraphicBuffer.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -196,8 +196,7 @@ static jboolean android_graphics_GraphicBuffer_lockCanvas(JNIEnv* env, jobject, SkBitmap bitmap; bitmap.setInfo(SkImageInfo::Make(buffer->getWidth(), buffer->getHeight(), convertPixelFormat(buffer->getPixelFormat()), kPremul_SkAlphaType, GraphicsJNI::defaultColorSpace()), kPremul_SkAlphaType), bytesCount); if (buffer->getWidth() > 0 && buffer->getHeight() > 0) { Loading
core/jni/android/graphics/Graphics.cpp +0 −25 Original line number Diff line number Diff line Loading @@ -454,31 +454,6 @@ android::Bitmap* GraphicsJNI::mapAshmemBitmap(JNIEnv* env, SkBitmap* bitmap, return wrapper; } sk_sp<SkColorSpace> GraphicsJNI::defaultColorSpace() { #ifdef ANDROID_ENABLE_LINEAR_BLENDING return SkColorSpace::MakeSRGB(); #else return nullptr; #endif } sk_sp<SkColorSpace> GraphicsJNI::linearColorSpace() { return SkColorSpace::MakeSRGBLinear(); } sk_sp<SkColorSpace> GraphicsJNI::colorSpaceForType(SkColorType type) { switch (type) { case kRGBA_F16_SkColorType: return linearColorSpace(); default: return defaultColorSpace(); } } bool GraphicsJNI::isColorSpaceSRGB(SkColorSpace* colorSpace) { return colorSpace == nullptr || colorSpace->isSRGB(); } SkColorSpaceTransferFn GraphicsJNI::getNativeTransferParameters(JNIEnv* env, jobject transferParams) { SkColorSpaceTransferFn p; p.fA = (float) env->GetDoubleField(transferParams, gTransferParams_aFieldID); Loading
core/jni/android/graphics/GraphicsJNI.h +0 −5 Original line number Diff line number Diff line Loading @@ -104,11 +104,6 @@ public: int srcStride, int x, int y, int width, int height, const SkBitmap& dstBitmap); static sk_sp<SkColorSpace> defaultColorSpace(); static sk_sp<SkColorSpace> linearColorSpace(); static sk_sp<SkColorSpace> colorSpaceForType(SkColorType type); static bool isColorSpaceSRGB(SkColorSpace* colorSpace); static SkColorSpaceTransferFn getNativeTransferParameters(JNIEnv* env, jobject transferParams); static SkMatrix44 getNativeXYZMatrix(JNIEnv* env, jfloatArray xyzD50); static sk_sp<SkColorSpace> getNativeColorSpace(JNIEnv* env, jobject colorSpace); Loading