Mercurial > hg > orthanc
comparison Core/DicomParsing/MemoryBufferTranscoder.cpp @ 3906:f0dd5ded8927 transcoding
refactoring using IDicomTranscoder::TranscodedDicom
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 08 May 2020 11:16:16 +0200 |
parents | 061f3d031b5d |
children | 1555feda39e2 |
comparison
equal
deleted
inserted
replaced
3905:061f3d031b5d | 3906:f0dd5ded8927 |
---|---|
79 return true; | 79 return true; |
80 } | 80 } |
81 } | 81 } |
82 #endif | 82 #endif |
83 | 83 |
84 return Transcode(target, hasSopInstanceUidChanged, buffer, size, | 84 DicomTransferSyntax sourceSyntax, targetSyntax; |
85 return Transcode(target, sourceSyntax, targetSyntax, hasSopInstanceUidChanged, buffer, size, | |
85 allowedSyntaxes, allowNewSopInstanceUid); | 86 allowedSyntaxes, allowNewSopInstanceUid); |
86 } | 87 } |
87 | 88 |
88 | 89 |
89 DcmFileFormat* MemoryBufferTranscoder::TranscodeToParsed(bool& hasSopInstanceUidChanged, | 90 DcmFileFormat* MemoryBufferTranscoder::TranscodeToParsed(bool& hasSopInstanceUidChanged, |
104 } | 105 } |
105 } | 106 } |
106 #endif | 107 #endif |
107 | 108 |
108 std::string transcoded; | 109 std::string transcoded; |
109 if (Transcode(transcoded, hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid)) | 110 DicomTransferSyntax sourceSyntax, targetSyntax; |
111 if (Transcode(transcoded, sourceSyntax, targetSyntax, hasSopInstanceUidChanged, | |
112 buffer, size, allowedSyntaxes, allowNewSopInstanceUid)) | |
110 { | 113 { |
111 return FromDcmtkBridge::LoadFromMemoryBuffer( | 114 return FromDcmtkBridge::LoadFromMemoryBuffer( |
112 transcoded.empty() ? NULL : transcoded.c_str(), transcoded.size()); | 115 transcoded.empty() ? NULL : transcoded.c_str(), transcoded.size()); |
113 } | 116 } |
114 else | 117 else |
174 { | 177 { |
175 // "HasInplaceTranscode()" should have been called | 178 // "HasInplaceTranscode()" should have been called |
176 throw OrthancException(ErrorCode_BadSequenceOfCalls); | 179 throw OrthancException(ErrorCode_BadSequenceOfCalls); |
177 } | 180 } |
178 } | 181 } |
182 | |
183 | |
184 | |
185 | |
186 bool MemoryBufferTranscoder::TranscodeParsedToBuffer( | |
187 std::string& target /* out */, | |
188 DicomTransferSyntax& sourceSyntax /* out */, | |
189 DicomTransferSyntax& targetSyntax /* out */, | |
190 bool& hasSopInstanceUidChanged /* out */, | |
191 DcmFileFormat& dicom /* in, possibly modified */, | |
192 const std::set<DicomTransferSyntax>& allowedSyntaxes, | |
193 bool allowNewSopInstanceUid) | |
194 { | |
195 if (dicom.getDataset() == NULL) | |
196 { | |
197 throw OrthancException(ErrorCode_InternalError); | |
198 } | |
199 | |
200 std::string source; | |
201 FromDcmtkBridge::SaveToMemoryBuffer(source, *dicom.getDataset()); | |
202 | |
203 const void* data = source.empty() ? NULL : source.c_str(); | |
204 | |
205 bool success = Transcode(target, sourceSyntax, targetSyntax, hasSopInstanceUidChanged, | |
206 data, source.size(), allowedSyntaxes, allowNewSopInstanceUid); | |
207 | |
208 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | |
209 if (useDcmtk_ && | |
210 dcmtk_.TranscodeParsedToBuffer( | |
211 target, sourceSyntax, targetSyntax,hasSopInstanceUidChanged, | |
212 dicom, allowedSyntaxes, allowNewSopInstanceUid)) | |
213 { | |
214 success = true; | |
215 } | |
216 #endif | |
217 | |
218 return success; | |
219 } | |
220 | |
221 | |
222 IDicomTranscoder::TranscodedDicom* MemoryBufferTranscoder::TranscodeToParsed2( | |
223 DcmFileFormat& dicom /* in, possibly modified */, | |
224 const void* buffer /* in, same DICOM file as "dicom" */, | |
225 size_t size, | |
226 const std::set<DicomTransferSyntax>& allowedSyntaxes, | |
227 bool allowNewSopInstanceUid) | |
228 { | |
229 DicomTransferSyntax sourceSyntax, targetSyntax; | |
230 bool hasSopInstanceUidChanged; | |
231 | |
232 std::string target; | |
233 if (Transcode(target, sourceSyntax, targetSyntax, hasSopInstanceUidChanged, | |
234 buffer, size, allowedSyntaxes, allowNewSopInstanceUid)) | |
235 { | |
236 const void* data = target.empty() ? NULL : target.c_str(); | |
237 return IDicomTranscoder::TranscodedDicom::CreateFromInternal( | |
238 FromDcmtkBridge::LoadFromMemoryBuffer(data, target.size()), hasSopInstanceUidChanged); | |
239 } | |
240 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | |
241 else if (useDcmtk_) | |
242 { | |
243 return dcmtk_.TranscodeToParsed2(dicom, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); | |
244 } | |
245 #endif | |
246 else | |
247 { | |
248 return NULL; | |
249 } | |
250 } | |
179 } | 251 } |