Mercurial > hg > orthanc
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 } |