1 /*****************************************************************************/
2 // Copyright 2007-2019 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 #ifndef __dng_preview__
10 #define __dng_preview__
11 
12 /*****************************************************************************/
13 
14 #include "dng_auto_ptr.h"
15 #include "dng_classes.h"
16 #include "dng_ifd.h"
17 #include "dng_opcode_list.h"
18 #include "dng_point.h"
19 #include "dng_sdk_limits.h"
20 #include "dng_uncopyable.h"
21 
22 /*****************************************************************************/
23 
24 class dng_preview: private dng_uncopyable
25 	{
26 
27 	public:
28 
29 		dng_preview_info fInfo;
30 
31 	protected:
32 
33 		dng_preview ();
34 
35 	public:
36 
37 		virtual ~dng_preview ();
38 
39 		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const = 0;
40 
41 		virtual void WriteData (dng_host &host,
42 								dng_image_writer &writer,
43 								dng_basic_tag_set &basic,
44 								dng_stream &stream) const = 0;
45 
46 	};
47 
48 /*****************************************************************************/
49 
50 class dng_image_preview: public dng_preview
51 	{
52 
53 	public:
54 
55 		AutoPtr<dng_image> fImage;
56 
57 	private:
58 
59 		mutable dng_ifd fIFD;
60 
61 	public:
62 
63 		dng_image_preview ();
64 
65 		virtual ~dng_image_preview ();
66 
67 		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
68 
69 		virtual void WriteData (dng_host &host,
70 								dng_image_writer &writer,
71 								dng_basic_tag_set &basic,
72 								dng_stream &stream) const;
73 
74 	};
75 
76 /*****************************************************************************/
77 
78 class dng_jpeg_preview: public dng_preview
79 	{
80 
81 	public:
82 
83 		dng_point fPreviewSize;
84 
85 		uint16 fPhotometricInterpretation;
86 
87 		dng_point fYCbCrSubSampling;
88 
89 		uint16 fYCbCrPositioning;
90 
91 		AutoPtr<dng_memory_block> fCompressedData;
92 
93 	public:
94 
95 		dng_jpeg_preview ();
96 
97 		virtual ~dng_jpeg_preview ();
98 
99 		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
100 
101 		virtual void WriteData (dng_host &host,
102 								dng_image_writer &writer,
103 								dng_basic_tag_set &basic,
104 								dng_stream &stream) const;
105 
106 		void SpoolAdobeThumbnail (dng_stream &stream) const;
107 
108 	};
109 
110 /*****************************************************************************/
111 
112 class dng_raw_preview: public dng_preview
113 	{
114 
115 	public:
116 
117 		AutoPtr<dng_image> fImage;
118 
119 		AutoPtr<dng_memory_block> fOpcodeList2Data;
120 
121         real64 fBlackLevel [kMaxSamplesPerPixel];
122 
123 		int32 fCompressionQuality;
124 
125 	private:
126 
127 		mutable dng_ifd fIFD;
128 
129 	public:
130 
131 		dng_raw_preview ();
132 
133 		virtual ~dng_raw_preview ();
134 
135 		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
136 
137 		virtual void WriteData (dng_host &host,
138 								dng_image_writer &writer,
139 								dng_basic_tag_set &basic,
140 								dng_stream &stream) const;
141 
142 	};
143 
144 /*****************************************************************************/
145 
146 class dng_depth_preview: public dng_preview
147 	{
148 
149 	public:
150 
151 		AutoPtr<dng_image> fImage;
152 
153 		int32 fCompressionQuality;
154 
155         bool fFullResolution;
156 
157 	private:
158 
159 		mutable dng_ifd fIFD;
160 
161 	public:
162 
163 		dng_depth_preview ();
164 
165 		virtual ~dng_depth_preview ();
166 
167 		virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
168 
169 		virtual void WriteData (dng_host &host,
170 								dng_image_writer &writer,
171 								dng_basic_tag_set &basic,
172 								dng_stream &stream) const;
173 
174 	};
175 
176 /*****************************************************************************/
177 
178 class dng_mask_preview: public dng_preview
179     {
180 
181     public:
182 
183         AutoPtr<dng_image> fImage;
184 
185         int32 fCompressionQuality;
186 
187     private:
188 
189         mutable dng_ifd fIFD;
190 
191     public:
192 
193         dng_mask_preview ();
194 
195         virtual ~dng_mask_preview ();
196 
197         virtual dng_basic_tag_set * AddTagSet (dng_tiff_directory &directory) const;
198 
199         virtual void WriteData (dng_host &host,
200                                 dng_image_writer &writer,
201                                 dng_basic_tag_set &basic,
202                                 dng_stream &stream) const;
203 
204     };
205 
206 /*****************************************************************************/
207 
208 class dng_preview_list
209 	{
210 
211 	private:
212 
213 		uint32 fCount;
214 
215 		AutoPtr<dng_preview> fPreview [kMaxDNGPreviews];
216 
217 	public:
218 
219 		dng_preview_list ();
220 
221 		~dng_preview_list ();
222 
Count()223 		uint32 Count () const
224 			{
225 			return fCount;
226 			}
227 
Preview(uint32 index)228 		const dng_preview & Preview (uint32 index) const
229 			{
230 			return *(fPreview [index]);
231 			}
232 
233 		void Append (AutoPtr<dng_preview> &preview);
234 
235 	};
236 
237 /*****************************************************************************/
238 
239 #endif
240 
241 /*****************************************************************************/
242