331 lines
10 KiB
C++
331 lines
10 KiB
C++
/*
|
|
*
|
|
* Copyright (C) 1994-2016, 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: dcmdata
|
|
*
|
|
* Author: Gerd Ehlers
|
|
*
|
|
* Purpose: Handling of transfer syntaxes
|
|
*
|
|
*/
|
|
|
|
#ifndef DCXFER_H
|
|
#define DCXFER_H
|
|
|
|
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
|
|
#include "dcmtk/dcmdata/dctypes.h"
|
|
#include "dcmtk/dcmdata/dcvr.h"
|
|
|
|
// include this file in doxygen documentation
|
|
|
|
/** @file dcxfer.h
|
|
* @brief definition and handling of transfer syntaxes
|
|
*/
|
|
|
|
/** enumeration of all DICOM transfer syntaxes known to the toolkit
|
|
*/
|
|
typedef enum {
|
|
/// unknown transfer syntax or dataset created in-memory
|
|
EXS_Unknown = -1,
|
|
/// Implicit VR Little Endian
|
|
EXS_LittleEndianImplicit = 0,
|
|
/// Implicit VR Big Endian (pseudo transfer syntax that does not really exist)
|
|
EXS_BigEndianImplicit = 1,
|
|
/// Explicit VR Little Endian
|
|
EXS_LittleEndianExplicit = 2,
|
|
/// Explicit VR Big Endian
|
|
EXS_BigEndianExplicit = 3,
|
|
/// JPEG Baseline (lossy)
|
|
EXS_JPEGProcess1 = 4,
|
|
/// JPEG Extended Sequential (lossy, 8/12 bit)
|
|
EXS_JPEGProcess2_4 = 5,
|
|
/// JPEG Extended Sequential (lossy, 8/12 bit), arithmetic coding
|
|
EXS_JPEGProcess3_5 = 6,
|
|
/// JPEG Spectral Selection, Non-Hierarchical (lossy, 8/12 bit)
|
|
EXS_JPEGProcess6_8 = 7,
|
|
/// JPEG Spectral Selection, Non-Hierarchical (lossy, 8/12 bit), arithmetic coding
|
|
EXS_JPEGProcess7_9 = 8,
|
|
/// JPEG Full Progression, Non-Hierarchical (lossy, 8/12 bit)
|
|
EXS_JPEGProcess10_12 = 9,
|
|
/// JPEG Full Progression, Non-Hierarchical (lossy, 8/12 bit), arithmetic coding
|
|
EXS_JPEGProcess11_13 = 10,
|
|
/// JPEG Lossless with any selection value
|
|
EXS_JPEGProcess14 = 11,
|
|
/// JPEG Lossless with any selection value, arithmetic coding
|
|
EXS_JPEGProcess15 = 12,
|
|
/// JPEG Extended Sequential, Hierarchical (lossy, 8/12 bit)
|
|
EXS_JPEGProcess16_18 = 13,
|
|
/// JPEG Extended Sequential, Hierarchical (lossy, 8/12 bit), arithmetic coding
|
|
EXS_JPEGProcess17_19 = 14,
|
|
/// JPEG Spectral Selection, Hierarchical (lossy, 8/12 bit)
|
|
EXS_JPEGProcess20_22 = 15,
|
|
/// JPEG Spectral Selection, Hierarchical (lossy, 8/12 bit), arithmetic coding
|
|
EXS_JPEGProcess21_23 = 16,
|
|
/// JPEG Full Progression, Hierarchical (lossy, 8/12 bit)
|
|
EXS_JPEGProcess24_26 = 17,
|
|
/// JPEG Full Progression, Hierarchical (lossy, 8/12 bit), arithmetic coding
|
|
EXS_JPEGProcess25_27 = 18,
|
|
/// JPEG Lossless, Hierarchical
|
|
EXS_JPEGProcess28 = 19,
|
|
/// JPEG Lossless, Hierarchical, arithmetic coding
|
|
EXS_JPEGProcess29 = 20,
|
|
/// JPEG Lossless, Selection Value 1
|
|
EXS_JPEGProcess14SV1 = 21,
|
|
/// Run Length Encoding (lossless)
|
|
EXS_RLELossless = 22,
|
|
/// JPEG-LS (lossless)
|
|
EXS_JPEGLSLossless = 23,
|
|
/// JPEG-LS (lossless or near-lossless mode)
|
|
EXS_JPEGLSLossy = 24,
|
|
/// Deflated Explicit VR Little Endian
|
|
EXS_DeflatedLittleEndianExplicit = 25,
|
|
/// JPEG 2000 (lossless)
|
|
EXS_JPEG2000LosslessOnly = 26,
|
|
/// JPEG 2000 (lossless or lossy)
|
|
EXS_JPEG2000 = 27,
|
|
/// MPEG2 Main Profile at Main Level
|
|
EXS_MPEG2MainProfileAtMainLevel = 28,
|
|
/// MPEG2 Main Profile at High Level
|
|
EXS_MPEG2MainProfileAtHighLevel = 29,
|
|
/// MPEG4 High Profile / Level 4.1
|
|
EXS_MPEG4HighProfileLevel4_1 = 30,
|
|
/// MPEG4 BD-compatible High Profile / Level 4.1
|
|
EXS_MPEG4BDcompatibleHighProfileLevel4_1 = 31,
|
|
/// MPEG4 High Profile / Level 4.2 For 2D Video
|
|
EXS_MPEG4HighProfileLevel4_2_For2DVideo = 32,
|
|
/// MPEG4 High Profile / Level 4.2 For 3D Video
|
|
EXS_MPEG4HighProfileLevel4_2_For3DVideo = 33,
|
|
/// MPEG4 Stereo High Profile / Level 4.2
|
|
EXS_MPEG4StereoHighProfileLevel4_2 = 34,
|
|
/// JPEG 2000 part 2 multi-component extensions (lossless)
|
|
EXS_JPEG2000MulticomponentLosslessOnly = 35,
|
|
/// JPEG 2000 part 2 multi-component extensions (lossless or lossy)
|
|
EXS_JPEG2000Multicomponent = 36,
|
|
/// JPIP Referenced
|
|
EXS_JPIPReferenced = 37,
|
|
/// JPIP Referenced Deflate
|
|
EXS_JPIPReferencedDeflate = 38
|
|
} E_TransferSyntax;
|
|
|
|
/** enumeration of byte orders
|
|
*/
|
|
typedef enum {
|
|
/// unknown
|
|
EBO_unknown = 0,
|
|
|
|
/// little endian
|
|
EBO_LittleEndian = 1,
|
|
|
|
/// big endian
|
|
EBO_BigEndian = 2
|
|
} E_ByteOrder;
|
|
|
|
/** enumeration of VR encoding options
|
|
*/
|
|
typedef enum {
|
|
/// implicit VR encoding
|
|
EVT_Implicit = 0,
|
|
|
|
/// explicit VR encoding
|
|
EVT_Explicit = 1
|
|
} E_VRType;
|
|
|
|
/** enumeration of pixel data encapsulation options
|
|
*/
|
|
typedef enum {
|
|
/// pixel data not encapsulated
|
|
EJE_NotEncapsulated = 0,
|
|
|
|
/// pixel data encapsulated
|
|
EJE_Encapsulated = 1
|
|
} E_JPEGEncapsulated;
|
|
|
|
/** enumeration of stream compression techniques
|
|
*/
|
|
typedef enum
|
|
{
|
|
/// no stream compression
|
|
ESC_none = 0
|
|
/// unsupported stream compression
|
|
, ESC_unsupported = 1
|
|
#ifdef WITH_ZLIB
|
|
/// zlib stream compression
|
|
, ESC_zlib = 2
|
|
#endif
|
|
} E_StreamCompression;
|
|
|
|
|
|
/** a class that allows for a lookup of Transfer Syntax properties and readable descriptions
|
|
*/
|
|
class DCMTK_DCMDATA_EXPORT DcmXfer
|
|
{
|
|
public:
|
|
/** constructor
|
|
* @param xfer transfer syntax enum
|
|
*/
|
|
DcmXfer( E_TransferSyntax xfer );
|
|
|
|
/** constructor
|
|
* @param xferName_xferID transfer syntax name as string
|
|
*/
|
|
DcmXfer( const char *xferName_xferID );
|
|
|
|
/// copy constructor
|
|
DcmXfer( const DcmXfer &newXfer );
|
|
|
|
/// destructor
|
|
~DcmXfer();
|
|
|
|
/// assignment operator for transfer syntax enum
|
|
DcmXfer & operator = ( const E_TransferSyntax xfer );
|
|
|
|
/// copy assignment operator
|
|
DcmXfer & operator = ( const DcmXfer &newtag );
|
|
|
|
/// return transfer syntax enum for this transfer syntax
|
|
inline E_TransferSyntax getXfer() const { return xferSyn; }
|
|
|
|
/// return byte order for this transfer syntax
|
|
inline E_ByteOrder getByteOrder() const { return byteOrder; }
|
|
|
|
/// return name string for this transfer syntax
|
|
inline const char* getXferName() const { return xferName; }
|
|
|
|
/// return UID string for this transfer syntax
|
|
inline const char* getXferID() const { return xferID; }
|
|
|
|
/// return true if transfer syntax is little endian, false otherwise
|
|
inline OFBool isLittleEndian() const
|
|
{
|
|
return byteOrder == EBO_LittleEndian;
|
|
}
|
|
|
|
/// return true if transfer syntax is big endian, false otherwise
|
|
inline OFBool isBigEndian() const { return byteOrder == EBO_BigEndian; }
|
|
|
|
/// return true if transfer syntax is implicit VR, false otherwise
|
|
inline OFBool isImplicitVR() const { return vrType == EVT_Implicit; }
|
|
|
|
/// return true if transfer syntax is explicit VR, false otherwise
|
|
inline OFBool isExplicitVR() const { return vrType == EVT_Explicit; }
|
|
|
|
/// return true if transfer syntax is encapsulated, false otherwise
|
|
inline OFBool isEncapsulated() const
|
|
{
|
|
return encapsulated == EJE_Encapsulated;
|
|
}
|
|
|
|
/// return true if transfer syntax is native (non-encapsulated), false otherwise
|
|
inline OFBool isNotEncapsulated() const
|
|
{
|
|
return encapsulated == EJE_NotEncapsulated;
|
|
}
|
|
|
|
/** return 8-bit JPEG process ID for this transfer syntax.
|
|
* Lossy JPEG transfer syntaxes support two alternative JPEG encoding processes - 8 and 12 bits.
|
|
* When called for a non-JPEG transfer syntax, returns 0.
|
|
* @return 8-bit JPEG process ID
|
|
*/
|
|
inline Uint32 getJPEGProcess8Bit() const { return JPEGProcess8; }
|
|
|
|
/** return 12-bit JPEG process ID for this transfer syntax.
|
|
* Lossy JPEG transfer syntaxes support two alternative JPEG encoding processes - 8 and 12 bits.
|
|
* When called for a non-JPEG transfer syntax, returns 0.
|
|
* @return 12-bit JPEG process ID
|
|
*/
|
|
inline Uint32 getJPEGProcess12Bit() const { return JPEGProcess12;}
|
|
|
|
/** check whether transfer syntax uses a lossy compression
|
|
* @return true if transfer syntax uses a lossy compression, false otherwise
|
|
*/
|
|
inline OFBool isLossy() const
|
|
{
|
|
return lossy;
|
|
}
|
|
|
|
/** check whether transfer syntax uses a lossless compression or no compression
|
|
* @return true if transfer syntax uses a lossless compression or no compression,
|
|
* false otherwise
|
|
*/
|
|
inline OFBool isLossless() const
|
|
{
|
|
return !lossy;
|
|
}
|
|
|
|
/** check whether transfer syntax is retired
|
|
* @return true if transfer syntax is retired, false otherwise
|
|
*/
|
|
inline OFBool isRetired() const
|
|
{
|
|
return retired;
|
|
}
|
|
|
|
/** get stream compression type for this transfer syntax
|
|
* @return stream compression type for this transfer syntax
|
|
*/
|
|
inline E_StreamCompression getStreamCompression() const
|
|
{
|
|
return streamCompression;
|
|
}
|
|
|
|
/** return the number of bytes needed to describe the tag, length, VR
|
|
* and any reserved fields for this transfer syntax when encoding the
|
|
* specified VR.
|
|
* @param evr value representation to be encoded in this transfer syntax
|
|
* @return number of bytes needed
|
|
*/
|
|
Uint32 sizeofTagHeader(DcmEVR evr) const;
|
|
|
|
private:
|
|
/// transfer syntax UID
|
|
const char *xferID;
|
|
|
|
/// transfer syntax name
|
|
const char *xferName;
|
|
|
|
/// transfer syntax enum
|
|
E_TransferSyntax xferSyn;
|
|
|
|
/// transfer syntax byte order
|
|
E_ByteOrder byteOrder;
|
|
|
|
/// transfer syntax VR encoding (implicit/explicit)
|
|
E_VRType vrType;
|
|
|
|
/// transfer syntax encapsulated or native
|
|
E_JPEGEncapsulated encapsulated;
|
|
|
|
/// 8-bit lossy JPEG process ID for this transfer syntax, 0 if not applicable
|
|
Uint32 JPEGProcess8;
|
|
|
|
/// 12-bit lossy JPEG process ID for this transfer syntax, 0 if not applicable
|
|
Uint32 JPEGProcess12;
|
|
|
|
/// flag indicating whether this transfer syntax uses a lossy compression
|
|
OFBool lossy;
|
|
|
|
/// flag indicating whether this transfer syntax has been retired from DICOM
|
|
OFBool retired;
|
|
|
|
/// transfer syntax stream compression type
|
|
E_StreamCompression streamCompression;
|
|
};
|
|
|
|
/** global constant describing the byte order on the machine the application
|
|
* is currently executing on. This is runtime and not compile time information
|
|
* because of "fat" binaries that can be executed on multiple CPU types (e.g. NeXTStep)
|
|
*/
|
|
extern DCMTK_DCMDATA_EXPORT const E_ByteOrder gLocalByteOrder;
|
|
|
|
#endif // DCXFER_H
|