Mercurial > hg > orthanc
comparison Core/DicomParsing/MemoryBufferTranscoder.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 | c62f84c7eda9 |
comparison
equal
deleted
inserted
replaced
3893:7a5fa8f307e9 | 3894:8f7ad4989fec |
---|---|
37 #include "../OrthancException.h" | 37 #include "../OrthancException.h" |
38 #include "FromDcmtkBridge.h" | 38 #include "FromDcmtkBridge.h" |
39 | 39 |
40 namespace Orthanc | 40 namespace Orthanc |
41 { | 41 { |
42 MemoryBufferTranscoder::MemoryBufferTranscoder(bool tryDcmtk) : | 42 MemoryBufferTranscoder::MemoryBufferTranscoder() |
43 tryDcmtk_(tryDcmtk) | 43 { |
44 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | |
45 useDcmtk_ = true; | |
46 #else | |
47 useDcmtk_ = false; | |
48 #endif | |
49 } | |
50 | |
51 | |
52 void MemoryBufferTranscoder::SetDcmtkUsed(bool used) | |
44 { | 53 { |
45 #if ORTHANC_ENABLE_DCMTK_TRANSCODING != 1 | 54 #if ORTHANC_ENABLE_DCMTK_TRANSCODING != 1 |
46 if (tryDcmtk) | 55 if (useDcmtk) |
47 { | 56 { |
48 throw OrthancException(ErrorCode_NotImplemented, | 57 throw OrthancException(ErrorCode_NotImplemented, |
49 "Orthanc was built without support for DMCTK transcoding"); | 58 "Orthanc was built without support for DMCTK transcoding"); |
50 } | 59 } |
51 #endif | 60 #endif |
61 | |
62 useDcmtk_ = used; | |
52 } | 63 } |
53 | 64 |
65 | |
54 bool MemoryBufferTranscoder::TranscodeToBuffer(std::string& target, | 66 bool MemoryBufferTranscoder::TranscodeToBuffer(std::string& target, |
67 bool& hasSopInstanceUidChanged, | |
55 const void* buffer, | 68 const void* buffer, |
56 size_t size, | 69 size_t size, |
57 const std::set<DicomTransferSyntax>& allowedSyntaxes, | 70 const std::set<DicomTransferSyntax>& allowedSyntaxes, |
58 bool allowNewSopInstanceUid) | 71 bool allowNewSopInstanceUid) |
59 { | 72 { |
60 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | 73 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 |
61 if (tryDcmtk_) | 74 if (useDcmtk_) |
62 { | 75 { |
63 return dcmtk_.TranscodeToBuffer(target, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); | 76 return dcmtk_.TranscodeToBuffer(target, hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); |
64 } | 77 } |
65 else | 78 else |
66 #endif | 79 #endif |
67 { | 80 { |
68 return Transcode(target, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); | 81 return Transcode(target, hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); |
69 } | 82 } |
70 } | 83 } |
71 | 84 |
72 | 85 |
73 DcmFileFormat* MemoryBufferTranscoder::TranscodeToParsed(const void* buffer, | 86 DcmFileFormat* MemoryBufferTranscoder::TranscodeToParsed(bool& hasSopInstanceUidChanged, |
87 const void* buffer, | |
74 size_t size, | 88 size_t size, |
75 const std::set<DicomTransferSyntax>& allowedSyntaxes, | 89 const std::set<DicomTransferSyntax>& allowedSyntaxes, |
76 bool allowNewSopInstanceUid) | 90 bool allowNewSopInstanceUid) |
77 { | 91 { |
78 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | 92 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 |
79 if (tryDcmtk_) | 93 if (useDcmtk_) |
80 { | 94 { |
81 return dcmtk_.TranscodeToParsed(buffer, size, allowedSyntaxes, allowNewSopInstanceUid); | 95 return dcmtk_.TranscodeToParsed(hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid); |
82 } | 96 } |
83 else | 97 else |
84 #endif | 98 #endif |
85 { | 99 { |
86 std::string transcoded; | 100 std::string transcoded; |
87 if (Transcode(transcoded, buffer, size, allowedSyntaxes, allowNewSopInstanceUid)) | 101 if (Transcode(transcoded, hasSopInstanceUidChanged, buffer, size, allowedSyntaxes, allowNewSopInstanceUid)) |
88 { | 102 { |
89 return FromDcmtkBridge::LoadFromMemoryBuffer( | 103 return FromDcmtkBridge::LoadFromMemoryBuffer( |
90 transcoded.empty() ? NULL : transcoded.c_str(), transcoded.size()); | 104 transcoded.empty() ? NULL : transcoded.c_str(), transcoded.size()); |
91 } | 105 } |
92 else | 106 else |
95 } | 109 } |
96 } | 110 } |
97 } | 111 } |
98 | 112 |
99 | 113 |
100 bool MemoryBufferTranscoder::InplaceTranscode(DcmFileFormat& dicom, | 114 bool MemoryBufferTranscoder::InplaceTranscode(bool& hasSopInstanceUidChanged, |
115 DcmFileFormat& dicom, | |
101 const std::set<DicomTransferSyntax>& allowedSyntaxes, | 116 const std::set<DicomTransferSyntax>& allowedSyntaxes, |
102 bool allowNewSopInstanceUid) | 117 bool allowNewSopInstanceUid) |
103 { | 118 { |
104 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 | 119 #if ORTHANC_ENABLE_DCMTK_TRANSCODING == 1 |
105 if (tryDcmtk_) | 120 if (useDcmtk_) |
106 { | 121 { |
107 return dcmtk_.InplaceTranscode(dicom, allowedSyntaxes, allowNewSopInstanceUid); | 122 return dcmtk_.InplaceTranscode(hasSopInstanceUidChanged, dicom, allowedSyntaxes, allowNewSopInstanceUid); |
108 } | 123 } |
109 else | 124 else |
110 #endif | 125 #endif |
111 { | 126 { |
112 // "HasInplaceTranscode()" should have been called | 127 // "HasInplaceTranscode()" should have been called |