comparison OrthancServer/Sources/ServerContext.cpp @ 4508:8f9090b137f1

Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 11 Feb 2021 11:00:05 +0100
parents b4c58795f3a8
children 98b7b9d21d83
comparison
equal deleted inserted replaced
4507:b4c58795f3a8 4508:8f9090b137f1
726 IDicomTranscoder::DicomImage transcoded; 726 IDicomTranscoder::DicomImage transcoded;
727 if (Transcode(transcoded, source, syntaxes, true /* allow new SOP instance UID */)) 727 if (Transcode(transcoded, source, syntaxes, true /* allow new SOP instance UID */))
728 { 728 {
729 std::unique_ptr<ParsedDicomFile> tmp(transcoded.ReleaseAsParsedDicomFile()); 729 std::unique_ptr<ParsedDicomFile> tmp(transcoded.ReleaseAsParsedDicomFile());
730 730
731 DicomInstanceToStore toStore; 731 std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromParsedDicomFile(*tmp));
732 toStore.SetParsedDicomFile(*tmp); 732 toStore->SetOrigin(dicom.GetOrigin());
733 toStore.SetOrigin(dicom.GetOrigin()); 733
734 734 StoreStatus ok = StoreAfterTranscoding(resultPublicId, *toStore, mode);
735 StoreStatus ok = StoreAfterTranscoding(resultPublicId, toStore, mode);
736 assert(resultPublicId == tmp->GetHasher().HashInstance()); 735 assert(resultPublicId == tmp->GetHasher().HashInstance());
737 736
738 return ok; 737 return ok;
739 } 738 }
740 else 739 else
1734 1733
1735 ImageAccessor* ServerContext::DecodeDicomFrame(const void* dicom, 1734 ImageAccessor* ServerContext::DecodeDicomFrame(const void* dicom,
1736 size_t size, 1735 size_t size,
1737 unsigned int frameIndex) 1736 unsigned int frameIndex)
1738 { 1737 {
1739 DicomInstanceToStore instance; 1738 std::unique_ptr<DicomInstanceToStore> instance(DicomInstanceToStore::CreateFromBuffer(dicom, size));
1740 instance.SetBuffer(dicom, size); 1739 return DecodeDicomFrame(*instance, frameIndex);
1741 return DecodeDicomFrame(instance, frameIndex);
1742 } 1740 }
1743 1741
1744 1742
1745 void ServerContext::StoreWithTranscoding(std::string& sopClassUid, 1743 void ServerContext::StoreWithTranscoding(std::string& sopClassUid,
1746 std::string& sopInstanceUid, 1744 std::string& sopInstanceUid,