Commit 4c639b3b authored by Gert Wollny's avatar Gert Wollny
Browse files

New upstream version 3.6.5

parent 0822681b
Loading
Loading
Loading
Loading
+91 −86
Original line number Diff line number Diff line
ANNOUNCEMENT

Version 3.6.4 of the OFFIS DCMTK (DICOM ToolKit) software is now available for
Version 3.6.5 of the OFFIS DCMTK (DICOM ToolKit) software is now available for
public release.  This is a minor release that includes the following changes
over the previous version 3.6.3:
over the previous version 3.6.4:

- DCMTK 3.6.4 builds correctly on older and up-to-date versions of GNU gcc
  (4.2.1 to 8.2.1) Clang (3.4.2 to 7.0.0),  Microsoft Visual Studio (2005 to
  2017) and SunPro CC (5.14 and 5.15).
- DCMTK 3.6.5 builds correctly on older and up-to-date versions of GNU gcc
  (4.4.7 to 9.2.0), Clang (3.4.2 to 9.0.0), AppleClang (11.0.0), Microsoft
  Visual Studio (2008 to 2019), SunPro CC (5.14 and 5.15) and IBM XL C/C++
  (16.1.1.3).

- Tested with the following operating systems/environments:

@@ -26,120 +27,124 @@ over the previous version 3.6.3:
- GNU Autoconf is still deprecated, running 'configure' emits a warning by
  default.  Support for GNU Autoconf will be removed after this release.

- Updated data dictionary, SOP Class and Transfer Syntax UIDs for the recently
  approved changes to the DICOM standard (i.e. Supplements and CPs), up to DICOM
  standard release DICOM 2018d plus Supplement 188 (Multi-energy CT Images),
  CP-1803 and CP-1809.
- Updated data dictionary, SOP Class, Frame of Reference and Transfer Syntax
  UIDs for the recently approved changes to the DICOM standard (i.e. Supplements
  and CPs), up to DICOM standard release DICOM 2019c plus Supplement 175 (Second
  Generation Radiotherapy - C-Arm RT Treatment Modalities).

- Added "dcmicmp", a new tool that reads two DICOM images, an original
  "reference image" and a post-processed "test image" to which some kind of
  processing such as a lossy image compression has been applied.  dcmicmp
  compares both images and computes several metrics that describe how similar
  or different both images are.
- Added support for directory record "RADIOTHERAPY" that has been introduced
  with Supplement 147 (Second Generation Radiotherapy - Prescription and Segment
  Annotation).

- Added new command line applications: cda2dcm and stl2dcm for encapsulation
  of HL7 CDA documents and STL files into DICOM file format.  Revised
  implementation of pdf2dcm based on new class DcmEncapsulatedDocument.
- Added support for the three new 64-bit integer VRs introduced with CP-1819:
  Other 64-bit Very Long (OV), Signed 64-bit Very Long (SV) and Unsigned 64-bit
  Very Long (UV).

- The lossless JPEG decoder can now handle images compressed with the
  Cornell codec, which creates invalid Huffman codes for 16-bit images.
- Implemented support for the Extended BCP 195 TLS Profile, introduced with
  Supplement 206, in the dcmtls module and the various TLS-enabled DCMTK tools.

- The new class OFRandom implements a cryptographically secure pseudo
  random number generator (PRNG) based on the ISAAC algorithm and its public
  domain reference implementation by Bob Jenkins.
- Added option to "storescu" to rename files after processing them by appending
  ".bad" or ".good" at the end of the filename.

- Major revision of the TLS code in DCMTK (module dcmtls and related command
  line tools) implementing DICOM Supplement 204 "TLS Security Profiles".
  Selection of TLS ciphersuites is now based on security profiles, and
  DCMTK now implements the recommendations of BCP 195 / RFC 7525.

- DCMTK can now be compiled with LibreSSL as an alternative to OpenSSL.
- Added new options to "wlmscpfs" that allow for dumping incoming C-FIND
  requests to text files using a configurable directory and filename.

- Updated automatically generated Context Group classes in "dcmsr"
  (Structured Reporting) based on DICOM 2018d.  Also updated the Code
  (Structured Reporting) based on DICOM 2019c.  Also updated the Code
  definitions from the supported coding schemes such as DICOM, NCIt and UMLS.

- Further enhanced DICOM Structured Reporting (SR) module "dcmsr":

  - Added support for included template TID 4019 (Algorithm Identification) to
    the implementation of TID 1419 (ROI Measurements).
  - Added support for the Performed Imaging Agent Administration SR IOD and the
    Planned Imaging Agent Administration SR IOD introduced with Supplement 164.

  - Added support for the Synchronization Module, which is required for some SR
    IODs, e.g. Procedure Log SR or Performed Imaging Agent Administration SR.

  - Added initial support for coding scheme "SCT" (SNOMED CT) by defining those
    CODE_SCT_xxx code constants that are needed for the "cmr" submodule.

  - Updated SR Template classes from DCMR for the 2019b edition of the DICOM
    standard, i.e. all SRT (SNOMED RT) codes were replaced by their associated
    SCT (SNOMED CT) counterparts. This change was introduced with CP-1850.

  - Added new print flag PF_printEmptyCodes, which prints the text "empty code"
    for empty codes instead of "invalid code". This new flag is e.g. used for
    the output stream operator of the DSRCodedEntryValue class.

  - Added a document tree node filter that checks for the presence or absence
    of a concept name, i.e. whether it is empty or not.
- The list of elliptic curves to be negotiated as part of a TLS is now created
  dynamically, i.e. it is tested at runtime which elliptic curves are supported
  by the installed OpenSSL library.

  - Added new and enhanced existing code examples for this module.
- Allow disabling Functional Group checks when writing Segmentations and
  Parametric Map objects in order to speed up writing objects with many frames.

- Enhanced Worklist SCP code to make use of existing classes and functions
  instead of using its own "spaghetti" code for everything.  This also
  resolves issues with the Worklist SCP rejecting some legit Worklist queries
  as its own verification functions were too strict.
- Added macro that enables the wide char (wchar_t*) support of the XML parser
  that is part of the DCMTK (ofstd/ofxml). This support is limited to Windows
  systems and still regarded as experimental (see documentation for details).

- Added method getNumberOfValues() to all VR and other classes that are
  derived from DcmObject (such as DcmItem).  This new method always returns
  the number of values currently stored in the corresponding object/element,
  in contrast to getVM(), which sometimes returns the constant 1, or card(),
  which is not available for all classes.
- The tool "findscu" now always returns with a non-zero exit code when an error
  occurred, e.g. when association negotiation failed.

- The ACSE timeout, e.g. passed to the various networking command line tools
  using --acse-timeout, is now also used for the first PDU to be read.  This is
  another step towards cleaning up the timeout handling in dcmnet module.
- CMake-related enhancements:

- Replaced all calls of strcpy() by OFStandard::strlcpy(), which should reduce
  the possibility of buffer overflows.  Also added OFStandard::snprintf() and
  OFStandard::vsnprintf(), which should be used within the DCMTK as safe and
  portable helper functions.
  - DCMTK now understands and makes use of the CMake variable CMAKE_CXX_STANDARD
    when a CMake version that supports it is employed (CMake 3.1.3 and newer).

- Fixed bug in dcmseg that produced broken binary Segmentation objects if the
  number of pixels were not dividable by 8 for a single frame.
  - Added CMake option that controls whether DCMTK gets compiled using the
    multi-threaded static or DLL runtime library when using MSVC on Windows.

- Enhanced Worklist SCP code to make use of existing classes and functions
  instead of using its own "spaghetti" code for everything.  This also
  resolves issues with the Worklist SCP rejecting some legit Worklist queries
  as its own verification functions were too strict.
- Various fixes and extensions to the JPEG-LS implementation:

- Introduced a subset of std::filesystem to ofstd, currently providing the
  classes OFpath, OFdirectory_entry and OFdirectory_iterator as portable
  implementations for the respective C++17 STL classes.
  - Added command line options controlling how odd-length bitstreams are
    padded to even length (for compatibility with HP LOCO).

- The Windows implementation of class OFReadWriteLock class now uses Slim
  Reader/Writer (SRW) Locks, which are available since Windows Vista, instead
  of the older implementation based on a Mutex, a Semaphore and a counter,
  because SRW locks are much faster.
  - Added command line option that causes the decoder to store images even
    though an error occurred during the decoding process, which may be helpful
    for slightly truncated bitstreams.

- Changed version numbering of shared objects.  On Posix operating systems,
  it now follows these guidelines: https://autotools.io/libtool/version.html.
  - Enable setting of individual JPEG-LS encoding parameters
    T1, T2, T3 and RESET.

- Fixed various issues that occurred after the official 3.6.3 release.
  - Various bugfixes in JPEG-LS encoder and decoder.

- Fixed binary Segmentation object creation when width is not dividable by 8.

- Fixed wrong DIMSE status codes A8xx (for C-STORE and C-FIND) and A800 (for
  C-GET and C-MOVE), which were never defined in the official DICOM standard.
  Now, the DCMTK uses the correct DIMSE status code 0122H for "SOP Class not
  supported" for all DIMSE messages.

- Fixed various issues that occurred after the official 3.6.4 release.
  See CHANGES file for details.


Many people have contributed to this new release of DCMTK, appearing here in
alphabetical order.  Thank you very much for your support!

  Klaus Eisentraut <klaus.eisentraut@siemens-healthineers.com>
  Andrey Fedorov <andrey.fedorov@gmail.com>
  Florian Franzen <Florian.Franzen@caesar.de>
  Christian Fremgen <Christian.Fremgen@ith-icoserve.com>
  Omar Ganiev <beched@deteact.com>
  Victor Derks <vderks@delftdi.com>
  Chinna Durai <chinnadurai410@gmail.com>
  Holger Franke <franke@image-instruments.de>
  Sergei Gordey <serg.gordey@gmail.com>
  Daniel Grieger <Daniel.Grieger@ith-icoserve.com>
  Helmut Grohne <helmut@subdivi.de>
  GwanYeong Kim <gy741.kim@gmail.com>
  Bengt Gustafsson <Bengt.Gustafsson@contextvision.se>
  Alexander Haderer <alexander.haderer@loescap.de>
  Peter Klotz <Peter.Klotz@ith-icoserve.com>
  Brian Lucas <brian.lucas@heartit.com>
  Mathieu Malaterre <mathieu.malaterre@gmail.com>
  Savvas Metallidis <savvas.metallidis@infomedcs.com>
  Isaiah Norton <inorton@bwh.harvard.edu>
  Lukas Raesenhoeft <lukas@raesenhoeft.com>
  Uli Schlachter <psychon@znc.in>
  Max Smolens (github user msmolens)
  Christian Wetzel <wetzel@phoenix-pacs.de>
  Gert Wollny <gw.fossdev@gmail.com>
  Sahab Zanjanizadeh <Sahab.Zanjanizadeh@ge.com>

  Thomas Dement
  Hans Meine <hans.meine@mevis.fraunhofer.de>
  Maria Samoylova <mashanedyak@gmail.com>
  Martin Wenger <Martin.Wenger@klinikum-hef.de>
  Brian Wise <brian.wise@medtronic.com>
  Grischa Zengel <ggz@zmt.info>

  Andreas Gravgaard Andersen (GitHub user "agravgaard")
  Hans Johnson (GitHub user "hjmjohnson")
  Stefano Magni

  Forum user "deepakt"
  GitHub user "sercxjo"
  Forum user "AlexanderLysenko"
  GitHub user "eborisch"
  GitHub user "FreddyFunk"

Members of the DCMTK Team who have worked on this release are
(in alphabetical order):
@@ -161,4 +166,4 @@ The DCMTK software can be downloaded via:

  https://dicom.offis.de/dcmtk or https://www.dcmtk.org/

OFFIS e.V., Oldenburg, Germany, 2018-11-29
OFFIS e.V., Oldenburg, Germany, 2019-10-28
+55 −4
Original line number Diff line number Diff line
@@ -33,6 +33,10 @@ if(WIN32 AND NOT MINGW)
  file(GLOB LIBICONV_DIR "${DCMTK_SOURCE_DIR}/../libiconv*")
  find_path(WITH_LIBICONVINC "include/iconv.h" "${LIBICONV_DIR}" NO_DEFAULT_PATH)

  # OpenJPEG support: find out whether user has library
  file(GLOB OPENJPEG_DIR "${DCMTK_SOURCE_DIR}/../openjpeg*")
  find_path(WITH_OPENJPEGINC "lib/openjp2_o.lib" "${OPENJPEG_DIR}" NO_DEFAULT_PATH)

  # libxml support: configure compiler
  if(DCMTK_WITH_XML)
    if(WITH_LIBXMLINC)
@@ -153,7 +157,31 @@ if(WIN32 AND NOT MINGW)
    endif()
  endif()

  # OpenJPEG support: configure compiler
  if(DCMTK_WITH_OPENJPEG)
    if(WITH_OPENJPEGINC)
      # Unfortunately, OpenJPEG uses a version number in the include path. This needs special handling.
      file(GLOB OPENJPEG2_DIR "${WITH_OPENJPEGINC}/include/openjpeg*")
      find_path(WITH_OPENJPEGINC1 "openjpeg.h" "${OPENJPEG2_DIR}" NO_DEFAULT_PATH)
      if ("${WITH_OPENJPEGINC1}" STREQUAL "WITH_OPENJPEGINC1-NOTFOUND")
          message(STATUS "Info: DCMTK OpenJPEG support will be disabled because the header files were not found.")
          set(DCMTK_WITH_OPENJPEG OFF CACHE BOOL "" FORCE)
          set(WITH_OPENJPEG "")
      else()
          set(OPENJPEG_INCDIR "${WITH_OPENJPEGINC1}")
          set(OPENJPEG_LIBDIR "${WITH_OPENJPEGINC}/lib")
          set(OPENJPEG_LIBS debug "${OPENJPEG_LIBDIR}/openjp2_d.lib" optimized "${OPENJPEG_LIBDIR}/openjp2_o.lib")
          message(STATUS "Info: DCMTK OpenJPEG support will be enabled")
          set(WITH_OPENJPEG 1)
      endif()
    else() # turn off library if library path not set
      message(STATUS "Warning: OpenJPEG support will be disabled because openjpeg directory was not specified. Correct path and re-enable DCMTK_WITH_OPENJPEG.")
      set(DCMTK_WITH_OPENJPEG OFF CACHE BOOL "" FORCE)
      set(WITH_OPENJPEG "")
    endif()
  endif()

else(WIN32 AND NOT MINGW)

  # Find TIFF
  if(DCMTK_WITH_TIFF)
@@ -164,11 +192,16 @@ else()
      set(DCMTK_WITH_TIFF OFF CACHE BOOL "" FORCE)
      set(WITH_LIBTIFF "")
    else()
      message(STATUS "Info: DCMTK TIFF support will be enabled")
      set(WITH_LIBTIFF 1)
      # libtiff can be compiled with libjpeg support; if available, add libjpeg to library and include path
      find_package(JPEG QUIET)
      if(NOT JPEG_FOUND)
        message(STATUS "Info: DCMTK TIFF support will be enabled (but without JPEG)")
        include_directories(${TIFF_INCLUDE_DIR})
      else()
        message(STATUS "Info: DCMTK TIFF support will be enabled")
        include_directories(${TIFF_INCLUDE_DIR} ${JPEG_INCLUDE_DIR})
      endif()
      set(LIBTIFF_LIBS ${TIFF_LIBRARY} ${JPEG_LIBRARY})
    endif()
  endif()
@@ -198,7 +231,10 @@ else()
    else()
      include(CheckLibraryExists)
      include(CheckCXXSourceCompiles)
      set(TEMP_INCLUDES "${CMAKE_REQUIRED_INCLUDES}")
      list(APPEND CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
      CHECK_CXX_SOURCE_COMPILES("extern \"C\" {\n#include <openssl/ssl.h>\n}\nint main(){\n#if OPENSSL_VERSION_NUMBER < 0x10001000L\n#error OpenSSL too old\n#endif\n}\n" OPENSSL_VERSION_CHECK)
      set(CMAKE_REQUIRED_INCLUDES "${TEMP_INCLUDES}")
      if(OPENSSL_VERSION_CHECK)
        message(STATUS "Info: DCMTK OPENSSL support will be enabled")
        set(WITH_OPENSSL 1)
@@ -306,8 +342,23 @@ else()
    endif()
  endif()

  # Find OpenJPEG
  if(DCMTK_WITH_OPENJPEG)
    find_package(OpenJPEG QUIET)
    if(NOT OPENJPEG_FOUND)
      message(STATUS "Warning: OpenJPEG support will be disabled because the OpenJPEG library was not found.")
      set(WITH_OPENJPEG "")
      set(DCMTK_WITH_OPENJPEG OFF CACHE BOOL "" FORCE)
    else()
      message(STATUS "Info: DCMTK OpenJPEG support will be enabled")
      set(WITH_OPENJPEG 1)
      include_directories(${OPENJPEG_INCLUDE_DIRS})
      set(OPENJPEG_LIBS ${OPENJPEG_LIBRARIES})
    endif()
  endif()

endif(WIN32 AND NOT MINGW)

if(NOT DEFINED DCMTK_WITH_STDLIBC_ICONV)
  include(CheckCXXSourceCompiles)
  CHECK_CXX_SOURCE_COMPILES("#include <iconv.h>\nint main(){iconv_t cd = iconv_open(\"\",\"\");iconv(cd,0,0,0,0);iconv_close(cd);return 0;}" WITH_STDLIBC_ICONV)
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ set(DCMTK_WITH_ICONV @DCMTK_WITH_ICONV@)
set(DCMTK_WITH_STDLIBC_ICONV @DCMTK_WITH_STDLIBC_ICONV@)
set(DCMTK_WITH_ICU @DCMTK_WITH_ICU@)
set(DCMTK_WITH_WRAP @DCMTK_WITH_WRAP@)
set(DCMTK_WITH_OPENJPEG @DCMTK_WITH_OPENJPEG@)
set(DCMTK_WITH_DOXYGEN @DCMTK_WITH_DOXYGEN@)

# Dictionary-related
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ SET(DCMTK_WITH_ICONV @DCMTK_WITH_ICONV@)
SET(DCMTK_WITH_STDLIBC_ICONV @DCMTK_WITH_STDLIBC_ICONV@)
SET(DCMTK_WITH_ICU @DCMTK_WITH_ICU@)
SET(DCMTK_WITH_WRAP @DCMTK_WITH_WRAP@)
set(DCMTK_WITH_OPENJPEG @DCMTK_WITH_OPENJPEG@)
SET(DCMTK_WITH_DOXYGEN @DCMTK_WITH_DOXYGEN@)

# Dictionary-related
+36 −0
Original line number Diff line number Diff line
# Find OpenJPEG library
#
# Released under BSD license
#
#  OPENJPEG_INCLUDE_DIRS - where to find openjpeg.h, etc.
#  OPENJPEG_LIBRARIES    - Lists of libraries when using OpenJPEG
#  OPENJPEG_FOUND        - True if OpenJPEG found

# Use pkg_check_modules to determine the paths for OpenJPEG
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
  pkg_check_modules(OPENJPEG_PKGCONF libopenjp2)
endif()

# Look for the header file
find_path(OPENJPEG_INCLUDE_DIR NAMES openjpeg.h HINTS ${OPENJPEG_PKGCONF_INCLUDE_DIRS})
mark_as_advanced(OPENJPEG_INCLUDE_DIR)

# Look for the library
set(OPENJPEG_LIBS openjp2)
find_library(OPENJPEG_LIBRARY NAMES ${OPENJPEG_LIBS} HINTS ${OPENJPEG_PKGCONF_LIBRARY_DIRS})
mark_as_advanced(OPENJPEG_LIBRARY)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(OPENJPEG REQUIRED_VARS OPENJPEG_LIBRARY OPENJPEG_INCLUDE_DIR)

# Copy the result to output variables
if(OPENJPEG_FOUND)
  set(OPENJPEG_LIBRARIES ${OPENJPEG_LIBRARY})
  set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG_INCLUDE_DIR})
else()
  set(OPENJPEG_LIBS)
  set(OPENJPEG_LIBRARY)
  set(OPENJPEG_LIBRARIES)
  set(OPENJPEG_INCLUDE_DIR)
  set(OPENJPEG_INCLUDE_DIRS)
endif()
Loading