Mercurial > hg > orthanc
diff OrthancServer/Plugins/Engine/OrthancPlugins.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 | 5b929e6b3c36 |
line wrap: on
line diff
--- a/OrthancServer/Plugins/Engine/OrthancPlugins.cpp Thu Feb 11 09:33:48 2021 +0100 +++ b/OrthancServer/Plugins/Engine/OrthancPlugins.cpp Thu Feb 11 11:00:05 2021 +0100 @@ -2127,16 +2127,17 @@ class OrthancPlugins::DicomInstanceFromBuffer : public IDicomInstance { private: - std::string buffer_; - DicomInstanceToStore instance_; + std::string buffer_; + std::unique_ptr<DicomInstanceToStore> instance_; public: DicomInstanceFromBuffer(const void* buffer, size_t size) { buffer_.assign(reinterpret_cast<const char*>(buffer), size); - instance_.SetBuffer(buffer_.empty() ? NULL : buffer_.c_str(), buffer_.size()); - instance_.SetOrigin(DicomInstanceOrigin::FromPlugins()); + + instance_.reset(DicomInstanceToStore::CreateFromBuffer(buffer_)); + instance_->SetOrigin(DicomInstanceOrigin::FromPlugins()); } virtual bool CanBeFreed() const ORTHANC_OVERRIDE @@ -2146,7 +2147,7 @@ virtual const DicomInstanceToStore& GetInstance() const ORTHANC_OVERRIDE { - return instance_; + return *instance_; }; }; @@ -2154,15 +2155,20 @@ class OrthancPlugins::DicomInstanceFromTranscoded : public IDicomInstance { private: - std::unique_ptr<ParsedDicomFile> parsed_; - DicomInstanceToStore instance_; + std::unique_ptr<ParsedDicomFile> parsed_; + std::unique_ptr<DicomInstanceToStore> instance_; public: explicit DicomInstanceFromTranscoded(IDicomTranscoder::DicomImage& transcoded) : parsed_(transcoded.ReleaseAsParsedDicomFile()) { - instance_.SetParsedDicomFile(*parsed_); - instance_.SetOrigin(DicomInstanceOrigin::FromPlugins()); + if (parsed_.get() == NULL) + { + throw OrthancException(ErrorCode_InternalError); + } + + instance_.reset(DicomInstanceToStore::CreateFromParsedDicomFile(*parsed_)); + instance_->SetOrigin(DicomInstanceOrigin::FromPlugins()); } virtual bool CanBeFreed() const ORTHANC_OVERRIDE @@ -2172,7 +2178,7 @@ virtual const DicomInstanceToStore& GetInstance() const ORTHANC_OVERRIDE { - return instance_; + return *instance_; }; };