comparison Core/DicomParsing/DcmtkTranscoder.cpp @ 3944:aae045f802f4 transcoding

preparing simplified interface for IDicomTranscoder
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 19 May 2020 10:17:06 +0200
parents c205f670098e
children 0b3256c3ee14
comparison
equal deleted inserted replaced
3943:b26d25d3c1c7 3944:aae045f802f4
396 { 396 {
397 // Cannot transcode 397 // Cannot transcode
398 return NULL; 398 return NULL;
399 } 399 }
400 } 400 }
401
402
403 bool DcmtkTranscoder::Transcode(DicomImage& target,
404 bool& hasSopInstanceUidChanged /* out */,
405 DicomImage& source /* in, "GetParsed()" possibly modified */,
406 const std::set<DicomTransferSyntax>& allowedSyntaxes,
407 bool allowNewSopInstanceUid)
408 {
409 target.Clear();
410
411 DicomTransferSyntax sourceSyntax;
412 if (!FromDcmtkBridge::LookupOrthancTransferSyntax(sourceSyntax, source.GetParsed()))
413 {
414 LOG(ERROR) << "Unsupport transfer syntax for transcoding";
415 return false;
416 }
417
418 if (allowedSyntaxes.find(sourceSyntax) != allowedSyntaxes.end())
419 {
420 // No transcoding is needed
421 target.AcquireParsed(source);
422 target.AcquireBuffer(source);
423 return true;
424 }
425 else if (InplaceTranscode(hasSopInstanceUidChanged, source.GetParsed(),
426 allowedSyntaxes, allowNewSopInstanceUid))
427 {
428 // Sanity check
429 DicomTransferSyntax targetSyntax;
430 if (FromDcmtkBridge::LookupOrthancTransferSyntax(targetSyntax, source.GetParsed()) &&
431 allowedSyntaxes.find(targetSyntax) != allowedSyntaxes.end())
432 {
433 target.AcquireParsed(source);
434 source.Clear();
435 return true;
436 }
437 else
438 {
439 throw OrthancException(ErrorCode_InternalError);
440 }
441 }
442 else
443 {
444 // Cannot transcode
445 return false;
446 }
447 }
401 } 448 }