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