diff UnitTestsSources/FromDcmtkTests.cpp @ 3871:5797d184de67 transcoding

fix the name of some transfer syntaxes
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 29 Apr 2020 14:38:20 +0200
parents d5be23fc0106
children b40dfa6dc8da
line wrap: on
line diff
--- a/UnitTestsSources/FromDcmtkTests.cpp	Wed Apr 29 12:26:51 2020 +0200
+++ b/UnitTestsSources/FromDcmtkTests.cpp	Wed Apr 29 14:38:20 2020 +0200
@@ -1933,6 +1933,16 @@
 #include <dcmtk/dcmjpeg/djrplol.h>    // for DJ_RPLossless
 
 
+#if !defined(ORTHANC_ENABLE_DCMTK_JPEG)
+#  error Macro ORTHANC_ENABLE_DCMTK_JPEG must be defined
+#endif
+
+#if !defined(ORTHANC_ENABLE_DCMTK_JPEG_LOSSLESS)
+#  error Macro ORTHANC_ENABLE_DCMTK_JPEG_LOSSLESS must be defined
+#endif
+
+
+
 namespace Orthanc
 {
   class IDicomTranscoder : public boost::noncopyable
@@ -1960,7 +1970,7 @@
     // NB: Transcoding can change the value of "GetSopInstanceUid()"
     // and "GetTransferSyntax()" if lossy compression is applied
     virtual bool Transcode(std::string& target,
-                           std::set<DicomTransferSyntax> syntaxes,
+                           DicomTransferSyntax syntax,
                            bool allowNewSopInstanceUid) = 0;
 
     virtual void WriteToMemoryBuffer(std::string& target) = 0;
@@ -2122,13 +2132,13 @@
     }
 
     virtual bool Transcode(std::string& target,
-                           std::set<DicomTransferSyntax> syntaxes,
+                           DicomTransferSyntax syntax,
                            bool allowNewSopInstanceUid) ORTHANC_OVERRIDE
     {
       assert(dicom_ != NULL &&
              dicom_->getDataset() != NULL);
       
-      if (syntaxes.find(GetTransferSyntax()) != syntaxes.end())
+      if (syntax == GetTransferSyntax())
       {
         printf("NO TRANSCODING\n");
         
@@ -2139,48 +2149,66 @@
       
       printf(">> %d\n", bitsStored_);
 
-      DJ_RPLossy rpLossy(lossyQuality_);
-
-      if (syntaxes.find(DicomTransferSyntax_LittleEndianImplicit) != syntaxes.end() &&
+      if (syntax == DicomTransferSyntax_LittleEndianImplicit &&
           FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_LittleEndianImplicit, NULL))
       {
         transferSyntax_ = DicomTransferSyntax_LittleEndianImplicit;
         return true;
       }
-      else if (syntaxes.find(DicomTransferSyntax_LittleEndianExplicit) != syntaxes.end() &&
-               FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_LittleEndianExplicit, NULL))
+
+      if (syntax == DicomTransferSyntax_LittleEndianExplicit &&
+          FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_LittleEndianExplicit, NULL))
       {
         transferSyntax_ = DicomTransferSyntax_LittleEndianExplicit;
         return true;
       }
-      else if (syntaxes.find(DicomTransferSyntax_BigEndianExplicit) != syntaxes.end() &&
-               FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_BigEndianExplicit, NULL))
+      
+      if (syntax == DicomTransferSyntax_BigEndianExplicit &&
+          FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_BigEndianExplicit, NULL))
       {
         transferSyntax_ = DicomTransferSyntax_BigEndianExplicit;
         return true;
       }
-      else if (syntaxes.find(DicomTransferSyntax_JPEGProcess1) != syntaxes.end() &&
-               allowNewSopInstanceUid &&
-               GetBitsStored() == 8 &&
-               FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_JPEGProcess1, &rpLossy))
+
+      if (syntax == DicomTransferSyntax_DeflatedLittleEndianExplicit &&
+          FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_DeflatedLittleEndianExplicit, NULL))
       {
-        transferSyntax_ = DicomTransferSyntax_JPEGProcess1;
-        sopInstanceUid_ = GetStringTag(*dicom_->getDataset(), DCM_SOPInstanceUID);
+        transferSyntax_ = DicomTransferSyntax_DeflatedLittleEndianExplicit;
         return true;
       }
-      else if (syntaxes.find(DicomTransferSyntax_JPEGProcess2_4) != syntaxes.end() &&
-               allowNewSopInstanceUid &&
-               GetBitsStored() <= 12 &&
-               FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_JPEGProcess2_4, &rpLossy))
+
+#if ORTHANC_ENABLE_JPEG == 1
+      if (syntax == DicomTransferSyntax_JPEGProcess1 &&
+          allowNewSopInstanceUid &&
+          GetBitsStored() == 8)
       {
-        transferSyntax_ = DicomTransferSyntax_JPEGProcess2_4;
-        sopInstanceUid_ = GetStringTag(*dicom_->getDataset(), DCM_SOPInstanceUID);
-        return true;
+        DJ_RPLossy rpLossy(lossyQuality_);
+        
+        if (FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_JPEGProcess1, &rpLossy))
+        {
+          transferSyntax_ = DicomTransferSyntax_JPEGProcess1;
+          sopInstanceUid_ = GetStringTag(*dicom_->getDataset(), DCM_SOPInstanceUID);
+          return true;
+        }
       }
-      else
+#endif
+      
+#if ORTHANC_ENABLE_JPEG == 1
+      if (syntax == DicomTransferSyntax_JPEGProcess2_4 &&
+          allowNewSopInstanceUid &&
+          GetBitsStored() <= 12)
       {
-        return false;
+        DJ_RPLossy rpLossy(lossyQuality_);
+        if (FromDcmtkBridge::Transcode(target, *dicom_, DicomTransferSyntax_JPEGProcess2_4, &rpLossy))
+        {
+          transferSyntax_ = DicomTransferSyntax_JPEGProcess2_4;
+          sopInstanceUid_ = GetStringTag(*dicom_->getDataset(), DCM_SOPInstanceUID);
+          return true;
+        }
       }
+#endif
+
+      return false;
     }
   };
 }
@@ -2314,12 +2342,11 @@
     std::string a = transcoder.GetSopInstanceUid();
     DicomTransferSyntax b = transcoder.GetTransferSyntax();
     
-    std::set<DicomTransferSyntax> syntaxes;
-    syntaxes.insert(DicomTransferSyntax_JPEGProcess2_4);
-    //syntaxes.insert(DicomTransferSyntax_LittleEndianExplicit);
+    DicomTransferSyntax syntax = DicomTransferSyntax_JPEGProcess2_4;
+    //DicomTransferSyntax syntax = DicomTransferSyntax_LittleEndianExplicit;
 
     std::string t;
-    bool ok = transcoder.Transcode(t, syntaxes, true);
+    bool ok = transcoder.Transcode(t, syntax, true);
     printf("Transcoding: %d\n", ok);
 
     if (ok)
@@ -2343,7 +2370,7 @@
   printf("\n");
 }
 
-TEST(Toto, DISABLED_Transcode)
+TEST(Toto, Transcode)
 {
   //OFLog::configure(OFLogger::DEBUG_LOG_LEVEL);