Mercurial > hg > orthanc
comparison OrthancServer/Plugins/Engine/OrthancPlugins.cpp @ 5363:3c8286e5d07b multiple-jpeg-decoders
wip: try to add a jpeg decoder without colorspace conversion: not working now
author | Alain Mazy <am@osimis.io> |
---|---|
date | Tue, 11 Jul 2023 10:25:58 +0200 |
parents | b376abae664a |
children |
comparison
equal
deleted
inserted
replaced
5360:165b67c02927 | 5363:3c8286e5d07b |
---|---|
5382 case _OrthancPluginService_TranscodeDicomInstance: | 5382 case _OrthancPluginService_TranscodeDicomInstance: |
5383 { | 5383 { |
5384 const _OrthancPluginCreateDicomInstance& p = | 5384 const _OrthancPluginCreateDicomInstance& p = |
5385 *reinterpret_cast<const _OrthancPluginCreateDicomInstance*>(parameters); | 5385 *reinterpret_cast<const _OrthancPluginCreateDicomInstance*>(parameters); |
5386 | 5386 |
5387 if (p.transferSyntax == NULL) | |
5388 { | |
5389 throw OrthancException(ErrorCode_ParameterOutOfRange, "Unsupported NULL transfer syntax"); | |
5390 } | |
5391 | |
5392 std::vector<std::string> transferSyntaxArgs; | |
5393 Toolbox::TokenizeString(transferSyntaxArgs, std::string(p.transferSyntax), ';'); | |
5394 | |
5387 DicomTransferSyntax transferSyntax; | 5395 DicomTransferSyntax transferSyntax; |
5388 if (p.transferSyntax == NULL || | 5396 if (transferSyntaxArgs.size() == 0 || !LookupTransferSyntax(transferSyntax, transferSyntaxArgs[0])) |
5389 !LookupTransferSyntax(transferSyntax, p.transferSyntax)) | |
5390 { | 5397 { |
5391 throw OrthancException(ErrorCode_ParameterOutOfRange, "Unsupported transfer syntax: " + | 5398 throw OrthancException(ErrorCode_ParameterOutOfRange, "Unsupported transfer syntax: " + |
5392 std::string(p.transferSyntax == NULL ? "(null)" : p.transferSyntax)); | 5399 std::string(p.transferSyntax == NULL ? "(null)" : p.transferSyntax)); |
5393 } | 5400 } |
5394 else | 5401 else |
5395 { | 5402 { |
5403 bool enableColorMapConversion = true; | |
5404 for (size_t i = 1; i < transferSyntaxArgs.size(); ++i) | |
5405 { | |
5406 if (transferSyntaxArgs[i] == "disable-color-map-conversion") | |
5407 { | |
5408 enableColorMapConversion = false; | |
5409 } | |
5410 } | |
5411 | |
5396 std::set<DicomTransferSyntax> syntaxes; | 5412 std::set<DicomTransferSyntax> syntaxes; |
5397 syntaxes.insert(transferSyntax); | 5413 syntaxes.insert(transferSyntax); |
5398 | 5414 |
5399 IDicomTranscoder::DicomImage source; | 5415 IDicomTranscoder::DicomImage source; |
5400 source.SetExternalBuffer(p.buffer, p.size); | 5416 source.SetExternalBuffer(p.buffer, p.size); |
5403 bool success; | 5419 bool success; |
5404 | 5420 |
5405 { | 5421 { |
5406 PImpl::ServerContextLock lock(*pimpl_); | 5422 PImpl::ServerContextLock lock(*pimpl_); |
5407 success = lock.GetContext().Transcode( | 5423 success = lock.GetContext().Transcode( |
5408 transcoded, source, syntaxes, true /* allow new sop */); | 5424 transcoded, source, syntaxes, true /* allow new sop */, enableColorMapConversion); |
5409 } | 5425 } |
5410 | 5426 |
5411 if (success) | 5427 if (success) |
5412 { | 5428 { |
5413 *(p.target) = reinterpret_cast<OrthancPluginDicomInstance*>( | 5429 *(p.target) = reinterpret_cast<OrthancPluginDicomInstance*>( |