Mercurial > hg > orthanc
diff Core/DicomParsing/DcmtkTranscoder.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 | 7459fcb1bdf7 |
line wrap: on
line diff
--- a/Core/DicomParsing/DcmtkTranscoder.cpp Wed May 06 12:48:28 2020 +0200 +++ b/Core/DicomParsing/DcmtkTranscoder.cpp Thu May 07 11:13:29 2020 +0200 @@ -129,7 +129,8 @@ } - DcmFileFormat* DcmtkTranscoder::TranscodeToParsed(const void* buffer, + DcmFileFormat* DcmtkTranscoder::TranscodeToParsed(bool& hasSopInstanceUidChanged /* out */, + const void* buffer, size_t size, const std::set<DicomTransferSyntax>& allowedSyntaxes, bool allowNewSopInstanceUid) @@ -141,7 +142,7 @@ throw OrthancException(ErrorCode_InternalError); } - if (InplaceTranscode(*dicom, allowedSyntaxes, allowNewSopInstanceUid)) + if (InplaceTranscode(hasSopInstanceUidChanged, *dicom, allowedSyntaxes, allowNewSopInstanceUid)) { return dicom.release(); } @@ -152,7 +153,8 @@ } - bool DcmtkTranscoder::InplaceTranscode(DcmFileFormat& dicom, + bool DcmtkTranscoder::InplaceTranscode(bool& hasSopInstanceUidChanged /* out */, + DcmFileFormat& dicom, const std::set<DicomTransferSyntax>& allowedSyntaxes, bool allowNewSopInstanceUid) { @@ -161,6 +163,8 @@ throw OrthancException(ErrorCode_InternalError); } + hasSopInstanceUidChanged = false; + DicomTransferSyntax syntax; if (!FromDcmtkBridge::LookupOrthancTransferSyntax(syntax, dicom)) { @@ -170,7 +174,7 @@ const uint16_t bitsStored = GetBitsStored(*dicom.getDataset()); std::string sourceSopInstanceUid = GetSopInstanceUid(*dicom.getDataset()); - + if (allowedSyntaxes.find(syntax) != allowedSyntaxes.end()) { // No transcoding is needed @@ -216,6 +220,7 @@ if (FromDcmtkBridge::Transcode(dicom, DicomTransferSyntax_JPEGProcess1, ¶meters)) { CheckSopInstanceUid(dicom, sourceSopInstanceUid, false); + hasSopInstanceUidChanged = true; return true; } } @@ -231,6 +236,7 @@ if (FromDcmtkBridge::Transcode(dicom, DicomTransferSyntax_JPEGProcess2_4, ¶meters)) { CheckSopInstanceUid(dicom, sourceSopInstanceUid, false); + hasSopInstanceUidChanged = true; return true; } } @@ -284,6 +290,7 @@ if (FromDcmtkBridge::Transcode(dicom, DicomTransferSyntax_JPEGLSLossy, ¶meters)) { CheckSopInstanceUid(dicom, sourceSopInstanceUid, false); + hasSopInstanceUidChanged = true; return true; } } @@ -294,13 +301,14 @@ bool DcmtkTranscoder::TranscodeToBuffer(std::string& target, + bool& hasSopInstanceUidChanged /* out */, const void* buffer, size_t size, const std::set<DicomTransferSyntax>& allowedSyntaxes, bool allowNewSopInstanceUid) { std::unique_ptr<DcmFileFormat> transcoded( - TranscodeToParsed(buffer, size, allowedSyntaxes, allowNewSopInstanceUid)); + TranscodeToParsed(hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid)); if (transcoded.get() == NULL) {