annotate OrthancFramework/Sources/DicomParsing/MemoryBufferTranscoder.cpp @ 4137:6774605d4341

keep only one signature for FromDcmtkBridge::ExtractDicomSummary()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 06 Aug 2020 17:38:55 +0200
parents bf7b9edf6b81
children 0034f855c023
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3893
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 *
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
4119
bf7b9edf6b81 re-licensing the OrthancFramework to LGPL, in order to license Stone of Orthanc under LGPL
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
8 * modify it under the terms of the GNU Lesser General Public License
bf7b9edf6b81 re-licensing the OrthancFramework to LGPL, in order to license Stone of Orthanc under LGPL
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
bf7b9edf6b81 re-licensing the OrthancFramework to LGPL, in order to license Stone of Orthanc under LGPL
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
10 * the License, or (at your option) any later version.
3893
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 *
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4119
bf7b9edf6b81 re-licensing the OrthancFramework to LGPL, in order to license Stone of Orthanc under LGPL
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
15 * Lesser General Public License for more details.
3893
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 *
4119
bf7b9edf6b81 re-licensing the OrthancFramework to LGPL, in order to license Stone of Orthanc under LGPL
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
bf7b9edf6b81 re-licensing the OrthancFramework to LGPL, in order to license Stone of Orthanc under LGPL
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
18 * License along with this program. If not, see
bf7b9edf6b81 re-licensing the OrthancFramework to LGPL, in order to license Stone of Orthanc under LGPL
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
19 * <http://www.gnu.org/licenses/>.
3893
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 **/
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 #include "../PrecompiledHeaders.h"
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 #include "MemoryBufferTranscoder.h"
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 #include "../OrthancException.h"
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 #include "FromDcmtkBridge.h"
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28
3929
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
29 #if !defined(NDEBUG) // For debugging
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
30 # include "ParsedDicomFile.h"
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
31 #endif
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
32
3893
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 namespace Orthanc
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 {
3929
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
35 static void CheckTargetSyntax(const std::string& transcoded,
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
36 const std::set<DicomTransferSyntax>& allowedSyntaxes)
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
37 {
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
38 #if !defined(NDEBUG)
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
39 // Debug mode
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
40 ParsedDicomFile parsed(transcoded);
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
41
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
42 std::string s;
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
43 DicomTransferSyntax a, b;
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
44 if (!parsed.LookupTransferSyntax(s) ||
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
45 !FromDcmtkBridge::LookupOrthancTransferSyntax(a, parsed.GetDcmtkObject()) ||
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
46 !LookupTransferSyntax(b, s) ||
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
47 a != b ||
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
48 allowedSyntaxes.find(a) == allowedSyntaxes.end())
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
49 {
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
50 throw OrthancException(
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
51 ErrorCode_Plugin,
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
52 "DEBUG - The transcoding plugin has not written to one of the allowed transfer syntaxes");
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
53 }
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
54 #endif
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
55 }
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
56
7dc5e7e0045d simplifying MemoryBufferTranscoder::Transcode() interface
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3910
diff changeset
57
3944
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
58 bool MemoryBufferTranscoder::Transcode(DicomImage& target,
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
59 DicomImage& source,
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
60 const std::set<DicomTransferSyntax>& allowedSyntaxes,
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
61 bool allowNewSopInstanceUid)
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
62 {
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
63 target.Clear();
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
64
3946
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
65 #if !defined(NDEBUG)
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
66 // Don't run this code in release mode, as it implies parsing the DICOM file
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
67 DicomTransferSyntax sourceSyntax;
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
68 if (!FromDcmtkBridge::LookupOrthancTransferSyntax(sourceSyntax, source.GetParsed()))
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
69 {
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
70 LOG(ERROR) << "Unsupport transfer syntax for transcoding";
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
71 return false;
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
72 }
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
73
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
74 const std::string sourceSopInstanceUid = GetSopInstanceUid(source.GetParsed());
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
75 #endif
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
76
3944
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
77 std::string buffer;
3951
5fe8c6d3212e removed useless information "hasSopInstanceUidChanged"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3946
diff changeset
78 if (TranscodeBuffer(buffer, source.GetBufferData(), source.GetBufferSize(),
5fe8c6d3212e removed useless information "hasSopInstanceUidChanged"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3946
diff changeset
79 allowedSyntaxes, allowNewSopInstanceUid))
3944
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
80 {
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
81 CheckTargetSyntax(buffer, allowedSyntaxes); // For debug only
3946
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
82
3944
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
83 target.AcquireBuffer(buffer);
3946
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
84
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
85 #if !defined(NDEBUG)
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
86 // Only run the sanity check in debug mode
3951
5fe8c6d3212e removed useless information "hasSopInstanceUidChanged"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3946
diff changeset
87 CheckTranscoding(target, sourceSyntax, sourceSopInstanceUid,
3946
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
88 allowedSyntaxes, allowNewSopInstanceUid);
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
89 #endif
1f33ed7f82e6 automatic test of transcoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3945
diff changeset
90
3944
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
91 return true;
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
92 }
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
93 else
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
94 {
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
95 return false;
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
96 }
aae045f802f4 preparing simplified interface for IDicomTranscoder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3930
diff changeset
97 }
3893
7a5fa8f307e9 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 }