Mercurial > hg > orthanc
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 } |