comparison Resources/Orthanc/Core/Enumerations.cpp @ 116:a18bfe1fdd62

sync
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 04 Jan 2018 10:49:34 +0100
parents a3e8ac8b7256
children 4f3945a2b725
comparison
equal deleted inserted replaced
115:a51dee6a1515 116:a18bfe1fdd62
1 /** 1 /**
2 * Orthanc - A Lightweight, RESTful DICOM Store 2 * Orthanc - A Lightweight, RESTful DICOM Store
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium 4 * Department, University Hospital of Liege, Belgium
5 * Copyright (C) 2017 Osimis, Belgium 5 * Copyright (C) 2017-2018 Osimis S.A., Belgium
6 * 6 *
7 * This program is free software: you can redistribute it and/or 7 * This program is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as 8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation, either version 3 of the 9 * published by the Free Software Foundation, either version 3 of the
10 * License, or (at your option) any later version. 10 * License, or (at your option) any later version.
36 36
37 #include "OrthancException.h" 37 #include "OrthancException.h"
38 #include "Toolbox.h" 38 #include "Toolbox.h"
39 #include "Logging.h" 39 #include "Logging.h"
40 40
41 #include <boost/thread/mutex.hpp>
41 #include <string.h> 42 #include <string.h>
42 #include <cassert> 43 #include <cassert>
43 44
44 namespace Orthanc 45 namespace Orthanc
45 { 46 {
750 return "Grayscale (signed 16bpp)"; 751 return "Grayscale (signed 16bpp)";
751 752
752 case PixelFormat_Float32: 753 case PixelFormat_Float32:
753 return "Grayscale (float 32bpp)"; 754 return "Grayscale (float 32bpp)";
754 755
756 case PixelFormat_Grayscale32:
757 return "Grayscale (unsigned 32bpp)";
758
759 case PixelFormat_RGB48:
760 return "RGB48";
761
755 default: 762 default:
763 throw OrthancException(ErrorCode_ParameterOutOfRange);
764 }
765 }
766
767
768 const char* EnumerationToString(ModalityManufacturer manufacturer)
769 {
770 switch (manufacturer)
771 {
772 case ModalityManufacturer_Generic:
773 return "Generic";
774
775 case ModalityManufacturer_GenericNoWildcardInDates:
776 return "GenericNoWildcardInDates";
777
778 case ModalityManufacturer_GenericNoUniversalWildcard:
779 return "GenericNoUniversalWildcard";
780
781 case ModalityManufacturer_StoreScp:
782 return "StoreScp";
783
784 case ModalityManufacturer_ClearCanvas:
785 return "ClearCanvas";
786
787 case ModalityManufacturer_Dcm4Chee:
788 return "Dcm4Chee";
789
790 case ModalityManufacturer_Vitrea:
791 return "Vitrea";
792
793 default:
794 throw OrthancException(ErrorCode_ParameterOutOfRange);
795 }
796 }
797
798
799 const char* EnumerationToString(DicomRequestType type)
800 {
801 switch (type)
802 {
803 case DicomRequestType_Echo:
804 return "Echo";
805 break;
806
807 case DicomRequestType_Find:
808 return "Find";
809 break;
810
811 case DicomRequestType_Get:
812 return "Get";
813 break;
814
815 case DicomRequestType_Move:
816 return "Move";
817 break;
818
819 case DicomRequestType_Store:
820 return "Store";
821 break;
822
823 default:
824 throw OrthancException(ErrorCode_ParameterOutOfRange);
825 }
826 }
827
828
829 const char* EnumerationToString(TransferSyntax syntax)
830 {
831 switch (syntax)
832 {
833 case TransferSyntax_Deflated:
834 return "Deflated";
835
836 case TransferSyntax_Jpeg:
837 return "JPEG";
838
839 case TransferSyntax_Jpeg2000:
840 return "JPEG2000";
841
842 case TransferSyntax_JpegLossless:
843 return "JPEG Lossless";
844
845 case TransferSyntax_Jpip:
846 return "JPIP";
847
848 case TransferSyntax_Mpeg2:
849 return "MPEG2";
850
851 case TransferSyntax_Rle:
852 return "RLE";
853
854 default:
855 throw OrthancException(ErrorCode_ParameterOutOfRange);
856 }
857 }
858
859
860 const char* EnumerationToString(DicomVersion version)
861 {
862 switch (version)
863 {
864 case DicomVersion_2008:
865 return "2008";
866 break;
867
868 case DicomVersion_2017c:
869 return "2017c";
870 break;
871
872 default:
756 throw OrthancException(ErrorCode_ParameterOutOfRange); 873 throw OrthancException(ErrorCode_ParameterOutOfRange);
757 } 874 }
758 } 875 }
759 876
760 877
1125 1242
1126 throw OrthancException(ErrorCode_ParameterOutOfRange); 1243 throw OrthancException(ErrorCode_ParameterOutOfRange);
1127 } 1244 }
1128 1245
1129 1246
1247 ModalityManufacturer StringToModalityManufacturer(const std::string& manufacturer)
1248 {
1249 ModalityManufacturer result;
1250 bool obsolete = false;
1251
1252 if (manufacturer == "Generic")
1253 {
1254 return ModalityManufacturer_Generic;
1255 }
1256 else if (manufacturer == "GenericNoWildcardInDates")
1257 {
1258 return ModalityManufacturer_GenericNoWildcardInDates;
1259 }
1260 else if (manufacturer == "GenericNoUniversalWildcard")
1261 {
1262 return ModalityManufacturer_GenericNoUniversalWildcard;
1263 }
1264 else if (manufacturer == "ClearCanvas")
1265 {
1266 return ModalityManufacturer_ClearCanvas;
1267 }
1268 else if (manufacturer == "StoreScp")
1269 {
1270 return ModalityManufacturer_StoreScp;
1271 }
1272 else if (manufacturer == "Dcm4Chee")
1273 {
1274 return ModalityManufacturer_Dcm4Chee;
1275 }
1276 else if (manufacturer == "Vitrea")
1277 {
1278 return ModalityManufacturer_Vitrea;
1279 }
1280 else if (manufacturer == "AgfaImpax" ||
1281 manufacturer == "SyngoVia")
1282 {
1283 result = ModalityManufacturer_GenericNoWildcardInDates;
1284 obsolete = true;
1285 }
1286 else if (manufacturer == "EFilm2" ||
1287 manufacturer == "MedInria")
1288 {
1289 result = ModalityManufacturer_Generic;
1290 obsolete = true;
1291 }
1292 else
1293 {
1294 throw OrthancException(ErrorCode_ParameterOutOfRange);
1295 }
1296
1297 if (obsolete)
1298 {
1299 LOG(WARNING) << "The \"" << manufacturer << "\" manufacturer is obsolete since "
1300 << "Orthanc 1.3.0. To guarantee compatibility with future Orthanc "
1301 << "releases, you should replace it by \""
1302 << EnumerationToString(result)
1303 << "\" in your configuration file.";
1304 }
1305
1306 return result;
1307 }
1308
1309
1310 DicomVersion StringToDicomVersion(const std::string& version)
1311 {
1312 if (version == "2008")
1313 {
1314 return DicomVersion_2008;
1315 }
1316 else if (version == "2017c")
1317 {
1318 return DicomVersion_2017c;
1319 }
1320 else
1321 {
1322 throw OrthancException(ErrorCode_ParameterOutOfRange);
1323 }
1324 }
1325
1326
1130 unsigned int GetBytesPerPixel(PixelFormat format) 1327 unsigned int GetBytesPerPixel(PixelFormat format)
1131 { 1328 {
1132 switch (format) 1329 switch (format)
1133 { 1330 {
1134 case PixelFormat_Grayscale8: 1331 case PixelFormat_Grayscale8:
1141 case PixelFormat_RGB24: 1338 case PixelFormat_RGB24:
1142 return 3; 1339 return 3;
1143 1340
1144 case PixelFormat_RGBA32: 1341 case PixelFormat_RGBA32:
1145 case PixelFormat_BGRA32: 1342 case PixelFormat_BGRA32:
1343 case PixelFormat_Grayscale32:
1146 return 4; 1344 return 4;
1147 1345
1148 case PixelFormat_Float32: 1346 case PixelFormat_Float32:
1149 assert(sizeof(float) == 4); 1347 assert(sizeof(float) == 4);
1150 return 4; 1348 return 4;
1349
1350 case PixelFormat_RGB48:
1351 return 6;
1151 1352
1152 default: 1353 default:
1153 throw OrthancException(ErrorCode_ParameterOutOfRange); 1354 throw OrthancException(ErrorCode_ParameterOutOfRange);
1154 } 1355 }
1155 } 1356 }
1223 } 1424 }
1224 else if (s == "ISO_IR 13" || s == "ISO 2022 IR 13") 1425 else if (s == "ISO_IR 13" || s == "ISO 2022 IR 13")
1225 { 1426 {
1226 encoding = Encoding_Japanese; 1427 encoding = Encoding_Japanese;
1227 } 1428 }
1228 else if (s == "GB18030") 1429 else if (s == "GB18030" || s == "GBK")
1229 { 1430 {
1431 /**
1432 * According to tumashu@163.com, "In China, many dicom file's
1433 * 0008,0005 tag is set as "GBK", instead of "GB18030", GBK is a
1434 * subset of GB18030, and which is used frequently in China,
1435 * suggest support it."
1436 * https://groups.google.com/d/msg/orthanc-users/WMM8LMbjpUc/02-1f_yFCgAJ
1437 **/
1230 encoding = Encoding_Chinese; 1438 encoding = Encoding_Chinese;
1231 } 1439 }
1232 /* 1440 /*
1233 else if (s == "ISO 2022 IR 149") 1441 else if (s == "ISO 2022 IR 149")
1234 { 1442 {
1473 1681
1474 case ValueRepresentation_NotSupported: 1682 case ValueRepresentation_NotSupported:
1475 default: 1683 default:
1476 throw OrthancException(ErrorCode_ParameterOutOfRange); 1684 throw OrthancException(ErrorCode_ParameterOutOfRange);
1477 } 1685 }
1478 } 1686 }
1687
1688
1689 static boost::mutex defaultEncodingMutex_; // Should not be necessary
1690 static Encoding defaultEncoding_ = ORTHANC_DEFAULT_DICOM_ENCODING;
1691
1692 Encoding GetDefaultDicomEncoding()
1693 {
1694 boost::mutex::scoped_lock lock(defaultEncodingMutex_);
1695 return defaultEncoding_;
1696 }
1697
1698 void SetDefaultDicomEncoding(Encoding encoding)
1699 {
1700 std::string name = EnumerationToString(encoding);
1701
1702 {
1703 boost::mutex::scoped_lock lock(defaultEncodingMutex_);
1704 defaultEncoding_ = encoding;
1705 }
1706
1707 LOG(INFO) << "Default encoding for DICOM was changed to: " << name;
1708 }
1709
1479 } 1710 }