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

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

Issue 1766413002: Use a smart pointer for SkColorSpace factories (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix spacing Created 4 years, 9 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/SkColorSpace.h ('k') | no next file » | 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 "SkAtomics.h" 8 #include "SkAtomics.h"
9 #include "SkColorSpace.h" 9 #include "SkColorSpace.h"
10 10
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 , fNamed(named) 95 , fNamed(named)
96 { 96 {
97 for (int i = 0; i < 3; ++i) { 97 for (int i = 0; i < 3; ++i) {
98 SkASSERT(SkFloatIsFinite(gamma.fVec[i])); 98 SkASSERT(SkFloatIsFinite(gamma.fVec[i]));
99 for (int j = 0; j < 3; ++j) { 99 for (int j = 0; j < 3; ++j) {
100 SkASSERT(SkFloatIsFinite(toXYZD50.fMat[3*i + j])); 100 SkASSERT(SkFloatIsFinite(toXYZD50.fMat[3*i + j]));
101 } 101 }
102 } 102 }
103 } 103 }
104 104
105 SkColorSpace* SkColorSpace::NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& g amma) { 105 sk_sp<SkColorSpace> SkColorSpace::NewRGB(const SkFloat3x3& toXYZD50, const SkFlo at3& gamma) {
106 for (int i = 0; i < 3; ++i) { 106 for (int i = 0; i < 3; ++i) {
107 if (!SkFloatIsFinite(gamma.fVec[i]) || gamma.fVec[i] < 0) { 107 if (!SkFloatIsFinite(gamma.fVec[i]) || gamma.fVec[i] < 0) {
108 return nullptr; 108 return nullptr;
109 } 109 }
110 for (int j = 0; j < 3; ++j) { 110 for (int j = 0; j < 3; ++j) {
111 if (!SkFloatIsFinite(toXYZD50.fMat[3*i + j])) { 111 if (!SkFloatIsFinite(toXYZD50.fMat[3*i + j])) {
112 return nullptr; 112 return nullptr;
113 } 113 }
114 } 114 }
115 } 115 }
116 116
117 // check the matrix for invertibility 117 // check the matrix for invertibility
118 float d = det(toXYZD50); 118 float d = det(toXYZD50);
119 if (!SkFloatIsFinite(d) || !SkFloatIsFinite(1 / d)) { 119 if (!SkFloatIsFinite(d) || !SkFloatIsFinite(1 / d)) {
120 return nullptr; 120 return nullptr;
121 } 121 }
122 122
123 return new SkColorSpace(toXYZD50, gamma, kUnknown_Named); 123 return sk_sp<SkColorSpace>(new SkColorSpace(toXYZD50, gamma, kUnknown_Named) );
124 } 124 }
125 125
126 void SkColorSpace::dump() const { 126 void SkColorSpace::dump() const {
127 fToXYZD50.dump(); 127 fToXYZD50.dump();
128 fGamma.dump(); 128 fGamma.dump();
129 } 129 }
130 130
131 //////////////////////////////////////////////////////////////////////////////// ////////////////// 131 //////////////////////////////////////////////////////////////////////////////// //////////////////
132 132
133 const SkFloat3 gDevice_gamma {{ 0, 0, 0 }}; 133 const SkFloat3 gDevice_gamma {{ 0, 0, 0 }};
134 const SkFloat3x3 gDevice_toXYZD50 {{ 134 const SkFloat3x3 gDevice_toXYZD50 {{
135 1, 0, 0, 135 1, 0, 0,
136 0, 1, 0, 136 0, 1, 0,
137 0, 0, 1 137 0, 0, 1
138 }}; 138 }};
139 139
140 const SkFloat3 gSRGB_gamma {{ 2.2f, 2.2f, 2.2f }}; 140 const SkFloat3 gSRGB_gamma {{ 2.2f, 2.2f, 2.2f }};
141 const SkFloat3x3 gSRGB_toXYZD50 {{ 141 const SkFloat3x3 gSRGB_toXYZD50 {{
142 0.4358f, 0.2224f, 0.0139f, // * R 142 0.4358f, 0.2224f, 0.0139f, // * R
143 0.3853f, 0.7170f, 0.0971f, // * G 143 0.3853f, 0.7170f, 0.0971f, // * G
144 0.1430f, 0.0606f, 0.7139f, // * B 144 0.1430f, 0.0606f, 0.7139f, // * B
145 }}; 145 }};
146 146
147 SkColorSpace* SkColorSpace::NewNamed(Named named) { 147 sk_sp<SkColorSpace> SkColorSpace::NewNamed(Named named) {
148 switch (named) { 148 switch (named) {
149 case kDevice_Named: 149 case kDevice_Named:
150 return new SkColorSpace(gDevice_toXYZD50, gDevice_gamma, kDevice_Nam ed); 150 return sk_sp<SkColorSpace>(new SkColorSpace(gDevice_toXYZD50, gDevic e_gamma,
151 kDevice_Named));
151 case kSRGB_Named: 152 case kSRGB_Named:
152 return new SkColorSpace(gSRGB_toXYZD50, gSRGB_gamma, kSRGB_Named); 153 return sk_sp<SkColorSpace>(new SkColorSpace(gSRGB_toXYZD50, gSRGB_ga mma, kSRGB_Named));
153 default: 154 default:
154 break; 155 break;
155 } 156 }
156 return nullptr; 157 return nullptr;
157 } 158 }
158 159
159 //////////////////////////////////////////////////////////////////////////////// /////////////////// 160 //////////////////////////////////////////////////////////////////////////////// ///////////////////
160 161
161 #include "SkFixed.h" 162 #include "SkFixed.h"
162 #include "SkTemplates.h" 163 #include "SkTemplates.h"
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 // Guess 2.2f. 371 // Guess 2.2f.
371 SkColorSpacePrintf("parametric curve\n"); 372 SkColorSpacePrintf("parametric curve\n");
372 *gamma = 2.2f; 373 *gamma = 2.2f;
373 return true; 374 return true;
374 default: 375 default:
375 SkColorSpacePrintf("Unsupported gamma tag type %d\n", type); 376 SkColorSpacePrintf("Unsupported gamma tag type %d\n", type);
376 return false; 377 return false;
377 } 378 }
378 } 379 }
379 380
380 SkColorSpace* SkColorSpace::NewICC(const void* base, size_t len) { 381 sk_sp<SkColorSpace> SkColorSpace::NewICC(const void* base, size_t len) {
381 const uint8_t* ptr = (const uint8_t*) base; 382 const uint8_t* ptr = (const uint8_t*) base;
382 383
383 if (len < kICCHeaderSize) { 384 if (len < kICCHeaderSize) {
384 return_null("Data is not large enough to contain an ICC profile"); 385 return_null("Data is not large enough to contain an ICC profile");
385 } 386 }
386 387
387 // Read the ICC profile header and check to make sure that it is valid. 388 // Read the ICC profile header and check to make sure that it is valid.
388 ICCProfileHeader header; 389 ICCProfileHeader header;
389 header.init(ptr, len); 390 header.init(ptr, len);
390 if (!header.valid()) { 391 if (!header.valid()) {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 SkDebugf("\n"); 522 SkDebugf("\n");
522 523
523 mat = gSRGB_toXYZD50; 524 mat = gSRGB_toXYZD50;
524 inv = invert(mat); 525 inv = invert(mat);
525 mat.dump(); 526 mat.dump();
526 inv.dump(); 527 inv.dump();
527 concat(mat, inv).dump(); 528 concat(mat, inv).dump();
528 concat(inv, mat).dump(); 529 concat(inv, mat).dump();
529 SkDebugf("\n"); 530 SkDebugf("\n");
530 531
531 SkAutoTUnref<SkColorSpace> cs0(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Na med)); 532 sk_sp<SkColorSpace> cs0(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named));
532 SkAutoTUnref<SkColorSpace> cs1(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Na med)); 533 sk_sp<SkColorSpace> cs1(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named));
533 534
534 cs0->dump(); 535 cs0->dump();
535 cs1->dump(); 536 cs1->dump();
536 SkFloat3x3 xform; 537 SkFloat3x3 xform;
537 (void)SkColorSpace::Concat(cs0, cs1, &xform); 538 (void)SkColorSpace::Concat(cs0.get(), cs1.get(), &xform);
538 xform.dump(); 539 xform.dump();
539 SkDebugf("\n"); 540 SkDebugf("\n");
540 } 541 }
541 542
542 // D65 white point of Rec. 709 [8] are: 543 // D65 white point of Rec. 709 [8] are:
543 // 544 //
544 // D65 white-point in unit luminance XYZ = 0.9505, 1.0000, 1.0890 545 // D65 white-point in unit luminance XYZ = 0.9505, 1.0000, 1.0890
545 // 546 //
546 // R G B white 547 // R G B white
547 // x 0.640 0.300 0.150 0.3127 548 // x 0.640 0.300 0.150 0.3127
548 // y 0.330 0.600 0.060 0.3290 549 // y 0.330 0.600 0.060 0.3290
549 // z 0.030 0.100 0.790 0.3582 550 // z 0.030 0.100 0.790 0.3582
OLDNEW
« no previous file with comments | « src/core/SkColorSpace.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698