| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkCodecPriv.h" | 8 #include "SkCodecPriv.h" |
| 9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
| 10 #include "SkSwizzler.h" | 10 #include "SkSwizzler.h" |
| (...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 static SkSwizzler::ResultAlpha swizzle_bgra_to_n32_premul( | 388 static SkSwizzler::ResultAlpha swizzle_bgra_to_n32_premul( |
| 389 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, | 389 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, |
| 390 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { | 390 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { |
| 391 | 391 |
| 392 src += offset; | 392 src += offset; |
| 393 SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; | 393 SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; |
| 394 INIT_RESULT_ALPHA; | 394 INIT_RESULT_ALPHA; |
| 395 for (int x = 0; x < dstWidth; x++) { | 395 for (int x = 0; x < dstWidth; x++) { |
| 396 uint8_t alpha = src[3]; | 396 uint8_t alpha = src[3]; |
| 397 UPDATE_RESULT_ALPHA(alpha); | 397 UPDATE_RESULT_ALPHA(alpha); |
| 398 dst[x] = SkPreMultiplyARGB(alpha, src[2], src[1], src[0]); | 398 dst[x] = SkPremultiplyARGBInline(alpha, src[2], src[1], src[0]); |
| 399 src += deltaSrc; | 399 src += deltaSrc; |
| 400 } | 400 } |
| 401 return COMPUTE_RESULT_ALPHA; | 401 return COMPUTE_RESULT_ALPHA; |
| 402 } | 402 } |
| 403 | 403 |
| 404 // kRGBX | 404 // kRGBX |
| 405 static SkSwizzler::ResultAlpha swizzle_rgbx_to_n32( | 405 static SkSwizzler::ResultAlpha swizzle_rgbx_to_n32( |
| 406 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, | 406 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, |
| 407 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { | 407 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { |
| 408 | 408 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 433 static SkSwizzler::ResultAlpha swizzle_rgba_to_n32_premul( | 433 static SkSwizzler::ResultAlpha swizzle_rgba_to_n32_premul( |
| 434 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, | 434 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, |
| 435 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { | 435 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { |
| 436 | 436 |
| 437 src += offset; | 437 src += offset; |
| 438 SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; | 438 SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; |
| 439 INIT_RESULT_ALPHA; | 439 INIT_RESULT_ALPHA; |
| 440 for (int x = 0; x < dstWidth; x++) { | 440 for (int x = 0; x < dstWidth; x++) { |
| 441 unsigned alpha = src[3]; | 441 unsigned alpha = src[3]; |
| 442 UPDATE_RESULT_ALPHA(alpha); | 442 UPDATE_RESULT_ALPHA(alpha); |
| 443 dst[x] = SkPreMultiplyARGB(alpha, src[0], src[1], src[2]); | 443 dst[x] = SkPremultiplyARGBInline(alpha, src[0], src[1], src[2]); |
| 444 src += deltaSrc; | 444 src += deltaSrc; |
| 445 } | 445 } |
| 446 return COMPUTE_RESULT_ALPHA; | 446 return COMPUTE_RESULT_ALPHA; |
| 447 } | 447 } |
| 448 | 448 |
| 449 static SkSwizzler::ResultAlpha swizzle_rgba_to_n32_unpremul( | 449 static SkSwizzler::ResultAlpha swizzle_rgba_to_n32_unpremul( |
| 450 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, | 450 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, |
| 451 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { | 451 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { |
| 452 | 452 |
| 453 src += offset; | 453 src += offset; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 466 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, | 466 void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, |
| 467 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { | 467 int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { |
| 468 | 468 |
| 469 src += offset; | 469 src += offset; |
| 470 SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; | 470 SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow; |
| 471 INIT_RESULT_ALPHA; | 471 INIT_RESULT_ALPHA; |
| 472 for (int x = 0; x < dstWidth; x++) { | 472 for (int x = 0; x < dstWidth; x++) { |
| 473 unsigned alpha = src[3]; | 473 unsigned alpha = src[3]; |
| 474 UPDATE_RESULT_ALPHA(alpha); | 474 UPDATE_RESULT_ALPHA(alpha); |
| 475 if (0 != alpha) { | 475 if (0 != alpha) { |
| 476 dst[x] = SkPreMultiplyARGB(alpha, src[0], src[1], src[2]); | 476 dst[x] = SkPremultiplyARGBInline(alpha, src[0], src[1], src[2]); |
| 477 } | 477 } |
| 478 src += deltaSrc; | 478 src += deltaSrc; |
| 479 } | 479 } |
| 480 return COMPUTE_RESULT_ALPHA; | 480 return COMPUTE_RESULT_ALPHA; |
| 481 } | 481 } |
| 482 | 482 |
| 483 // kCMYK | 483 // kCMYK |
| 484 // | 484 // |
| 485 // CMYK is stored as four bytes per pixel. | 485 // CMYK is stored as four bytes per pixel. |
| 486 // | 486 // |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 772 default: | 772 default: |
| 773 break; | 773 break; |
| 774 } | 774 } |
| 775 if (nullptr == proc) { | 775 if (nullptr == proc) { |
| 776 return nullptr; | 776 return nullptr; |
| 777 } | 777 } |
| 778 | 778 |
| 779 // Store bpp in bytes if it is an even multiple, otherwise use bits | 779 // Store bpp in bytes if it is an even multiple, otherwise use bits |
| 780 int srcBPP = SkIsAlign8(BitsPerPixel(sc)) ? BytesPerPixel(sc) : BitsPerPixel
(sc); | 780 int srcBPP = SkIsAlign8(BitsPerPixel(sc)) ? BytesPerPixel(sc) : BitsPerPixel
(sc); |
| 781 int dstBPP = SkColorTypeBytesPerPixel(dstInfo.colorType()); | 781 int dstBPP = SkColorTypeBytesPerPixel(dstInfo.colorType()); |
| 782 | 782 |
| 783 int srcOffset = 0; | 783 int srcOffset = 0; |
| 784 int srcWidth = dstInfo.width(); | 784 int srcWidth = dstInfo.width(); |
| 785 int dstOffset = 0; | 785 int dstOffset = 0; |
| 786 int dstWidth = srcWidth; | 786 int dstWidth = srcWidth; |
| 787 if (options.fSubset) { | 787 if (options.fSubset) { |
| 788 // We do not currently support subset decodes for image types that may h
ave | 788 // We do not currently support subset decodes for image types that may h
ave |
| 789 // frames (gif). | 789 // frames (gif). |
| 790 SkASSERT(!frame); | 790 SkASSERT(!frame); |
| 791 srcOffset = options.fSubset->left(); | 791 srcOffset = options.fSubset->left(); |
| 792 srcWidth = options.fSubset->width(); | 792 srcWidth = options.fSubset->width(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 fAllocatedWidth = get_scaled_dimension(fDstWidth, sampleX); | 826 fAllocatedWidth = get_scaled_dimension(fDstWidth, sampleX); |
| 827 | 827 |
| 828 return fAllocatedWidth; | 828 return fAllocatedWidth; |
| 829 } | 829 } |
| 830 | 830 |
| 831 SkSwizzler::ResultAlpha SkSwizzler::swizzle(void* dst, const uint8_t* SK_RESTRIC
T src) { | 831 SkSwizzler::ResultAlpha SkSwizzler::swizzle(void* dst, const uint8_t* SK_RESTRIC
T src) { |
| 832 SkASSERT(nullptr != dst && nullptr != src); | 832 SkASSERT(nullptr != dst && nullptr != src); |
| 833 return fRowProc(SkTAddOffset<void>(dst, fDstOffsetBytes), src, fSwizzleWidth
, fSrcBPP, | 833 return fRowProc(SkTAddOffset<void>(dst, fDstOffsetBytes), src, fSwizzleWidth
, fSrcBPP, |
| 834 fSampleX * fSrcBPP, fSrcOffsetUnits, fColorTable); | 834 fSampleX * fSrcBPP, fSrcOffsetUnits, fColorTable); |
| 835 } | 835 } |
| OLD | NEW |