Browse Source

Register compression libraries in ctkDICOMDatabase initialization

nherlambang 14 years ago
parent
commit
5f1616ff14
1 changed files with 25 additions and 0 deletions
  1. 25 0
      Libs/DICOM/Core/ctkDICOMDatabase.cpp

+ 25 - 0
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -54,6 +54,11 @@
 #include <dcmtk/dcmdata/dcddirif.h>   /* for class DicomDirInterface */
 #include <dcmimage.h>
 
+#include <dcmtk/dcmjpeg/djdecode.h>  /* for dcmjpeg decoders */
+#include <dcmtk/dcmjpeg/djencode.h>  /* for dcmjpeg encoders */
+#include <dcmtk/dcmdata/dcrledrg.h>  /* for DcmRLEDecoderRegistration */
+#include <dcmtk/dcmdata/dcrleerg.h>  /* for DcmRLEEncoderRegistration */
+
 //------------------------------------------------------------------------------
 static ctkLogger logger("org.commontk.dicom.DICOMDatabase" );
 //------------------------------------------------------------------------------
@@ -69,6 +74,7 @@ public:
   ctkDICOMDatabasePrivate(ctkDICOMDatabase&);
   ~ctkDICOMDatabasePrivate();
   void init(QString databaseFile);
+  void registerCompressionLibraries();
   bool executeScript(const QString script);
 
   QString      DatabaseFileName;
@@ -90,10 +96,26 @@ ctkDICOMDatabasePrivate::ctkDICOMDatabasePrivate(ctkDICOMDatabase& o): q_ptr(&o)
 void ctkDICOMDatabasePrivate::init(QString databaseFilename)
 {
   Q_Q(ctkDICOMDatabase);
+
   q->openDatabase(databaseFilename);
 }
 
 //------------------------------------------------------------------------------
+void ctkDICOMDatabasePrivate::registerCompressionLibraries(){
+    logger.debug("Register compression libraries");
+    // Register the JPEG libraries in case we need them
+    //   (registration only happens once, so it's okay to call repeatedly)
+    // register global JPEG decompression codecs
+    DJDecoderRegistration::registerCodecs();
+    // register global JPEG compression codecs
+    DJEncoderRegistration::registerCodecs();
+    // register RLE compression codec
+    DcmRLEEncoderRegistration::registerCodecs();
+    // register RLE decompression codec
+    DcmRLEDecoderRegistration::registerCodecs();
+}
+
+//------------------------------------------------------------------------------
 ctkDICOMDatabasePrivate::~ctkDICOMDatabasePrivate()
 {
 }
@@ -131,12 +153,15 @@ ctkDICOMDatabase::ctkDICOMDatabase(QString databaseFile)
    : d_ptr(new ctkDICOMDatabasePrivate(*this))
 {
   Q_D(ctkDICOMDatabase);
+  d->registerCompressionLibraries();
   d->init(databaseFile);
 }
 
 ctkDICOMDatabase::ctkDICOMDatabase(QObject* parent)
    : d_ptr(new ctkDICOMDatabasePrivate(*this))
 {
+    Q_D(ctkDICOMDatabase);
+    d->registerCompressionLibraries();
 }
 
 //------------------------------------------------------------------------------