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

Side by Side Diff: src/core/SkColorSpacePriv.h

Issue 1972403002: Parse parametric gamma curves (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase Created 4 years, 7 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.cpp ('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 #ifndef SkColorSpacePriv_DEFINED 8 #ifndef SkColorSpacePriv_DEFINED
9 #define SkColorSpacePriv_DEFINED 9 #define SkColorSpacePriv_DEFINED
10 10
11 struct SkGammaCurve { 11 struct SkGammaCurve {
12 bool isValue() const { 12 bool isValue() const {
13 bool result = (0.0f != fValue); 13 bool result = (0.0f != fValue);
14 SkASSERT(!result || (0 == fTableSize)); 14 SkASSERT(!result || (0 == fTableSize));
15 SkASSERT(!result || (0.0f == fG));
15 return result; 16 return result;
16 } 17 }
17 18
18 bool isTable() const { 19 bool isTable() const {
19 bool result = (0 != fTableSize); 20 bool result = (0 != fTableSize);
20 SkASSERT(!result || (0.0f == fValue)); 21 SkASSERT(!result || (0.0f == fValue));
22 SkASSERT(!result || (0.0f == fG));
21 SkASSERT(!result || fTable); 23 SkASSERT(!result || fTable);
22 return result; 24 return result;
23 } 25 }
24 26
25 bool isParametric() const { return false; } 27 bool isParametric() const {
28 bool result = (0.0f != fG);
29 SkASSERT(!result || (0.0f == fValue));
30 SkASSERT(!result || (0 == fTableSize));
31 return result;
32 }
26 33
27 // We have three different ways to represent gamma. 34 // We have three different ways to represent gamma.
28 // (1) A single value: 35 // (1) A single value:
29 float fValue; 36 float fValue;
30 37
31 // (2) A lookup table: 38 // (2) A lookup table:
32 uint32_t fTableSize; 39 uint32_t fTableSize;
33 std::unique_ptr<float[]> fTable; 40 std::unique_ptr<float[]> fTable;
34 41
35 // (3) Parameters for a curve: 42 // (3) Parameters for a curve:
36 // FIXME (msarett): Handle parametric curves. 43 // Y = (aX + b)^g + c for X >= d
44 // Y = eX + f otherwise
45 float fG;
scroggo 2016/05/18 12:49:15 Why does G come first?
msarett 2016/05/18 13:14:01 In my mind it makes sense because g is the "most i
46 float fA;
47 float fB;
48 float fC;
49 float fD;
50 float fE;
51 float fF;
37 52
38 SkGammaCurve() { 53 SkGammaCurve() {
39 memset(this, 0, sizeof(struct SkGammaCurve)); 54 memset(this, 0, sizeof(struct SkGammaCurve));
40 } 55 }
41 56
42 SkGammaCurve(float value) 57 SkGammaCurve(float value)
43 : fValue(value) 58 : fValue(value)
44 , fTableSize(0) 59 , fTableSize(0)
45 , fTable(nullptr) 60 , fTable(nullptr)
61 , fG(0.0f)
62 , fA(0.0f)
63 , fB(0.0f)
64 , fC(0.0f)
65 , fD(0.0f)
66 , fE(0.0f)
67 , fF(0.0f)
46 {} 68 {}
47 }; 69 };
48 70
49 struct SkGammas : public SkRefCnt { 71 struct SkGammas : public SkRefCnt {
50 public: 72 public:
51 bool isValues() const { 73 bool isValues() const {
52 return fRed.isValue() && fGreen.isValue() && fBlue.isValue(); 74 return fRed.isValue() && fGreen.isValue() && fBlue.isValue();
53 } 75 }
54 76
55 const SkGammaCurve fRed; 77 const SkGammaCurve fRed;
(...skipping 24 matching lines...) Expand all
80 uint8_t fOutputChannels; 102 uint8_t fOutputChannels;
81 uint8_t fGridPoints[kMaxChannels]; 103 uint8_t fGridPoints[kMaxChannels];
82 std::unique_ptr<float[]> fTable; 104 std::unique_ptr<float[]> fTable;
83 105
84 SkColorLookUpTable() { 106 SkColorLookUpTable() {
85 memset(this, 0, sizeof(struct SkColorLookUpTable)); 107 memset(this, 0, sizeof(struct SkColorLookUpTable));
86 } 108 }
87 }; 109 };
88 110
89 #endif 111 #endif
OLDNEW
« no previous file with comments | « src/core/SkColorSpace.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698