Mercurial > hg > orthanc-dicomweb
changeset 412:051ba7683c00 transcoding
removing DicomWebFormatter::Locker thanks to new primitives in Orthanc SDK 1.7.0
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 13 May 2020 16:44:13 +0200 |
parents | 0b87924c195b |
children | 7671ccfc98da |
files | Plugin/DicomWebFormatter.cpp Plugin/DicomWebFormatter.h Plugin/StowRs.cpp Plugin/WadoRs.cpp |
diffstat | 4 files changed, 52 insertions(+), 67 deletions(-) [+] |
line wrap: on
line diff
--- a/Plugin/DicomWebFormatter.cpp Tue May 12 21:01:02 2020 +0200 +++ b/Plugin/DicomWebFormatter.cpp Wed May 13 16:44:13 2020 +0200 @@ -47,9 +47,10 @@ const uint32_t *levelIndex, uint16_t tagGroup, uint16_t tagElement, - OrthancPluginValueRepresentation vr) + OrthancPluginValueRepresentation vr, + void* payload) { - const DicomWebFormatter& that = GetSingleton(); + const DicomWebFormatter& that = *reinterpret_cast<const DicomWebFormatter*>(payload); switch (that.mode_) { @@ -60,7 +61,7 @@ case OrthancPluginDicomWebBinaryMode_BulkDataUri: { - std::string uri = GetSingleton().bulkRoot_; + std::string uri = that.bulkRoot_; for (size_t i = 0; i < levelDepth; i++) { @@ -77,31 +78,25 @@ } - DicomWebFormatter::Locker::Locker(OrthancPluginDicomWebBinaryMode mode, - const std::string& bulkRoot) : - that_(GetSingleton()), - lock_(that_.mutex_) + void DicomWebFormatter::Apply(std::string& target, + OrthancPluginContext* context, + const void* data, + size_t size, + bool xml, + OrthancPluginDicomWebBinaryMode mode, + const std::string& bulkRoot) { - that_.mode_ = mode; - that_.bulkRoot_ = bulkRoot; - } - - - void DicomWebFormatter::Locker::Apply(std::string& target, - OrthancPluginContext* context, - const void* data, - size_t size, - bool xml) - { + DicomWebFormatter payload(mode, bulkRoot); + OrthancString s; if (xml) { - s.Assign(OrthancPluginEncodeDicomWebXml(context, data, size, Callback)); + s.Assign(OrthancPluginEncodeDicomWebXml2(context, data, size, Callback, &payload)); } else { - s.Assign(OrthancPluginEncodeDicomWebJson(context, data, size, Callback)); + s.Assign(OrthancPluginEncodeDicomWebJson2(context, data, size, Callback, &payload)); } if (s.GetContent() == NULL) @@ -116,14 +111,16 @@ } - void DicomWebFormatter::Locker::Apply(std::string& target, - OrthancPluginContext* context, - const Json::Value& value, - bool xml) + void DicomWebFormatter::Apply(std::string& target, + OrthancPluginContext* context, + const Json::Value& value, + bool xml, + OrthancPluginDicomWebBinaryMode mode, + const std::string& bulkRoot) { MemoryBuffer dicom; dicom.CreateDicom(value, OrthancPluginCreateDicomFlags_None); - Apply(target, context, dicom.GetData(), dicom.GetSize(), xml); + Apply(target, context, dicom.GetData(), dicom.GetSize(), xml, mode, bulkRoot); } @@ -166,11 +163,8 @@ std::string item; - { - // TODO - Avoid a global mutex => Need to change Orthanc SDK - OrthancPlugins::DicomWebFormatter::Locker locker(mode, bulkRoot); - locker.Apply(item, context_, dicom, size, isXml_); - } + OrthancPlugins::DicomWebFormatter::Apply( + item, context_, dicom, size, isXml_, mode, bulkRoot); if (isXml_) {
--- a/Plugin/DicomWebFormatter.h Tue May 12 21:01:02 2020 +0200 +++ b/Plugin/DicomWebFormatter.h Wed May 13 16:44:13 2020 +0200 @@ -29,7 +29,6 @@ #include <json/value.h> #include <boost/noncopyable.hpp> -#include <boost/thread/mutex.hpp> namespace OrthancPlugins @@ -37,16 +36,9 @@ class DicomWebFormatter : public boost::noncopyable { private: - boost::mutex mutex_; OrthancPluginDicomWebBinaryMode mode_; std::string bulkRoot_; - static DicomWebFormatter& GetSingleton() - { - static DicomWebFormatter formatter; - return formatter; - } - static void Callback(OrthancPluginDicomWebNode *node, OrthancPluginDicomWebSetBinaryNode setter, uint32_t levelDepth, @@ -55,30 +47,31 @@ const uint32_t *levelIndex, uint16_t tagGroup, uint16_t tagElement, - OrthancPluginValueRepresentation vr); - - public: - class Locker : public boost::noncopyable - { - private: - DicomWebFormatter& that_; - boost::mutex::scoped_lock lock_; + OrthancPluginValueRepresentation vr, + void* payload); - public: - Locker(OrthancPluginDicomWebBinaryMode mode, - const std::string& bulkRoot); + DicomWebFormatter(OrthancPluginDicomWebBinaryMode mode, + const std::string& bulkRoot) : + mode_(mode), + bulkRoot_(bulkRoot) + { + } + + public: + static void Apply(std::string& target, + OrthancPluginContext* context, + const void* data, + size_t size, + bool xml, + OrthancPluginDicomWebBinaryMode mode, + const std::string& bulkRoot); - void Apply(std::string& target, - OrthancPluginContext* context, - const void* data, - size_t size, - bool xml); - - void Apply(std::string& target, - OrthancPluginContext* context, - const Json::Value& value, - bool xml); - }; + static void Apply(std::string& target, + OrthancPluginContext* context, + const Json::Value& value, + bool xml, + OrthancPluginDicomWebBinaryMode mode, + const std::string& bulkRoot); class HttpWriter : public boost::noncopyable {
--- a/Plugin/StowRs.cpp Tue May 12 21:01:02 2020 +0200 +++ b/Plugin/StowRs.cpp Wed May 13 16:44:13 2020 +0200 @@ -191,10 +191,8 @@ std::string answer; - { - DicomWebFormatter::Locker locker(OrthancPluginDicomWebBinaryMode_Ignore, ""); - locker.Apply(answer, context_, result_, xml_); - } + DicomWebFormatter::Apply(answer, context_, result_, xml_, + OrthancPluginDicomWebBinaryMode_Ignore, ""); OrthancPluginAnswerBuffer(context_, output, answer.c_str(), answer.size(), xml_ ? "application/dicom+xml" : "application/dicom+json");
--- a/Plugin/WadoRs.cpp Tue May 12 21:01:02 2020 +0200 +++ b/Plugin/WadoRs.cpp Wed May 13 16:44:13 2020 +0200 @@ -692,9 +692,9 @@ std::string dicomweb; { // TODO - Avoid a global mutex => Need to change Orthanc SDK - OrthancPlugins::DicomWebFormatter::Locker locker(OrthancPluginDicomWebBinaryMode_Ignore, ""); - locker.Apply(dicomweb, OrthancPlugins::GetGlobalContext(), - buffer.GetData(), buffer.GetSize(), false /* JSON */); + OrthancPlugins::DicomWebFormatter::Apply( + dicomweb, OrthancPlugins::GetGlobalContext(), buffer.GetData(), buffer.GetSize(), + false /* JSON */, OrthancPluginDicomWebBinaryMode_Ignore, ""); } buffer.RestApiPut("/instances/" + orthancId + "/attachments/4444", dicomweb, false);