comparison Core/DicomParsing/MemoryBufferTranscoder.cpp @ 3930:b99acc213937 transcoding

transcoder plugins and GDCM transcoding are working
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 14 May 2020 19:20:40 +0200
parents 7dc5e7e0045d
children aae045f802f4
comparison
equal deleted inserted replaced
3929:7dc5e7e0045d 3930:b99acc213937
41 # include "ParsedDicomFile.h" 41 # include "ParsedDicomFile.h"
42 #endif 42 #endif
43 43
44 namespace Orthanc 44 namespace Orthanc
45 { 45 {
46 MemoryBufferTranscoder::MemoryBufferTranscoder()
47 {
48 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1
49 useDcmtk_ = true;
50 #else
51 useDcmtk_ = false;
52 #endif
53 }
54
55
56 void MemoryBufferTranscoder::SetDcmtkUsed(bool used)
57 {
58 #if ORTHANC_ENABLE_DCMTK_TRANSCODING != 1
59 if (useDcmtk)
60 {
61 throw OrthancException(ErrorCode_NotImplemented,
62 "Orthanc was built without support for DMCTK transcoding");
63 }
64 #endif
65
66 useDcmtk_ = used;
67 }
68
69
70 static void CheckTargetSyntax(const std::string& transcoded, 46 static void CheckTargetSyntax(const std::string& transcoded,
71 const std::set<DicomTransferSyntax>& allowedSyntaxes) 47 const std::set<DicomTransferSyntax>& allowedSyntaxes)
72 { 48 {
73 #if !defined(NDEBUG) 49 #if !defined(NDEBUG)
74 // Debug mode 50 // Debug mode
108 const void* data = source.empty() ? NULL : source.c_str(); 84 const void* data = source.empty() ? NULL : source.c_str();
109 85
110 std::set<DicomTransferSyntax> allowedSyntaxes; 86 std::set<DicomTransferSyntax> allowedSyntaxes;
111 allowedSyntaxes.insert(targetSyntax); 87 allowedSyntaxes.insert(targetSyntax);
112 88
113 bool success = Transcode(target, hasSopInstanceUidChanged, 89 if (Transcode(target, hasSopInstanceUidChanged,
114 data, source.size(), allowedSyntaxes, allowNewSopInstanceUid); 90 data, source.size(), allowedSyntaxes, allowNewSopInstanceUid))
115
116 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1
117 if (!success &&
118 useDcmtk_ &&
119 dcmtk_.TranscodeParsedToBuffer(
120 target, hasSopInstanceUidChanged, dicom, targetSyntax, allowNewSopInstanceUid))
121 { 91 {
122 success = true; 92 CheckTargetSyntax(target, allowedSyntaxes);
93 return true;
123 } 94 }
124 #endif 95 else
125 96 {
126 CheckTargetSyntax(target, allowedSyntaxes); 97 return false;
127 return success; 98 }
128 } 99 }
129 100
130 101
131 IDicomTranscoder::TranscodedDicom* MemoryBufferTranscoder::TranscodeToParsed( 102 IDicomTranscoder::TranscodedDicom* MemoryBufferTranscoder::TranscodeToParsed(
132 DcmFileFormat& dicom /* in, possibly modified */, 103 DcmFileFormat& dicom /* in, possibly modified */,
145 116
146 const void* data = target.empty() ? NULL : target.c_str(); 117 const void* data = target.empty() ? NULL : target.c_str();
147 return IDicomTranscoder::TranscodedDicom::CreateFromInternal( 118 return IDicomTranscoder::TranscodedDicom::CreateFromInternal(
148 FromDcmtkBridge::LoadFromMemoryBuffer(data, target.size()), hasSopInstanceUidChanged); 119 FromDcmtkBridge::LoadFromMemoryBuffer(data, target.size()), hasSopInstanceUidChanged);
149 } 120 }
150 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1
151 else if (useDcmtk_)
152 {
153 return dcmtk_.TranscodeToParsed(dicom, buffer, size, allowedSyntaxes, allowNewSopInstanceUid);
154 }
155 #endif
156 else 121 else
157 { 122 {
158 return NULL; 123 return NULL;
159 } 124 }
160 } 125 }