diff OrthancServer/ServerJobs/ResourceModificationJob.cpp @ 3945:0b3256c3ee14 transcoding

simplified IDicomTranscoder
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 19 May 2020 11:24:00 +0200
parents b26d25d3c1c7
children 3d2fc1b5cc8c
line wrap: on
line diff
--- a/OrthancServer/ServerJobs/ResourceModificationJob.cpp	Tue May 19 10:17:06 2020 +0200
+++ b/OrthancServer/ServerJobs/ResourceModificationJob.cpp	Tue May 19 11:24:00 2020 +0200
@@ -177,19 +177,20 @@
     {
       std::set<DicomTransferSyntax> syntaxes;
       syntaxes.insert(transferSyntax_);
+
+      IDicomTranscoder::DicomImage source;
+      source.AcquireParsed(*modified);  // "modified" is invalid below this point
       
-      std::string s;
-      modified->SaveToMemoryBuffer(s);  // TODO - AVOID THIS SERIALIZATION IF NO PLUGIN
-
-      std::unique_ptr<IDicomTranscoder::TranscodedDicom> transcoded;
-      transcoded.reset(GetContext().TranscodeToParsed(modified->GetDcmtkObject(), s.empty() ? NULL : s.c_str(), s.size(), syntaxes, true));
-      if (transcoded.get() == NULL)
+      IDicomTranscoder::DicomImage transcoded;
+      bool hasSopInstanceUidChanged;
+      if (GetContext().Transcode(transcoded, hasSopInstanceUidChanged, source, syntaxes, true))
       {
-        LOG(WARNING) << "Cannot transcode instance, keeping original transfer syntax: " << instance;
+        modified.reset(transcoded.ReleaseAsParsedDicomFile());
       }
       else
       {
-        modified.reset(ParsedDicomFile::AcquireDcmtkObject(transcoded->ReleaseDicom()));
+        LOG(WARNING) << "Cannot transcode instance, keeping original transfer syntax: " << instance;
+        modified.reset(source.ReleaseAsParsedDicomFile());
       }
     }