Mercurial > hg > orthanc
diff Plugins/Engine/OrthancPlugins.cpp @ 3945:0b3256c3ee14 transcoding
simplified IDicomTranscoder
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 19 May 2020 11:24:00 +0200 |
parents | aae045f802f4 |
children | 1f33ed7f82e6 |
line wrap: on
line diff
--- a/Plugins/Engine/OrthancPlugins.cpp Tue May 19 10:17:06 2020 +0200 +++ b/Plugins/Engine/OrthancPlugins.cpp Tue May 19 11:24:00 2020 +0200 @@ -1896,8 +1896,8 @@ DicomInstanceToStore instance_; public: - DicomInstanceFromTranscoded(IDicomTranscoder::TranscodedDicom& transcoded) : - parsed_(ParsedDicomFile::AcquireDcmtkObject(transcoded.ReleaseDicom())) + DicomInstanceFromTranscoded(IDicomTranscoder::DicomImage& transcoded) : + parsed_(transcoded.ReleaseAsParsedDicomFile()) { instance_.SetParsedDicomFile(*parsed_); instance_.SetOrigin(DicomInstanceOrigin::FromPlugins()); @@ -4369,29 +4369,30 @@ } else { - ParsedDicomFile dicom(p.buffer, p.size); - std::set<DicomTransferSyntax> syntaxes; syntaxes.insert(transferSyntax); - - std::unique_ptr<IDicomTranscoder::TranscodedDicom> transcoded; + + IDicomTranscoder::DicomImage source; + source.SetExternalBuffer(p.buffer, p.size); + + IDicomTranscoder::DicomImage transcoded; + bool success, hasSopInstanceChanged; { PImpl::ServerContextLock lock(*pimpl_); - transcoded.reset(lock.GetContext().TranscodeToParsed( - dicom.GetDcmtkObject(), p.buffer, p.size, - syntaxes, true /* allow new sop */)); + success = lock.GetContext().Transcode(transcoded, hasSopInstanceChanged, source, + syntaxes, true /* allow new sop */); } - if (transcoded.get() == NULL) + if (success) { - throw OrthancException(ErrorCode_NotImplemented, "Cannot transcode image"); + *(p.target) = reinterpret_cast<OrthancPluginDicomInstance*>( + new DicomInstanceFromTranscoded(transcoded)); + return true; } else { - *(p.target) = reinterpret_cast<OrthancPluginDicomInstance*>( - new DicomInstanceFromTranscoded(*transcoded)); - return true; + throw OrthancException(ErrorCode_NotImplemented, "Cannot transcode image"); } } }