xref: /aosp_15_r20/external/dng_sdk/source/dng_read_image.h (revision fd1fabb72dbdf09ea7034f531e6f8e9f57334c8d)
1*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
2*fd1fabb7SAndroid Build Coastguard Worker // Copyright 2006-2012 Adobe Systems Incorporated
3*fd1fabb7SAndroid Build Coastguard Worker // All Rights Reserved.
4*fd1fabb7SAndroid Build Coastguard Worker //
5*fd1fabb7SAndroid Build Coastguard Worker // NOTICE:  Adobe permits you to use, modify, and distribute this file in
6*fd1fabb7SAndroid Build Coastguard Worker // accordance with the terms of the Adobe license agreement accompanying it.
7*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
8*fd1fabb7SAndroid Build Coastguard Worker 
9*fd1fabb7SAndroid Build Coastguard Worker /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_read_image.h#2 $ */
10*fd1fabb7SAndroid Build Coastguard Worker /* $DateTime: 2012/06/05 11:05:39 $ */
11*fd1fabb7SAndroid Build Coastguard Worker /* $Change: 833352 $ */
12*fd1fabb7SAndroid Build Coastguard Worker /* $Author: tknoll $ */
13*fd1fabb7SAndroid Build Coastguard Worker 
14*fd1fabb7SAndroid Build Coastguard Worker /** \file
15*fd1fabb7SAndroid Build Coastguard Worker  * Support for DNG image reading.
16*fd1fabb7SAndroid Build Coastguard Worker  */
17*fd1fabb7SAndroid Build Coastguard Worker 
18*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
19*fd1fabb7SAndroid Build Coastguard Worker 
20*fd1fabb7SAndroid Build Coastguard Worker #ifndef __dng_read_image__
21*fd1fabb7SAndroid Build Coastguard Worker #define __dng_read_image__
22*fd1fabb7SAndroid Build Coastguard Worker 
23*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
24*fd1fabb7SAndroid Build Coastguard Worker 
25*fd1fabb7SAndroid Build Coastguard Worker #include "dng_auto_ptr.h"
26*fd1fabb7SAndroid Build Coastguard Worker #include "dng_classes.h"
27*fd1fabb7SAndroid Build Coastguard Worker #include "dng_image.h"
28*fd1fabb7SAndroid Build Coastguard Worker #include "dng_memory.h"
29*fd1fabb7SAndroid Build Coastguard Worker #include "dng_types.h"
30*fd1fabb7SAndroid Build Coastguard Worker 
31*fd1fabb7SAndroid Build Coastguard Worker /******************************************************************************/
32*fd1fabb7SAndroid Build Coastguard Worker 
33*fd1fabb7SAndroid Build Coastguard Worker bool DecodePackBits (dng_stream &stream,
34*fd1fabb7SAndroid Build Coastguard Worker 					 uint8 *dPtr,
35*fd1fabb7SAndroid Build Coastguard Worker 					 int32 dstCount);
36*fd1fabb7SAndroid Build Coastguard Worker 
37*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
38*fd1fabb7SAndroid Build Coastguard Worker 
39*fd1fabb7SAndroid Build Coastguard Worker class dng_row_interleaved_image: public dng_image
40*fd1fabb7SAndroid Build Coastguard Worker 	{
41*fd1fabb7SAndroid Build Coastguard Worker 
42*fd1fabb7SAndroid Build Coastguard Worker 	private:
43*fd1fabb7SAndroid Build Coastguard Worker 
44*fd1fabb7SAndroid Build Coastguard Worker 		dng_image &fImage;
45*fd1fabb7SAndroid Build Coastguard Worker 
46*fd1fabb7SAndroid Build Coastguard Worker 		uint32 fFactor;
47*fd1fabb7SAndroid Build Coastguard Worker 
48*fd1fabb7SAndroid Build Coastguard Worker 	public:
49*fd1fabb7SAndroid Build Coastguard Worker 
50*fd1fabb7SAndroid Build Coastguard Worker 		dng_row_interleaved_image (dng_image &image,
51*fd1fabb7SAndroid Build Coastguard Worker 								   uint32 factor);
52*fd1fabb7SAndroid Build Coastguard Worker 
53*fd1fabb7SAndroid Build Coastguard Worker 		virtual void DoGet (dng_pixel_buffer &buffer) const;
54*fd1fabb7SAndroid Build Coastguard Worker 
55*fd1fabb7SAndroid Build Coastguard Worker 		virtual void DoPut (const dng_pixel_buffer &buffer);
56*fd1fabb7SAndroid Build Coastguard Worker 
57*fd1fabb7SAndroid Build Coastguard Worker 	private:
58*fd1fabb7SAndroid Build Coastguard Worker 
59*fd1fabb7SAndroid Build Coastguard Worker 		int32 MapRow (int32 row) const;
60*fd1fabb7SAndroid Build Coastguard Worker 
61*fd1fabb7SAndroid Build Coastguard Worker 	};
62*fd1fabb7SAndroid Build Coastguard Worker 
63*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
64*fd1fabb7SAndroid Build Coastguard Worker 
65*fd1fabb7SAndroid Build Coastguard Worker /// \brief
66*fd1fabb7SAndroid Build Coastguard Worker ///
67*fd1fabb7SAndroid Build Coastguard Worker ///
68*fd1fabb7SAndroid Build Coastguard Worker 
69*fd1fabb7SAndroid Build Coastguard Worker class dng_read_image
70*fd1fabb7SAndroid Build Coastguard Worker 	{
71*fd1fabb7SAndroid Build Coastguard Worker 
72*fd1fabb7SAndroid Build Coastguard Worker 	friend class dng_read_tiles_task;
73*fd1fabb7SAndroid Build Coastguard Worker 
74*fd1fabb7SAndroid Build Coastguard Worker 	protected:
75*fd1fabb7SAndroid Build Coastguard Worker 
76*fd1fabb7SAndroid Build Coastguard Worker 		enum
77*fd1fabb7SAndroid Build Coastguard Worker 			{
78*fd1fabb7SAndroid Build Coastguard Worker 
79*fd1fabb7SAndroid Build Coastguard Worker 			// Target size for buffer used to copy data to the image.
80*fd1fabb7SAndroid Build Coastguard Worker 
81*fd1fabb7SAndroid Build Coastguard Worker 			kImageBufferSize = 128 * 1024
82*fd1fabb7SAndroid Build Coastguard Worker 
83*fd1fabb7SAndroid Build Coastguard Worker 			};
84*fd1fabb7SAndroid Build Coastguard Worker 
85*fd1fabb7SAndroid Build Coastguard Worker 		AutoPtr<dng_memory_block> fJPEGTables;
86*fd1fabb7SAndroid Build Coastguard Worker 
87*fd1fabb7SAndroid Build Coastguard Worker 	public:
88*fd1fabb7SAndroid Build Coastguard Worker 
89*fd1fabb7SAndroid Build Coastguard Worker 		dng_read_image ();
90*fd1fabb7SAndroid Build Coastguard Worker 
91*fd1fabb7SAndroid Build Coastguard Worker 		virtual ~dng_read_image ();
92*fd1fabb7SAndroid Build Coastguard Worker 
93*fd1fabb7SAndroid Build Coastguard Worker 		///
94*fd1fabb7SAndroid Build Coastguard Worker 		/// \param
95*fd1fabb7SAndroid Build Coastguard Worker 
96*fd1fabb7SAndroid Build Coastguard Worker 		virtual bool CanRead (const dng_ifd &ifd);
97*fd1fabb7SAndroid Build Coastguard Worker 
98*fd1fabb7SAndroid Build Coastguard Worker 		///
99*fd1fabb7SAndroid Build Coastguard Worker 		/// \param host Host used for memory allocation, progress updating, and abort testing.
100*fd1fabb7SAndroid Build Coastguard Worker 		/// \param ifd
101*fd1fabb7SAndroid Build Coastguard Worker 		/// \param stream Stream to read image data from.
102*fd1fabb7SAndroid Build Coastguard Worker 		/// \param image Result image to populate.
103*fd1fabb7SAndroid Build Coastguard Worker 
104*fd1fabb7SAndroid Build Coastguard Worker 		virtual void Read (dng_host &host,
105*fd1fabb7SAndroid Build Coastguard Worker 						   const dng_ifd &ifd,
106*fd1fabb7SAndroid Build Coastguard Worker 						   dng_stream &stream,
107*fd1fabb7SAndroid Build Coastguard Worker 						   dng_image &image,
108*fd1fabb7SAndroid Build Coastguard Worker 						   dng_jpeg_image *jpegImage,
109*fd1fabb7SAndroid Build Coastguard Worker 						   dng_fingerprint *jpegDigest);
110*fd1fabb7SAndroid Build Coastguard Worker 
111*fd1fabb7SAndroid Build Coastguard Worker 	protected:
112*fd1fabb7SAndroid Build Coastguard Worker 
113*fd1fabb7SAndroid Build Coastguard Worker 		virtual bool ReadUncompressed (dng_host &host,
114*fd1fabb7SAndroid Build Coastguard Worker 									   const dng_ifd &ifd,
115*fd1fabb7SAndroid Build Coastguard Worker 									   dng_stream &stream,
116*fd1fabb7SAndroid Build Coastguard Worker 									   dng_image &image,
117*fd1fabb7SAndroid Build Coastguard Worker 									   const dng_rect &tileArea,
118*fd1fabb7SAndroid Build Coastguard Worker 									   uint32 plane,
119*fd1fabb7SAndroid Build Coastguard Worker 									   uint32 planes,
120*fd1fabb7SAndroid Build Coastguard Worker 									   AutoPtr<dng_memory_block> &uncompressedBuffer,
121*fd1fabb7SAndroid Build Coastguard Worker 									   AutoPtr<dng_memory_block> &subTileBlockBuffer);
122*fd1fabb7SAndroid Build Coastguard Worker 
123*fd1fabb7SAndroid Build Coastguard Worker 		virtual void DecodeLossyJPEG (dng_host &host,
124*fd1fabb7SAndroid Build Coastguard Worker 									  dng_image &image,
125*fd1fabb7SAndroid Build Coastguard Worker 									  const dng_rect &tileArea,
126*fd1fabb7SAndroid Build Coastguard Worker 									  uint32 plane,
127*fd1fabb7SAndroid Build Coastguard Worker 									  uint32 planes,
128*fd1fabb7SAndroid Build Coastguard Worker 									  uint32 photometricInterpretation,
129*fd1fabb7SAndroid Build Coastguard Worker 									  uint32 jpegDataSize,
130*fd1fabb7SAndroid Build Coastguard Worker 									  uint8 *jpegDataInMemory);
131*fd1fabb7SAndroid Build Coastguard Worker 
132*fd1fabb7SAndroid Build Coastguard Worker 		virtual bool ReadBaselineJPEG (dng_host &host,
133*fd1fabb7SAndroid Build Coastguard Worker 									   const dng_ifd &ifd,
134*fd1fabb7SAndroid Build Coastguard Worker 									   dng_stream &stream,
135*fd1fabb7SAndroid Build Coastguard Worker 									   dng_image &image,
136*fd1fabb7SAndroid Build Coastguard Worker 									   const dng_rect &tileArea,
137*fd1fabb7SAndroid Build Coastguard Worker 									   uint32 plane,
138*fd1fabb7SAndroid Build Coastguard Worker 									   uint32 planes,
139*fd1fabb7SAndroid Build Coastguard Worker 									   uint32 tileByteCount,
140*fd1fabb7SAndroid Build Coastguard Worker 									   uint8 *jpegDataInMemory);
141*fd1fabb7SAndroid Build Coastguard Worker 
142*fd1fabb7SAndroid Build Coastguard Worker 		virtual bool ReadLosslessJPEG (dng_host &host,
143*fd1fabb7SAndroid Build Coastguard Worker 									   const dng_ifd &ifd,
144*fd1fabb7SAndroid Build Coastguard Worker 									   dng_stream &stream,
145*fd1fabb7SAndroid Build Coastguard Worker 									   dng_image &image,
146*fd1fabb7SAndroid Build Coastguard Worker 									   const dng_rect &tileArea,
147*fd1fabb7SAndroid Build Coastguard Worker 									   uint32 plane,
148*fd1fabb7SAndroid Build Coastguard Worker 									   uint32 planes,
149*fd1fabb7SAndroid Build Coastguard Worker 									   uint32 tileByteCount,
150*fd1fabb7SAndroid Build Coastguard Worker 									   AutoPtr<dng_memory_block> &uncompressedBuffer,
151*fd1fabb7SAndroid Build Coastguard Worker 									   AutoPtr<dng_memory_block> &subTileBlockBuffer);
152*fd1fabb7SAndroid Build Coastguard Worker 
153*fd1fabb7SAndroid Build Coastguard Worker 		virtual bool CanReadTile (const dng_ifd &ifd);
154*fd1fabb7SAndroid Build Coastguard Worker 
155*fd1fabb7SAndroid Build Coastguard Worker 		virtual bool NeedsCompressedBuffer (const dng_ifd &ifd);
156*fd1fabb7SAndroid Build Coastguard Worker 
157*fd1fabb7SAndroid Build Coastguard Worker 		virtual void ByteSwapBuffer (dng_host &host,
158*fd1fabb7SAndroid Build Coastguard Worker 									 dng_pixel_buffer &buffer);
159*fd1fabb7SAndroid Build Coastguard Worker 
160*fd1fabb7SAndroid Build Coastguard Worker 		virtual void DecodePredictor (dng_host &host,
161*fd1fabb7SAndroid Build Coastguard Worker 									  const dng_ifd &ifd,
162*fd1fabb7SAndroid Build Coastguard Worker 						        	  dng_pixel_buffer &buffer);
163*fd1fabb7SAndroid Build Coastguard Worker 
164*fd1fabb7SAndroid Build Coastguard Worker 		virtual void ReadTile (dng_host &host,
165*fd1fabb7SAndroid Build Coastguard Worker 							   const dng_ifd &ifd,
166*fd1fabb7SAndroid Build Coastguard Worker 							   dng_stream &stream,
167*fd1fabb7SAndroid Build Coastguard Worker 							   dng_image &image,
168*fd1fabb7SAndroid Build Coastguard Worker 							   const dng_rect &tileArea,
169*fd1fabb7SAndroid Build Coastguard Worker 							   uint32 plane,
170*fd1fabb7SAndroid Build Coastguard Worker 							   uint32 planes,
171*fd1fabb7SAndroid Build Coastguard Worker 							   uint32 tileByteCount,
172*fd1fabb7SAndroid Build Coastguard Worker 							   AutoPtr<dng_memory_block> &compressedBuffer,
173*fd1fabb7SAndroid Build Coastguard Worker 							   AutoPtr<dng_memory_block> &uncompressedBuffer,
174*fd1fabb7SAndroid Build Coastguard Worker 							   AutoPtr<dng_memory_block> &subTileBlockBuffer);
175*fd1fabb7SAndroid Build Coastguard Worker 
176*fd1fabb7SAndroid Build Coastguard Worker 	};
177*fd1fabb7SAndroid Build Coastguard Worker 
178*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
179*fd1fabb7SAndroid Build Coastguard Worker 
180*fd1fabb7SAndroid Build Coastguard Worker #endif
181*fd1fabb7SAndroid Build Coastguard Worker 
182*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
183