Mercurial > hg > orthanc
diff OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp @ 3950:5797ca4f3b8d transcoding
"/peers/{id}/store": New option "Transcode"
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 19 May 2020 20:37:00 +0200 |
parents | ef696db8426f |
children | 5fe8c6d3212e |
line wrap: on
line diff
--- a/OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp Tue May 19 18:44:36 2020 +0200 +++ b/OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp Tue May 19 20:37:00 2020 +0200 @@ -38,6 +38,8 @@ #include "../../Core/SerializationToolbox.h" #include "../ServerContext.h" +#include <dcmtk/dcmdata/dcfilefo.h> + namespace Orthanc { @@ -56,7 +58,32 @@ try { - context_.ReadDicom(client_->GetBody(), instance); + if (transcode_) + { + std::string dicom; + context_.ReadDicom(dicom, instance); + + std::set<DicomTransferSyntax> syntaxes; + syntaxes.insert(transferSyntax_); + + IDicomTranscoder::DicomImage source, transcoded; + source.SetExternalBuffer(dicom); + + bool hasSopInstanceUidChanged; + if (context_.Transcode(transcoded, hasSopInstanceUidChanged, source, syntaxes, true)) + { + client_->GetBody().assign(reinterpret_cast<const char*>(transcoded.GetBufferData()), + transcoded.GetBufferSize()); + } + else + { + client_->GetBody().swap(dicom); + } + } + else + { + context_.ReadDicom(client_->GetBody(), instance); + } } catch (OrthancException& e) {