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