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: