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*>(