Move computation of decodeColor- Type and Space

Bug: 70846442
Test: I5110881203c000474116a94a48f2afc9a9b62001

Delay computing decodeColorType until right before we may change it (and
delay reinterpreting the pointer along with it). More interestingly,
defer computing decodeColorSpace until *after* we may have changed the
decodeColorType. Along with a change in Skia, this allows us to match
the color type of inBitmap, as intended.

Change-Id: If0ca4a61d338a13473a96faf900c84010ae46d41
This commit is contained in:
Leon Scroggins III
2018-03-12 15:44:03 -04:00
parent 4856210398
commit 8d592f9a7d

View File

@@ -155,12 +155,6 @@ static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, jint in
env->SetObjectField(options, gOptions_outColorSpaceFieldID, 0);
}
SkBitmapRegionDecoder* brd = reinterpret_cast<SkBitmapRegionDecoder*>(brdHandle);
SkColorType decodeColorType = brd->computeOutputColorType(colorType);
sk_sp<SkColorSpace> decodeColorSpace = brd->computeOutputColorSpace(
decodeColorType, colorSpace);
// Recycle a bitmap if possible.
android::Bitmap* recycledBitmap = nullptr;
size_t recycledBytes = 0;
@@ -172,6 +166,9 @@ static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, jint in
recycledBytes = bitmap::getBitmapAllocationByteCount(env, javaBitmap);
}
SkBitmapRegionDecoder* brd = reinterpret_cast<SkBitmapRegionDecoder*>(brdHandle);
SkColorType decodeColorType = brd->computeOutputColorType(colorType);
// Set up the pixel allocator
SkBRDAllocator* allocator = nullptr;
RecyclingClippingPixelAllocator recycleAlloc(recycledBitmap, recycledBytes);
@@ -184,6 +181,9 @@ static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, jint in
allocator = &heapAlloc;
}
sk_sp<SkColorSpace> decodeColorSpace = brd->computeOutputColorSpace(
decodeColorType, colorSpace);
// Decode the region.
SkIRect subset = SkIRect::MakeXYWH(inputX, inputY, inputWidth, inputHeight);
SkBitmap bitmap;