Mercurial > hg > orthanc
comparison Core/DicomParsing/MemoryBufferTranscoder.cpp @ 3910:1f71c2f20e16 transcoding
cont
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 08 May 2020 12:03:26 +0200 |
parents | 6762a97deabc |
children | 7dc5e7e0045d |
comparison
equal
deleted
inserted
replaced
3909:6762a97deabc | 3910:1f71c2f20e16 |
---|---|
64 | 64 |
65 | 65 |
66 bool MemoryBufferTranscoder::TranscodeParsedToBuffer( | 66 bool MemoryBufferTranscoder::TranscodeParsedToBuffer( |
67 std::string& target /* out */, | 67 std::string& target /* out */, |
68 DicomTransferSyntax& sourceSyntax /* out */, | 68 DicomTransferSyntax& sourceSyntax /* out */, |
69 DicomTransferSyntax& targetSyntax /* out */, | |
70 bool& hasSopInstanceUidChanged /* out */, | 69 bool& hasSopInstanceUidChanged /* out */, |
71 DcmFileFormat& dicom /* in, possibly modified */, | 70 DcmFileFormat& dicom /* in, possibly modified */, |
72 const std::set<DicomTransferSyntax>& allowedSyntaxes, | 71 DicomTransferSyntax targetSyntax, |
73 bool allowNewSopInstanceUid) | 72 bool allowNewSopInstanceUid) |
74 { | 73 { |
75 if (dicom.getDataset() == NULL) | 74 if (dicom.getDataset() == NULL) |
76 { | 75 { |
77 throw OrthancException(ErrorCode_InternalError); | 76 throw OrthancException(ErrorCode_InternalError); |
80 std::string source; | 79 std::string source; |
81 FromDcmtkBridge::SaveToMemoryBuffer(source, *dicom.getDataset()); | 80 FromDcmtkBridge::SaveToMemoryBuffer(source, *dicom.getDataset()); |
82 | 81 |
83 const void* data = source.empty() ? NULL : source.c_str(); | 82 const void* data = source.empty() ? NULL : source.c_str(); |
84 | 83 |
85 bool success = Transcode(target, sourceSyntax, targetSyntax, hasSopInstanceUidChanged, | 84 std::set<DicomTransferSyntax> tmp; |
86 data, source.size(), allowedSyntaxes, allowNewSopInstanceUid); | 85 tmp.insert(targetSyntax); |
87 | 86 |
87 DicomTransferSyntax targetSyntax2; | |
88 bool success = Transcode(target, sourceSyntax, targetSyntax2, hasSopInstanceUidChanged, | |
89 data, source.size(), tmp, allowNewSopInstanceUid); | |
90 | |
91 if (success && | |
92 targetSyntax != targetSyntax2) | |
93 { | |
94 throw OrthancException(ErrorCode_InternalError); | |
95 } | |
96 | |
88 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | 97 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 |
89 if (useDcmtk_ && | 98 if (!success && |
99 useDcmtk_ && | |
90 dcmtk_.TranscodeParsedToBuffer( | 100 dcmtk_.TranscodeParsedToBuffer( |
91 target, sourceSyntax, targetSyntax,hasSopInstanceUidChanged, | 101 target, sourceSyntax, hasSopInstanceUidChanged, |
92 dicom, allowedSyntaxes, allowNewSopInstanceUid)) | 102 dicom, targetSyntax, allowNewSopInstanceUid)) |
93 { | 103 { |
94 success = true; | 104 success = true; |
95 } | 105 } |
96 #endif | 106 #endif |
97 | 107 |