Mercurial > hg > orthanc
diff Core/DicomParsing/MemoryBufferTranscoder.cpp @ 3894:8f7ad4989fec transcoding
transcoding to uncompressed transfer syntaxes over DICOM protocol is implemented
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 07 May 2020 11:13:29 +0200 |
parents | 7a5fa8f307e9 |
children | c62f84c7eda9 |
line wrap: on
line diff
--- a/Core/DicomParsing/MemoryBufferTranscoder.cpp Wed May 06 12:48:28 2020 +0200 +++ b/Core/DicomParsing/MemoryBufferTranscoder.cpp Thu May 07 11:13:29 2020 +0200 @@ -39,52 +39,66 @@ namespace Orthanc { - MemoryBufferTranscoder::MemoryBufferTranscoder(bool tryDcmtk) : - tryDcmtk_(tryDcmtk) + MemoryBufferTranscoder::MemoryBufferTranscoder() + { +#if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 + useDcmtk_ = true; +#else + useDcmtk_ = false; +#endif + } + + + void MemoryBufferTranscoder::SetDcmtkUsed(bool used) { #if ORTHANC_ENABLE_DCMTK_TRANSCODING != 1 - if (tryDcmtk) + if (useDcmtk) { throw OrthancException(ErrorCode_NotImplemented, "Orthanc was built without support for DMCTK transcoding"); } #endif + + useDcmtk_ = used; } + bool MemoryBufferTranscoder::TranscodeToBuffer(std::string& target, + bool& hasSopInstanceUidChanged, const void* buffer, size_t size, const std::set<DicomTransferSyntax>& allowedSyntaxes, bool allowNewSopInstanceUid) { #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 - if (tryDcmtk_) + if (useDcmtk_) { - return dcmtk_.TranscodeToBuffer(target, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); + return dcmtk_.TranscodeToBuffer(target, hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); } else #endif { - return Transcode(target, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); + return Transcode(target, hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); } } - DcmFileFormat* MemoryBufferTranscoder::TranscodeToParsed(const void* buffer, + DcmFileFormat* MemoryBufferTranscoder::TranscodeToParsed(bool& hasSopInstanceUidChanged, + const void* buffer, size_t size, const std::set<DicomTransferSyntax>& allowedSyntaxes, bool allowNewSopInstanceUid) { #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 - if (tryDcmtk_) + if (useDcmtk_) { - return dcmtk_.TranscodeToParsed(buffer, size, allowedSyntaxes, allowNewSopInstanceUid); + return dcmtk_.TranscodeToParsed(hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); } else #endif { std::string transcoded; - if (Transcode(transcoded, buffer, size, allowedSyntaxes, allowNewSopInstanceUid)) + if (Transcode(transcoded, hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid)) { return FromDcmtkBridge::LoadFromMemoryBuffer( transcoded.empty() ? NULL : transcoded.c_str(), transcoded.size()); @@ -97,14 +111,15 @@ } - bool MemoryBufferTranscoder::InplaceTranscode(DcmFileFormat& dicom, + bool MemoryBufferTranscoder::InplaceTranscode(bool& hasSopInstanceUidChanged, + DcmFileFormat& dicom, const std::set<DicomTransferSyntax>& allowedSyntaxes, bool allowNewSopInstanceUid) { #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 - if (tryDcmtk_) + if (useDcmtk_) { - return dcmtk_.InplaceTranscode(dicom, allowedSyntaxes, allowNewSopInstanceUid); + return dcmtk_.InplaceTranscode(hasSopInstanceUidChanged, dicom, allowedSyntaxes, allowNewSopInstanceUid); } else #endif