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