1 /*
2 *
3 * Copyright (C) 1997-2019, 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: dcmjpls
15 *
16 * Author: Martin Willkomm, Uli Schlachter
17 *
18 * Purpose: singleton class that registers encoders for all supported JPEG processes.
19 *
20 */
21
22 #include "dcmtk/config/osconfig.h"
23 #include "dcmtk/dcmjpls/djencode.h"
24 #include "dcmtk/dcmdata/dccodec.h" /* for DcmCodecStruct */
25 #include "dcmtk/dcmjpls/djcparam.h"
26 #include "dcmtk/dcmjpls/djcodece.h"
27
28 // initialization of static members
29 OFBool DJLSEncoderRegistration::registered_ = OFFalse;
30 DJLSCodecParameter *DJLSEncoderRegistration::cp_ = NULL;
31 DJLSLosslessEncoder *DJLSEncoderRegistration::losslessencoder_ = NULL;
32 DJLSNearLosslessEncoder *DJLSEncoderRegistration::nearlosslessencoder_ = NULL;
33
34
registerCodecs(Uint16 jpls_t1,Uint16 jpls_t2,Uint16 jpls_t3,Uint16 jpls_reset,OFBool preferCookedEncoding,Uint32 fragmentSize,OFBool createOffsetTable,JLS_UIDCreation uidCreation,OFBool convertToSC,DJLSCodecParameter::interleaveMode jplsInterleaveMode,OFBool useFFbitstreamPadding)35 void DJLSEncoderRegistration::registerCodecs(
36 Uint16 jpls_t1,
37 Uint16 jpls_t2,
38 Uint16 jpls_t3,
39 Uint16 jpls_reset,
40 OFBool preferCookedEncoding,
41 Uint32 fragmentSize,
42 OFBool createOffsetTable,
43 JLS_UIDCreation uidCreation,
44 OFBool convertToSC,
45 DJLSCodecParameter::interleaveMode jplsInterleaveMode,
46 OFBool useFFbitstreamPadding)
47 {
48 if (! registered_)
49 {
50 cp_ = new DJLSCodecParameter(preferCookedEncoding, jpls_t1, jpls_t2, jpls_t3,
51 jpls_reset, fragmentSize, createOffsetTable, uidCreation,
52 convertToSC, EJLSPC_restore, OFFalse, jplsInterleaveMode, useFFbitstreamPadding);
53
54 if (cp_)
55 {
56 losslessencoder_ = new DJLSLosslessEncoder();
57 if (losslessencoder_) DcmCodecList::registerCodec(losslessencoder_, NULL, cp_);
58 nearlosslessencoder_ = new DJLSNearLosslessEncoder();
59 if (nearlosslessencoder_) DcmCodecList::registerCodec(nearlosslessencoder_, NULL, cp_);
60 registered_ = OFTrue;
61 }
62 }
63 }
64
cleanup()65 void DJLSEncoderRegistration::cleanup()
66 {
67 if (registered_)
68 {
69 DcmCodecList::deregisterCodec(losslessencoder_);
70 DcmCodecList::deregisterCodec(nearlosslessencoder_);
71 delete losslessencoder_;
72 delete nearlosslessencoder_;
73 delete cp_;
74 registered_ = OFFalse;
75 #ifdef DEBUG
76 // not needed but useful for debugging purposes
77 losslessencoder_ = NULL;
78 nearlosslessencoder_ = NULL;
79 cp_ = NULL;
80 #endif
81 }
82 }
83
getLibraryVersionString()84 OFString DJLSEncoderRegistration::getLibraryVersionString()
85 {
86 return DCMJPLS_CHARLS_VERSION_STRING;
87 }
88