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