Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: src/core/SkColorSpaceXform.cpp

Issue 2318663003: Delete SkColorSpace::gammaNamed() from public API (Closed) Base URL: https://skia.googlesource.com/skia.git@delunknownnamed
Patch Set: Rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkColorSpaceXform.h ('k') | src/core/SkColorSpace_Base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 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 "SkColorPriv.h" 8 #include "SkColorPriv.h"
9 #include "SkColorSpace_Base.h" 9 #include "SkColorSpace_Base.h"
10 #include "SkColorSpacePriv.h" 10 #include "SkColorSpacePriv.h"
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 if (v >= 254.5f) { 254 if (v >= 254.5f) {
255 return 255; 255 return 255;
256 } else if (v >= 0.5f) { 256 } else if (v >= 0.5f) {
257 return (uint8_t) (v + 0.5f); 257 return (uint8_t) (v + 0.5f);
258 } else { 258 } else {
259 return 0; 259 return 0;
260 } 260 }
261 } 261 }
262 262
263 static const int kDstGammaTableSize = 263 static const int kDstGammaTableSize =
264 SkColorSpaceXform_Base<SkColorSpace::kNonStandard_GammaNamed, kNone_Colo rSpaceMatch> 264 SkColorSpaceXform_Base<kNonStandard_SkGammaNamed, kNone_ColorSpaceMatch>
265 ::kDstGammaTableSize; 265 ::kDstGammaTableSize;
266 266
267 static void build_table_linear_to_gamma(uint8_t* outTable, float exponent) { 267 static void build_table_linear_to_gamma(uint8_t* outTable, float exponent) {
268 float toGammaExp = 1.0f / exponent; 268 float toGammaExp = 1.0f / exponent;
269 269
270 for (int i = 0; i < kDstGammaTableSize; i++) { 270 for (int i = 0; i < kDstGammaTableSize; i++) {
271 float x = ((float) i) * (1.0f / ((float) (kDstGammaTableSize - 1))); 271 float x = ((float) i) * (1.0f / ((float) (kDstGammaTableSize - 1)));
272 outTable[i] = clamp_normalized_float_to_byte(powf(x, toGammaExp)); 272 outTable[i] = clamp_normalized_float_to_byte(powf(x, toGammaExp));
273 } 273 }
274 } 274 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 linear_to_2dot2_table, 373 linear_to_2dot2_table,
374 &build_table_linear_to_gamma, 374 &build_table_linear_to_gamma,
375 &build_table_linear_to_gamma, 375 &build_table_linear_to_gamma,
376 &build_table_linear_to_gamma, 376 &build_table_linear_to_gamma,
377 }; 377 };
378 378
379 // Build tables to transform src gamma to linear. 379 // Build tables to transform src gamma to linear.
380 template <typename T> 380 template <typename T>
381 static void build_gamma_tables(const T* outGammaTables[3], T* gammaTableStorage, int gammaTableSize, 381 static void build_gamma_tables(const T* outGammaTables[3], T* gammaTableStorage, int gammaTableSize,
382 const sk_sp<SkColorSpace>& space, const GammaFns< T>& fns) { 382 const sk_sp<SkColorSpace>& space, const GammaFns< T>& fns) {
383 switch (space->gammaNamed()) { 383 switch (as_CSB(space)->gammaNamed()) {
384 case SkColorSpace::kSRGB_GammaNamed: 384 case kSRGB_SkGammaNamed:
385 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = fns.fSRG BTable; 385 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = fns.fSRG BTable;
386 break; 386 break;
387 case SkColorSpace::k2Dot2Curve_GammaNamed: 387 case k2Dot2Curve_SkGammaNamed:
388 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = fns.f2Do t2Table; 388 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = fns.f2Do t2Table;
389 break; 389 break;
390 case SkColorSpace::kLinear_GammaNamed: 390 case kLinear_SkGammaNamed:
391 (*fns.fBuildFromValue)(gammaTableStorage, 1.0f); 391 (*fns.fBuildFromValue)(gammaTableStorage, 1.0f);
392 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = gammaTab leStorage; 392 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = gammaTab leStorage;
393 break; 393 break;
394 default: { 394 default: {
395 const SkGammas* gammas = as_CSB(space)->gammas(); 395 const SkGammas* gammas = as_CSB(space)->gammas();
396 SkASSERT(gammas); 396 SkASSERT(gammas);
397 397
398 for (int i = 0; i < 3; i++) { 398 for (int i = 0; i < 3; i++) {
399 if (i > 0) { 399 if (i > 0) {
400 // Check if this curve matches the first curve. In this cas e, we can 400 // Check if this curve matches the first curve. In this cas e, we can
401 // share the same table pointer. This should almost always be true. 401 // share the same table pointer. This should almost always be true.
402 // I've never seen a profile where all three gamma curves di dn't match. 402 // I've never seen a profile where all three gamma curves di dn't match.
403 // But it is possible that they won't. 403 // But it is possible that they won't.
404 if (gammas->type(0) == gammas->type(i) && gammas->data(0) == gammas->data(i)) { 404 if (gammas->type(0) == gammas->type(i) && gammas->data(0) == gammas->data(i)) {
405 outGammaTables[i] = outGammaTables[0]; 405 outGammaTables[i] = outGammaTables[0];
406 continue; 406 continue;
407 } 407 }
408 } 408 }
409 409
410 if (gammas->isNamed(i)) { 410 if (gammas->isNamed(i)) {
411 switch (gammas->data(i).fNamed) { 411 switch (gammas->data(i).fNamed) {
412 case SkColorSpace::kSRGB_GammaNamed: 412 case kSRGB_SkGammaNamed:
413 outGammaTables[i] = fns.fSRGBTable; 413 outGammaTables[i] = fns.fSRGBTable;
414 break; 414 break;
415 case SkColorSpace::k2Dot2Curve_GammaNamed: 415 case k2Dot2Curve_SkGammaNamed:
416 outGammaTables[i] = fns.f2Dot2Table; 416 outGammaTables[i] = fns.f2Dot2Table;
417 break; 417 break;
418 case SkColorSpace::kLinear_GammaNamed: 418 case kLinear_SkGammaNamed:
419 (*fns.fBuildFromValue)(&gammaTableStorage[i * gammaT ableSize], 1.0f); 419 (*fns.fBuildFromValue)(&gammaTableStorage[i * gammaT ableSize], 1.0f);
420 outGammaTables[i] = &gammaTableStorage[i * gammaTabl eSize]; 420 outGammaTables[i] = &gammaTableStorage[i * gammaTabl eSize];
421 break; 421 break;
422 default: 422 default:
423 SkASSERT(false); 423 SkASSERT(false);
424 break; 424 break;
425 } 425 }
426 } else if (gammas->isValue(i)) { 426 } else if (gammas->isValue(i)) {
427 (*fns.fBuildFromValue)(&gammaTableStorage[i * gammaTableSize ], 427 (*fns.fBuildFromValue)(&gammaTableStorage[i * gammaTableSize ],
428 gammas->data(i).fValue); 428 gammas->data(i).fValue);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 csm = kFull_ColorSpaceMatch; 484 csm = kFull_ColorSpaceMatch;
485 } else if (!compute_gamut_xform(&srcToDst, srcSpace->xyz(), dstSpace->xyz()) ) { 485 } else if (!compute_gamut_xform(&srcToDst, srcSpace->xyz(), dstSpace->xyz()) ) {
486 return nullptr; 486 return nullptr;
487 } else if (is_almost_identity(srcToDst)) { 487 } else if (is_almost_identity(srcToDst)) {
488 srcToDst.setIdentity(); 488 srcToDst.setIdentity();
489 csm = kGamut_ColorSpaceMatch; 489 csm = kGamut_ColorSpaceMatch;
490 } 490 }
491 491
492 switch (csm) { 492 switch (csm) {
493 case kNone_ColorSpaceMatch: 493 case kNone_ColorSpaceMatch:
494 switch (dstSpace->gammaNamed()) { 494 switch (as_CSB(dstSpace)->gammaNamed()) {
495 case SkColorSpace::kSRGB_GammaNamed: 495 case kSRGB_SkGammaNamed:
496 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 496 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
497 <SkColorSpace::kSRGB_GammaNamed, kNone_ColorSpaceMat ch> 497 <kSRGB_SkGammaNamed, kNone_ColorSpaceMatch>
498 (srcSpace, srcToDst, dstSpace)); 498 (srcSpace, srcToDst, dstSpace));
499 case SkColorSpace::k2Dot2Curve_GammaNamed: 499 case k2Dot2Curve_SkGammaNamed:
500 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 500 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
501 <SkColorSpace::k2Dot2Curve_GammaNamed, kNone_ColorSp aceMatch> 501 <k2Dot2Curve_SkGammaNamed, kNone_ColorSpaceMatch>
502 (srcSpace, srcToDst, dstSpace)); 502 (srcSpace, srcToDst, dstSpace));
503 default: 503 default:
504 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 504 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
505 <SkColorSpace::kNonStandard_GammaNamed, kNone_ColorS paceMatch> 505 <kNonStandard_SkGammaNamed, kNone_ColorSpaceMatch>
506 (srcSpace, srcToDst, dstSpace)); 506 (srcSpace, srcToDst, dstSpace));
507 } 507 }
508 case kGamut_ColorSpaceMatch: 508 case kGamut_ColorSpaceMatch:
509 switch (dstSpace->gammaNamed()) { 509 switch (as_CSB(dstSpace)->gammaNamed()) {
510 case SkColorSpace::kSRGB_GammaNamed: 510 case kSRGB_SkGammaNamed:
511 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 511 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
512 <SkColorSpace::kSRGB_GammaNamed, kGamut_ColorSpaceMa tch> 512 <kSRGB_SkGammaNamed, kGamut_ColorSpaceMatch>
513 (srcSpace, srcToDst, dstSpace)); 513 (srcSpace, srcToDst, dstSpace));
514 case SkColorSpace::k2Dot2Curve_GammaNamed: 514 case k2Dot2Curve_SkGammaNamed:
515 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 515 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
516 <SkColorSpace::k2Dot2Curve_GammaNamed, kGamut_ColorS paceMatch> 516 <k2Dot2Curve_SkGammaNamed, kGamut_ColorSpaceMatch>
517 (srcSpace, srcToDst, dstSpace)); 517 (srcSpace, srcToDst, dstSpace));
518 default: 518 default:
519 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 519 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
520 <SkColorSpace::kNonStandard_GammaNamed, kGamut_Color SpaceMatch> 520 <kNonStandard_SkGammaNamed, kGamut_ColorSpaceMatch>
521 (srcSpace, srcToDst, dstSpace)); 521 (srcSpace, srcToDst, dstSpace));
522 } 522 }
523 case kFull_ColorSpaceMatch: 523 case kFull_ColorSpaceMatch:
524 switch (dstSpace->gammaNamed()) { 524 switch (as_CSB(dstSpace)->gammaNamed()) {
525 case SkColorSpace::kSRGB_GammaNamed: 525 case kSRGB_SkGammaNamed:
526 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 526 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
527 <SkColorSpace::kSRGB_GammaNamed, kFull_ColorSpaceMat ch> 527 <kSRGB_SkGammaNamed, kFull_ColorSpaceMatch>
528 (srcSpace, srcToDst, dstSpace)); 528 (srcSpace, srcToDst, dstSpace));
529 case SkColorSpace::k2Dot2Curve_GammaNamed: 529 case k2Dot2Curve_SkGammaNamed:
530 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 530 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
531 <SkColorSpace::k2Dot2Curve_GammaNamed, kFull_ColorSp aceMatch> 531 <k2Dot2Curve_SkGammaNamed, kFull_ColorSpaceMatch>
532 (srcSpace, srcToDst, dstSpace)); 532 (srcSpace, srcToDst, dstSpace));
533 default: 533 default:
534 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base 534 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXf orm_Base
535 <SkColorSpace::kNonStandard_GammaNamed, kFull_ColorS paceMatch> 535 <kNonStandard_SkGammaNamed, kFull_ColorSpaceMatch>
536 (srcSpace, srcToDst, dstSpace)); 536 (srcSpace, srcToDst, dstSpace));
537 } 537 }
538 default: 538 default:
539 SkASSERT(false); 539 SkASSERT(false);
540 return nullptr; 540 return nullptr;
541 } 541 }
542 } 542 }
543 543
544 //////////////////////////////////////////////////////////////////////////////// /////////////////// 544 //////////////////////////////////////////////////////////////////////////////// ///////////////////
545 545
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 rgba = Sk4f::Min(Sk4f::Max(1023.0f * rgba, 0.0f), 1023.0f); 961 rgba = Sk4f::Min(Sk4f::Max(1023.0f * rgba, 0.0f), 1023.0f);
962 962
963 Sk4i indices = Sk4f_round(rgba); 963 Sk4i indices = Sk4f_round(rgba);
964 964
965 *((uint32_t*) dst) = dstTables[0][indices[0]] << kRShift 965 *((uint32_t*) dst) = dstTables[0][indices[0]] << kRShift
966 | dstTables[1][indices[1]] << kGShift 966 | dstTables[1][indices[1]] << kGShift
967 | dstTables[2][indices[2]] << kBShift 967 | dstTables[2][indices[2]] << kBShift
968 | (*src & 0xFF000000); 968 | (*src & 0xFF000000);
969 } 969 }
970 970
971 template <SkColorSpace::GammaNamed kDstGamma, 971 template <SkGammaNamed kDstGamma,
972 ColorSpaceMatch kCSM, 972 ColorSpaceMatch kCSM,
973 SkAlphaType kAlphaType, 973 SkAlphaType kAlphaType,
974 SwapRB kSwapRB> 974 SwapRB kSwapRB>
975 static void color_xform_RGBA(void* dst, const uint32_t* src, int len, 975 static void color_xform_RGBA(void* dst, const uint32_t* src, int len,
976 const float* const srcTables[3], const float matrix [16], 976 const float* const srcTables[3], const float matrix [16],
977 const uint8_t* const dstTables[3]) { 977 const uint8_t* const dstTables[3]) {
978 decltype(store_srgb )* store; 978 decltype(store_srgb )* store;
979 decltype(store_srgb_1 )* store_1; 979 decltype(store_srgb_1 )* store_1;
980 decltype(load_rgb_from_tables )* load; 980 decltype(load_rgb_from_tables )* load;
981 decltype(load_rgb_from_tables_1)* load_1; 981 decltype(load_rgb_from_tables_1)* load_1;
982 size_t sizeOfDstPixel; 982 size_t sizeOfDstPixel;
983 switch (kDstGamma) { 983 switch (kDstGamma) {
984 case SkColorSpace::kSRGB_GammaNamed: 984 case kSRGB_SkGammaNamed:
985 load = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s : 985 load = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s :
986 load_rgb_from_tables ; 986 load_rgb_from_tables ;
987 load_1 = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s_1 : 987 load_1 = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s_1 :
988 load_rgb_from_tables _1; 988 load_rgb_from_tables _1;
989 store = store_srgb; 989 store = store_srgb;
990 store_1 = store_srgb_1; 990 store_1 = store_srgb_1;
991 sizeOfDstPixel = 4; 991 sizeOfDstPixel = 4;
992 break; 992 break;
993 case SkColorSpace::k2Dot2Curve_GammaNamed: 993 case k2Dot2Curve_SkGammaNamed:
994 load = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s : 994 load = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s :
995 load_rgb_from_tables ; 995 load_rgb_from_tables ;
996 load_1 = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s_1 : 996 load_1 = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s_1 :
997 load_rgb_from_tables _1; 997 load_rgb_from_tables _1;
998 store = store_2dot2; 998 store = store_2dot2;
999 store_1 = store_2dot2_1; 999 store_1 = store_2dot2_1;
1000 sizeOfDstPixel = 4; 1000 sizeOfDstPixel = 4;
1001 break; 1001 break;
1002 case SkColorSpace::kLinear_GammaNamed: 1002 case kLinear_SkGammaNamed:
1003 load = load_rgba_from_tables; 1003 load = load_rgba_from_tables;
1004 load_1 = load_rgba_from_tables_1; 1004 load_1 = load_rgba_from_tables_1;
1005 store = (kOpaque_SkAlphaType == kAlphaType) ? store_f16_opaque : 1005 store = (kOpaque_SkAlphaType == kAlphaType) ? store_f16_opaque :
1006 store_f16; 1006 store_f16;
1007 store_1 = (kOpaque_SkAlphaType == kAlphaType) ? store_f16_1_opaque : 1007 store_1 = (kOpaque_SkAlphaType == kAlphaType) ? store_f16_1_opaque :
1008 store_f16_1; 1008 store_f16_1;
1009 sizeOfDstPixel = 8; 1009 sizeOfDstPixel = 8;
1010 break; 1010 break;
1011 case SkColorSpace::kNonStandard_GammaNamed: 1011 case kNonStandard_SkGammaNamed:
1012 load = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s : 1012 load = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s :
1013 load_rgb_from_tables ; 1013 load_rgb_from_tables ;
1014 load_1 = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s_1 : 1014 load_1 = (kPremul_SkAlphaType == kAlphaType) ? load_rgba_from_table s_1 :
1015 load_rgb_from_tables _1; 1015 load_rgb_from_tables _1;
1016 store = store_generic; 1016 store = store_generic;
1017 store_1 = store_generic_1; 1017 store_1 = store_generic_1;
1018 sizeOfDstPixel = 4; 1018 sizeOfDstPixel = 4;
1019 break; 1019 break;
1020 } 1020 }
1021 1021
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1091 store_1(dst, src, rgba, a, dstTables, kSwapRB); 1091 store_1(dst, src, rgba, a, dstTables, kSwapRB);
1092 1092
1093 src += 1; 1093 src += 1;
1094 len -= 1; 1094 len -= 1;
1095 dst = SkTAddOffset<void>(dst, sizeOfDstPixel); 1095 dst = SkTAddOffset<void>(dst, sizeOfDstPixel);
1096 } 1096 }
1097 } 1097 }
1098 1098
1099 //////////////////////////////////////////////////////////////////////////////// /////////////////// 1099 //////////////////////////////////////////////////////////////////////////////// ///////////////////
1100 1100
1101 template <SkColorSpace::GammaNamed kDst, ColorSpaceMatch kCSM> 1101 template <SkGammaNamed kDst, ColorSpaceMatch kCSM>
1102 SkColorSpaceXform_Base<kDst, kCSM>::SkColorSpaceXform_Base(const sk_sp<SkColorSp ace>& srcSpace, 1102 SkColorSpaceXform_Base<kDst, kCSM>::SkColorSpaceXform_Base(const sk_sp<SkColorSp ace>& srcSpace,
1103 const SkMatrix44& src ToDst, 1103 const SkMatrix44& src ToDst,
1104 const sk_sp<SkColorSp ace>& dstSpace) 1104 const sk_sp<SkColorSp ace>& dstSpace)
1105 : fColorLUT(sk_ref_sp((SkColorLookUpTable*) as_CSB(srcSpace)->colorLUT())) 1105 : fColorLUT(sk_ref_sp((SkColorLookUpTable*) as_CSB(srcSpace)->colorLUT()))
1106 { 1106 {
1107 srcToDst.asRowMajorf(fSrcToDst); 1107 srcToDst.asRowMajorf(fSrcToDst);
1108 build_gamma_tables(fSrcGammaTables, fSrcGammaTableStorage, 256, srcSpace, kT oLinear); 1108 build_gamma_tables(fSrcGammaTables, fSrcGammaTableStorage, 256, srcSpace, kT oLinear);
1109 build_gamma_tables(fDstGammaTables, fDstGammaTableStorage, kDstGammaTableSiz e, dstSpace, 1109 build_gamma_tables(fDstGammaTables, fDstGammaTableStorage, kDstGammaTableSiz e, dstSpace,
1110 kFromLinear); 1110 kFromLinear);
1111 } 1111 }
1112 1112
1113 template <SkColorSpace::GammaNamed kDst, ColorSpaceMatch kCSM> 1113 template <SkGammaNamed kDst, ColorSpaceMatch kCSM>
1114 void SkColorSpaceXform_Base<kDst, kCSM> 1114 void SkColorSpaceXform_Base<kDst, kCSM>
1115 ::apply(void* dst, const uint32_t* src, int len, SkColorType dstColorType, SkAlp haType dstAlphaType) 1115 ::apply(void* dst, const uint32_t* src, int len, SkColorType dstColorType, SkAlp haType dstAlphaType)
1116 const 1116 const
1117 { 1117 {
1118 if (kFull_ColorSpaceMatch == kCSM) { 1118 if (kFull_ColorSpaceMatch == kCSM) {
1119 switch (dstAlphaType) { 1119 switch (dstAlphaType) {
1120 case kPremul_SkAlphaType: 1120 case kPremul_SkAlphaType:
1121 // We can't skip the xform since we need to perform a premultipl y in the 1121 // We can't skip the xform since we need to perform a premultipl y in the
1122 // linear space. 1122 // linear space.
1123 break; 1123 break;
(...skipping 29 matching lines...) Expand all
1153 switch (dstAlphaType) { 1153 switch (dstAlphaType) {
1154 case kPremul_SkAlphaType: 1154 case kPremul_SkAlphaType:
1155 switch (dstColorType) { 1155 switch (dstColorType) {
1156 case kRGBA_8888_SkColorType: 1156 case kRGBA_8888_SkColorType:
1157 return color_xform_RGBA<kDst, kCSM, kPremul_SkAlphaType, kNo _SwapRB> 1157 return color_xform_RGBA<kDst, kCSM, kPremul_SkAlphaType, kNo _SwapRB>
1158 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1158 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1159 case kBGRA_8888_SkColorType: 1159 case kBGRA_8888_SkColorType:
1160 return color_xform_RGBA<kDst, kCSM, kPremul_SkAlphaType, kYe s_SwapRB> 1160 return color_xform_RGBA<kDst, kCSM, kPremul_SkAlphaType, kYe s_SwapRB>
1161 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1161 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1162 case kRGBA_F16_SkColorType: 1162 case kRGBA_F16_SkColorType:
1163 return color_xform_RGBA<SkColorSpace::kLinear_GammaNamed, kC SM, 1163 return color_xform_RGBA<kLinear_SkGammaNamed, kCSM,
1164 kPremul_SkAlphaType, kNo_SwapRB> 1164 kPremul_SkAlphaType, kNo_SwapRB>
1165 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1165 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1166 default: 1166 default:
1167 SkASSERT(false); 1167 SkASSERT(false);
1168 return; 1168 return;
1169 } 1169 }
1170 break; 1170 break;
1171 case kUnpremul_SkAlphaType: 1171 case kUnpremul_SkAlphaType:
1172 switch (dstColorType) { 1172 switch (dstColorType) {
1173 case kRGBA_8888_SkColorType: 1173 case kRGBA_8888_SkColorType:
1174 return color_xform_RGBA<kDst, kCSM, kUnpremul_SkAlphaType, k No_SwapRB> 1174 return color_xform_RGBA<kDst, kCSM, kUnpremul_SkAlphaType, k No_SwapRB>
1175 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1175 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1176 case kBGRA_8888_SkColorType: 1176 case kBGRA_8888_SkColorType:
1177 return color_xform_RGBA<kDst, kCSM, kUnpremul_SkAlphaType, k Yes_SwapRB> 1177 return color_xform_RGBA<kDst, kCSM, kUnpremul_SkAlphaType, k Yes_SwapRB>
1178 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1178 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1179 case kRGBA_F16_SkColorType: 1179 case kRGBA_F16_SkColorType:
1180 return color_xform_RGBA<SkColorSpace::kLinear_GammaNamed, kC SM, 1180 return color_xform_RGBA<kLinear_SkGammaNamed, kCSM,
1181 kUnpremul_SkAlphaType, kNo_SwapRB> 1181 kUnpremul_SkAlphaType, kNo_SwapRB>
1182 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1182 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1183 default: 1183 default:
1184 SkASSERT(false); 1184 SkASSERT(false);
1185 return; 1185 return;
1186 } 1186 }
1187 case kOpaque_SkAlphaType: 1187 case kOpaque_SkAlphaType:
1188 switch (dstColorType) { 1188 switch (dstColorType) {
1189 case kRGBA_8888_SkColorType: 1189 case kRGBA_8888_SkColorType:
1190 return color_xform_RGBA<kDst, kCSM, kOpaque_SkAlphaType, kNo _SwapRB> 1190 return color_xform_RGBA<kDst, kCSM, kOpaque_SkAlphaType, kNo _SwapRB>
1191 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1191 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1192 case kBGRA_8888_SkColorType: 1192 case kBGRA_8888_SkColorType:
1193 return color_xform_RGBA<kDst, kCSM, kOpaque_SkAlphaType, kYe s_SwapRB> 1193 return color_xform_RGBA<kDst, kCSM, kOpaque_SkAlphaType, kYe s_SwapRB>
1194 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1194 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1195 case kRGBA_F16_SkColorType: 1195 case kRGBA_F16_SkColorType:
1196 return color_xform_RGBA<SkColorSpace::kLinear_GammaNamed, kC SM, 1196 return color_xform_RGBA<kLinear_SkGammaNamed, kCSM,
1197 kOpaque_SkAlphaType, kNo_SwapRB> 1197 kOpaque_SkAlphaType, kNo_SwapRB>
1198 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables); 1198 (dst, src, len, fSrcGammaTables, fSrcToDst, fDstGamm aTables);
1199 default: 1199 default:
1200 SkASSERT(false); 1200 SkASSERT(false);
1201 return; 1201 return;
1202 } 1202 }
1203 default: 1203 default:
1204 SkASSERT(false); 1204 SkASSERT(false);
1205 return; 1205 return;
1206 } 1206 }
1207 } 1207 }
1208 1208
1209 std::unique_ptr<SkColorSpaceXform> SlowIdentityXform(const sk_sp<SkColorSpace>& space) { 1209 std::unique_ptr<SkColorSpaceXform> SlowIdentityXform(const sk_sp<SkColorSpace>& space) {
1210 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXform_Base 1210 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXform_Base
1211 <SkColorSpace::kNonStandard_GammaNamed, kNone_ColorSpaceMatch> 1211 <kNonStandard_SkGammaNamed, kNone_ColorSpaceMatch>
1212 (space, SkMatrix::I(), space)); 1212 (space, SkMatrix::I(), space));
1213 } 1213 }
OLDNEW
« no previous file with comments | « src/core/SkColorSpaceXform.h ('k') | src/core/SkColorSpace_Base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698