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

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

Issue 2174493002: Add color space xform support to SkJpegCodec (includes F16!) (Closed) Base URL: https://skia.googlesource.com/skia.git@drop
Patch Set: Fix MSAN suppression Created 4 years, 4 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/SkOpts.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 "SkColorSpaceXform.h" 10 #include "SkColorSpaceXform.h"
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 : fColorLUT(sk_ref_sp((SkColorLookUpTable*) as_CSB(srcSpace)->colorLUT())) 622 : fColorLUT(sk_ref_sp((SkColorLookUpTable*) as_CSB(srcSpace)->colorLUT()))
623 { 623 {
624 srcToDst.asRowMajorf(fSrcToDst); 624 srcToDst.asRowMajorf(fSrcToDst);
625 build_gamma_tables(fSrcGammaTables, fSrcGammaTableStorage, 256, srcSpace, kT oLinear); 625 build_gamma_tables(fSrcGammaTables, fSrcGammaTableStorage, 256, srcSpace, kT oLinear);
626 build_gamma_tables(fDstGammaTables, fDstGammaTableStorage, kDstGammaTableSiz e, 626 build_gamma_tables(fDstGammaTables, fDstGammaTableStorage, kDstGammaTableSiz e,
627 dstSpace, kFromLinear); 627 dstSpace, kFromLinear);
628 } 628 }
629 629
630 template <> 630 template <>
631 void SkColorSpaceXform_Base<SkColorSpace::kSRGB_GammaNamed> 631 void SkColorSpaceXform_Base<SkColorSpace::kSRGB_GammaNamed>
632 ::applyTo8888(SkPMColor* dst, const RGBA32* src, int len) const 632 ::applyToRGBA(RGBA32* dst, const RGBA32* src, int len) const
633 { 633 {
634 if (fColorLUT) { 634 if (fColorLUT) {
635 handle_color_lut(dst, src, len, fColorLUT.get()); 635 handle_color_lut(dst, src, len, fColorLUT.get());
636 src = dst; 636 src = dst;
637 } 637 }
638 638
639 SkOpts::color_xform_RGB1_to_srgb(dst, src, len, fSrcGammaTables, fSrcToDst); 639 SkOpts::color_xform_RGB1_to_srgb(dst, src, len, fSrcGammaTables, fSrcToDst);
640 } 640 }
641 641
642 template <> 642 template <>
643 void SkColorSpaceXform_Base<SkColorSpace::k2Dot2Curve_GammaNamed> 643 void SkColorSpaceXform_Base<SkColorSpace::k2Dot2Curve_GammaNamed>
644 ::applyTo8888(SkPMColor* dst, const RGBA32* src, int len) const 644 ::applyToRGBA(RGBA32* dst, const RGBA32* src, int len) const
645 { 645 {
646 if (fColorLUT) { 646 if (fColorLUT) {
647 handle_color_lut(dst, src, len, fColorLUT.get()); 647 handle_color_lut(dst, src, len, fColorLUT.get());
648 src = dst; 648 src = dst;
649 } 649 }
650 650
651 SkOpts::color_xform_RGB1_to_2dot2(dst, src, len, fSrcGammaTables, fSrcToDst) ; 651 SkOpts::color_xform_RGB1_to_2dot2(dst, src, len, fSrcGammaTables, fSrcToDst) ;
652 } 652 }
653 653
654 template <> 654 template <>
655 void SkColorSpaceXform_Base<SkColorSpace::kNonStandard_GammaNamed> 655 void SkColorSpaceXform_Base<SkColorSpace::kNonStandard_GammaNamed>
656 ::applyTo8888(SkPMColor* dst, const RGBA32* src, int len) const 656 ::applyToRGBA(RGBA32* dst, const RGBA32* src, int len) const
657 { 657 {
658 if (fColorLUT) { 658 if (fColorLUT) {
659 handle_color_lut(dst, src, len, fColorLUT.get()); 659 handle_color_lut(dst, src, len, fColorLUT.get());
660 src = dst; 660 src = dst;
661 } 661 }
662 662
663 SkOpts::color_xform_RGB1_to_table(dst, src, len, fSrcGammaTables, fSrcToDst, fDstGammaTables); 663 SkOpts::color_xform_RGB1_to_table(dst, src, len, fSrcGammaTables, fSrcToDst, fDstGammaTables);
664 } 664 }
665 665
666 template <>
667 void SkColorSpaceXform_Base<SkColorSpace::kSRGB_GammaNamed>
668 ::applyToBGRA(BGRA32* dst, const RGBA32* src, int len) const
669 {
670 if (fColorLUT) {
671 handle_color_lut(dst, src, len, fColorLUT.get());
672 src = dst;
673 }
674
675 SkOpts::color_xform_RGB1_to_srgb_swaprb(dst, src, len, fSrcGammaTables, fSrc ToDst);
676 }
677
678 template <>
679 void SkColorSpaceXform_Base<SkColorSpace::k2Dot2Curve_GammaNamed>
680 ::applyToBGRA(BGRA32* dst, const RGBA32* src, int len) const
681 {
682 if (fColorLUT) {
683 handle_color_lut(dst, src, len, fColorLUT.get());
684 src = dst;
685 }
686
687 SkOpts::color_xform_RGB1_to_2dot2_swaprb(dst, src, len, fSrcGammaTables, fSr cToDst);
688 }
689
690 template <>
691 void SkColorSpaceXform_Base<SkColorSpace::kNonStandard_GammaNamed>
692 ::applyToBGRA(BGRA32* dst, const RGBA32* src, int len) const
693 {
694 if (fColorLUT) {
695 handle_color_lut(dst, src, len, fColorLUT.get());
696 src = dst;
697 }
698
699 SkOpts::color_xform_RGB1_to_table_swaprb(dst, src, len, fSrcGammaTables, fSr cToDst,
700 fDstGammaTables);
701 }
702
666 template <SkColorSpace::GammaNamed T> 703 template <SkColorSpace::GammaNamed T>
667 void SkColorSpaceXform_Base<T> 704 void SkColorSpaceXform_Base<T>
668 ::applyToF16(RGBAF16* dst, const RGBA32* src, int len) const 705 ::applyToF16(RGBAF16* dst, const RGBA32* src, int len) const
669 { 706 {
670 if (fColorLUT) { 707 if (fColorLUT) {
671 size_t storageBytes = len * sizeof(RGBA32); 708 size_t storageBytes = len * sizeof(RGBA32);
672 #if defined(GOOGLE3) 709 #if defined(GOOGLE3)
673 // Stack frame size is limited in GOOGLE3. 710 // Stack frame size is limited in GOOGLE3.
674 SkAutoSMalloc<256 * sizeof(RGBA32)> storage(storageBytes); 711 SkAutoSMalloc<256 * sizeof(RGBA32)> storage(storageBytes);
675 #else 712 #else
676 SkAutoSMalloc<1024 * sizeof(RGBA32)> storage(storageBytes); 713 SkAutoSMalloc<1024 * sizeof(RGBA32)> storage(storageBytes);
677 #endif 714 #endif
678 715
679 handle_color_lut((RGBA32*) storage.get(), src, len, fColorLUT.get()); 716 handle_color_lut((RGBA32*) storage.get(), src, len, fColorLUT.get());
680 src = (const RGBA32*) storage.get(); 717 src = (const RGBA32*) storage.get();
681 } 718 }
682 719
683 SkOpts::color_xform_RGB1_to_linear(dst, src, len, fSrcGammaTables, fSrcToDst ); 720 SkOpts::color_xform_RGB1_to_linear(dst, src, len, fSrcGammaTables, fSrcToDst );
684 } 721 }
OLDNEW
« no previous file with comments | « src/core/SkColorSpaceXform.h ('k') | src/core/SkOpts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698