Mercurial > hg > orthanc
diff OrthancServer/ServerContext.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 | c62f84c7eda9 |
children | 1f71c2f20e16 |
line wrap: on
line diff
--- a/OrthancServer/ServerContext.cpp Fri May 08 08:27:18 2020 +0200 +++ b/OrthancServer/ServerContext.cpp Fri May 08 11:16:16 2020 +0200 @@ -1155,19 +1155,14 @@ } - bool ServerContext::Transcode(std::string& target, - bool& hasSopInstanceUidChanged, + bool ServerContext::Transcode(std::string& target /* out */, + DicomTransferSyntax& sourceSyntax /* out */, + DicomTransferSyntax& targetSyntax /* out */, + bool& hasSopInstanceUidChanged /* out */, ParsedDicomFile& dicom, // Possibly modified const std::set<DicomTransferSyntax>& allowedSyntaxes, bool allowNewSopInstanceUid) { - DicomTransferSyntax inputSyntax; - if (!FromDcmtkBridge::LookupOrthancTransferSyntax(inputSyntax, dicom.GetDcmtkObject())) - { - throw OrthancException(ErrorCode_BadFileFormat, - "Cannot determine the source transfer syntax during transcoding"); - } - IDicomTranscoder* transcoder = dcmtkTranscoder_.get(); #if ORTHANC_ENABLE_PLUGINS == 1 @@ -1181,29 +1176,9 @@ { throw OrthancException(ErrorCode_InternalError); } - else if (transcoder->HasInplaceTranscode(inputSyntax, allowedSyntaxes)) - { - if (transcoder->InplaceTranscode(hasSopInstanceUidChanged, dicom.GetDcmtkObject(), - allowedSyntaxes, allowNewSopInstanceUid)) - { - // In-place transcoding is supported and has succeeded - dicom.SaveToMemoryBuffer(target); - return true; - } - else - { - return false; - } - } - else - { - std::string source; - dicom.SaveToMemoryBuffer(source); - - const char* data = source.empty() ? NULL : source.c_str(); - - return transcoder->TranscodeToBuffer( - target, hasSopInstanceUidChanged, data, source.size(), allowedSyntaxes, allowNewSopInstanceUid); - } + + return transcoder->TranscodeParsedToBuffer( + target, sourceSyntax, targetSyntax, hasSopInstanceUidChanged, + dicom.GetDcmtkObject(), allowedSyntaxes, allowNewSopInstanceUid); } }