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