Mercurial > hg > orthanc
comparison OrthancServer/Sources/DicomInstanceToStore.h @ 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 | f0038043fb97 7053502fbf97 |
comparison
equal
deleted
inserted
replaced
4507:b4c58795f3a8 | 4508:8f9090b137f1 |
---|---|
37 #include "DicomInstanceOrigin.h" | 37 #include "DicomInstanceOrigin.h" |
38 #include "ServerEnumerations.h" | 38 #include "ServerEnumerations.h" |
39 | 39 |
40 #include <boost/shared_ptr.hpp> | 40 #include <boost/shared_ptr.hpp> |
41 | 41 |
42 class DcmDataset; | |
43 | |
42 namespace Orthanc | 44 namespace Orthanc |
43 { | 45 { |
44 class ImageAccessor; | 46 class ImageAccessor; |
45 class ParsedDicomFile; | 47 class ParsedDicomFile; |
46 | 48 |
48 { | 50 { |
49 public: | 51 public: |
50 typedef std::map<std::pair<ResourceType, MetadataType>, std::string> MetadataMap; | 52 typedef std::map<std::pair<ResourceType, MetadataType>, std::string> MetadataMap; |
51 | 53 |
52 private: | 54 private: |
53 class PImpl; | 55 class FromBuffer; |
54 boost::shared_ptr<PImpl> pimpl_; | 56 class FromParsedDicomFile; |
57 class FromDcmDataset; | |
58 | |
59 MetadataMap metadata_; | |
60 DicomInstanceOrigin origin_; | |
55 | 61 |
56 public: | 62 public: |
57 DicomInstanceToStore(); | 63 virtual ~DicomInstanceToStore() |
64 { | |
65 } | |
58 | 66 |
59 void SetOrigin(const DicomInstanceOrigin& origin); | 67 // WARNING: The source in the factory methods is *not* copied and |
68 // must *not* be deallocated as long as this wrapper object is alive | |
69 static DicomInstanceToStore* CreateFromBuffer(const void* buffer, | |
70 size_t size); | |
71 | |
72 static DicomInstanceToStore* CreateFromBuffer(const std::string& buffer); | |
73 | |
74 static DicomInstanceToStore* CreateFromParsedDicomFile(ParsedDicomFile& dicom); | |
75 | |
76 static DicomInstanceToStore* CreateFromDcmDataset(DcmDataset& dataset); | |
77 | |
78 | |
79 | |
80 void SetOrigin(const DicomInstanceOrigin& origin) | |
81 { | |
82 origin_ = origin; | |
83 } | |
60 | 84 |
61 const DicomInstanceOrigin& GetOrigin() const; | 85 const DicomInstanceOrigin& GetOrigin() const |
86 { | |
87 return origin_; | |
88 } | |
89 | |
90 const MetadataMap& GetMetadata() const | |
91 { | |
92 return metadata_; | |
93 } | |
62 | 94 |
63 // WARNING: The buffer is not copied, it must not be removed as | 95 void ClearMetadata() |
64 // long as the "DicomInstanceToStore" object is alive | 96 { |
65 void SetBuffer(const void* dicom, | 97 metadata_.clear(); |
66 size_t size); | 98 } |
67 | |
68 // WARNING: The "ParsedDicomFile" is not copied | |
69 void SetParsedDicomFile(ParsedDicomFile& parsed); | |
70 | |
71 const MetadataMap& GetMetadata() const; | |
72 | |
73 void ClearMetadata(); | |
74 | 99 |
75 // This function is notably used by modify/anonymize operations | 100 // This function is notably used by modify/anonymize operations |
76 void AddMetadata(ResourceType level, | 101 void AddMetadata(ResourceType level, |
77 MetadataType metadata, | 102 MetadataType metadata, |
78 const std::string& value); | 103 const std::string& value) |
79 | 104 { |
80 const void* GetBufferData() const; | 105 metadata_[std::make_pair(level, metadata)] = value; |
81 | 106 } |
82 size_t GetBufferSize() const; | |
83 | 107 |
84 bool LookupTransferSyntax(DicomTransferSyntax& result) const; | 108 bool LookupTransferSyntax(DicomTransferSyntax& result) const; |
85 | 109 |
86 bool HasPixelData() const; | 110 virtual ParsedDicomFile& GetParsedDicomFile() const = 0; |
87 | 111 |
88 ParsedDicomFile& GetParsedDicomFile() const; | 112 virtual const void* GetBufferData() const = 0; |
89 | 113 |
90 void GetSummary(DicomMap& summary) const; | 114 virtual size_t GetBufferSize() const = 0; |
91 | 115 |
92 void GetDicomAsJson(Json::Value& dicomAsJson) const; | 116 virtual bool HasPixelData() const; |
93 | 117 |
94 void DatasetToJson(Json::Value& target, | 118 virtual void GetSummary(DicomMap& summary) const; |
95 DicomToJsonFormat format, | |
96 DicomToJsonFlags flags, | |
97 unsigned int maxStringLength) const; | |
98 | 119 |
99 unsigned int GetFramesCount() const; | 120 virtual void GetDicomAsJson(Json::Value& dicomAsJson) const; |
121 | |
122 virtual void DatasetToJson(Json::Value& target, | |
123 DicomToJsonFormat format, | |
124 DicomToJsonFlags flags, | |
125 unsigned int maxStringLength) const; | |
126 | |
127 virtual unsigned int GetFramesCount() const; | |
100 | 128 |
101 ImageAccessor* DecodeFrame(unsigned int frame) const; | 129 virtual ImageAccessor* DecodeFrame(unsigned int frame) const; |
102 }; | 130 }; |
103 } | 131 } |