blob: 99951af6b80afd4e2c5ae31c883eebfc2f96e963 [file] [log] [blame]
/*****************************************************************************/
// Copyright 2006-2012 Adobe Systems Incorporated
// All Rights Reserved.
//
// NOTICE: Adobe permits you to use, modify, and distribute this file in
// accordance with the terms of the Adobe license agreement accompanying it.
/*****************************************************************************/
/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_read_image.h#2 $ */
/* $DateTime: 2012/06/05 11:05:39 $ */
/* $Change: 833352 $ */
/* $Author: tknoll $ */
/** \file
* Support for DNG image reading.
*/
/*****************************************************************************/
#ifndef __dng_read_image__
#define __dng_read_image__
/*****************************************************************************/
#include "dng_auto_ptr.h"
#include "dng_classes.h"
#include "dng_image.h"
#include "dng_memory.h"
#include "dng_types.h"
/******************************************************************************/
bool DecodePackBits (dng_stream &stream,
uint8 *dPtr,
int32 dstCount);
/*****************************************************************************/
class dng_row_interleaved_image: public dng_image
{
private:
dng_image &fImage;
uint32 fFactor;
public:
dng_row_interleaved_image (dng_image &image,
uint32 factor);
virtual void DoGet (dng_pixel_buffer &buffer) const;
virtual void DoPut (const dng_pixel_buffer &buffer);
private:
int32 MapRow (int32 row) const;
};
/*****************************************************************************/
/// \brief
///
///
class dng_read_image
{
friend class dng_read_tiles_task;
protected:
enum
{
// Target size for buffer used to copy data to the image.
kImageBufferSize = 128 * 1024
};
AutoPtr<dng_memory_block> fJPEGTables;
public:
dng_read_image ();
virtual ~dng_read_image ();
///
/// \param
virtual bool CanRead (const dng_ifd &ifd);
///
/// \param host Host used for memory allocation, progress updating, and abort testing.
/// \param ifd
/// \param stream Stream to read image data from.
/// \param image Result image to populate.
virtual void Read (dng_host &host,
const dng_ifd &ifd,
dng_stream &stream,
dng_image &image,
dng_jpeg_image *jpegImage,
dng_fingerprint *jpegDigest);
protected:
virtual bool ReadUncompressed (dng_host &host,
const dng_ifd &ifd,
dng_stream &stream,
dng_image &image,
const dng_rect &tileArea,
uint32 plane,
uint32 planes,
AutoPtr<dng_memory_block> &uncompressedBuffer,
AutoPtr<dng_memory_block> &subTileBlockBuffer);
virtual void DecodeLossyJPEG (dng_host &host,
dng_image &image,
const dng_rect &tileArea,
uint32 plane,
uint32 planes,
uint32 photometricInterpretation,
uint32 jpegDataSize,
uint8 *jpegDataInMemory);
virtual bool ReadBaselineJPEG (dng_host &host,
const dng_ifd &ifd,
dng_stream &stream,
dng_image &image,
const dng_rect &tileArea,
uint32 plane,
uint32 planes,
uint32 tileByteCount,
uint8 *jpegDataInMemory);
virtual bool ReadLosslessJPEG (dng_host &host,
const dng_ifd &ifd,
dng_stream &stream,
dng_image &image,
const dng_rect &tileArea,
uint32 plane,
uint32 planes,
uint32 tileByteCount,
AutoPtr<dng_memory_block> &uncompressedBuffer,
AutoPtr<dng_memory_block> &subTileBlockBuffer);
virtual bool CanReadTile (const dng_ifd &ifd);
virtual bool NeedsCompressedBuffer (const dng_ifd &ifd);
virtual void ByteSwapBuffer (dng_host &host,
dng_pixel_buffer &buffer);
virtual void DecodePredictor (dng_host &host,
const dng_ifd &ifd,
dng_pixel_buffer &buffer);
virtual void ReadTile (dng_host &host,
const dng_ifd &ifd,
dng_stream &stream,
dng_image &image,
const dng_rect &tileArea,
uint32 plane,
uint32 planes,
uint32 tileByteCount,
AutoPtr<dng_memory_block> &compressedBuffer,
AutoPtr<dng_memory_block> &uncompressedBuffer,
AutoPtr<dng_memory_block> &subTileBlockBuffer);
};
/*****************************************************************************/
#endif
/*****************************************************************************/