diff OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp @ 3950:5797ca4f3b8d transcoding

"/peers/{id}/store": New option "Transcode"
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 19 May 2020 20:37:00 +0200
parents ef696db8426f
children 5fe8c6d3212e
line wrap: on
line diff
--- a/OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp	Tue May 19 18:44:36 2020 +0200
+++ b/OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp	Tue May 19 20:37:00 2020 +0200
@@ -38,6 +38,8 @@
 #include "../../Core/SerializationToolbox.h"
 #include "../ServerContext.h"
 
+#include <dcmtk/dcmdata/dcfilefo.h>
+
 
 namespace Orthanc
 {
@@ -56,7 +58,32 @@
 
     try
     {
-      context_.ReadDicom(client_->GetBody(), instance);
+      if (transcode_)
+      {
+        std::string dicom;
+        context_.ReadDicom(dicom, instance);
+
+        std::set<DicomTransferSyntax> syntaxes;
+        syntaxes.insert(transferSyntax_);
+        
+        IDicomTranscoder::DicomImage source, transcoded;
+        source.SetExternalBuffer(dicom);
+
+        bool hasSopInstanceUidChanged;
+        if (context_.Transcode(transcoded, hasSopInstanceUidChanged, source, syntaxes, true))
+        {
+          client_->GetBody().assign(reinterpret_cast<const char*>(transcoded.GetBufferData()),
+                                    transcoded.GetBufferSize());
+        }
+        else
+        {
+          client_->GetBody().swap(dicom);
+        }
+      }
+      else
+      {
+        context_.ReadDicom(client_->GetBody(), instance);
+      }
     }
     catch (OrthancException& e)
     {