comparison OrthancServer/Sources/ServerContext.cpp @ 5316:03501a258d9e

added instance metadata "PixelDataVR"
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 22 Jun 2023 08:48:38 +0200
parents 5053a10da5a2
children e95caa87fed8
comparison
equal deleted inserted replaced
5315:592507a8e227 5316:03501a258d9e
550 throw OrthancException(ErrorCode_ParameterOutOfRange); 550 throw OrthancException(ErrorCode_ParameterOutOfRange);
551 } 551 }
552 552
553 bool hasPixelDataOffset; 553 bool hasPixelDataOffset;
554 uint64_t pixelDataOffset; 554 uint64_t pixelDataOffset;
555 ValueRepresentation pixelDataVR;
555 hasPixelDataOffset = DicomStreamReader::LookupPixelDataOffset( 556 hasPixelDataOffset = DicomStreamReader::LookupPixelDataOffset(
556 pixelDataOffset, dicom.GetBufferData(), dicom.GetBufferSize()); 557 pixelDataOffset, pixelDataVR, dicom.GetBufferData(), dicom.GetBufferSize());
557 558
558 DicomTransferSyntax transferSyntax; 559 DicomTransferSyntax transferSyntax;
559 bool hasTransferSyntax = dicom.LookupTransferSyntax(transferSyntax); 560 bool hasTransferSyntax = dicom.LookupTransferSyntax(transferSyntax);
560 561
561 DicomMap summary; 562 DicomMap summary;
651 652
652 typedef std::map<MetadataType, std::string> InstanceMetadata; 653 typedef std::map<MetadataType, std::string> InstanceMetadata;
653 InstanceMetadata instanceMetadata; 654 InstanceMetadata instanceMetadata;
654 result.SetStatus(index_.Store( 655 result.SetStatus(index_.Store(
655 instanceMetadata, summary, attachments, dicom.GetMetadata(), dicom.GetOrigin(), overwrite, 656 instanceMetadata, summary, attachments, dicom.GetMetadata(), dicom.GetOrigin(), overwrite,
656 hasTransferSyntax, transferSyntax, hasPixelDataOffset, pixelDataOffset, isReconstruct)); 657 hasTransferSyntax, transferSyntax, hasPixelDataOffset, pixelDataOffset, pixelDataVR, isReconstruct));
657 658
658 // Only keep the metadata for the "instance" level 659 // Only keep the metadata for the "instance" level
659 dicom.ClearMetadata(); 660 dicom.ClearMetadata();
660 661
661 for (InstanceMetadata::const_iterator it = instanceMetadata.begin(); 662 for (InstanceMetadata::const_iterator it = instanceMetadata.begin();
1092 * Orthanc <= 1.9.0, or that calls to 1093 * Orthanc <= 1.9.0, or that calls to
1093 * "LookupPixelDataOffset()" from earlier versions of 1094 * "LookupPixelDataOffset()" from earlier versions of
1094 * Orthanc have failed. Try again this precomputation now 1095 * Orthanc have failed. Try again this precomputation now
1095 * for future calls. 1096 * for future calls.
1096 **/ 1097 **/
1097 if (DicomStreamReader::LookupPixelDataOffset(pixelDataOffset, dicom) && 1098 ValueRepresentation pixelDataVR;
1099 if (DicomStreamReader::LookupPixelDataOffset(pixelDataOffset, pixelDataVR, dicom) &&
1098 pixelDataOffset < dicom.size()) 1100 pixelDataOffset < dicom.size())
1099 { 1101 {
1100 index_.OverwriteMetadata(instancePublicId, MetadataType_Instance_PixelDataOffset, 1102 index_.OverwriteMetadata(instancePublicId, MetadataType_Instance_PixelDataOffset,
1101 boost::lexical_cast<std::string>(pixelDataOffset)); 1103 boost::lexical_cast<std::string>(pixelDataOffset));
1104 index_.OverwriteMetadata(instancePublicId, MetadataType_Instance_PixelDataVR,
1105 EnumerationToString(pixelDataVR));
1102 1106
1103 if (!area_.HasReadRange() || 1107 if (!area_.HasReadRange() ||
1104 compressionEnabled_) 1108 compressionEnabled_)
1105 { 1109 {
1106 int64_t newRevision; 1110 int64_t newRevision;