Mercurial > hg > orthanc
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, |