diff OrthancServer/ServerContext.cpp @ 3906:f0dd5ded8927 transcoding

refactoring using IDicomTranscoder::TranscodedDicom
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 08 May 2020 11:16:16 +0200
parents c62f84c7eda9
children 1f71c2f20e16
line wrap: on
line diff
--- a/OrthancServer/ServerContext.cpp	Fri May 08 08:27:18 2020 +0200
+++ b/OrthancServer/ServerContext.cpp	Fri May 08 11:16:16 2020 +0200
@@ -1155,19 +1155,14 @@
   }
 
 
-  bool ServerContext::Transcode(std::string& target,
-                                bool& hasSopInstanceUidChanged,
+  bool ServerContext::Transcode(std::string& target /* out */,
+                                DicomTransferSyntax& sourceSyntax /* out */,
+                                DicomTransferSyntax& targetSyntax /* out */,
+                                bool& hasSopInstanceUidChanged /* out */,
                                 ParsedDicomFile& dicom, // Possibly modified
                                 const std::set<DicomTransferSyntax>& allowedSyntaxes,
                                 bool allowNewSopInstanceUid)
   {
-    DicomTransferSyntax inputSyntax;
-    if (!FromDcmtkBridge::LookupOrthancTransferSyntax(inputSyntax, dicom.GetDcmtkObject()))
-    {
-      throw OrthancException(ErrorCode_BadFileFormat,
-                             "Cannot determine the source transfer syntax during transcoding");
-    }
-
     IDicomTranscoder* transcoder = dcmtkTranscoder_.get();
     
 #if ORTHANC_ENABLE_PLUGINS == 1
@@ -1181,29 +1176,9 @@
     {
       throw OrthancException(ErrorCode_InternalError);
     }
-    else if (transcoder->HasInplaceTranscode(inputSyntax, allowedSyntaxes))
-    {
-      if (transcoder->InplaceTranscode(hasSopInstanceUidChanged, dicom.GetDcmtkObject(),
-                                       allowedSyntaxes, allowNewSopInstanceUid))
-      {
-        // In-place transcoding is supported and has succeeded
-        dicom.SaveToMemoryBuffer(target);
-        return true;
-      }
-      else
-      {
-        return false;
-      }
-    }
-    else
-    {
-      std::string source;
-      dicom.SaveToMemoryBuffer(source);
-      
-      const char* data = source.empty() ? NULL : source.c_str();
-    
-      return transcoder->TranscodeToBuffer(
-        target, hasSopInstanceUidChanged, data, source.size(), allowedSyntaxes, allowNewSopInstanceUid);
-    }
+
+    return transcoder->TranscodeParsedToBuffer(
+      target, sourceSyntax, targetSyntax, hasSopInstanceUidChanged,
+      dicom.GetDcmtkObject(), allowedSyntaxes, allowNewSopInstanceUid);
   }
 }