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

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

Issue 2360863003: Make SkColorSpaceXform::New() take bare ptrs (Closed)
Patch Set: 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') | tests/ColorSpaceXformTest.cpp » ('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 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 nullptr, 249 nullptr,
250 nullptr, 250 nullptr,
251 &build_table_linear_to_gamma, 251 &build_table_linear_to_gamma,
252 &build_table_linear_to_gamma, 252 &build_table_linear_to_gamma,
253 &build_table_linear_to_gamma, 253 &build_table_linear_to_gamma,
254 }; 254 };
255 255
256 // Build tables to transform src gamma to linear. 256 // Build tables to transform src gamma to linear.
257 template <typename T> 257 template <typename T>
258 static void build_gamma_tables(const T* outGammaTables[3], T* gammaTableStorage, int gammaTableSize, 258 static void build_gamma_tables(const T* outGammaTables[3], T* gammaTableStorage, int gammaTableSize,
259 const sk_sp<SkColorSpace>& space, const GammaFns< T>& fns, 259 SkColorSpace* space, const GammaFns<T>& fns, bool gammasAreMatching)
260 bool gammasAreMatching) { 260 {
261 switch (as_CSB(space)->gammaNamed()) { 261 switch (as_CSB(space)->gammaNamed()) {
262 case kSRGB_SkGammaNamed: 262 case kSRGB_SkGammaNamed:
263 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = fns.fSRG BTable; 263 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = fns.fSRG BTable;
264 break; 264 break;
265 case k2Dot2Curve_SkGammaNamed: 265 case k2Dot2Curve_SkGammaNamed:
266 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = fns.f2Do t2Table; 266 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = fns.f2Do t2Table;
267 break; 267 break;
268 case kLinear_SkGammaNamed: 268 case kLinear_SkGammaNamed:
269 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = nullptr; 269 outGammaTables[0] = outGammaTables[1] = outGammaTables[2] = nullptr;
270 break; 270 break;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 if (!color_space_almost_equal(srcToDst.getFloat(i,j), expected)) { 335 if (!color_space_almost_equal(srcToDst.getFloat(i,j), expected)) {
336 return false; 336 return false;
337 } 337 }
338 } 338 }
339 } 339 }
340 return true; 340 return true;
341 } 341 }
342 342
343 //////////////////////////////////////////////////////////////////////////////// /////////////////// 343 //////////////////////////////////////////////////////////////////////////////// ///////////////////
344 344
345 std::unique_ptr<SkColorSpaceXform> SkColorSpaceXform::New(const sk_sp<SkColorSpa ce>& srcSpace, 345 std::unique_ptr<SkColorSpaceXform> SkColorSpaceXform::New(SkColorSpace* srcSpace ,
346 const sk_sp<SkColorSpa ce>& dstSpace) { 346 SkColorSpace* dstSpace ) {
347 if (!srcSpace || !dstSpace) { 347 if (!srcSpace || !dstSpace) {
348 // Invalid input 348 // Invalid input
349 return nullptr; 349 return nullptr;
350 } 350 }
351 351
352 ColorSpaceMatch csm = kNone_ColorSpaceMatch; 352 ColorSpaceMatch csm = kNone_ColorSpaceMatch;
353 SkMatrix44 srcToDst(SkMatrix44::kUninitialized_Constructor); 353 SkMatrix44 srcToDst(SkMatrix44::kUninitialized_Constructor);
354 if (SkColorSpace::Equals(srcSpace.get(), dstSpace.get())) { 354 if (SkColorSpace::Equals(srcSpace, dstSpace)) {
355 srcToDst.setIdentity(); 355 srcToDst.setIdentity();
356 csm = kFull_ColorSpaceMatch; 356 csm = kFull_ColorSpaceMatch;
357 } else { 357 } else {
358 srcToDst.setConcat(as_CSB(dstSpace)->fromXYZD50(), srcSpace->toXYZD50()) ; 358 srcToDst.setConcat(as_CSB(dstSpace)->fromXYZD50(), srcSpace->toXYZD50()) ;
359 359
360 if (is_almost_identity(srcToDst)) { 360 if (is_almost_identity(srcToDst)) {
361 srcToDst.setIdentity(); 361 srcToDst.setIdentity();
362 csm = kGamut_ColorSpaceMatch; 362 csm = kGamut_ColorSpaceMatch;
363 } 363 }
364 } 364 }
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 1203
1204 // It's likely that each component will have the same gamma. In thi s case, 1204 // It's likely that each component will have the same gamma. In thi s case,
1205 // we only need to build one table. 1205 // we only need to build one table.
1206 return gammasAreMatching ? 1 : 3; 1206 return gammasAreMatching ? 1 : 3;
1207 } 1207 }
1208 } 1208 }
1209 } 1209 }
1210 1210
1211 template <SrcGamma kSrc, DstGamma kDst, ColorSpaceMatch kCSM> 1211 template <SrcGamma kSrc, DstGamma kDst, ColorSpaceMatch kCSM>
1212 SkColorSpaceXform_Base<kSrc, kDst, kCSM> 1212 SkColorSpaceXform_Base<kSrc, kDst, kCSM>
1213 ::SkColorSpaceXform_Base(const sk_sp<SkColorSpace>& srcSpace, const SkMatrix44& srcToDst, 1213 ::SkColorSpaceXform_Base(SkColorSpace* srcSpace, const SkMatrix44& srcToDst, SkC olorSpace* dstSpace)
1214 const sk_sp<SkColorSpace>& dstSpace)
1215 : fColorLUT(sk_ref_sp((SkColorLookUpTable*) as_CSB(srcSpace)->colorLUT())) 1214 : fColorLUT(sk_ref_sp((SkColorLookUpTable*) as_CSB(srcSpace)->colorLUT()))
1216 { 1215 {
1217 srcToDst.asColMajorf(fSrcToDst); 1216 srcToDst.asColMajorf(fSrcToDst);
1218 1217
1219 const int numSrcTables = num_tables(srcSpace.get()); 1218 const int numSrcTables = num_tables(srcSpace);
1220 const int numDstTables = num_tables(dstSpace.get()); 1219 const int numDstTables = num_tables(dstSpace);
1221 const size_t srcTableBytes = numSrcTables * 256 * sizeof(float); 1220 const size_t srcTableBytes = numSrcTables * 256 * sizeof(float);
1222 const size_t dstTableBytes = numDstTables * kDstGammaTableSize * sizeof(uint 8_t); 1221 const size_t dstTableBytes = numDstTables * kDstGammaTableSize * sizeof(uint 8_t);
1223 fStorage.reset(srcTableBytes + dstTableBytes); 1222 fStorage.reset(srcTableBytes + dstTableBytes);
1224 float* srcStorage = (float*) fStorage.get(); 1223 float* srcStorage = (float*) fStorage.get();
1225 uint8_t* dstStorage = SkTAddOffset<uint8_t>(fStorage.get(), srcTableBytes); 1224 uint8_t* dstStorage = SkTAddOffset<uint8_t>(fStorage.get(), srcTableBytes);
1226 1225
1227 const bool srcGammasAreMatching = (1 >= numSrcTables); 1226 const bool srcGammasAreMatching = (1 >= numSrcTables);
1228 const bool dstGammasAreMatching = (1 >= numDstTables); 1227 const bool dstGammasAreMatching = (1 >= numDstTables);
1229 build_gamma_tables(fSrcGammaTables, srcStorage, 256, srcSpace, kToLinear, sr cGammasAreMatching); 1228 build_gamma_tables(fSrcGammaTables, srcStorage, 256, srcSpace, kToLinear, sr cGammasAreMatching);
1230 build_gamma_tables(fDstGammaTables, dstStorage, kDstGammaTableSize, dstSpace , kFromLinear, 1229 build_gamma_tables(fDstGammaTables, dstStorage, kDstGammaTableSize, dstSpace , kFromLinear,
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1358 return; 1357 return;
1359 } 1358 }
1360 default: 1359 default:
1361 SkASSERT(false); 1360 SkASSERT(false);
1362 return; 1361 return;
1363 } 1362 }
1364 } 1363 }
1365 1364
1366 //////////////////////////////////////////////////////////////////////////////// /////////////////// 1365 //////////////////////////////////////////////////////////////////////////////// ///////////////////
1367 1366
1368 std::unique_ptr<SkColorSpaceXform> SlowIdentityXform(const sk_sp<SkColorSpace>& space) { 1367 std::unique_ptr<SkColorSpaceXform> SlowIdentityXform(SkColorSpace* space) {
1369 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXform_Base 1368 return std::unique_ptr<SkColorSpaceXform>(new SkColorSpaceXform_Base
1370 <kTable_SrcGamma, kTable_DstGamma, kNone_ColorSpaceMatch> 1369 <kTable_SrcGamma, kTable_DstGamma, kNone_ColorSpaceMatch>
1371 (space, SkMatrix::I(), space)); 1370 (space, SkMatrix::I(), space));
1372 } 1371 }
OLDNEW
« no previous file with comments | « src/core/SkColorSpaceXform.h ('k') | tests/ColorSpaceXformTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698