Mercurial > hg > orthanc
changeset 4265:f9eaf14d3d19
Fix decoding sequence if "BuiltinDecoderTranscoderOrder" is "Before"
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 30 Oct 2020 12:00:06 +0100 |
parents | 9a01e0f89b6d |
children | 97c8a7f93805 |
files | NEWS OrthancServer/Sources/ServerContext.cpp |
diffstat | 2 files changed, 40 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Fri Oct 30 09:00:24 2020 +0100 +++ b/NEWS Fri Oct 30 12:00:06 2020 +0100 @@ -2,6 +2,7 @@ =============================== * C-GET SCP: Fix responses and handling of cancel +* Fix decoding sequence if "BuiltinDecoderTranscoderOrder" is "Before" * Upgraded dependencies for static builds (notably on Windows and LSB): - civetweb 1.13
--- a/OrthancServer/Sources/ServerContext.cpp Fri Oct 30 09:00:24 2020 +0100 +++ b/OrthancServer/Sources/ServerContext.cpp Fri Oct 30 12:00:06 2020 +0100 @@ -1441,8 +1441,17 @@ { // Use Orthanc's built-in decoder, using the cache to speed-up // things on multi-frame images - ServerContext::DicomCacheLocker locker(*this, publicId); - std::unique_ptr<ImageAccessor> decoded(locker.GetDicom().DecodeFrame(frameIndex)); + ServerContext::DicomCacheLocker locker(*this, publicId); + + std::unique_ptr<ImageAccessor> decoded; + try + { + decoded.reset(locker.GetDicom().DecodeFrame(frameIndex)); + } + catch (OrthancException& e) + { + } + if (decoded.get() != NULL) { return decoded.release(); @@ -1456,8 +1465,16 @@ // TODO: Store the raw buffer in the DicomCacheLocker std::string dicomContent; ReadDicom(dicomContent, publicId); - std::unique_ptr<ImageAccessor> decoded( - GetPlugins().Decode(dicomContent.c_str(), dicomContent.size(), frameIndex)); + + std::unique_ptr<ImageAccessor> decoded; + try + { + decoded.reset(GetPlugins().Decode(dicomContent.c_str(), dicomContent.size(), frameIndex)); + } + catch (OrthancException& e) + { + } + if (decoded.get() != NULL) { return decoded.release(); @@ -1487,7 +1504,15 @@ { if (builtinDecoderTranscoderOrder_ == BuiltinDecoderTranscoderOrder_Before) { - std::unique_ptr<ImageAccessor> decoded(dicom.GetParsedDicomFile().DecodeFrame(frameIndex)); + std::unique_ptr<ImageAccessor> decoded; + try + { + decoded.reset(dicom.GetParsedDicomFile().DecodeFrame(frameIndex)); + } + catch (OrthancException& e) + { + } + if (decoded.get() != NULL) { return decoded.release(); @@ -1498,8 +1523,15 @@ if (HasPlugins() && GetPlugins().HasCustomImageDecoder()) { - std::unique_ptr<ImageAccessor> decoded( - GetPlugins().Decode(dicom.GetBufferData(), dicom.GetBufferSize(), frameIndex)); + std::unique_ptr<ImageAccessor> decoded; + try + { + decoded.reset(GetPlugins().Decode(dicom.GetBufferData(), dicom.GetBufferSize(), frameIndex)); + } + catch (OrthancException& e) + { + } + if (decoded.get() != NULL) { return decoded.release();