Mercurial > hg > orthanc
comparison 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 |
comparison
equal
deleted
inserted
replaced
3944:aae045f802f4 | 3945:0b3256c3ee14 |
---|---|
1894 private: | 1894 private: |
1895 std::unique_ptr<ParsedDicomFile> parsed_; | 1895 std::unique_ptr<ParsedDicomFile> parsed_; |
1896 DicomInstanceToStore instance_; | 1896 DicomInstanceToStore instance_; |
1897 | 1897 |
1898 public: | 1898 public: |
1899 DicomInstanceFromTranscoded(IDicomTranscoder::TranscodedDicom& transcoded) : | 1899 DicomInstanceFromTranscoded(IDicomTranscoder::DicomImage& transcoded) : |
1900 parsed_(ParsedDicomFile::AcquireDcmtkObject(transcoded.ReleaseDicom())) | 1900 parsed_(transcoded.ReleaseAsParsedDicomFile()) |
1901 { | 1901 { |
1902 instance_.SetParsedDicomFile(*parsed_); | 1902 instance_.SetParsedDicomFile(*parsed_); |
1903 instance_.SetOrigin(DicomInstanceOrigin::FromPlugins()); | 1903 instance_.SetOrigin(DicomInstanceOrigin::FromPlugins()); |
1904 } | 1904 } |
1905 | 1905 |
4367 throw OrthancException(ErrorCode_ParameterOutOfRange, "Unsupported transfer syntax: " + | 4367 throw OrthancException(ErrorCode_ParameterOutOfRange, "Unsupported transfer syntax: " + |
4368 std::string(p.transferSyntax == NULL ? "(null)" : p.transferSyntax)); | 4368 std::string(p.transferSyntax == NULL ? "(null)" : p.transferSyntax)); |
4369 } | 4369 } |
4370 else | 4370 else |
4371 { | 4371 { |
4372 ParsedDicomFile dicom(p.buffer, p.size); | |
4373 | |
4374 std::set<DicomTransferSyntax> syntaxes; | 4372 std::set<DicomTransferSyntax> syntaxes; |
4375 syntaxes.insert(transferSyntax); | 4373 syntaxes.insert(transferSyntax); |
4376 | 4374 |
4377 std::unique_ptr<IDicomTranscoder::TranscodedDicom> transcoded; | 4375 IDicomTranscoder::DicomImage source; |
4376 source.SetExternalBuffer(p.buffer, p.size); | |
4377 | |
4378 IDicomTranscoder::DicomImage transcoded; | |
4379 bool success, hasSopInstanceChanged; | |
4378 | 4380 |
4379 { | 4381 { |
4380 PImpl::ServerContextLock lock(*pimpl_); | 4382 PImpl::ServerContextLock lock(*pimpl_); |
4381 transcoded.reset(lock.GetContext().TranscodeToParsed( | 4383 success = lock.GetContext().Transcode(transcoded, hasSopInstanceChanged, source, |
4382 dicom.GetDcmtkObject(), p.buffer, p.size, | 4384 syntaxes, true /* allow new sop */); |
4383 syntaxes, true /* allow new sop */)); | |
4384 } | 4385 } |
4385 | 4386 |
4386 if (transcoded.get() == NULL) | 4387 if (success) |
4387 { | 4388 { |
4388 throw OrthancException(ErrorCode_NotImplemented, "Cannot transcode image"); | 4389 *(p.target) = reinterpret_cast<OrthancPluginDicomInstance*>( |
4390 new DicomInstanceFromTranscoded(transcoded)); | |
4391 return true; | |
4389 } | 4392 } |
4390 else | 4393 else |
4391 { | 4394 { |
4392 *(p.target) = reinterpret_cast<OrthancPluginDicomInstance*>( | 4395 throw OrthancException(ErrorCode_NotImplemented, "Cannot transcode image"); |
4393 new DicomInstanceFromTranscoded(*transcoded)); | |
4394 return true; | |
4395 } | 4396 } |
4396 } | 4397 } |
4397 } | 4398 } |
4398 | 4399 |
4399 case _OrthancPluginService_CreateMemoryBuffer: | 4400 case _OrthancPluginService_CreateMemoryBuffer: |