Mercurial > hg > orthanc
comparison Core/DicomParsing/MemoryBufferTranscoder.cpp @ 3904:c62f84c7eda9 transcoding
fixing incorrect behavior in MemoryBufferTranscoder
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 07 May 2020 17:21:20 +0200 |
parents | 8f7ad4989fec |
children | 061f3d031b5d |
comparison
equal
deleted
inserted
replaced
3903:d1273d7cc200 | 3904:c62f84c7eda9 |
---|---|
109 } | 109 } |
110 } | 110 } |
111 } | 111 } |
112 | 112 |
113 | 113 |
114 bool MemoryBufferTranscoder::HasInplaceTranscode( | |
115 DicomTransferSyntax inputSyntax, | |
116 const std::set<DicomTransferSyntax>& outputSyntaxes) const | |
117 { | |
118 /** | |
119 * Inplace transcoding is only possible if DCMTK is enabled, and | |
120 * if DCMTK supports all the requested transfer | |
121 * syntaxes. Otherwise, one has to call the "buffer-to-buffer" | |
122 * transcoder. | |
123 **/ | |
124 | |
125 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | |
126 if (useDcmtk_) | |
127 { | |
128 if (!DcmtkTranscoder::IsSupported(inputSyntax)) | |
129 { | |
130 return false; | |
131 } | |
132 | |
133 for (std::set<DicomTransferSyntax>::const_iterator | |
134 it = outputSyntaxes.begin(); it != outputSyntaxes.end(); ++it) | |
135 { | |
136 if (!DcmtkTranscoder::IsSupported(*it)) | |
137 { | |
138 return false; | |
139 } | |
140 } | |
141 | |
142 return true; | |
143 } | |
144 else | |
145 #endif | |
146 { | |
147 return false; | |
148 } | |
149 } | |
150 | |
151 | |
114 bool MemoryBufferTranscoder::InplaceTranscode(bool& hasSopInstanceUidChanged, | 152 bool MemoryBufferTranscoder::InplaceTranscode(bool& hasSopInstanceUidChanged, |
115 DcmFileFormat& dicom, | 153 DcmFileFormat& dicom, |
116 const std::set<DicomTransferSyntax>& allowedSyntaxes, | 154 const std::set<DicomTransferSyntax>& allowedSyntaxes, |
117 bool allowNewSopInstanceUid) | 155 bool allowNewSopInstanceUid) |
118 { | 156 { |
119 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | 157 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 |
120 if (useDcmtk_) | 158 DicomTransferSyntax inputSyntax; |
159 if (useDcmtk_ && | |
160 FromDcmtkBridge::LookupOrthancTransferSyntax(inputSyntax, dicom) && | |
161 HasInplaceTranscode(inputSyntax, allowedSyntaxes)) | |
121 { | 162 { |
122 return dcmtk_.InplaceTranscode(hasSopInstanceUidChanged, dicom, allowedSyntaxes, allowNewSopInstanceUid); | 163 return dcmtk_.InplaceTranscode(hasSopInstanceUidChanged, dicom, allowedSyntaxes, allowNewSopInstanceUid); |
123 } | 164 } |
124 else | 165 else |
125 #endif | 166 #endif |