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