# HG changeset patch # User Sebastien Jodogne # Date 1480432034 -3600 # Node ID c4b3259c8bce2d0d7147b0eb23f8d7faa4686223 # Parent 7cfc2e0383b3f3c8b7d0848e6f392573977abccd New metadata automatically computed at the instance level: "TransferSyntax" diff -r 7cfc2e0383b3 -r c4b3259c8bce Core/DicomFormat/DicomTag.h --- a/Core/DicomFormat/DicomTag.h Tue Nov 29 15:39:46 2016 +0100 +++ b/Core/DicomFormat/DicomTag.h Tue Nov 29 16:07:14 2016 +0100 @@ -100,6 +100,7 @@ static const DicomTag DICOM_TAG_SERIES_INSTANCE_UID(0x0020, 0x000e); static const DicomTag DICOM_TAG_STUDY_INSTANCE_UID(0x0020, 0x000d); static const DicomTag DICOM_TAG_PIXEL_DATA(0x7fe0, 0x0010); + static const DicomTag DICOM_TAG_TRANSFER_SYNTAX_UID(0x0002, 0x0010); static const DicomTag DICOM_TAG_IMAGE_INDEX(0x0054, 0x1330); static const DicomTag DICOM_TAG_INSTANCE_NUMBER(0x0020, 0x0013); diff -r 7cfc2e0383b3 -r c4b3259c8bce NEWS --- a/NEWS Tue Nov 29 15:39:46 2016 +0100 +++ b/NEWS Tue Nov 29 16:07:14 2016 +0100 @@ -6,6 +6,7 @@ * Handling of private tags/creators in the "Dictionary" configuration option * New configuration options: "LoadPrivateDictionary", "DicomScuTimeout" and "DicomScpTimeout" +* New metadata automatically computed at the instance level: "TransferSyntax" REST API -------- diff -r 7cfc2e0383b3 -r c4b3259c8bce OrthancServer/DicomInstanceToStore.cpp --- a/OrthancServer/DicomInstanceToStore.cpp Tue Nov 29 15:39:46 2016 +0100 +++ b/OrthancServer/DicomInstanceToStore.cpp Tue Nov 29 16:07:14 2016 +0100 @@ -38,6 +38,7 @@ #include "../Core/Logging.h" #include +#include namespace Orthanc @@ -270,4 +271,25 @@ return ""; } } + + + bool DicomInstanceToStore::LookupTransferSyntax(std::string& result) + { + ComputeMissingInformation(); + + DicomMap header; + if (DicomMap::ParseDicomMetaInformation(header, GetBufferData(), GetBufferSize())) + { + const DicomValue* value = header.TestAndGetValue(DICOM_TAG_TRANSFER_SYNTAX_UID); + if (value != NULL && + !value->IsBinary() && + !value->IsNull()) + { + result = Toolbox::StripSpaces(value->GetContent()); + return true; + } + } + + return false; + } } diff -r 7cfc2e0383b3 -r c4b3259c8bce OrthancServer/DicomInstanceToStore.h --- a/OrthancServer/DicomInstanceToStore.h Tue Nov 29 15:39:46 2016 +0100 +++ b/OrthancServer/DicomInstanceToStore.h Tue Nov 29 16:07:14 2016 +0100 @@ -221,5 +221,7 @@ const Json::Value& GetJson(); void GetOriginInformation(Json::Value& result) const; + + bool LookupTransferSyntax(std::string& result); }; } diff -r 7cfc2e0383b3 -r c4b3259c8bce OrthancServer/ServerEnumerations.cpp --- a/OrthancServer/ServerEnumerations.cpp Tue Nov 29 15:39:46 2016 +0100 +++ b/OrthancServer/ServerEnumerations.cpp Tue Nov 29 16:07:14 2016 +0100 @@ -64,6 +64,7 @@ dictMetadataType_.Add(MetadataType_AnonymizedFrom, "AnonymizedFrom"); dictMetadataType_.Add(MetadataType_LastUpdate, "LastUpdate"); dictMetadataType_.Add(MetadataType_Instance_Origin, "Origin"); + dictMetadataType_.Add(MetadataType_Instance_TransferSyntax, "TransferSyntax"); dictContentType_.Add(FileContentType_Dicom, "dicom"); dictContentType_.Add(FileContentType_DicomAsJson, "dicom-as-json"); diff -r 7cfc2e0383b3 -r c4b3259c8bce OrthancServer/ServerEnumerations.h --- a/OrthancServer/ServerEnumerations.h Tue Nov 29 15:39:46 2016 +0100 +++ b/OrthancServer/ServerEnumerations.h Tue Nov 29 16:07:14 2016 +0100 @@ -157,7 +157,8 @@ MetadataType_ModifiedFrom = 5, MetadataType_AnonymizedFrom = 6, MetadataType_LastUpdate = 7, - MetadataType_Instance_Origin = 8, // New in Orthanc 0.9.5 + MetadataType_Instance_Origin = 8, // New in Orthanc 0.9.5 + MetadataType_Instance_TransferSyntax = 9, // New in Orthanc 1.2.0 // Make sure that the value "65535" can be stored into this enumeration MetadataType_StartUser = 1024, diff -r 7cfc2e0383b3 -r c4b3259c8bce OrthancServer/ServerIndex.cpp --- a/OrthancServer/ServerIndex.cpp Tue Nov 29 15:39:46 2016 +0100 +++ b/OrthancServer/ServerIndex.cpp Tue Nov 29 16:07:14 2016 +0100 @@ -775,10 +775,15 @@ // reflecting these additions into the input metadata map SetInstanceMetadata(instanceMetadata, instance, MetadataType_Instance_ReceptionDate, now); SetInstanceMetadata(instanceMetadata, instance, MetadataType_Instance_RemoteAet, instanceToStore.GetRemoteAet()); - + SetInstanceMetadata(instanceMetadata, instance, MetadataType_Instance_Origin, + EnumerationToString(instanceToStore.GetRequestOrigin())); + { - std::string s = EnumerationToString(instanceToStore.GetRequestOrigin()); - SetInstanceMetadata(instanceMetadata, instance, MetadataType_Instance_Origin, s); + std::string s; + if (instanceToStore.LookupTransferSyntax(s)) + { + SetInstanceMetadata(instanceMetadata, instance, MetadataType_Instance_TransferSyntax, s); + } } const DicomValue* value;