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