129 lines
3.7 KiB
C
129 lines
3.7 KiB
C
|
/*
|
||
|
*
|
||
|
* Copyright (C) 1997-2014, OFFIS e.V.
|
||
|
* All rights reserved. See COPYRIGHT file for details.
|
||
|
*
|
||
|
* This software and supporting documentation were developed by
|
||
|
*
|
||
|
* OFFIS e.V.
|
||
|
* R&D Division Health
|
||
|
* Escherweg 2
|
||
|
* D-26121 Oldenburg, Germany
|
||
|
*
|
||
|
*
|
||
|
* Module: dcmjpeg
|
||
|
*
|
||
|
* Author: Norbert Olges, Marco Eichelberg
|
||
|
*
|
||
|
* Purpose: decompression routines of the IJG JPEG library configured for 12 bits/sample.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef DJDIJG12_H
|
||
|
#define DJDIJG12_H
|
||
|
|
||
|
#include "dcmtk/config/osconfig.h"
|
||
|
#include "dcmtk/dcmjpeg/djdecabs.h" /* for class DJDecoder */
|
||
|
|
||
|
extern "C"
|
||
|
{
|
||
|
struct jpeg_decompress_struct;
|
||
|
}
|
||
|
|
||
|
class DJCodecParameter;
|
||
|
|
||
|
/** this class encapsulates the decompression routines of the
|
||
|
* IJG JPEG library configured for 12 bits/sample.
|
||
|
*/
|
||
|
class DCMTK_DCMJPEG_EXPORT DJDecompressIJG12Bit : public DJDecoder
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
/** constructor
|
||
|
* @param cp codec parameters
|
||
|
* @param isYBR flag indicating if DICOM photometric interpretation is YCbCr
|
||
|
*/
|
||
|
DJDecompressIJG12Bit(const DJCodecParameter& cp, OFBool isYBR);
|
||
|
|
||
|
/// destructor
|
||
|
virtual ~DJDecompressIJG12Bit();
|
||
|
|
||
|
/** initializes internal object structures.
|
||
|
* Must be called before a new frame is decompressed.
|
||
|
* @return EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
virtual OFCondition init();
|
||
|
|
||
|
/** suspended decompression routine. Decompresses a JPEG frame
|
||
|
* until finished or out of data. Can be called with new data
|
||
|
* until a frame is complete.
|
||
|
* @param compressedFrameBuffer pointer to compressed input data, must not be NULL
|
||
|
* @param compressedFrameBufferSize size of buffer, in bytes
|
||
|
* @param uncompressedFrameBuffer pointer to uncompressed output data, must not be NULL.
|
||
|
* This buffer must not change between multiple decode() calls for a single frame.
|
||
|
* @param uncompressedFrameBufferSize size of buffer, in bytes (!)
|
||
|
* Buffer must be large enough to contain a complete frame.
|
||
|
* @param isSigned OFTrue, if uncompressed pixel data is signed, OFFalse otherwise
|
||
|
* @return EC_Normal if successful, EC_Suspend if more data is needed, an error code otherwise.
|
||
|
*/
|
||
|
virtual OFCondition decode(
|
||
|
Uint8 *compressedFrameBuffer,
|
||
|
Uint32 compressedFrameBufferSize,
|
||
|
Uint8 *uncompressedFrameBuffer,
|
||
|
Uint32 uncompressedFrameBufferSize,
|
||
|
OFBool isSigned);
|
||
|
|
||
|
/** returns the number of bytes per sample that will be written when decoding.
|
||
|
*/
|
||
|
virtual Uint16 bytesPerSample() const
|
||
|
{
|
||
|
return OFstatic_cast(Uint16, sizeof(Uint16));
|
||
|
}
|
||
|
|
||
|
/** after successful compression,
|
||
|
* returns the color model of the decompressed image
|
||
|
*/
|
||
|
virtual EP_Interpretation getDecompressedColorModel() const
|
||
|
{
|
||
|
return decompressedColorModel;
|
||
|
}
|
||
|
|
||
|
/** callback function used to report warning messages and the like.
|
||
|
* Should not be called by user code directly.
|
||
|
* @param msg_level -1 for warnings, 0 and above for trace messages
|
||
|
*/
|
||
|
virtual void emitMessage(int msg_level) const;
|
||
|
|
||
|
private:
|
||
|
|
||
|
/// private undefined copy constructor
|
||
|
DJDecompressIJG12Bit(const DJDecompressIJG12Bit&);
|
||
|
|
||
|
/// private undefined copy assignment operator
|
||
|
DJDecompressIJG12Bit& operator=(const DJDecompressIJG12Bit&);
|
||
|
|
||
|
/// cleans up cinfo structure, called from destructor and error handlers
|
||
|
void cleanup();
|
||
|
|
||
|
/// codec parameters
|
||
|
const DJCodecParameter *cparam;
|
||
|
|
||
|
/// decompression structure
|
||
|
jpeg_decompress_struct *cinfo;
|
||
|
|
||
|
/// position of last suspend
|
||
|
int suspension;
|
||
|
|
||
|
/// temporary storage for row buffer during suspension
|
||
|
void *jsampBuffer;
|
||
|
|
||
|
/// Flag indicating if DICOM photometric interpretation is YCbCr
|
||
|
OFBool dicomPhotometricInterpretationIsYCbCr;
|
||
|
|
||
|
/// color model after decompression
|
||
|
EP_Interpretation decompressedColorModel;
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif
|