Home | History | Annotate | Download | only in source
      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 
     33 bool DecodePackBits (dng_stream &stream,
     34 					 uint8 *dPtr,
     35 					 int32 dstCount);
     36 
     37 /*****************************************************************************/
     38 
     39 class 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 
     69 class 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