changeset 6539:e94178d6b6a2

add support for JPEG XL transfer syntaxes
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 09 Dec 2025 12:09:50 +0100
parents 5c2536220ae4
children 59888c43f6b4
files OrthancFramework/Resources/CodeGeneration/DicomTransferSyntaxes.json OrthancFramework/Sources/DicomParsing/FromDcmtkBridge_TransferSyntaxes.impl.h OrthancFramework/Sources/Enumerations.h OrthancFramework/Sources/Enumerations_TransferSyntaxes.impl.h OrthancServer/Resources/DicomConformanceStatement.txt
diffstat 5 files changed, 106 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/OrthancFramework/Resources/CodeGeneration/DicomTransferSyntaxes.json	Tue Dec 09 11:49:01 2025 +0100
+++ b/OrthancFramework/Resources/CodeGeneration/DicomTransferSyntaxes.json	Tue Dec 09 12:09:50 2025 +0100
@@ -372,5 +372,29 @@
     "Name" : "XML Encoding",
     "Value" : "XML",
     "Retired" : true
+  },
+
+  {
+    "UID" : "1.2.840.10008.1.2.4.110",
+    "Name" : "JPEG XL Lossless",
+    "Value" : "JPEGXLLossless",
+    "DCMTK" : "EXS_JPEGXLLossless",
+    "SinceDCMTK" : "369"
+  },
+
+  {
+    "UID" : "1.2.840.10008.1.2.4.111",
+    "Name" : "JPEG XL JPEG Recompression",
+    "Value" : "JPEGXLJPEGRecompression",
+    "DCMTK" : "EXS_JPEGXLJPEGRecompression",
+    "SinceDCMTK" : "369"
+  },
+
+  {
+    "UID" : "1.2.840.10008.1.2.4.112",
+    "Name" : "JPEG XL",
+    "Value" : "JPEGXL",
+    "DCMTK" : "EXS_JPEGXL",
+    "SinceDCMTK" : "369"
   }
 ]
--- a/OrthancFramework/Sources/DicomParsing/FromDcmtkBridge_TransferSyntaxes.impl.h	Tue Dec 09 11:49:01 2025 +0100
+++ b/OrthancFramework/Sources/DicomParsing/FromDcmtkBridge_TransferSyntaxes.impl.h	Tue Dec 09 12:09:50 2025 +0100
@@ -276,6 +276,24 @@
         target = EXS_RLELossless;
         return true;
 
+#if DCMTK_VERSION_NUMBER >= 369
+      case DicomTransferSyntax_JPEGXLLossless:
+        target = EXS_JPEGXLLossless;
+        return true;
+#endif
+
+#if DCMTK_VERSION_NUMBER >= 369
+      case DicomTransferSyntax_JPEGXLJPEGRecompression:
+        target = EXS_JPEGXLJPEGRecompression;
+        return true;
+#endif
+
+#if DCMTK_VERSION_NUMBER >= 369
+      case DicomTransferSyntax_JPEGXL:
+        target = EXS_JPEGXL;
+        return true;
+#endif
+
       default:
         return false;
     }
@@ -533,6 +551,24 @@
         target = DicomTransferSyntax_RLELossless;
         return true;
 
+#if DCMTK_VERSION_NUMBER >= 369
+      case EXS_JPEGXLLossless:
+        target = DicomTransferSyntax_JPEGXLLossless;
+        return true;
+#endif
+
+#if DCMTK_VERSION_NUMBER >= 369
+      case EXS_JPEGXLJPEGRecompression:
+        target = DicomTransferSyntax_JPEGXLJPEGRecompression;
+        return true;
+#endif
+
+#if DCMTK_VERSION_NUMBER >= 369
+      case EXS_JPEGXL:
+        target = DicomTransferSyntax_JPEGXL;
+        return true;
+#endif
+
       default:
         return false;
     }
--- a/OrthancFramework/Sources/Enumerations.h	Tue Dec 09 11:49:01 2025 +0100
+++ b/OrthancFramework/Sources/Enumerations.h	Tue Dec 09 12:09:50 2025 +0100
@@ -284,7 +284,10 @@
     DicomTransferSyntax_HEVCMain10ProfileLevel5_1    /*!< HEVC/H.265 Main 10 Profile / Level 5.1 */,
     DicomTransferSyntax_RLELossless    /*!< RLE - Run Length Encoding (lossless) */,
     DicomTransferSyntax_RFC2557MimeEncapsulation    /*!< RFC 2557 MIME Encapsulation */,
-    DicomTransferSyntax_XML    /*!< XML Encoding */
+    DicomTransferSyntax_XML    /*!< XML Encoding */,
+    DicomTransferSyntax_JPEGXLLossless    /*!< JPEG XL Lossless */,
+    DicomTransferSyntax_JPEGXLJPEGRecompression    /*!< JPEG XL JPEG Recompression */,
+    DicomTransferSyntax_JPEGXL    /*!< JPEG XL */
   };
 
 
--- a/OrthancFramework/Sources/Enumerations_TransferSyntaxes.impl.h	Tue Dec 09 11:49:01 2025 +0100
+++ b/OrthancFramework/Sources/Enumerations_TransferSyntaxes.impl.h	Tue Dec 09 12:09:50 2025 +0100
@@ -155,6 +155,15 @@
       case DicomTransferSyntax_XML:
         return "1.2.840.10008.1.2.6.2";
 
+      case DicomTransferSyntax_JPEGXLLossless:
+        return "1.2.840.10008.1.2.4.110";
+
+      case DicomTransferSyntax_JPEGXLJPEGRecompression:
+        return "1.2.840.10008.1.2.4.111";
+
+      case DicomTransferSyntax_JPEGXL:
+        return "1.2.840.10008.1.2.4.112";
+
       default:
         throw OrthancException(ErrorCode_ParameterOutOfRange);
     }
@@ -291,6 +300,15 @@
       case DicomTransferSyntax_XML:
         return true;
 
+      case DicomTransferSyntax_JPEGXLLossless:
+        return false;
+
+      case DicomTransferSyntax_JPEGXLJPEGRecompression:
+        return false;
+
+      case DicomTransferSyntax_JPEGXL:
+        return false;
+
       default:
         throw OrthancException(ErrorCode_ParameterOutOfRange);
     }
@@ -552,6 +570,24 @@
       return true;
     }
     
+    if (uid == "1.2.840.10008.1.2.4.110")
+    {
+      target = DicomTransferSyntax_JPEGXLLossless;
+      return true;
+    }
+    
+    if (uid == "1.2.840.10008.1.2.4.111")
+    {
+      target = DicomTransferSyntax_JPEGXLJPEGRecompression;
+      return true;
+    }
+    
+    if (uid == "1.2.840.10008.1.2.4.112")
+    {
+      target = DicomTransferSyntax_JPEGXL;
+      return true;
+    }
+    
     return false;
   }
 
@@ -601,5 +637,8 @@
     target.insert(DicomTransferSyntax_RLELossless);
     target.insert(DicomTransferSyntax_RFC2557MimeEncapsulation);
     target.insert(DicomTransferSyntax_XML);
+    target.insert(DicomTransferSyntax_JPEGXLLossless);
+    target.insert(DicomTransferSyntax_JPEGXLJPEGRecompression);
+    target.insert(DicomTransferSyntax_JPEGXL);
   }
 }
--- a/OrthancServer/Resources/DicomConformanceStatement.txt	Tue Dec 09 11:49:01 2025 +0100
+++ b/OrthancServer/Resources/DicomConformanceStatement.txt	Tue Dec 09 12:09:50 2025 +0100
@@ -318,6 +318,9 @@
   MPEG4StereoHighProfileLevel4_2TransferSyntax       | 1.2.840.10008.1.2.4.106
   HEVCMainProfileLevel5_1TransferSyntax              | 1.2.840.10008.1.2.4.107
   HEVCMain10ProfileLevel5_1TransferSyntax            | 1.2.840.10008.1.2.4.108
+  JPEGXLLosslessTransferSyntax                       | 1.2.840.10008.1.2.4.110
+  JPEGXLJPEGRecompressionTransferSyntax              | 1.2.840.10008.1.2.4.111
+  JPEGXLTransferSyntax                               | 1.2.840.10008.1.2.4.112
   JPEGProcess1TransferSyntax                         | 1.2.840.10008.1.2.4.50
   JPEGProcess2_4TransferSyntax                       | 1.2.840.10008.1.2.4.51
   JPEGProcess3_5TransferSyntax                       | 1.2.840.10008.1.2.4.52