diff OrthancServer/Sources/ServerContext.cpp @ 4508:8f9090b137f1

Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 11 Feb 2021 11:00:05 +0100
parents b4c58795f3a8
children 98b7b9d21d83
line wrap: on
line diff
--- a/OrthancServer/Sources/ServerContext.cpp	Thu Feb 11 09:33:48 2021 +0100
+++ b/OrthancServer/Sources/ServerContext.cpp	Thu Feb 11 11:00:05 2021 +0100
@@ -728,11 +728,10 @@
         {
           std::unique_ptr<ParsedDicomFile> tmp(transcoded.ReleaseAsParsedDicomFile());
 
-          DicomInstanceToStore toStore;
-          toStore.SetParsedDicomFile(*tmp);
-          toStore.SetOrigin(dicom.GetOrigin());
+          std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromParsedDicomFile(*tmp));
+          toStore->SetOrigin(dicom.GetOrigin());
 
-          StoreStatus ok = StoreAfterTranscoding(resultPublicId, toStore, mode);
+          StoreStatus ok = StoreAfterTranscoding(resultPublicId, *toStore, mode);
           assert(resultPublicId == tmp->GetHasher().HashInstance());
 
           return ok;
@@ -1736,9 +1735,8 @@
                                                  size_t size,
                                                  unsigned int frameIndex)
   {
-    DicomInstanceToStore instance;
-    instance.SetBuffer(dicom, size);
-    return DecodeDicomFrame(instance, frameIndex);
+    std::unique_ptr<DicomInstanceToStore> instance(DicomInstanceToStore::CreateFromBuffer(dicom, size));
+    return DecodeDicomFrame(*instance, frameIndex);
   }