mirror of
https://github.com/termux/termux-packages.git
synced 2025-08-25 20:12:45 +00:00
262 lines
8.5 KiB
Diff
262 lines
8.5 KiB
Diff
From ce3d7e2654bf5bc456a8b2bc89993393cffa9560 Mon Sep 17 00:00:00 2001
|
|
From: Slava Aseev <ptrnine@altlinux.org>
|
|
Date: Wed, 9 Jan 2019 18:26:57 +0300
|
|
Subject: [PATCH] Updated to 3.6.4 DCMTK API
|
|
|
|
---
|
|
config/cmake/Modules/FindDCMTK.cmake | 2 +-
|
|
core/vil/file_formats/vil_dicom.cxx | 66 ++++++++++++----------
|
|
core/vil/file_formats/vil_dicom_stream.cxx | 26 ++++-----
|
|
core/vil/file_formats/vil_dicom_stream.h | 18 ++++--
|
|
4 files changed, 63 insertions(+), 49 deletions(-)
|
|
|
|
diff -uNr a/core/vil/file_formats/vil_dicom.cxx b/core/vil/file_formats/vil_dicom.cxx
|
|
--- a/core/vil/file_formats/vil_dicom.cxx 2021-08-02 23:21:08.000000000 +0800
|
|
+++ b/core/vil/file_formats/vil_dicom.cxx 2022-09-29 21:27:12.960447500 +0800
|
|
@@ -27,13 +27,13 @@
|
|
# include "vil/vil_pixel_format.h"
|
|
# include "vil/vil_exception.h"
|
|
|
|
-# include <dcfilefo.h>
|
|
-# include <dcmetinf.h>
|
|
-# include <dcdatset.h>
|
|
-# include <dctagkey.h>
|
|
-# include <dcdeftag.h>
|
|
-# include <dcstack.h>
|
|
-# include <diinpxt.h>
|
|
+# include <dcmtk/dcmdata/dcfilefo.h>
|
|
+# include <dcmtk/dcmdata/dcmetinf.h>
|
|
+# include <dcmtk/dcmdata/dcdatset.h>
|
|
+# include <dcmtk/dcmdata/dctagkey.h>
|
|
+# include <dcmtk/dcmdata/dcdeftag.h>
|
|
+# include <dcmtk/dcmdata/dcstack.h>
|
|
+# include <dcmtk/dcmimgle/diinpxt.h>
|
|
|
|
# include "vil_dicom_stream.h"
|
|
//
|
|
@@ -108,8 +108,9 @@
|
|
read_header(DcmObject * dataset, vil_dicom_header_info & i);
|
|
|
|
static void
|
|
-read_pixels_into_buffer(DcmPixelData * pixels,
|
|
+read_pixels_into_buffer(DiDocument* doc,
|
|
unsigned num_samples,
|
|
+ unsigned nplanes,
|
|
Uint16 alloc,
|
|
Uint16 stored,
|
|
Uint16 high,
|
|
@@ -209,12 +210,15 @@
|
|
else
|
|
{
|
|
assert(stack.top()->ident() == EVR_PixelData);
|
|
- pixels = static_cast<DcmPixelData *>(stack.top());
|
|
}
|
|
}
|
|
+
|
|
+ DiDocument doc(&dset, EXS_Unknown);
|
|
+ pixels = doc.getPixelData();
|
|
+
|
|
unsigned num_samples = ni() * nj() * nplanes();
|
|
read_pixels_into_buffer(
|
|
- pixels, num_samples, bits_alloc, bits_stored, high_bit, pixel_rep, slope, intercept, pixel_buf, pixel_format);
|
|
+ &doc, num_samples, nplanes(), bits_alloc, bits_stored, high_bit, pixel_rep, slope, intercept, pixel_buf, pixel_format);
|
|
}
|
|
|
|
// Create an image resource to manage the pixel buffer
|
|
@@ -1035,8 +1039,9 @@
|
|
template <class InT>
|
|
void
|
|
convert_src_type(InT const *,
|
|
- DcmPixelData * pixels,
|
|
+ DiDocument *document,
|
|
unsigned num_samples,
|
|
+ unsigned nplanes,
|
|
Uint16 alloc,
|
|
Uint16 stored,
|
|
Uint16 high,
|
|
@@ -1044,25 +1049,26 @@
|
|
DiInputPixel *& pixel_data,
|
|
vil_pixel_format & act_format)
|
|
{
|
|
+ Uint32 firstFragment = 0;
|
|
if (rep == 0 && stored <= 8)
|
|
{
|
|
act_format = VIL_PIXEL_FORMAT_BYTE;
|
|
- pixel_data = new DiInputPixelTemplate<InT, Uint8>(pixels, alloc, stored, high, 0, num_samples);
|
|
+ pixel_data = new DiInputPixelTemplate<InT,Uint8>(document, alloc, stored, high, 0, num_samples, nplanes, nullptr, firstFragment);
|
|
}
|
|
else if (rep == 0 && stored <= 16)
|
|
{
|
|
act_format = VIL_PIXEL_FORMAT_UINT_16;
|
|
- pixel_data = new DiInputPixelTemplate<InT, Uint16>(pixels, alloc, stored, high, 0, num_samples);
|
|
+ pixel_data = new DiInputPixelTemplate<InT,Uint16>(document, alloc, stored, high, 0, num_samples, nplanes, nullptr, firstFragment);
|
|
}
|
|
else if (rep == 1 && stored <= 8)
|
|
{
|
|
act_format = VIL_PIXEL_FORMAT_SBYTE;
|
|
- pixel_data = new DiInputPixelTemplate<InT, Sint8>(pixels, alloc, stored, high, 0, num_samples);
|
|
+ pixel_data = new DiInputPixelTemplate<InT,Sint8>(document, alloc, stored, high, 0, num_samples, nplanes, nullptr, firstFragment);
|
|
}
|
|
else if (rep == 1 && stored <= 16)
|
|
{
|
|
act_format = VIL_PIXEL_FORMAT_INT_16;
|
|
- pixel_data = new DiInputPixelTemplate<InT, Sint16>(pixels, alloc, stored, high, 0, num_samples);
|
|
+ pixel_data = new DiInputPixelTemplate<InT,Sint16>(document, alloc, stored, high, 0, num_samples, nplanes, nullptr, firstFragment);
|
|
}
|
|
}
|
|
|
|
@@ -1095,8 +1101,9 @@
|
|
}
|
|
# endif // MIXED_ENDIAN
|
|
static void
|
|
-read_pixels_into_buffer(DcmPixelData * pixels,
|
|
+read_pixels_into_buffer(DiDocument* doc,
|
|
unsigned num_samples,
|
|
+ unsigned nplanes,
|
|
Uint16 alloc,
|
|
Uint16 stored,
|
|
Uint16 high,
|
|
@@ -1117,13 +1124,13 @@
|
|
// Make sure pixel_data is deleted before this function exits!
|
|
//
|
|
DiInputPixel * pixel_data = 0;
|
|
- if (pixels->getVR() == EVR_OW)
|
|
+ if (doc->getPixelData()->getVR() == EVR_OW)
|
|
{
|
|
- convert_src_type((Uint16 *)0, pixels, num_samples, alloc, stored, high, rep, pixel_data, act_format);
|
|
+ convert_src_type((Uint16 *)0 , doc, num_samples, nplanes, alloc, stored, high, rep, pixel_data, act_format);
|
|
}
|
|
else
|
|
{
|
|
- convert_src_type((Uint8 *)0, pixels, num_samples, alloc, stored, high, rep, pixel_data, act_format);
|
|
+ convert_src_type((Uint8 *)0, doc, num_samples, nplanes, alloc, stored, high, rep, pixel_data, act_format);
|
|
}
|
|
# ifdef MIXED_ENDIAN
|
|
# ifdef NO_OFFSET
|
|
@@ -1147,7 +1154,7 @@
|
|
}
|
|
|
|
// The data has been copied and converted. Release the source.
|
|
- pixels->clear();
|
|
+ doc->getPixelData()->clear();
|
|
|
|
// Now, the actual buffer is good, or else we need to rescale
|
|
//
|
|
diff -uNr a/core/vil/file_formats/vil_dicom_stream.cxx b/core/vil/file_formats/vil_dicom_stream.cxx
|
|
--- a/core/vil/file_formats/vil_dicom_stream.cxx 2021-08-02 23:21:08.000000000 +0800
|
|
+++ b/core/vil/file_formats/vil_dicom_stream.cxx 2022-09-29 21:26:54.001356700 +0800
|
|
@@ -4,7 +4,7 @@
|
|
|
|
# include "vil_dicom_stream.h"
|
|
# include "vil/vil_stream.h"
|
|
-# include <dcerror.h>
|
|
+# include <dcmtk/dcmdata/dcerror.h>
|
|
|
|
# include <cassert>
|
|
# ifdef _MSC_VER
|
|
@@ -42,14 +42,14 @@
|
|
|
|
|
|
OFBool
|
|
-vil_dicom_stream_producer::eos() const
|
|
+vil_dicom_stream_producer::eos()
|
|
{
|
|
return vs_->tell() >= vs_->file_size();
|
|
}
|
|
|
|
|
|
-Uint32
|
|
-vil_dicom_stream_producer::avail() const
|
|
+offile_off_t
|
|
+vil_dicom_stream_producer::avail()
|
|
{
|
|
vil_streampos n = vs_->file_size() - vs_->tell();
|
|
assert(n >= 0);
|
|
@@ -57,13 +57,13 @@
|
|
// apparently dicom streams only support 32 bit positions
|
|
// whereas vil_streams now support 64 bit positions (when
|
|
// available)
|
|
- assert(n <= (vil_streampos)std::numeric_limits<Uint32>::max());
|
|
- return (Uint32)n;
|
|
+ assert(n <= (vil_streampos)std::numeric_limits<offile_off_t>::max());
|
|
+ return (offile_off_t)n;
|
|
}
|
|
|
|
|
|
-Uint32
|
|
-vil_dicom_stream_producer::read(void * buf, Uint32 buflen)
|
|
+offile_off_t
|
|
+vil_dicom_stream_producer::read(void * buf, offile_off_t buflen)
|
|
{
|
|
vil_streampos n = vs_->read(buf, buflen);
|
|
assert(n >= 0);
|
|
@@ -71,13 +71,13 @@
|
|
// apparently dicom streams only support 32 bit positions
|
|
// whereas vil_streams now support 64 bit positions (when
|
|
// available)
|
|
- assert(n <= (vil_streampos)std::numeric_limits<Uint32>::max());
|
|
- return (Uint32)n;
|
|
+ assert(n <= (vil_streampos)std::numeric_limits<offile_off_t>::max());
|
|
+ return (offile_off_t)n;
|
|
}
|
|
|
|
|
|
-Uint32
|
|
-vil_dicom_stream_producer::skip(Uint32 skiplen)
|
|
+offile_off_t
|
|
+vil_dicom_stream_producer::skip(offile_off_t skiplen)
|
|
{
|
|
vs_->seek(vs_->tell() + skiplen);
|
|
return skiplen;
|
|
@@ -85,7 +85,7 @@
|
|
|
|
|
|
void
|
|
-vil_dicom_stream_producer::putback(Uint32 num)
|
|
+vil_dicom_stream_producer::putback(offile_off_t num)
|
|
{
|
|
vs_->seek(vs_->tell() - (long int)num);
|
|
}
|
|
diff -uNr a/core/vil/file_formats/vil_dicom_stream.h b/core/vil/file_formats/vil_dicom_stream.h
|
|
--- a/core/vil/file_formats/vil_dicom_stream.h 2021-08-02 23:21:08.000000000 +0800
|
|
+++ b/core/vil/file_formats/vil_dicom_stream.h 2022-09-29 21:20:34.157511200 +0800
|
|
@@ -4,7 +4,8 @@
|
|
// \file
|
|
// \author Amitha Perera
|
|
|
|
-#include <dcistrma.h>
|
|
+#include <dcmtk/dcmdata/dcistrma.h>
|
|
+#include <dcmtk/dcmimgle/didocu.h>
|
|
|
|
class vil_stream;
|
|
|
|
@@ -18,11 +19,11 @@
|
|
|
|
virtual OFBool good() const;
|
|
virtual OFCondition status() const;
|
|
- virtual OFBool eos() const;
|
|
- virtual Uint32 avail() const;
|
|
- virtual Uint32 read(void *buf, Uint32 buflen);
|
|
- virtual Uint32 skip(Uint32 skiplen);
|
|
- virtual void putback(Uint32 num);
|
|
+ virtual OFBool eos();
|
|
+ virtual offile_off_t avail();
|
|
+ virtual offile_off_t read(void *buf, offile_off_t buflen);
|
|
+ virtual offile_off_t skip(offile_off_t skiplen);
|
|
+ virtual void putback(offile_off_t num);
|
|
|
|
private:
|
|
vil_stream* vs_;
|
|
@@ -43,6 +44,11 @@
|
|
{
|
|
return new vil_dicom_stream_factory(*this);
|
|
}
|
|
+
|
|
+ virtual DcmInputStreamFactoryType ident() const
|
|
+ {
|
|
+ return DFT_DcmInputFileStreamFactory;
|
|
+ }
|
|
|
|
private:
|
|
vil_stream* vs_;
|