Coverage Report

Created: 2026-09-28 07:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/dcmtk-install/include/dcmtk/dcmdata/dcxfer.h
Line
Count
Source
1
/*
2
 *
3
 *  Copyright (C) 1994-2025, OFFIS e.V.
4
 *  All rights reserved.  See COPYRIGHT file for details.
5
 *
6
 *  This software and supporting documentation were developed by
7
 *
8
 *    OFFIS e.V.
9
 *    R&D Division Health
10
 *    Escherweg 2
11
 *    D-26121 Oldenburg, Germany
12
 *
13
 *
14
 *  Module:  dcmdata
15
 *
16
 *  Author:  Gerd Ehlers, Joerg Riesmeier
17
 *
18
 *  Purpose: Handling of transfer syntaxes
19
 *
20
 */
21
22
#ifndef DCXFER_H
23
#define DCXFER_H
24
25
#include "dcmtk/config/osconfig.h"    /* make sure OS specific configuration is included first */
26
#include "dcmtk/dcmdata/dctypes.h"
27
#include "dcmtk/dcmdata/dcvr.h"
28
#include "dcmtk/ofstd/ofdeprec.h"     /* for OFdeprecated */
29
30
// include this file in doxygen documentation
31
32
/** @file dcxfer.h
33
 *  @brief definition and handling of transfer syntaxes
34
 */
35
36
/** enumeration of all DICOM transfer syntaxes known to the toolkit
37
 */
38
typedef enum {
39
    /// unknown transfer syntax or dataset created in memory
40
    EXS_Unknown = -1,
41
    /// Implicit VR Little Endian
42
    EXS_LittleEndianImplicit = 0,
43
    /// Implicit VR Big Endian (does not really exist, only used internally)
44
    EXS_BigEndianImplicit = 1,
45
    /// Explicit VR Little Endian
46
    EXS_LittleEndianExplicit = 2,
47
    /// Explicit VR Big Endian
48
    EXS_BigEndianExplicit = 3,
49
    /// Encapsulated Uncompressed Explicit VR Little Endian
50
    EXS_EncapsulatedUncompressedLittleEndianExplicit = 4,
51
    /// JPEG Baseline (lossy)
52
    EXS_JPEGProcess1 = 5,
53
    /// JPEG Extended Sequential (lossy, 8/12 bit)
54
    EXS_JPEGProcess2_4 = 6,
55
    /// JPEG Extended Sequential (lossy, 8/12 bit), arithmetic coding
56
    EXS_JPEGProcess3_5 = 7,
57
    /// JPEG Spectral Selection, Non-Hierarchical (lossy, 8/12 bit)
58
    EXS_JPEGProcess6_8 = 8,
59
    /// JPEG Spectral Selection, Non-Hierarchical (lossy, 8/12 bit), arithmetic coding
60
    EXS_JPEGProcess7_9 = 9,
61
    /// JPEG Full Progression, Non-Hierarchical (lossy, 8/12 bit)
62
    EXS_JPEGProcess10_12 = 10,
63
    /// JPEG Full Progression, Non-Hierarchical (lossy, 8/12 bit), arithmetic coding
64
    EXS_JPEGProcess11_13 = 11,
65
    /// JPEG Lossless with any selection value
66
    EXS_JPEGProcess14 = 12,
67
    /// JPEG Lossless with any selection value, arithmetic coding
68
    EXS_JPEGProcess15 = 13,
69
    /// JPEG Extended Sequential, Hierarchical (lossy, 8/12 bit)
70
    EXS_JPEGProcess16_18 = 14,
71
    /// JPEG Extended Sequential, Hierarchical (lossy, 8/12 bit), arithmetic coding
72
    EXS_JPEGProcess17_19 = 15,
73
    /// JPEG Spectral Selection, Hierarchical (lossy, 8/12 bit)
74
    EXS_JPEGProcess20_22 = 16,
75
    /// JPEG Spectral Selection, Hierarchical (lossy, 8/12 bit), arithmetic coding
76
    EXS_JPEGProcess21_23 = 17,
77
    /// JPEG Full Progression, Hierarchical (lossy, 8/12 bit)
78
    EXS_JPEGProcess24_26 = 18,
79
    /// JPEG Full Progression, Hierarchical (lossy, 8/12 bit), arithmetic coding
80
    EXS_JPEGProcess25_27 = 19,
81
    /// JPEG Lossless, Hierarchical
82
    EXS_JPEGProcess28 = 20,
83
    /// JPEG Lossless, Hierarchical, arithmetic coding
84
    EXS_JPEGProcess29 = 21,
85
    /// JPEG Lossless, Selection Value 1
86
    EXS_JPEGProcess14SV1 = 22,
87
    /// Run Length Encoding (lossless)
88
    EXS_RLELossless = 23,
89
    /// Deflated Explicit VR Little Endian
90
    EXS_DeflatedLittleEndianExplicit = 24,
91
    /// Deflated Image Frame Compression
92
    EXS_DeflatedImageFrameCompression = 25,
93
    /// JPEG-LS (lossless)
94
    EXS_JPEGLSLossless = 26,
95
    /// JPEG-LS (lossless or near-lossless mode)
96
    EXS_JPEGLSLossy = 27,
97
    /// JPEG 2000 (lossless)
98
    EXS_JPEG2000LosslessOnly = 28,
99
    /// JPEG 2000 (lossless or lossy)
100
    EXS_JPEG2000 = 29,
101
    /// JPEG 2000 part 2 multi-component extensions (lossless)
102
    EXS_JPEG2000MulticomponentLosslessOnly = 30,
103
    /// JPEG 2000 part 2 multi-component extensions (lossless or lossy)
104
    EXS_JPEG2000Multicomponent = 31,
105
    /// JPIP Referenced
106
    EXS_JPIPReferenced = 32,
107
    /// JPIP Referenced Deflate
108
    EXS_JPIPReferencedDeflate = 33,
109
    /// MPEG2 Main Profile at Main Level
110
    EXS_MPEG2MainProfileAtMainLevel = 34,
111
    /// Fragmentable MPEG2 Main Profile / Main Level
112
    EXS_FragmentableMPEG2MainProfileMainLevel = 35,
113
    /// MPEG2 Main Profile at High Level
114
    EXS_MPEG2MainProfileAtHighLevel = 36,
115
    /// Fragmentable MPEG2 Main Profile / High Level
116
    EXS_FragmentableMPEG2MainProfileHighLevel = 37,
117
    /// MPEG4 High Profile / Level 4.1
118
    EXS_MPEG4HighProfileLevel4_1 = 38,
119
    /// Fragmentable MPEG4 High Profile / Level 4.1
120
    EXS_FragmentableMPEG4HighProfileLevel4_1 = 39,
121
    /// MPEG4 BD-compatible High Profile / Level 4.1
122
    EXS_MPEG4BDcompatibleHighProfileLevel4_1 = 40,
123
    /// Fragmentable MPEG4 BD-compatible High Profile / Level 4.1
124
    EXS_FragmentableMPEG4BDcompatibleHighProfileLevel4_1 = 41,
125
    /// MPEG4 High Profile / Level 4.2 For 2D Video
126
    EXS_MPEG4HighProfileLevel4_2_For2DVideo = 42,
127
    /// Fragmentable MPEG4 High Profile / Level 4.2 For 2D Video
128
    EXS_FragmentableMPEG4HighProfileLevel4_2_For2DVideo = 43,
129
    /// MPEG4 High Profile / Level 4.2 For 3D Video
130
    EXS_MPEG4HighProfileLevel4_2_For3DVideo = 44,
131
    /// Fragmentable MPEG4 Stereo High Profile / Level 4.2
132
    EXS_FragmentableMPEG4HighProfileLevel4_2_For3DVideo = 45,
133
    /// MPEG4 Stereo High Profile / Level 4.2
134
    EXS_MPEG4StereoHighProfileLevel4_2 = 46,
135
    /// Fragmentable HEVC/H.265 Main Profile / Level 5.1
136
    EXS_FragmentableMPEG4StereoHighProfileLevel4_2 = 47,
137
    /// HEVC/H.265 Main Profile / Level 5.1
138
    EXS_HEVCMainProfileLevel5_1 = 48,
139
    /// HEVC/H.265 Main 10 Profile / Level 5.1
140
    EXS_HEVCMain10ProfileLevel5_1 = 49,
141
    /// JPEG XL Lossless
142
    EXS_JPEGXLLossless = 50,
143
    /// JPEG XL JPEG Recompression
144
    EXS_JPEGXLJPEGRecompression = 51,
145
    /// JPEG XL
146
    EXS_JPEGXL = 52,
147
    /// High-Throughput JPEG 2000 Image Compression (Lossless Only)
148
    EXS_HighThroughputJPEG2000LosslessOnly = 53,
149
    /// High-Throughput JPEG 2000 with RPCL Options Image Compression (Lossless Only)
150
    EXS_HighThroughputJPEG2000withRPCLOptionsLosslessOnly = 54,
151
    /// High-Throughput JPEG 2000 Image Compression
152
    EXS_HighThroughputJPEG2000 = 55,
153
    /// JPIP HTJ2K Referenced
154
    EXS_JPIPHTJ2KReferenced = 56,
155
    /// JPIP HTJ2K Referenced Deflate
156
    EXS_JPIPHTJ2KReferencedDeflate = 57,
157
    /// Private GE Little Endian Implicit with big endian pixel data
158
    EXS_PrivateGE_LEI_WithBigEndianPixelData = 58
159
} E_TransferSyntax;
160
161
162
/** enumeration of byte orders
163
 */
164
typedef enum {
165
    /// unknown
166
    EBO_unknown = 0,
167
    /// little endian
168
    EBO_LittleEndian = 1,
169
    /// big endian
170
    EBO_BigEndian = 2
171
} E_ByteOrder;
172
173
/** enumeration of VR encoding options
174
 */
175
typedef enum {
176
    /// implicit VR encoding
177
    EVT_Implicit = 0,
178
    /// explicit VR encoding
179
    EVT_Explicit = 1
180
} E_VRType;
181
182
/** enumeration of pixel data encoding options
183
 */
184
typedef enum {
185
    /// unknown (e.g. invalid value)
186
    EPE_unknown = 0,
187
    /// pixel data in native format (uncompressed)
188
    EPE_Native = 1,
189
    /// pixel data encapsulated (e.g. compressed)
190
    EPE_Encapsulated = 2,
191
    /// pixel data referenced (e.g. using a URL)
192
    EPE_Referenced = 3
193
} E_PixelDataEncoding;
194
195
/** enumeration of pixel data compression options
196
 */
197
typedef enum {
198
    /// unknown (e.g. referenced pixel data)
199
    EPC_unknown = 0,
200
    /// pixel data is uncompressed
201
    EPC_Uncompressed = 1,
202
    /// pixel data is compressed in a lossless manner
203
    EPC_LosslessCompressed = 2,
204
    /// pixel data is compressed in a lossy manner
205
    EPC_LossyCompressed = 3
206
} E_PixelDataCompression;
207
208
/** enumeration of stream compression techniques
209
 */
210
typedef enum
211
{
212
    /// no stream compression
213
    ESC_none = 0
214
    /// unsupported stream compression
215
  , ESC_unsupported = 1
216
#ifdef WITH_ZLIB
217
    /// zlib stream compression.
218
    /// This enum value only available if DCMTK is compiled with ZLIB support enabled.
219
  , ESC_zlib = 2
220
#endif
221
} E_StreamCompression;
222
223
/** validity of the transfer syntax definition
224
 */
225
typedef enum {
226
    /// unknown (e.g. invalid value)
227
    EXV_unknown = 0,
228
    /// internal, not used outside DCMTK
229
    EXV_Internal = 1,
230
    /// defined in the DICOM standard
231
    EXV_Standard = 2,
232
    /// retired from the DICOM standard
233
    EXV_Retired = 3,
234
    /// private, non-standard definition
235
    EXV_Private = 4
236
} E_XferValidity;
237
238
239
/** a class that allows for a lookup of Transfer Syntax properties and readable descriptions
240
 */
241
class DCMTK_DCMDATA_EXPORT DcmXfer
242
{
243
public:
244
    /** constructor
245
     *  @param xfer transfer syntax enum
246
     */
247
    DcmXfer(E_TransferSyntax xfer);
248
249
    /** constructor.
250
     *  Performs a look-up based on the given transfer syntax name or identifier.
251
     *  @param xferName_xferID transfer syntax name or identifier (UID)
252
     */
253
    DcmXfer(const char *xferName_xferID);
254
255
    /** copy constructor
256
     *  @param newXfer transfer syntax to be copied
257
     */
258
    DcmXfer(const DcmXfer &newXfer);
259
260
    /** destructor
261
     */
262
    ~DcmXfer();
263
264
    /** assignment operator for transfer syntax enum
265
     *  @param xfer transfer syntax enum
266
     *  @return reference to this transfer syntax instance
267
     */
268
    DcmXfer &operator=(const E_TransferSyntax xfer);
269
270
    /** copy assignment operator
271
     *  @param newXfer transfer syntax to be copied
272
     *  @return reference to this transfer syntax instance
273
     */
274
    DcmXfer &operator=(const DcmXfer &newXfer);
275
276
    /** comparison operator
277
     *  @param xfer transfer syntax enum to compare with
278
     *  @return true if equal, false if not equal
279
     */
280
    OFBool operator==(const E_TransferSyntax xfer) const
281
    {
282
        return xferSyn == xfer;
283
    }
284
285
    /** comparison operator
286
     *  @param xfer transfer syntax to compare with
287
     *  @return true if equal, false if not equal
288
     */
289
    OFBool operator==(const DcmXfer &xfer) const
290
0
    {
291
0
        return xferSyn == xfer.getXfer();
292
0
    }
293
294
    /** comparison operator
295
     *  @param xfer transfer syntax enum to compare with
296
     *  @return true if not equal, false if equal
297
     */
298
    OFBool operator!=(const E_TransferSyntax xfer) const
299
    {
300
        return xferSyn != xfer;
301
    }
302
303
    /** comparison operator
304
     *  @param xfer transfer syntax to compare with
305
     *  @return true if not equal, false if equal
306
     */
307
    OFBool operator!=(const DcmXfer &xfer) const
308
0
    {
309
0
        return xferSyn != xfer.getXfer();
310
0
    }
311
312
    /** check whether transfer syntax is valid, i.e.\ not unknown or uninitialized.
313
     *  An unknown transfer syntax is usually the result of an unsuccessful look-up.
314
     *  An uninitialized transfer syntax is typically intended by the user (passing
315
     *  EXS_Unknown to the constructor of this class).
316
     *  @return true if transfer syntax is valid, false otherwise
317
     */
318
    inline OFBool isValid() const
319
0
    {
320
0
        return xferSyn != EXS_Unknown;
321
0
    }
322
323
    /** get transfer syntax enum for this transfer syntax
324
     *  @return transfer syntax enum for this transfer syntax
325
     */
326
    inline E_TransferSyntax getXfer() const
327
    {
328
        return xferSyn;
329
    }
330
331
    /** get byte order for this transfer syntax
332
     *  @return byte order for this transfer syntax
333
     */
334
    inline E_ByteOrder getByteOrder() const
335
    {
336
        return byteOrder;
337
    }
338
339
    /** get pixel data byte order for this transfer syntax
340
     *  @return pixel data byte order for this transfer syntax
341
     */
342
    inline E_ByteOrder getPixelDataByteOrder() const
343
    {
344
        return pixelDataByteOrder;
345
    }
346
347
    /** get DCMTK-specific name for this transfer syntax
348
     *  @return name string for this transfer syntax, empty string if undefined
349
     */
350
    inline const char *getXferName() const
351
    {
352
        return xferName;
353
    }
354
355
    /** get DICOM keyword for this transfer syntax
356
     *  @return keyword string for this transfer syntax, empty string if undefined
357
     */
358
    const char *getXferKeyword() const;
359
360
    /** get identifier (UID) for this transfer syntax
361
     *  @return UID string for this transfer syntax, empty string if undefined
362
     */
363
    inline const char *getXferID() const
364
    {
365
        return xferID;
366
    }
367
368
    /** check whether transfer syntax uses little endian byte order
369
     *  @return true if transfer syntax is little endian, false otherwise
370
     */
371
    inline OFBool isLittleEndian() const
372
0
    {
373
0
        return byteOrder == EBO_LittleEndian;
374
0
    }
375
376
    /** check whether transfer syntax uses big endian byte order
377
     *  @return true if transfer syntax is big endian, false otherwise
378
     */
379
    inline OFBool isBigEndian() const
380
0
    {
381
0
        return byteOrder == EBO_BigEndian;
382
0
    }
383
384
    /** check whether transfer syntax uses implicit VR encoding
385
     *  @return true if transfer syntax is implicit VR, false otherwise
386
     */
387
    inline OFBool isImplicitVR() const
388
    {
389
        return vrType == EVT_Implicit;
390
    }
391
392
    /** check whether transfer syntax uses explicit VR encoding
393
     *  @return true if transfer syntax is explicit VR, false otherwise
394
     */
395
    inline OFBool isExplicitVR() const
396
    {
397
        return vrType == EVT_Explicit;
398
    }
399
400
    /** check whether transfer syntax uses native format for pixel data
401
     *  @return true if transfer syntax uses native format, false otherwise
402
     */
403
    inline OFBool usesNativeFormat() const
404
    {
405
        return pixelDataEncoding == EPE_Native;
406
    }
407
408
    /** check whether transfer syntax uses encapsulated format for pixel data
409
     *  @return true if transfer syntax uses encapsulated format, false otherwise
410
     */
411
    inline OFBool usesEncapsulatedFormat() const
412
    {
413
        return pixelDataEncoding == EPE_Encapsulated;
414
    }
415
416
    /** check whether transfer syntax uses (0028,7FE0) Pixel Data Provider URL
417
     *  to reference pixel data
418
     *  @return true if transfer syntax uses URL reference to pixel data
419
     */
420
    inline OFBool usesReferencedPixelData() const
421
    {
422
        return pixelDataEncoding == EPE_Referenced;
423
    }
424
425
    /** check whether transfer syntax uses encapsulated format for pixel data
426
     *  (and whether the pixel data is compressed)
427
     *  @deprecated This method is deprecated and will be removed in the future.
428
     *    Instead, please use usesEncapsulatedFormat() and/or isPixelDataCompressed().
429
     *  @return true if transfer syntax uses encapsulated format, false otherwise
430
     */
431
    OFdeprecated inline OFBool isEncapsulated() const
432
0
    {
433
0
        return usesEncapsulatedFormat() && isPixelDataCompressed();
434
0
    }
435
436
    /** check whether transfer syntax uses non-encapsulated format for pixel data
437
     *  @deprecated This method is deprecated and will be removed in the future.
438
     *    Please use usesNativeFormat() or ! usesEncapsulatedFormat() instead.
439
     *    Also see usesReferencedPixelData().
440
     *  @return true if transfer syntax uses non-encapsulated format, false otherwise
441
     */
442
    OFdeprecated inline OFBool isNotEncapsulated() const
443
0
    {
444
0
        return usesNativeFormat();
445
0
    }
446
447
    /** return 8-bit JPEG process ID for this transfer syntax.
448
     *  Lossy JPEG transfer syntaxes support two alternative JPEG encoding processes:
449
     *  8 and 12 bits.
450
     *  @return 8-bit JPEG process ID, or 0 for a non-JPEG transfer syntax
451
     */
452
    inline Uint32 getJPEGProcess8Bit() const
453
0
    {
454
0
        return JPEGProcess8;
455
0
    }
456
457
    /** return 12-bit JPEG process ID for this transfer syntax.
458
     *  Lossy JPEG transfer syntaxes support two alternative JPEG encoding processes:
459
     *  8 and 12 bits.
460
     *  @return 12-bit JPEG process ID, or 0 for a non-JPEG transfer syntax
461
     */
462
    inline Uint32 getJPEGProcess12Bit() const
463
0
    {
464
0
        return JPEGProcess12;
465
0
    }
466
467
    /** check whether transfer syntax uses uncompressed pixel data
468
     *  @return true if transfer syntax uses uncompressed pixel data, false otherwise
469
     */
470
    inline OFBool isPixelDataUncompressed() const
471
    {
472
        return pixelDataCompression == EPC_Uncompressed;
473
    }
474
475
    /** check whether transfer syntax uses compressed pixel data
476
     *  @return true if transfer syntax uses compressed pixel data, false otherwise
477
     */
478
    inline OFBool isPixelDataCompressed() const
479
    {
480
        return isPixelDataLossyCompressed() || isPixelDataLosslessCompressed();
481
    }
482
483
    /** check whether transfer syntax uses a lossy compression for pixel data
484
     *  @return true if transfer syntax uses a lossy compression, false otherwise
485
     */
486
    inline OFBool isPixelDataLossyCompressed() const
487
    {
488
        return pixelDataCompression == EPC_LossyCompressed;
489
    }
490
491
    /** check whether transfer syntax uses a lossless compression for pixel data
492
     *  @return true if transfer syntax uses a lossless compression or no compression,
493
     *    false otherwise
494
     */
495
    inline OFBool isPixelDataLosslessCompressed() const
496
    {
497
        return pixelDataCompression == EPC_LosslessCompressed;
498
    }
499
500
    /** check whether transfer syntax allows the encapsulated pixel stream of
501
     *  encoded pixel data to be split into one or more fragments
502
     *  @return true if transfer syntax supports fragmentable pixel data
503
     */
504
    inline OFBool isPixelDataFragmentable() const
505
0
    {
506
0
        return usesEncapsulatedFormat() && pixelDataFragmentable;
507
0
    }
508
509
    /** check whether transfer syntax is defined in the DICOM standard
510
     *  @return true if transfer syntax is standard, false otherwise
511
     */
512
    inline OFBool isStandard() const
513
0
    {
514
0
        return xferValidity == EXV_Standard;
515
0
    }
516
517
    /** check whether transfer syntax has been retired from the DICOM standard
518
     *  @return true if transfer syntax is retired, false otherwise
519
     */
520
    inline OFBool isRetired() const
521
0
    {
522
0
        return xferValidity == EXV_Retired;
523
0
    }
524
525
    /** check whether transfer syntax is a private definition
526
     *  @return true if transfer syntax is private, false otherwise
527
     */
528
    inline OFBool isPrivate() const
529
0
    {
530
0
        return xferValidity == EXV_Private;
531
0
    }
532
533
    /** get stream compression type for this transfer syntax
534
     *  @return stream compression type for this transfer syntax
535
     */
536
    inline E_StreamCompression getStreamCompression() const
537
    {
538
        return streamCompression;
539
    }
540
541
    /** check whether transfer syntax compresses the entire dataset.
542
     *  This does not mean that the stream compression is actually supported.
543
     *  @return true if transfer syntax compresses the dataset, false otherwise
544
     */
545
    inline OFBool isDatasetCompressed() const
546
0
    {
547
0
        return streamCompression != ESC_none;
548
0
    }
549
550
    /** check whether transfer syntax uses any kind of lossless compression,
551
     *  either for the pixel data or the entire dataset
552
     *  @return true if transfer syntax uses any kind of lossless compression,
553
     *    false otherwise
554
     */
555
    inline OFBool isLosslessCompressed() const
556
0
    {
557
0
        return isPixelDataLosslessCompressed() || isDatasetCompressed();
558
0
    }
559
560
    /** get DICOMweb MIME type for pixel data in this transfer syntax
561
     *  @return DICOMweb MIME type for pixel data in this transfer syntax
562
     */
563
    inline const char *getMIMEType() const
564
0
    {
565
0
        return mimeType;
566
0
    }
567
568
    /** get suggested filename extension to use when storing pixel data
569
     *  of this transfer syntax as bulk data for use with DICOMweb
570
     *  @return suggested filename extension
571
     */
572
    inline const char *getFilenameExtension() const
573
    {
574
        return filenameExtension;
575
    }
576
577
    /** get the number of bytes needed to describe the tag, length, VR and any
578
     *  reserved fields for this transfer syntax when encoding the specified VR.
579
     *  @param evr value representation to be encoded in this transfer syntax
580
     *  @return number of bytes needed
581
     */
582
    Uint32 sizeofTagHeader(DcmEVR evr) const;
583
584
private:
585
    /// transfer syntax UID
586
    const char            *xferID;
587
588
    /// transfer syntax name
589
    const char            *xferName;
590
591
    /// transfer syntax enum
592
    E_TransferSyntax       xferSyn;
593
594
    /// transfer syntax byte order
595
    E_ByteOrder            byteOrder;
596
597
    /// transfer syntax byte order for pixel data
598
    E_ByteOrder            pixelDataByteOrder;
599
600
    /// transfer syntax VR encoding (implicit or explicit)
601
    E_VRType               vrType;
602
603
    /// transfer syntax encoding of pixel data (e.g. native, encapsulated, referenced)
604
    E_PixelDataEncoding    pixelDataEncoding;
605
606
    /// transfer syntax compression of pixel data (e.g. uncompressed, lossless, lossy)
607
    E_PixelDataCompression pixelDataCompression;
608
609
    /// flag indicating whether this transfer syntax supports fragmentable pixel data
610
    OFBool                 pixelDataFragmentable;
611
612
    /// 8-bit lossy JPEG process ID for this transfer syntax, 0 if not applicable
613
    Uint32                 JPEGProcess8;
614
615
    /// 12-bit lossy JPEG process ID for this transfer syntax, 0 if not applicable
616
    Uint32                 JPEGProcess12;
617
618
    /// transfer syntax stream compression type (e.g. zlib)
619
    E_StreamCompression    streamCompression;
620
621
    /// validity of the transfer syntax definition (e.g. standard, retired, private)
622
    E_XferValidity         xferValidity;
623
624
    /// MIME type used for this transfer syntax in DICOMweb
625
    const char            *mimeType;
626
627
    /// file name extension for storing bulk data in this transfer syntax
628
    const char            *filenameExtension;
629
630
};
631
632
/** global constant describing the byte order on the machine the application
633
 *  is currently executing on. This is runtime and not compile time information
634
 *  because of "fat" binaries that can be executed on multiple CPU types (e.g. NeXTStep)
635
 */
636
extern DCMTK_DCMDATA_EXPORT const E_ByteOrder gLocalByteOrder;
637
638
#endif // DCXFER_H