/src/skia/third_party/externals/dng_sdk/source/dng_render.h
Line | Count | Source (jump to first uncovered line) |
1 | | /*****************************************************************************/ |
2 | | // Copyright 2006-2007 Adobe Systems Incorporated |
3 | | // All Rights Reserved. |
4 | | // |
5 | | // NOTICE: Adobe permits you to use, modify, and distribute this file in |
6 | | // accordance with the terms of the Adobe license agreement accompanying it. |
7 | | /*****************************************************************************/ |
8 | | |
9 | | /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_render.h#2 $ */ |
10 | | /* $DateTime: 2012/07/31 22:04:34 $ */ |
11 | | /* $Change: 840853 $ */ |
12 | | /* $Author: tknoll $ */ |
13 | | |
14 | | /** \file |
15 | | * Classes for conversion of RAW data to final image. |
16 | | */ |
17 | | |
18 | | /*****************************************************************************/ |
19 | | |
20 | | #ifndef __dng_render__ |
21 | | #define __dng_render__ |
22 | | |
23 | | /*****************************************************************************/ |
24 | | |
25 | | #include "dng_1d_function.h" |
26 | | #include "dng_auto_ptr.h" |
27 | | #include "dng_classes.h" |
28 | | #include "dng_spline.h" |
29 | | #include "dng_xy_coord.h" |
30 | | |
31 | | /******************************************************************************/ |
32 | | |
33 | | /// \brief Curve for pre-exposure-compensation adjustment based on noise floor, |
34 | | /// shadows, and highlight level. |
35 | | |
36 | | class dng_function_exposure_ramp: public dng_1d_function |
37 | | { |
38 | | |
39 | | public: |
40 | | |
41 | | real64 fSlope; // Slope of straight segment. |
42 | | |
43 | | real64 fBlack; // Intercept of straight segment. |
44 | | |
45 | | real64 fRadius; // Rounding radius. |
46 | | |
47 | | real64 fQScale; // Quadradic scale. |
48 | | |
49 | | public: |
50 | | |
51 | | dng_function_exposure_ramp (real64 white, |
52 | | real64 black, |
53 | | real64 minBlack); |
54 | | |
55 | | virtual real64 Evaluate (real64 x) const; |
56 | | |
57 | | }; |
58 | | |
59 | | /******************************************************************************/ |
60 | | |
61 | | /// \brief Exposure compensation curve for a given compensation amount in stops using |
62 | | /// quadric for roll-off. |
63 | | |
64 | | class dng_function_exposure_tone: public dng_1d_function |
65 | | { |
66 | | |
67 | | protected: |
68 | | |
69 | | bool fIsNOP; // Is this a NOP function? |
70 | | |
71 | | real64 fSlope; // Slope for lower part of curve. |
72 | | |
73 | | real64 a; // Quadradic parameters for upper two f-stops. |
74 | | real64 b; |
75 | | real64 c; |
76 | | |
77 | | public: |
78 | | |
79 | | dng_function_exposure_tone (real64 exposure); |
80 | | |
81 | | /// Returns output value for a given input tone. |
82 | | |
83 | | virtual real64 Evaluate (real64 x) const; |
84 | | |
85 | | }; |
86 | | |
87 | | /*****************************************************************************/ |
88 | | |
89 | | /// Default ACR3 tone curve. |
90 | | |
91 | | class dng_tone_curve_acr3_default: public dng_1d_function |
92 | | { |
93 | | |
94 | | public: |
95 | | |
96 | | /// Returns output value for a given input tone. |
97 | | |
98 | | virtual real64 Evaluate (real64 x) const; |
99 | | |
100 | | /// Returns nearest input value for a given output tone. |
101 | | |
102 | | virtual real64 EvaluateInverse (real64 x) const; |
103 | | |
104 | | static const dng_1d_function & Get (); |
105 | | |
106 | | }; |
107 | | |
108 | | /*****************************************************************************/ |
109 | | |
110 | | /// \brief Encoding gamma curve for a given color space. |
111 | | |
112 | | class dng_function_gamma_encode: public dng_1d_function |
113 | | { |
114 | | |
115 | | protected: |
116 | | |
117 | | const dng_color_space &fSpace; |
118 | | |
119 | | public: |
120 | | |
121 | | dng_function_gamma_encode (const dng_color_space &space); |
122 | | |
123 | | virtual real64 Evaluate (real64 x) const; |
124 | | |
125 | | }; |
126 | | |
127 | | /*****************************************************************************/ |
128 | | |
129 | | /// \brief Class used to render digital negative to displayable image. |
130 | | |
131 | | class dng_render |
132 | | { |
133 | | |
134 | | protected: |
135 | | |
136 | | dng_host &fHost; |
137 | | |
138 | | const dng_negative &fNegative; |
139 | | |
140 | | dng_xy_coord fWhiteXY; |
141 | | |
142 | | real64 fExposure; |
143 | | |
144 | | real64 fShadows; |
145 | | |
146 | | const dng_1d_function *fToneCurve; |
147 | | |
148 | | const dng_color_space *fFinalSpace; |
149 | | |
150 | | uint32 fFinalPixelType; |
151 | | |
152 | | uint32 fMaximumSize; |
153 | | |
154 | | private: |
155 | | |
156 | | AutoPtr<dng_spline_solver> fProfileToneCurve; |
157 | | |
158 | | public: |
159 | | |
160 | | /// Construct a rendering instance that will be used to convert a given digital negative. |
161 | | /// \param host The host to use for memory allocation, progress updates, and abort testing. |
162 | | /// \param negative The digital negative to convert to a displayable image. |
163 | | |
164 | | dng_render (dng_host &host, |
165 | | const dng_negative &negative); |
166 | | |
167 | | virtual ~dng_render () |
168 | 0 | { |
169 | 0 | } |
170 | | |
171 | | /// Set the white point to be used for conversion. |
172 | | /// \param white White point to use. |
173 | | |
174 | | void SetWhiteXY (const dng_xy_coord &white) |
175 | 0 | { |
176 | 0 | fWhiteXY = white; |
177 | 0 | } |
178 | | |
179 | | /// Get the white point to be used for conversion. |
180 | | /// \retval White point to use. |
181 | | |
182 | | const dng_xy_coord WhiteXY () const |
183 | 0 | { |
184 | 0 | return fWhiteXY; |
185 | 0 | } |
186 | | |
187 | | /// Set exposure compensation. |
188 | | /// \param exposure Compensation value in stops, positive or negative. |
189 | | |
190 | | void SetExposure (real64 exposure) |
191 | 0 | { |
192 | 0 | fExposure = exposure; |
193 | 0 | } |
194 | | |
195 | | /// Get exposure compensation. |
196 | | /// \retval Compensation value in stops, positive or negative. |
197 | | |
198 | | real64 Exposure () const |
199 | 0 | { |
200 | 0 | return fExposure; |
201 | 0 | } |
202 | | |
203 | | /// Set shadow clip amount. |
204 | | /// \param shadows Shadow clip amount. |
205 | | |
206 | | void SetShadows (real64 shadows) |
207 | 0 | { |
208 | 0 | fShadows = shadows; |
209 | 0 | } |
210 | | |
211 | | /// Get shadow clip amount. |
212 | | /// \retval Shadow clip amount. |
213 | | |
214 | | real64 Shadows () const |
215 | 0 | { |
216 | 0 | return fShadows; |
217 | 0 | } |
218 | | |
219 | | /// Set custom tone curve for conversion. |
220 | | /// \param curve 1D function that defines tone mapping to use during conversion. |
221 | | |
222 | | void SetToneCurve (const dng_1d_function &curve) |
223 | 0 | { |
224 | 0 | fToneCurve = &curve; |
225 | 0 | } |
226 | | |
227 | | /// Get custom tone curve for conversion. |
228 | | /// \retval 1D function that defines tone mapping to use during conversion. |
229 | | |
230 | | const dng_1d_function & ToneCurve () const |
231 | 0 | { |
232 | 0 | return *fToneCurve; |
233 | 0 | } |
234 | | |
235 | | /// Set final color space in which resulting image data should be represented. |
236 | | /// (See dng_color_space.h for possible values.) |
237 | | /// \param space Color space to use. |
238 | | |
239 | | void SetFinalSpace (const dng_color_space &space) |
240 | 0 | { |
241 | 0 | fFinalSpace = &space; |
242 | 0 | } |
243 | | |
244 | | /// Get final color space in which resulting image data should be represented. |
245 | | /// \retval Color space to use. |
246 | | |
247 | | const dng_color_space & FinalSpace () const |
248 | 0 | { |
249 | 0 | return *fFinalSpace; |
250 | 0 | } |
251 | | |
252 | | /// Set pixel type of final image data. |
253 | | /// Can be ttByte (default), ttShort, or ttFloat. |
254 | | /// \param type Pixel type to use. |
255 | | |
256 | | void SetFinalPixelType (uint32 type) |
257 | 0 | { |
258 | 0 | fFinalPixelType = type; |
259 | 0 | } |
260 | | |
261 | | /// Get pixel type of final image data. |
262 | | /// Can be ttByte (default), ttShort, or ttFloat. |
263 | | /// \retval Pixel type to use. |
264 | | |
265 | | uint32 FinalPixelType () const |
266 | 0 | { |
267 | 0 | return fFinalPixelType; |
268 | 0 | } |
269 | | |
270 | | /// Set maximum dimension, in pixels, of resulting image. |
271 | | /// If final image would have either dimension larger than maximum, the larger |
272 | | /// of the two dimensions is set to this maximum size and the smaller dimension |
273 | | /// is adjusted to preserve aspect ratio. |
274 | | /// \param size Maximum size to allow. |
275 | | |
276 | | void SetMaximumSize (uint32 size) |
277 | 0 | { |
278 | 0 | fMaximumSize = size; |
279 | 0 | } |
280 | | |
281 | | /// Get maximum dimension, in pixels, of resulting image. |
282 | | /// If the final image would have either dimension larger than this maximum, the larger |
283 | | /// of the two dimensions is set to this maximum size and the smaller dimension |
284 | | /// is adjusted to preserve the image's aspect ratio. |
285 | | /// \retval Maximum allowed size. |
286 | | |
287 | | uint32 MaximumSize () const |
288 | 0 | { |
289 | 0 | return fMaximumSize; |
290 | 0 | } |
291 | | |
292 | | /// Actually render a digital negative to a displayable image. |
293 | | /// Input digital negative is passed to the constructor of this dng_render class. |
294 | | /// \retval The final resulting image. |
295 | | |
296 | | virtual dng_image * Render (); |
297 | | |
298 | | private: |
299 | | |
300 | | // Hidden copy constructor and assignment operator. |
301 | | |
302 | | dng_render (const dng_render &render); |
303 | | |
304 | | dng_render & operator= (const dng_render &render); |
305 | | |
306 | | }; |
307 | | |
308 | | /*****************************************************************************/ |
309 | | |
310 | | #endif |
311 | | |
312 | | /*****************************************************************************/ |