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