00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef DCCODEC_H
00030 #define DCCODEC_H
00031
00032 #include "dcmtk/config/osconfig.h"
00033 #include "dcmtk/ofstd/ofcond.h"
00034 #include "dcmtk/dcmdata/dctypes.h"
00035 #include "dcmtk/dcmdata/dcxfer.h"
00036 #include "dcmtk/ofstd/oflist.h"
00037
00038 class DcmStack;
00039 class DcmRepresentationParameter;
00040 class DcmPixelSequence;
00041 class DcmPolymorphOBOW;
00042 class DcmItem;
00043 class DcmTagKey;
00044
00049 class DcmCodecParameter
00050 {
00051 public:
00053 DcmCodecParameter() {}
00054
00056 DcmCodecParameter(const DcmCodecParameter&) {}
00057
00059 virtual ~DcmCodecParameter() {}
00060
00065 virtual DcmCodecParameter *clone() const = 0;
00066
00070 virtual const char *className() const = 0;
00071
00072 };
00073
00074
00085 class DcmCodec
00086 {
00087 public:
00089 DcmCodec() {}
00090
00092 virtual ~DcmCodec() {}
00093
00104 virtual OFCondition decode(
00105 const DcmRepresentationParameter * fromRepParam,
00106 DcmPixelSequence * pixSeq,
00107 DcmPolymorphOBOW& uncompressedPixelData,
00108 const DcmCodecParameter * cp,
00109 const DcmStack& objStack) const = 0;
00110
00136 virtual OFCondition decodeFrame(
00137 const DcmRepresentationParameter * fromParam,
00138 DcmPixelSequence * fromPixSeq,
00139 const DcmCodecParameter * cp,
00140 DcmItem *dataset,
00141 Uint32 frameNo,
00142 Uint32& startFragment,
00143 void *buffer,
00144 Uint32 bufSize,
00145 OFString& decompressedColorModel) const = 0;
00146
00161 virtual OFCondition encode(
00162 const Uint16 * pixelData,
00163 const Uint32 length,
00164 const DcmRepresentationParameter * toRepParam,
00165 DcmPixelSequence * & pixSeq,
00166 const DcmCodecParameter *cp,
00167 DcmStack & objStack) const = 0;
00168
00183 virtual OFCondition encode(
00184 const E_TransferSyntax fromRepType,
00185 const DcmRepresentationParameter * fromRepParam,
00186 DcmPixelSequence * fromPixSeq,
00187 const DcmRepresentationParameter * toRepParam,
00188 DcmPixelSequence * & toPixSeq,
00189 const DcmCodecParameter * cp,
00190 DcmStack & objStack) const = 0;
00191
00199 virtual OFBool canChangeCoding(
00200 const E_TransferSyntax oldRepType,
00201 const E_TransferSyntax newRepType) const = 0;
00202
00216 virtual OFCondition determineDecompressedColorModel(
00217 const DcmRepresentationParameter *fromParam,
00218 DcmPixelSequence *fromPixSeq,
00219 const DcmCodecParameter *cp,
00220 DcmItem *dataset,
00221 OFString &decompressedColorModel) const = 0;
00222
00223
00224
00232 static OFCondition insertStringIfMissing(DcmItem *dataset, const DcmTagKey& tag, const char *val);
00233
00242 static OFCondition convertToSecondaryCapture(DcmItem *dataset);
00243
00252 static OFCondition newInstance(
00253 DcmItem *dataset,
00254 const char *purposeOfReferenceCodingScheme = NULL,
00255 const char *purposeOfReferenceCodeValue = NULL,
00256 const char *purposeOfReferenceCodeMeaning = NULL);
00257
00262 static OFCondition updateImageType(DcmItem *dataset);
00263
00272 static OFCondition insertCodeSequence(
00273 DcmItem *dataset,
00274 const DcmTagKey &tagKey,
00275 const char *codingSchemeDesignator,
00276 const char *codeValue,
00277 const char *codeMeaning);
00278
00287 static OFCondition determineStartFragment(
00288 Uint32 frameNo,
00289 Sint32 numberOfFrames,
00290 DcmPixelSequence * fromPixSeq,
00291 Uint32& currentItem);
00292 };
00293
00294
00299 class DcmCodecList
00300 {
00301
00302 public:
00303
00305 virtual ~DcmCodecList();
00306
00321 static OFCondition registerCodec(
00322 const DcmCodec *aCodec,
00323 const DcmRepresentationParameter *aDefaultRepParam,
00324 const DcmCodecParameter *aCodecParameter);
00325
00331 static OFCondition deregisterCodec(const DcmCodec *aCodec);
00332
00341 static OFCondition updateCodecParameter(
00342 const DcmCodec *aCodec,
00343 const DcmCodecParameter *aCodecParameter);
00344
00357 static OFCondition decode(
00358 const DcmXfer & fromType,
00359 const DcmRepresentationParameter * fromParam,
00360 DcmPixelSequence * fromPixSeq,
00361 DcmPolymorphOBOW& uncompressedPixelData,
00362 DcmStack & pixelStack);
00363
00390 static OFCondition decodeFrame(
00391 const DcmXfer & fromType,
00392 const DcmRepresentationParameter * fromParam,
00393 DcmPixelSequence * fromPixSeq,
00394 DcmItem *dataset,
00395 Uint32 frameNo,
00396 Uint32& startFragment,
00397 void *buffer,
00398 Uint32 bufSize,
00399 OFString& decompressedColorModel);
00400
00417 static OFCondition encode(
00418 const E_TransferSyntax fromRepType,
00419 const Uint16 * pixelData,
00420 const Uint32 length,
00421 const E_TransferSyntax toRepType,
00422 const DcmRepresentationParameter * toRepParam,
00423 DcmPixelSequence * & pixSeq,
00424 DcmStack & pixelStack);
00425
00443 static OFCondition encode(
00444 const E_TransferSyntax fromRepType,
00445 const DcmRepresentationParameter * fromParam,
00446 DcmPixelSequence * fromPixSeq,
00447 const E_TransferSyntax toRepType,
00448 const DcmRepresentationParameter * toRepParam,
00449 DcmPixelSequence * & toPixSeq,
00450 DcmStack & pixelStack);
00451
00460 static OFBool canChangeCoding(
00461 const E_TransferSyntax fromRepType,
00462 const E_TransferSyntax toRepType);
00463
00475 static OFCondition determineDecompressedColorModel(
00476 const DcmXfer &fromType,
00477 const DcmRepresentationParameter *fromParam,
00478 DcmPixelSequence *fromPixSeq,
00479 DcmItem *dataset,
00480 OFString &decompressedColorModel);
00481
00482 private:
00483
00489 DcmCodecList(
00490 const DcmCodec *aCodec,
00491 const DcmRepresentationParameter *aDefaultRepParam,
00492 const DcmCodecParameter *aCodecParameter);
00493
00495 DcmCodecList(const DcmCodecList &);
00496
00498 DcmCodecList &operator=(const DcmCodecList &);
00499
00501 const DcmCodec * codec;
00502
00504 const DcmRepresentationParameter * defaultRepParam;
00505
00507 const DcmCodecParameter * codecParameter;
00508
00510 static OFList<DcmCodecList *> registeredCodecs;
00511
00512 #ifdef WITH_THREADS
00514 static OFReadWriteLock codecLock;
00515 #endif
00516
00517
00518
00519 friend class DcmCodecListDummyFriend;
00520 };
00521
00522
00523 #endif
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624