annotate OrthancFramework/Resources/Graveyard/TestTranscoding.cpp @ 5842:08e47734328e find-refactoring

StatelessDatabaseOperations: reimplementing GetAllUuids() and GetAllMetadata()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 29 Oct 2024 12:46:11 +0000
parents f7adfb22e20e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4120
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
1 /**
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
4 * Department, University Hospital of Liege, Belgium
5640
f7adfb22e20e updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5485
diff changeset
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium
f7adfb22e20e updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5485
diff changeset
6 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium
5485
48b8dae6dc77 upgrade to year 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5185
diff changeset
7 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
4120
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
8 *
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
9 * This program is free software: you can redistribute it and/or
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
10 * modify it under the terms of the GNU Lesser General Public License
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
11 * as published by the Free Software Foundation, either version 3 of
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
12 * the License, or (at your option) any later version.
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
13 *
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
14 * This program is distributed in the hope that it will be useful, but
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
17 * Lesser General Public License for more details.
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
18 *
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
19 * You should have received a copy of the GNU Lesser General Public
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
20 * License along with this program. If not, see
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
21 * <http://www.gnu.org/licenses/>.
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
22 **/
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
23
304842a0d152 adding missing license headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
24
3885
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
25 bool FromDcmtkBridge::SaveToMemoryBuffer(std::string& buffer,
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
26 DcmFileFormat& dicom,
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
27 DicomTransferSyntax syntax)
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
28 {
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
29 E_TransferSyntax xfer;
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
30 if (!LookupDcmtkTransferSyntax(xfer, syntax))
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
31 {
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
32 return false;
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
33 }
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
34 else if (!dicom.validateMetaInfo(xfer).good())
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
35 {
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
36 throw OrthancException(ErrorCode_InternalError,
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
37 "Cannot setup the transfer syntax to write a DICOM instance");
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
38 }
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
39 else
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
40 {
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
41 return SaveToMemoryBufferInternal(buffer, dicom, xfer);
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
42 }
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
43 }
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
44
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
45
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
46 bool FromDcmtkBridge::SaveToMemoryBuffer(std::string& buffer,
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
47 DcmFileFormat& dicom)
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
48 {
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
49 E_TransferSyntax xfer = dicom.getDataset()->getCurrentXfer();
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
50 if (xfer == EXS_Unknown)
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
51 {
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
52 throw OrthancException(ErrorCode_InternalError,
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
53 "Cannot write a DICOM instance with unknown transfer syntax");
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
54 }
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
55 else if (!dicom.validateMetaInfo(xfer).good())
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
56 {
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
57 throw OrthancException(ErrorCode_InternalError,
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
58 "Cannot setup the transfer syntax to write a DICOM instance");
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
59 }
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
60 else
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
61 {
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
62 return SaveToMemoryBufferInternal(buffer, dicom, xfer);
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
63 }
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
64 }
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
65
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
66
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
67
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
68
e23026566536 removed unused functions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3884
diff changeset
69
3884
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 #include <dcmtk/dcmdata/dcostrmb.h>
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71 #include <dcmtk/dcmdata/dcpixel.h>
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 #include <dcmtk/dcmdata/dcpxitem.h>
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 #include "../Core/DicomParsing/Internals/DicomFrameIndex.h"
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76 namespace Orthanc
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 class IParsedDicomImage : public boost::noncopyable
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 public:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 virtual ~IParsedDicomImage()
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 virtual DicomTransferSyntax GetTransferSyntax() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87 virtual std::string GetSopClassUid() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89 virtual std::string GetSopInstanceUid() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 virtual unsigned int GetFramesCount() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93 // Can return NULL, for compressed transfer syntaxes
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 virtual ImageAccessor* GetUncompressedFrame(unsigned int frame) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 virtual void GetCompressedFrame(std::string& target,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97 unsigned int frame) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 virtual void WriteToMemoryBuffer(std::string& target) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
100 };
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
103 class IDicomImageReader : public boost::noncopyable
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105 public:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 virtual ~IDicomImageReader()
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
108 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110 virtual IParsedDicomImage* Read(const void* data,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111 size_t size) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113 virtual IParsedDicomImage* Transcode(const void* data,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
114 size_t size,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115 DicomTransferSyntax syntax,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 bool allowNewSopInstanceUid) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117 };
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 class DcmtkImageReader : public IDicomImageReader
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 private:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123 class Image : public IParsedDicomImage
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125 private:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126 std::unique_ptr<DcmFileFormat> dicom_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127 std::unique_ptr<DicomFrameIndex> index_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128 DicomTransferSyntax transferSyntax_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 std::string sopClassUid_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 std::string sopInstanceUid_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 static std::string GetStringTag(DcmDataset& dataset,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133 const DcmTagKey& tag)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
134 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 const char* value = NULL;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 if (!dataset.findAndGetString(tag, value).good() ||
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 value == NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140 throw OrthancException(ErrorCode_BadFileFormat,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
141 "Missing SOP class/instance UID in DICOM instance");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
142 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
143 else
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 return std::string(value);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
147 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
148
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
149 public:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150 Image(DcmFileFormat* dicom,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151 DicomTransferSyntax syntax) :
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152 dicom_(dicom),
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153 transferSyntax_(syntax)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 if (dicom == NULL ||
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 dicom_->getDataset() == NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158 throw OrthancException(ErrorCode_NullPointer);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
161 DcmDataset& dataset = *dicom_->getDataset();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162 index_.reset(new DicomFrameIndex(dataset));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164 sopClassUid_ = GetStringTag(dataset, DCM_SOPClassUID);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165 sopInstanceUid_ = GetStringTag(dataset, DCM_SOPInstanceUID);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 virtual DicomTransferSyntax GetTransferSyntax() ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170 return transferSyntax_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 virtual std::string GetSopClassUid() ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175 return sopClassUid_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
177
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
178 virtual std::string GetSopInstanceUid() ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
180 return sopInstanceUid_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
181 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183 virtual unsigned int GetFramesCount() ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 return index_->GetFramesCount();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188 virtual void WriteToMemoryBuffer(std::string& target) ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190 assert(dicom_.get() != NULL);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
191 if (!FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom_, transferSyntax_))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
192 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193 throw OrthancException(ErrorCode_InternalError,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
194 "Cannot write the DICOM instance to a memory buffer");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
195 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
196 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
197
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
198 virtual ImageAccessor* GetUncompressedFrame(unsigned int frame) ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
200 assert(dicom_.get() != NULL &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
201 dicom_->getDataset() != NULL);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202 return DicomImageDecoder::Decode(*dicom_->getDataset(), frame);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
203 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
204
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 virtual void GetCompressedFrame(std::string& target,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
206 unsigned int frame) ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
207 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
208 assert(index_.get() != NULL);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209 index_->GetRawFrame(target, frame);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
210 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
211 };
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
212
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
213 unsigned int lossyQuality_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
214
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 static DicomTransferSyntax DetectTransferSyntax(DcmFileFormat& dicom)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217 if (dicom.getDataset() == NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 throw OrthancException(ErrorCode_InternalError);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
220 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
221
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
222 DcmDataset& dataset = *dicom.getDataset();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
223
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
224 E_TransferSyntax xfer = dataset.getCurrentXfer();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
225 if (xfer == EXS_Unknown)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
226 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
227 dataset.updateOriginalXfer();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
228 xfer = dataset.getCurrentXfer();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
229 if (xfer == EXS_Unknown)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
230 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
231 throw OrthancException(ErrorCode_BadFileFormat,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
232 "Cannot determine the transfer syntax of the DICOM instance");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
233 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
234 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
235
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
236 DicomTransferSyntax syntax;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
237 if (FromDcmtkBridge::LookupOrthancTransferSyntax(syntax, xfer))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
238 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
239 return syntax;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
240 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
241 else
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
242 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
243 throw OrthancException(
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
244 ErrorCode_BadFileFormat,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
245 "Unsupported transfer syntax: " + boost::lexical_cast<std::string>(xfer));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
246 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
247 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
248
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
249
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
250 static uint16_t GetBitsStored(DcmFileFormat& dicom)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
251 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
252 if (dicom.getDataset() == NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
253 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
254 throw OrthancException(ErrorCode_InternalError);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
255 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
256
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
257 uint16_t bitsStored;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
258 if (dicom.getDataset()->findAndGetUint16(DCM_BitsStored, bitsStored).good())
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
259 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
260 return bitsStored;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
261 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
262 else
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
263 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
264 throw OrthancException(ErrorCode_BadFileFormat,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
265 "Missing \"Bits Stored\" tag in DICOM instance");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
266 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
267 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
268
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
269
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
270 public:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
271 DcmtkImageReader() :
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
272 lossyQuality_(90)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
273 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
274 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
275
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
276 void SetLossyQuality(unsigned int quality)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
277 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
278 if (quality <= 0 ||
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
279 quality > 100)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
280 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
281 throw OrthancException(ErrorCode_ParameterOutOfRange);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
282 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
283 else
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
284 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285 lossyQuality_ = quality;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
286 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
287 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
288
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
289 unsigned int GetLossyQuality() const
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
291 return lossyQuality_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
292 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
294 virtual IParsedDicomImage* Read(const void* data,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
295 size_t size)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
296 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
297 std::unique_ptr<DcmFileFormat> dicom(FromDcmtkBridge::LoadFromMemoryBuffer(data, size));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
298 if (dicom.get() == NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
299 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
300 throw OrthancException(ErrorCode_BadFileFormat);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
301 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
302
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
303 DicomTransferSyntax transferSyntax = DetectTransferSyntax(*dicom);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
304
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
305 return new Image(dicom.release(), transferSyntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
306 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
308 virtual IParsedDicomImage* Transcode(const void* data,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309 size_t size,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
310 DicomTransferSyntax syntax,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
311 bool allowNewSopInstanceUid)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313 std::unique_ptr<DcmFileFormat> dicom(FromDcmtkBridge::LoadFromMemoryBuffer(data, size));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314 if (dicom.get() == NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
316 throw OrthancException(ErrorCode_BadFileFormat);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
318
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
319 const uint16_t bitsStored = GetBitsStored(*dicom);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
320
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321 if (syntax == DetectTransferSyntax(*dicom))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
323 // No transcoding is needed
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
324 return new Image(dicom.release(), syntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
325 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
326
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
327 if (syntax == DicomTransferSyntax_LittleEndianImplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
328 FromDcmtkBridge::Transcode(*dicom, DicomTransferSyntax_LittleEndianImplicit, NULL))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
329 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330 return new Image(dicom.release(), syntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
331 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
332
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
333 if (syntax == DicomTransferSyntax_LittleEndianExplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
334 FromDcmtkBridge::Transcode(*dicom, DicomTransferSyntax_LittleEndianExplicit, NULL))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
335 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
336 return new Image(dicom.release(), syntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
337 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
338
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
339 if (syntax == DicomTransferSyntax_BigEndianExplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
340 FromDcmtkBridge::Transcode(*dicom, DicomTransferSyntax_BigEndianExplicit, NULL))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
341 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
342 return new Image(dicom.release(), syntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
343 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
344
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
345 if (syntax == DicomTransferSyntax_DeflatedLittleEndianExplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
346 FromDcmtkBridge::Transcode(*dicom, DicomTransferSyntax_DeflatedLittleEndianExplicit, NULL))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
347 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
348 return new Image(dicom.release(), syntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
349 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
350
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
351 #if ORTHANC_ENABLE_JPEG == 1
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
352 if (syntax == DicomTransferSyntax_JPEGProcess1 &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
353 allowNewSopInstanceUid &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
354 bitsStored == 8)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
355 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
356 DJ_RPLossy rpLossy(lossyQuality_);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
357
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
358 if (FromDcmtkBridge::Transcode(*dicom, DicomTransferSyntax_JPEGProcess1, &rpLossy))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
359 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
360 return new Image(dicom.release(), syntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
361 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
362 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
363 #endif
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
364
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
365 #if ORTHANC_ENABLE_JPEG == 1
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
366 if (syntax == DicomTransferSyntax_JPEGProcess2_4 &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
367 allowNewSopInstanceUid &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
368 bitsStored <= 12)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
369 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
370 DJ_RPLossy rpLossy(lossyQuality_);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
371 if (FromDcmtkBridge::Transcode(*dicom, DicomTransferSyntax_JPEGProcess2_4, &rpLossy))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
372 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
373 return new Image(dicom.release(), syntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
374 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
375 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
376 #endif
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
377
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
378 //LOG(INFO) << "Unable to transcode DICOM image using the built-in reader";
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
379 return NULL;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
380 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
381 };
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
382
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
383
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
384
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
385 class IDicomTranscoder1 : public boost::noncopyable
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
386 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
387 public:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
388 virtual ~IDicomTranscoder1()
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
389 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
390 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
391
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
392 virtual DcmFileFormat& GetDicom() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
393
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
394 virtual DicomTransferSyntax GetTransferSyntax() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
395
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
396 virtual std::string GetSopClassUid() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
397
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
398 virtual std::string GetSopInstanceUid() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
399
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
400 virtual unsigned int GetFramesCount() = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
401
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
402 virtual ImageAccessor* DecodeFrame(unsigned int frame) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
403
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
404 virtual void GetCompressedFrame(std::string& target,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
405 unsigned int frame) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
406
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
407 // NB: Transcoding can change the value of "GetSopInstanceUid()"
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
408 // and "GetTransferSyntax()" if lossy compression is applied
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
409 virtual bool Transcode(std::string& target,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410 DicomTransferSyntax syntax,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
411 bool allowNewSopInstanceUid) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
412
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
413 virtual void WriteToMemoryBuffer(std::string& target) = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
414 };
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
415
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
416
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
417 class DcmtkTranscoder2 : public IDicomTranscoder1
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
418 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
419 private:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
420 std::unique_ptr<DcmFileFormat> dicom_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
421 std::unique_ptr<DicomFrameIndex> index_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
422 DicomTransferSyntax transferSyntax_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
423 std::string sopClassUid_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
424 std::string sopInstanceUid_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
425 uint16_t bitsStored_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
426 unsigned int lossyQuality_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
427
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
428 static std::string GetStringTag(DcmDataset& dataset,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
429 const DcmTagKey& tag)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
430 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
431 const char* value = NULL;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
432
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
433 if (!dataset.findAndGetString(tag, value).good() ||
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
434 value == NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
435 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
436 throw OrthancException(ErrorCode_BadFileFormat,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
437 "Missing SOP class/instance UID in DICOM instance");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
438 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
439 else
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
440 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
441 return std::string(value);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
442 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
443 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
444
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
445 void Setup(DcmFileFormat* dicom)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
446 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
447 lossyQuality_ = 90;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
448
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
449 dicom_.reset(dicom);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
450
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
451 if (dicom == NULL ||
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
452 dicom_->getDataset() == NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
453 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
454 throw OrthancException(ErrorCode_NullPointer);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
455 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
456
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
457 DcmDataset& dataset = *dicom_->getDataset();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
458 index_.reset(new DicomFrameIndex(dataset));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
459
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
460 E_TransferSyntax xfer = dataset.getCurrentXfer();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
461 if (xfer == EXS_Unknown)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
462 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
463 dataset.updateOriginalXfer();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
464 xfer = dataset.getCurrentXfer();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
465 if (xfer == EXS_Unknown)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
466 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
467 throw OrthancException(ErrorCode_BadFileFormat,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
468 "Cannot determine the transfer syntax of the DICOM instance");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
469 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
470 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
471
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
472 if (!FromDcmtkBridge::LookupOrthancTransferSyntax(transferSyntax_, xfer))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
473 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
474 throw OrthancException(
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
475 ErrorCode_BadFileFormat,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
476 "Unsupported transfer syntax: " + boost::lexical_cast<std::string>(xfer));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
477 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
478
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
479 if (!dataset.findAndGetUint16(DCM_BitsStored, bitsStored_).good())
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
480 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
481 throw OrthancException(ErrorCode_BadFileFormat,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
482 "Missing \"Bits Stored\" tag in DICOM instance");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
483 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
484
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
485 sopClassUid_ = GetStringTag(dataset, DCM_SOPClassUID);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
486 sopInstanceUid_ = GetStringTag(dataset, DCM_SOPInstanceUID);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
487 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
488
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
489 public:
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
490 DcmtkTranscoder2(DcmFileFormat* dicom) // Takes ownership
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
491 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
492 Setup(dicom);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
493 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
494
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
495 DcmtkTranscoder2(const void* dicom,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
496 size_t size)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
497 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
498 Setup(FromDcmtkBridge::LoadFromMemoryBuffer(dicom, size));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
499 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
500
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
501 void SetLossyQuality(unsigned int quality)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
502 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
503 if (quality <= 0 ||
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
504 quality > 100)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
505 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
506 throw OrthancException(ErrorCode_ParameterOutOfRange);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
507 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
508 else
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
509 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
510 lossyQuality_ = quality;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
511 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
512 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
513
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
514 unsigned int GetLossyQuality() const
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
515 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
516 return lossyQuality_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
517 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
518
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
519 unsigned int GetBitsStored() const
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
520 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
521 return bitsStored_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
522 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
523
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
524 virtual DcmFileFormat& GetDicom()
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
525 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
526 assert(dicom_ != NULL);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
527 return *dicom_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
528 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
529
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
530 virtual DicomTransferSyntax GetTransferSyntax() ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
531 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
532 return transferSyntax_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
533 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
534
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
535 virtual std::string GetSopClassUid() ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
536 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
537 return sopClassUid_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
538 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
539
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
540 virtual std::string GetSopInstanceUid() ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
541 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
542 return sopInstanceUid_;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
543 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
544
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
545 virtual unsigned int GetFramesCount() ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
546 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
547 return index_->GetFramesCount();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
548 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
549
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
550 virtual void WriteToMemoryBuffer(std::string& target) ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
551 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
552 if (!FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom_))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
553 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
554 throw OrthancException(ErrorCode_InternalError,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
555 "Cannot write the DICOM instance to a memory buffer");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
556 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
557 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
558
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
559 virtual ImageAccessor* DecodeFrame(unsigned int frame) ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
560 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
561 assert(dicom_->getDataset() != NULL);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
562 return DicomImageDecoder::Decode(*dicom_->getDataset(), frame);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
563 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
564
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
565 virtual void GetCompressedFrame(std::string& target,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
566 unsigned int frame) ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
567 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
568 index_->GetRawFrame(target, frame);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
569 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
570
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
571 virtual bool Transcode(std::string& target,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
572 DicomTransferSyntax syntax,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
573 bool allowNewSopInstanceUid) ORTHANC_OVERRIDE
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
574 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
575 assert(dicom_ != NULL &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
576 dicom_->getDataset() != NULL);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
577
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
578 if (syntax == GetTransferSyntax())
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
579 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
580 printf("NO TRANSCODING\n");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
581
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
582 // No change in the transfer syntax => simply serialize the current dataset
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
583 WriteToMemoryBuffer(target);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
584 return true;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
585 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
586
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
587 printf(">> %d\n", bitsStored_);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
588
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
589 if (syntax == DicomTransferSyntax_LittleEndianImplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
590 FromDcmtkBridge::Transcode(*dicom_, syntax, NULL) &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
591 FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom_, syntax))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
592 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
593 transferSyntax_ = DicomTransferSyntax_LittleEndianImplicit;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
594 return true;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
595 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
596
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
597 if (syntax == DicomTransferSyntax_LittleEndianExplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
598 FromDcmtkBridge::Transcode(*dicom_, syntax, NULL) &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
599 FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom_, syntax))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
600 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
601 transferSyntax_ = DicomTransferSyntax_LittleEndianExplicit;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
602 return true;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
603 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
604
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
605 if (syntax == DicomTransferSyntax_BigEndianExplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
606 FromDcmtkBridge::Transcode(*dicom_, syntax, NULL) &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
607 FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom_, syntax))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
608 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
609 transferSyntax_ = DicomTransferSyntax_BigEndianExplicit;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
610 return true;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
611 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
612
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
613 if (syntax == DicomTransferSyntax_DeflatedLittleEndianExplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
614 FromDcmtkBridge::Transcode(*dicom_, syntax, NULL) &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
615 FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom_, syntax))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
616 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
617 transferSyntax_ = DicomTransferSyntax_DeflatedLittleEndianExplicit;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
618 return true;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
619 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
620
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
621 #if ORTHANC_ENABLE_JPEG == 1
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
622 if (syntax == DicomTransferSyntax_JPEGProcess1 &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
623 allowNewSopInstanceUid &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
624 GetBitsStored() == 8)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
625 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
626 DJ_RPLossy rpLossy(lossyQuality_);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
627
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
628 if (FromDcmtkBridge::Transcode(*dicom_, syntax, &rpLossy) &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
629 FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom_, syntax))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
630 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
631 transferSyntax_ = DicomTransferSyntax_JPEGProcess1;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
632 sopInstanceUid_ = GetStringTag(*dicom_->getDataset(), DCM_SOPInstanceUID);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
633 return true;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
634 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
635 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
636 #endif
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
637
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
638 #if ORTHANC_ENABLE_JPEG == 1
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
639 if (syntax == DicomTransferSyntax_JPEGProcess2_4 &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
640 allowNewSopInstanceUid &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
641 GetBitsStored() <= 12)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
642 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
643 DJ_RPLossy rpLossy(lossyQuality_);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
644 if (FromDcmtkBridge::Transcode(*dicom_, syntax, &rpLossy) &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
645 FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom_, syntax))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
646 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
647 transferSyntax_ = DicomTransferSyntax_JPEGProcess2_4;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
648 sopInstanceUid_ = GetStringTag(*dicom_->getDataset(), DCM_SOPInstanceUID);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
649 return true;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
650 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
651 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
652 #endif
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
653
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
654 return false;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
655 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
656 };
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
657 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
658
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
659
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
660
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
661
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
662 #include <boost/filesystem.hpp>
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
663
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
664
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
665 static void TestFile(const std::string& path)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
666 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
667 static unsigned int count = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
668 count++;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
669
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
670
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
671 printf("** %s\n", path.c_str());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
672
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
673 std::string s;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
674 SystemToolbox::ReadFile(s, path);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
675
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
676 Orthanc::DcmtkTranscoder2 transcoder(s.c_str(), s.size());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
677
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
678 /*if (transcoder.GetBitsStored() != 8) // TODO
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
679 return; */
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
680
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
681 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
682 char buf[1024];
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
683 sprintf(buf, "/tmp/source-%06d.dcm", count);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
684 printf(">> %s\n", buf);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
685 Orthanc::SystemToolbox::WriteFile(s, buf);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
686 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
687
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
688 printf("[%s] [%s] [%s] %d %d\n", GetTransferSyntaxUid(transcoder.GetTransferSyntax()),
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
689 transcoder.GetSopClassUid().c_str(), transcoder.GetSopInstanceUid().c_str(),
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
690 transcoder.GetFramesCount(), transcoder.GetTransferSyntax());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
691
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
692 for (size_t i = 0; i < transcoder.GetFramesCount(); i++)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
693 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
694 std::string f;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
695 transcoder.GetCompressedFrame(f, i);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
696
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
697 if (i == 0)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
698 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
699 char buf[1024];
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
700 sprintf(buf, "/tmp/frame-%06d.raw", count);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
701 printf(">> %s\n", buf);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
702 Orthanc::SystemToolbox::WriteFile(f, buf);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
703 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
704 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
705
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
706 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
707 std::string t;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
708 transcoder.WriteToMemoryBuffer(t);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
709
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
710 Orthanc::DcmtkTranscoder2 transcoder2(t.c_str(), t.size());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
711 printf(">> %d %d ; %lu bytes\n", transcoder.GetTransferSyntax(), transcoder2.GetTransferSyntax(), t.size());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
712 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
713
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
714 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
715 std::string a = transcoder.GetSopInstanceUid();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
716 DicomTransferSyntax b = transcoder.GetTransferSyntax();
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
717
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
718 DicomTransferSyntax syntax = DicomTransferSyntax_JPEGProcess2_4;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
719 //DicomTransferSyntax syntax = DicomTransferSyntax_LittleEndianExplicit;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
720
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
721 std::string t;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
722 bool ok = transcoder.Transcode(t, syntax, true);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
723 printf("Transcoding: %d\n", ok);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
724
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
725 if (ok)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
726 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
727 printf("[%s] => [%s]\n", a.c_str(), transcoder.GetSopInstanceUid().c_str());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
728 printf("[%s] => [%s]\n", GetTransferSyntaxUid(b),
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
729 GetTransferSyntaxUid(transcoder.GetTransferSyntax()));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
730
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
731 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
732 char buf[1024];
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
733 sprintf(buf, "/tmp/transcoded-%06d.dcm", count);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
734 printf(">> %s\n", buf);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
735 Orthanc::SystemToolbox::WriteFile(t, buf);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
736 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
737
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
738 Orthanc::DcmtkTranscoder2 transcoder2(t.c_str(), t.size());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
739 printf(" => transcoded transfer syntax %d ; %lu bytes\n", transcoder2.GetTransferSyntax(), t.size());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
740 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
741 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
742
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
743 printf("\n");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
744 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
745
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
746 TEST(Toto, DISABLED_Transcode)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
747 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
748 //OFLog::configure(OFLogger::DEBUG_LOG_LEVEL);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
749
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
750 if (1)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
751 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
752 const char* const PATH = "/home/jodogne/Subversion/orthanc-tests/Database/TransferSyntaxes";
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
753
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
754 for (boost::filesystem::directory_iterator it(PATH);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
755 it != boost::filesystem::directory_iterator(); ++it)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
756 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
757 if (boost::filesystem::is_regular_file(it->status()))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
758 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
759 TestFile(it->path().string());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
760 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
761 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
762 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
763
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
764 if (0)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
765 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
766 TestFile("/home/jodogne/Subversion/orthanc-tests/Database/Multiframe.dcm");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
767 TestFile("/home/jodogne/Subversion/orthanc-tests/Database/Issue44/Monochrome1-Jpeg.dcm");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
768 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
769
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
770 if (0)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
771 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
772 TestFile("/home/jodogne/Subversion/orthanc-tests/Database/TransferSyntaxes/1.2.840.10008.1.2.1.dcm");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
773 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
774 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
775
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
776
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
777 TEST(Toto, DISABLED_Transcode2)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
778 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
779 for (int i = 0; i <= DicomTransferSyntax_XML; i++)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
780 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
781 DicomTransferSyntax a = (DicomTransferSyntax) i;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
782
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
783 std::string path = ("/home/jodogne/Subversion/orthanc-tests/Database/TransferSyntaxes/" +
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
784 std::string(GetTransferSyntaxUid(a)) + ".dcm");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
785 if (Orthanc::SystemToolbox::IsRegularFile(path))
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
786 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
787 printf("\n======= %s\n", GetTransferSyntaxUid(a));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
788
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
789 std::string source;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
790 Orthanc::SystemToolbox::ReadFile(source, path);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
791
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
792 DcmtkImageReader reader;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
793
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
794 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
795 std::unique_ptr<IParsedDicomImage> image(
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
796 reader.Read(source.c_str(), source.size()));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
797 ASSERT_TRUE(image.get() != NULL);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
798 ASSERT_EQ(a, image->GetTransferSyntax());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
799
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
800 std::string target;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
801 image->WriteToMemoryBuffer(target);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
802 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
803
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
804 for (int j = 0; j <= DicomTransferSyntax_XML; j++)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
805 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
806 DicomTransferSyntax b = (DicomTransferSyntax) j;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
807 //if (a == b) continue;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
808
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
809 std::unique_ptr<IParsedDicomImage> image(
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
810 reader.Transcode(source.c_str(), source.size(), b, true));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
811 if (image.get() != NULL)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
812 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
813 printf("[%s] -> [%s]\n", GetTransferSyntaxUid(a), GetTransferSyntaxUid(b));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
814
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
815 std::string target;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
816 image->WriteToMemoryBuffer(target);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
817
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
818 char buf[1024];
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
819 sprintf(buf, "/tmp/%s-%s.dcm", GetTransferSyntaxUid(a), GetTransferSyntaxUid(b));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
820
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
821 SystemToolbox::WriteFile(target, buf);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
822 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
823 else if (a != DicomTransferSyntax_JPEG2000 &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
824 a != DicomTransferSyntax_JPEG2000LosslessOnly)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
825 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
826 ASSERT_TRUE(b != DicomTransferSyntax_LittleEndianImplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
827 b != DicomTransferSyntax_LittleEndianExplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
828 b != DicomTransferSyntax_BigEndianExplicit &&
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
829 b != DicomTransferSyntax_DeflatedLittleEndianExplicit);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
830 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
831 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
832 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
833 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
834 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
835
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
836
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
837 #include "../Core/DicomNetworking/DicomAssociation.h"
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
838 #include "../Core/DicomNetworking/DicomControlUserConnection.h"
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
839 #include "../Core/DicomNetworking/DicomStoreUserConnection.h"
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
840
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
841 TEST(Toto, DISABLED_DicomAssociation)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
842 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
843 DicomAssociationParameters params;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
844 params.SetLocalApplicationEntityTitle("ORTHANC");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
845 params.SetRemoteApplicationEntityTitle("PACS");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
846 params.SetRemotePort(2001);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
847
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
848 #if 0
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
849 DicomAssociation assoc;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
850 assoc.ProposeGenericPresentationContext(UID_StorageCommitmentPushModelSOPClass);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
851 assoc.ProposeGenericPresentationContext(UID_VerificationSOPClass);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
852 assoc.ProposePresentationContext(UID_ComputedRadiographyImageStorage,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
853 DicomTransferSyntax_JPEGProcess1);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
854 assoc.ProposePresentationContext(UID_ComputedRadiographyImageStorage,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
855 DicomTransferSyntax_JPEGProcess2_4);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
856 assoc.ProposePresentationContext(UID_ComputedRadiographyImageStorage,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
857 DicomTransferSyntax_JPEG2000);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
858
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
859 assoc.Open(params);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
860
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
861 int presID = ASC_findAcceptedPresentationContextID(&assoc.GetDcmtkAssociation(), UID_ComputedRadiographyImageStorage);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
862 printf(">> %d\n", presID);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
863
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
864 std::map<DicomTransferSyntax, uint8_t> pc;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
865 printf(">> %d\n", assoc.LookupAcceptedPresentationContext(pc, UID_ComputedRadiographyImageStorage));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
866
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
867 for (std::map<DicomTransferSyntax, uint8_t>::const_iterator
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
868 it = pc.begin(); it != pc.end(); ++it)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
869 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
870 printf("[%s] => %d\n", GetTransferSyntaxUid(it->first), it->second);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
871 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
872 #else
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
873 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
874 DicomControlUserConnection assoc(params);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
875
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
876 try
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
877 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
878 printf(">> %d\n", assoc.Echo());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
879 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
880 catch (OrthancException&)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
881 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
882 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
883 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
884
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
885 params.SetRemoteApplicationEntityTitle("PACS");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
886 params.SetRemotePort(2000);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
887
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
888 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
889 DicomControlUserConnection assoc(params);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
890 printf(">> %d\n", assoc.Echo());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
891 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
892
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
893 #endif
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
894 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
895
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
896 static void TestTranscode(DicomStoreUserConnection& scu,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
897 const std::string& sopClassUid,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
898 DicomTransferSyntax transferSyntax)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
899 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
900 std::set<DicomTransferSyntax> accepted;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
901
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
902 scu.LookupTranscoding(accepted, sopClassUid, transferSyntax);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
903 if (accepted.empty())
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
904 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
905 throw OrthancException(ErrorCode_NetworkProtocol,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
906 "The SOP class is not supported by the remote modality");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
907 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
908
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
909 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
910 unsigned int count = 0;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
911 for (std::set<DicomTransferSyntax>::const_iterator
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
912 it = accepted.begin(); it != accepted.end(); ++it)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
913 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
914 LOG(INFO) << "available for transcoding " << (count++) << ": " << sopClassUid
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
915 << " / " << GetTransferSyntaxUid(*it);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
916 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
917 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
918
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
919 if (accepted.find(transferSyntax) != accepted.end())
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
920 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
921 printf("**** OK, without transcoding !! [%s]\n", GetTransferSyntaxUid(transferSyntax));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
922 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
923 else
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
924 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
925 // Transcoding - only in Orthanc >= 1.7.0
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
926
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
927 const DicomTransferSyntax uncompressed[] = {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
928 DicomTransferSyntax_LittleEndianImplicit, // Default transfer syntax
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
929 DicomTransferSyntax_LittleEndianExplicit,
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
930 DicomTransferSyntax_BigEndianExplicit
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
931 };
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
932
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
933 bool found = false;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
934 for (size_t i = 0; i < 3; i++)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
935 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
936 if (accepted.find(uncompressed[i]) != accepted.end())
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
937 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
938 printf("**** TRANSCODING to %s\n", GetTransferSyntaxUid(uncompressed[i]));
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
939 found = true;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
940 break;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
941 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
942 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
943
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
944 if (!found)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
945 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
946 printf("**** KO KO KO\n");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
947 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
948 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
949 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
950
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
951
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
952 TEST(Toto, DISABLED_Store)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
953 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
954 DicomAssociationParameters params;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
955 params.SetLocalApplicationEntityTitle("ORTHANC");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
956 params.SetRemoteApplicationEntityTitle("STORESCP");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
957 params.SetRemotePort(2000);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
958
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
959 DicomStoreUserConnection assoc(params);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
960 assoc.RegisterStorageClass(UID_MRImageStorage, DicomTransferSyntax_JPEGProcess1);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
961 assoc.RegisterStorageClass(UID_MRImageStorage, DicomTransferSyntax_JPEGProcess2_4);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
962 //assoc.RegisterStorageClass(UID_MRImageStorage, DicomTransferSyntax_LittleEndianExplicit);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
963
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
964 //assoc.SetUncompressedSyntaxesProposed(false); // Necessary for transcoding
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
965 assoc.SetCommonClassesProposed(false);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
966 assoc.SetRetiredBigEndianProposed(true);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
967 TestTranscode(assoc, UID_MRImageStorage, DicomTransferSyntax_LittleEndianExplicit);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
968 TestTranscode(assoc, UID_MRImageStorage, DicomTransferSyntax_JPEG2000);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
969 TestTranscode(assoc, UID_MRImageStorage, DicomTransferSyntax_JPEG2000);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
970 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
971
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
972
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
973 TEST(Toto, DISABLED_Store2)
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
974 {
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
975 DicomAssociationParameters params;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
976 params.SetLocalApplicationEntityTitle("ORTHANC");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
977 params.SetRemoteApplicationEntityTitle("STORESCP");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
978 params.SetRemotePort(2000);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
979
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
980 DicomStoreUserConnection assoc(params);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
981 //assoc.SetCommonClassesProposed(false);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
982 assoc.SetRetiredBigEndianProposed(true);
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
983
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
984 std::string s;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
985 Orthanc::SystemToolbox::ReadFile(s, "/tmp/i/" + std::string(GetTransferSyntaxUid(DicomTransferSyntax_BigEndianExplicit)) +".dcm");
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
986
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
987 std::string c, i;
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
988 assoc.Store(c, i, s.c_str(), s.size());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
989 printf("[%s] [%s]\n", c.c_str(), i.c_str());
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
990 }
83061cdc7703 moving old tests to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
991