/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 |