JPEGLossless Bugs: SOF3 P in [9,15] and DHT-before-SOF3 Streams
@jantonguirao đang làm issue này rồi.
Từ ngày 22/9/2026.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 48/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- cpp
- Lĩnh vực
- computer-vision
Hướng nghiên cứu
Bắt đầu trong lossless_decoder.cpp và truy vết nvjpegDecodeBatchedSupported đối với các stream SOF3, sử dụng bad_sequence_frame.jpg, MR_frame.jpg và CT_frame.jpg làm các trường hợp được báo cáo. Xác minh rằng các stream không được hỗ trợ trả về trạng thái xử lý phù hợp thay vì tạo ra đầu ra bị điền bằng số 0 một cách im lặng; issue báo cáo rằng các bài kiểm thử đều đạt trong bản sửa được đề xuất, nhưng không nêu tên tệp kiểm thử.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Version
0.8.0
Describe the bug.
The nvjpeg lossless JPEG decoder (NVJPEG_BACKEND_LOSSLESS_JPEG) silently produces zero-filled output buffers for two classes of JPEG Lossless (SOF3) stream. nvjpegDecodeBatchedSupported incorrectly returns isSupported == 0 ("supported") for both, making the failures silent — no error is returned, the decode appears to succeed, but the output buffer contains only zeros.
These bugs were discovered when testing MAPs built using MONAI Deploy App SDK - CT and MR DICOM studies from Philips scanners were identified that produced zero-filled images that propagated silently through model inference, manifesting as empty segmentations. See PR on App SDK for additional background.
Expected behaviour: canDecode should return PROCESSING_STATUS_SAMPLE_TYPE_UNSUPPORTED or PROCESSING_STATUS_CODEC_UNSUPPORTED for these streams, allowing the framework to fall back to a capable CPU decoder (e.g. libjpeg-turbo) that handles them correctly.
Two independent bugs:
Bug 1 — Sub-16-bit SOF3 precision (P in [9,15]):
When the SOF3 P byte encodes a precision of 9–15 (e.g. a Philips scanner writing P=12 for a 12-bit series), nvjpegDecodeBatched silently zero-fills the output buffer. The GPU kernel appears to assume P=16 for all UINT16 lossless streams and misreads the Huffman-coded bitstream when P is smaller.
Bug 2 — DHT segment before SOF3:
When a DHT (0xFFC4) segment appears before the SOF3 marker (0xFFC3) — non-standard ordering that is technically valid per ITU-T T.81 Annex B, but emitted by some Philips scanners — nvjpegDecodeBatched fails to build decode tables correctly and silently zero-fills.
In both cases nvjpegDecodeBatchedSupported returns "supported", which is the core defect.
The issue is isolated to lossless_decoder.cpp / NVJPEG_BACKEND_LOSSLESS_JPEG. The baseline JPEG decoder (cuda_decoder.cpp) and the JPEG 2000 decoder (nvjpeg2k_ext) do not seem to be affected.
Minimum reproducible example
Three JPEG Lossless frames extracted from DICOM files reproduce the two bugs. All have BitsStored=12 in their DICOM tags but differ in JPEG stream encoding. Anonymized test frames and a proposed fix (with passing tests) are available in the linked PR (below).
| File | Manufacturer | SOF3 P byte | Segment order | Result |
|---|---|---|---|---|
bad_sequence_frame.jpg |
Siemens SOMATOM | 16 | SOI → SOF3(P=16) → DHT → SOS | ✅ Correct |
MR_frame.jpg |
Philips Ingenia | 12 | SOI → SOF3(P=12) → DHT → SOS | ❌ Silent zeros (Bug 1) |
CT_frame.jpg |
Philips iCT SP | 16 | SOI → COM → DHT → SOF3(P=16) → SOS | ❌ Silent zeros (Bug 2) |
Environment details
$ ./tools/print_env.sh
<details><summary>Click here to see environment details</summary><pre>
**git***
commit 36b4ee8c91de66070a09fa08fa1abbdc1a89144f (HEAD -> bl/jpeglossless_DHT_bugfix, origin/main, origin/HEAD, main)
Merge: 89500f3 3a7ac73
Author: Sebastian Matysik <[email protected]>
Date: Tue Apr 14 15:19:37 2026 +0200
Merge pull request #49 from NVIDIA/release_v0.8
Adding code for release v0.8.0 (commit 93bcb05)
**git submodules***
e170594ac7cf1dac584da473d4ca9301087090c1 external/NVTX (e170594)
cd1b1bd03900b68505822cfa25cb16851bd6caf1 external/boost/preprocessor (boost-1.89.0)
93c8f2a3c774b84af6f652b1992c48164fae60fc external/dlpack (93c8f2a)
52eb8108c5bdec04579160ae17225d66034bd723 external/googletest (52eb810)
f5fbe867d2d26e4a0a9177a51f6e568868ad3dc8 external/pybind11 (f5fbe86)
***OS Information***
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS"
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
Linux EW22-04661 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
***GPU Information***
Wed May 6 13:47:59 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.64.04 Driver Version: 577.00 CUDA Version: 12.9 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 3090 On | 00000000:01:00.0 Off | N/A |
| 0% 42C P8 18W / 350W | 1335MiB / 24576MiB | 6% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
***CPU***
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 39 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Vendor ID: GenuineIntel
Model name: 11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz
CPU family: 6
Model: 167
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 1
Stepping: 1
BogoMIPS: 4991.99
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves avx512vbmi umip avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid fsrm md_clear flush_l1d arch_capabilities
Virtualization: VT-x
Hypervisor vendor: Microsoft
Virtualization type: full
L1d cache: 384 KiB (8 instances)
L1i cache: 256 KiB (8 instances)
L2 cache: 4 MiB (8 instances)
L3 cache: 16 MiB (1 instance)
Vulnerability Gather data sampling: Unknown: Dependent on hypervisor status
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Retbleed: Mitigation; Enhanced IBRS
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
***CMake***
/usr/bin/cmake
cmake: /home/bluna301/miniconda3/envs/nvimgcodec/lib/libcurl.so.4: no version information available (required by cmake)
cmake version 3.22.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
***g++***
/usr/bin/g++
g++ (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
***nvcc***
/usr/local/cuda/bin/nvcc
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Jun__6_02:18:23_PDT_2024
Cuda compilation tools, release 12.5, V12.5.82
Build cuda_12.5.r12.5/compiler.34385749_0
***Python***
/home/bluna301/miniconda3/envs/nvimgcodec/bin/python
Python 3.10.20
***Environment Variables***
PATH : /usr/local/cuda/bin:/home/bluna301/.vscode-server/data/User/globalStorage/github.copilot-chat/debugCommand:/home/bluna301/.vscode-server/data/User/globalStorage/github.copilot-chat/copilotCli:/home/bluna301/.vscode-server/bin/10c8e557c8b9f9ed0a87f61f1c9a44bde731c409/bin/remote-cli:/home/bluna301/.local/bin:/home/bluna301/miniconda3/envs/nvimgcodec/bin:/home/bluna301/miniconda3/condabin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program
Files/NVIDIA : GPU
Computing : Toolkit/CUDA/v12.0/bin:/mnt/c/Program
Files/NVIDIA : GPU
Computing : Toolkit/CUDA/v12.0/libnvvp:/mnt/c/Program
Files : (x86)/Common
Files/Oracle/Java/javapath:/mnt/c/ProgramData/Oracle/Java/javapath:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0:/mnt/c/WINDOWS/System32/OpenSSH:/mnt/c/PROGRA~2/CMWeb/bin:/mnt/c/Program: Files/MATLAB/MATLAB
Compiler : Runtime/v84/runtime/win64:/mnt/c/Users/mahfq2/AppData/Local/Programs/Python/Python310:/mnt/c/Users/mahfq2/AppData/Local/pip:/mnt/c/Users/mahfq2/AppData/Local/Programs/Python/Python310/Scripts:/mnt/c/Program
Files/Plastimatch/bin:/mnt/c/Program: Files/Plastimatch:/mnt/c/Program
Files/NVIDIA : Corporation/Nsight
Compute : 2022.4.0:/mnt/c/Program
Files : (x86)/NVIDIA
Corporation/PhysX/Common:/mnt/c/Program: Files/NVIDIA
Corporation/NVIDIA : NvDLISR:/mnt/c/Program
Files/Git/cmd:/mnt/c/Program : Files/dotnet:/Docker/host/bin:/mnt/c/Users/LUNPB9/AppData/Local/anaconda3:/mnt/c/Users/LUNPB9/AppData/Local/anaconda3/Library/mingw-w64/bin:/mnt/c/Users/LUNPB9/AppData/Local/anaconda3/Library/usr/bin:/mnt/c/Users/LUNPB9/AppData/Local/anaconda3/Library/bin:/mnt/c/Users/LUNPB9/AppData/Local/anaconda3/Scripts:/mnt/c/Users/LUNPB9/AppData/Local/Programs/Python/Python312/Scripts:/mnt/c/Users/LUNPB9/AppData/Local/Programs/Python/Python312:/mnt/c/Users/LUNPB9/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/LUNPB9/AppData/Local/Programs/Microsoft
VS : Code/bin:/snap/bin:/home/bluna301/.vscode-server/extensions/ms-python.debugpy-2026.6.0-linux-x64/bundled/scripts/noConfigScripts
LD_LIBRARY_PATH : /home/bluna301/miniconda3/envs/nvimgcodec/lib/python3.10/site-packages/nvidia/libnvcomp/lib64:/home/bluna301/miniconda3/envs/nvimgcodec/lib/python3.10/site-packages/nvidia/nvjpeg2k/lib:/home/bluna301/miniconda3/envs/nvimgcodec/lib/python3.10/site-packages/nvidia/nvtiff/lib:/home/bluna301/miniconda3/envs/nvimgcodec/lib:/usr/lib/llvm-14/lib:/usr/local/cuda/lib64:/home/bluna301/nvImageCodec/build_feature/bin/lib64:/home/bluna301/nvImageCodec/build_feature/bin/lib:/home/bluna301/nvImageCodec/build_feature/src:/home/bluna301/nvImageCodec/build_feature/extensions/nvjpeg:/home/bluna301/nvImageCodec/build_feature/extensions/nvjpeg2k:/home/bluna301/nvImageCodec/build_feature/extensions/nvtiff:/home/bluna301/nvImageCodec/build_feature/extensions/opencv:/home/bluna301/nvImageCodec/build_feature/extensions/nvbmp:/home/bluna301/nvImageCodec/build_feature/extensions/nvpnm:/home/bluna301/nvImageCodec/build_feature/extensions/libjpeg_turbo:/home/bluna301/nvImageCodec/build_feature/extensions/libtiff
NUMBAPRO_NVVM :
NUMBAPRO_LIBDEVICE :
CONDA_PREFIX : /home/bluna301/miniconda3/envs/nvimgcodec
PYTHON_PATH :
***conda packages***
/home/bluna301/miniconda3/condabin/conda
# packages in environment at /home/bluna301/miniconda3/envs/nvimgcodec:
#
# Name Version Build Channel
_openmp_mutex 4.5 20_gnu conda-forge
alabaster 0.7.16 pyhd8ed1ab_0 conda-forge
alsa-lib 1.2.15.3 hb03c661_0 conda-forge
aom 3.9.1 hac33072_0 conda-forge
aws-c-auth 0.10.1 ha62d5e7_3 conda-forge
aws-c-cal 0.9.13 h2c9d079_1 conda-forge
aws-c-common 0.12.6 hb03c661_0 conda-forge
aws-c-compression 0.3.2 h8b1a151_0 conda-forge
aws-c-http 0.10.13 h4bacb7b_0 conda-forge
aws-c-io 0.26.3 h692f434_1 conda-forge
aws-c-s3 0.12.2 he6ee468_1 conda-forge
aws-c-sdkutils 0.2.4 h8b1a151_4 conda-forge
aws-checksums 0.2.10 h8b1a151_0 conda-forge
babel 2.18.0 pyhcf101f3_1 conda-forge
backports.zstd 1.4.0 py310h69bd2ac_0 conda-forge
binutils_impl_linux-64 2.45.1 default_hfdba357_102 conda-forge
blas 1.0 openblas
breathe 4.35.0 pyhd8ed1ab_4 conda-forge
brotli-python 1.2.0 py310hba01987_1 conda-forge
bzip2 1.0.8 hda65f42_9 conda-forge
c-ares 1.34.6 hb03c661_0 conda-forge
ca-certificates 2026.4.22 hbd8a1cb_0 conda-forge
cairo 1.18.4 he90730b_1 conda-forge
certifi 2026.4.22 pyhd8ed1ab_0 conda-forge
charset-normalizer 3.4.7 pyhd8ed1ab_0 conda-forge
clang 14.0.6 pypi_0 pypi
clang-14 14.0.6 default_h7634d5b_1 conda-forge
colorama 0.4.6 pyhd8ed1ab_1 conda-forge
cyrus-sasl 2.1.28 hac629b4_1 conda-forge
dav1d 1.2.1 hd590300_0 conda-forge
dbus 1.16.2 h24cb091_1 conda-forge
docutils 0.17.1 py310hff52083_7 conda-forge
double-conversion 3.4.0 hecca717_0 conda-forge
exceptiongroup 1.3.1 pypi_0 pypi
ffmpeg 8.1.1 gpl_hee00b0e_901 conda-forge
flake8 7.3.0 pyhd8ed1ab_0 conda-forge
font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge
font-ttf-inconsolata 3.000 h77eed37_0 conda-forge
font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge
font-ttf-ubuntu 0.83 h77eed37_3 conda-forge
fontconfig 2.17.1 h27c8c51_0 conda-forge
fonts-conda-ecosystem 1 0 conda-forge
fonts-conda-forge 1 hc364b38_1 conda-forge
fribidi 1.0.16 hb03c661_0 conda-forge
future 1.0.0 pyhd8ed1ab_2 conda-forge
gcc_impl_linux-64 15.2.0 he420e7e_18 conda-forge
gdk-pixbuf 2.44.6 h2b0a6b4_0 conda-forge
glslang 16.3.0 h96af755_0 conda-forge
gmp 6.3.0 hac33072_2 conda-forge
graphite2 1.3.14 hecca717_2 conda-forge
h2 4.3.0 pyhcf101f3_0 conda-forge
harfbuzz 14.2.0 h6083320_0 conda-forge
hdf5 2.1.0 nompi_h87a9417_105 conda-forge
hpack 4.1.0 pyhd8ed1ab_0 conda-forge
hyperframe 6.1.0 pyhd8ed1ab_0 conda-forge
icu 78.3 h33c6efd_0 conda-forge
idna 3.13 pyhcf101f3_0 conda-forge
imageio 2.37.3 pypi_0 pypi
imagesize 2.0.0 pyhd8ed1ab_0 conda-forge
imath 3.2.2 hde8ca8f_0 conda-forge
importlib-metadata 8.8.0 pyhcf101f3_0 conda-forge
iniconfig 2.3.0 pypi_0 pypi
intel-gmmlib 22.10.0 hb700be7_0 conda-forge
intel-media-driver 26.1.6 hecca717_0 conda-forge
jinja2 3.1.6 pyhcf101f3_1 conda-forge
kernel-headers_linux-64 5.14.0 he073ed8_3 conda-forge
keyutils 1.6.3 hb9d3cd8_0 conda-forge
krb5 1.22.2 ha1258a1_0 conda-forge
lame 3.100 h166bdaf_1003 conda-forge
lcms2 2.19 h0c24ade_0 conda-forge
ld_impl_linux-64 2.45.1 default_hbd61a6d_102 conda-forge
lerc 4.1.0 hdb68285_0 conda-forge
level-zero 1.28.4 hb700be7_0 conda-forge
libabseil 20260107.1 cxx17_h7b12aa8_0 conda-forge
libaec 1.1.5 h088129d_0 conda-forge
libass 0.17.4 h96ad9f0_0 conda-forge
libavif16 1.4.1 hcfa2d63_0 conda-forge
libblas 3.9.0 1_h86c2bf4_netlib conda-forge
libbrotlicommon 1.2.0 hb03c661_1 conda-forge
libbrotlidec 1.2.0 hb03c661_1 conda-forge
libbrotlienc 1.2.0 hb03c661_1 conda-forge
libcap 2.77 hd0affe5_1 conda-forge
libcblas 3.9.0 13_h8e06fc2_netlib conda-forge
libclang 14.0.6 default_h7634d5b_1 conda-forge
libclang-cpp14 14.0.6 default_h7634d5b_1 conda-forge
libclang13 14.0.6 default_h9986a30_1 conda-forge
libcups 2.3.3 h7a8fb5f_6 conda-forge
libcurl 8.20.0 hcf29cc6_0 conda-forge
libdeflate 1.25 h17f619e_0 conda-forge
libdovi 3.3.2 ha23c83e_4 conda-forge
libdrm 2.4.125 hb03c661_1 conda-forge
libedit 3.1.20250104 pl5321h7949ede_0 conda-forge
libegl 1.7.0 ha4b6fd6_2 conda-forge
libegl-devel 1.7.0 ha4b6fd6_2 conda-forge
libev 4.33 hd590300_2 conda-forge
libexpat 2.8.0 hecca717_0 conda-forge
libffi 3.5.2 h3435931_0 conda-forge
libflac 1.5.0 he200343_1 conda-forge
libfreetype 2.14.3 ha770c72_0 conda-forge
libfreetype6 2.14.3 h73754d4_0 conda-forge
libgcc 15.2.0 he0feb66_18 conda-forge
libgcc-devel_linux-64 15.2.0 hcc6f6b0_118 conda-forge
libgcc-ng 15.2.0 h69a702a_18 conda-forge
libgfortran 15.2.0 h166f726_7
libgfortran-ng 15.2.0 h166f726_7
libgfortran5 15.2.0 hc633d37_7
libgl 1.7.0 ha4b6fd6_2 conda-forge
libgl-devel 1.7.0 ha4b6fd6_2 conda-forge
libglib 2.88.1 h0d30a3d_1 conda-forge
libglvnd 1.7.0 ha4b6fd6_2 conda-forge
libglx 1.7.0 ha4b6fd6_2 conda-forge
libglx-devel 1.7.0 ha4b6fd6_2 conda-forge
libgomp 15.2.0 he0feb66_18 conda-forge
libhwloc 2.12.2 default_hafda6a7_1000 conda-forge
libhwy 1.4.0 h10be129_0 conda-forge
libiconv 1.18 h3b78370_2 conda-forge
libjpeg-turbo 3.1.4.1 hb03c661_0 conda-forge
libjxl 0.11.2 h174a0a3_1 conda-forge
liblapack 3.9.0 13_h8876d29_netlib conda-forge
liblapacke 3.9.0 13_hb041515_netlib conda-forge
libllvm14 14.0.6 hcd5def8_4 conda-forge
liblzma 5.8.3 hb03c661_0 conda-forge
libnghttp2 1.68.1 h877daf1_0 conda-forge
libnsl 2.0.1 hb9d3cd8_1 conda-forge
libntlm 1.8 hb9d3cd8_0 conda-forge
libogg 1.3.5 hd0c01bc_1 conda-forge
libopenblas 0.3.31 hf7dbefb_2
libopencv 4.13.0 qt6_py310h7d3a38c_608 conda-forge
libopenvino 2026.0.0 hb56ce9e_1 conda-forge
libopenvino-auto-batch-plugin 2026.0.0 hd85de46_1 conda-forge
libopenvino-auto-plugin 2026.0.0 hd85de46_1 conda-forge
libopenvino-hetero-plugin 2026.0.0 hd41364c_1 conda-forge
libopenvino-intel-cpu-plugin 2026.0.0 hb56ce9e_1 conda-forge
libopenvino-intel-gpu-plugin 2026.0.0 hb56ce9e_1 conda-forge
libopenvino-intel-npu-plugin 2026.0.0 hb56ce9e_1 conda-forge
libopenvino-ir-frontend 2026.0.0 hd41364c_1 conda-forge
libopenvino-onnx-frontend 2026.0.0 h7a07914_1 conda-forge
libopenvino-paddle-frontend 2026.0.0 h7a07914_1 conda-forge
libopenvino-pytorch-frontend 2026.0.0 hecca717_1 conda-forge
libopenvino-tensorflow-frontend 2026.0.0 h78e8023_1 conda-forge
libopenvino-tensorflow-lite-frontend 2026.0.0 hecca717_1 conda-forge
libopus 1.6.1 h280c20c_0 conda-forge
libpciaccess 0.18 hb9d3cd8_0 conda-forge
libplacebo 7.360.1 h9eeb4b2_0 conda-forge
libpng 1.6.58 h421ea60_0 conda-forge
libpq 18.3 h9abb657_0 conda-forge
libprotobuf 6.33.5 h2b00c02_0 conda-forge
librsvg 2.62.1 h4c96295_0 conda-forge
libsanitizer 15.2.0 h90f66d4_18 conda-forge
libsndfile 1.2.2 hc7d488a_2 conda-forge
libsqlite 3.53.1 h0c1763c_0 conda-forge
libssh2 1.11.1 hcf80075_0 conda-forge
libstdcxx 15.2.0 h934c35e_18 conda-forge
libstdcxx-devel_linux-64 15.2.0 hd446a21_118 conda-forge
libstdcxx-ng 15.2.0 hdf11a46_18 conda-forge
libsystemd0 260.1 h6569c3e_0 conda-forge
libtiff 4.7.1 h9d88235_1 conda-forge
libudev1 260.1 h6569c3e_0 conda-forge
libunwind 1.8.3 h65a8314_0 conda-forge
liburing 2.14 hb700be7_0 conda-forge
libusb 1.0.29 h73b1eb8_0 conda-forge
libuuid 2.42 h5347b49_0 conda-forge
libva 2.23.0 he1eb515_0 conda-forge
libvorbis 1.3.7 h54a6638_2 conda-forge
libvpl 2.16.0 h54a6638_0 conda-forge
libvpx 1.15.2 hecca717_0 conda-forge
libvulkan-loader 1.4.341.0 h5279c79_0 conda-forge
libwebp-base 1.6.0 hd42ef1d_0 conda-forge
libxcb 1.17.0 h8a09558_0 conda-forge
libxcrypt 4.4.36 hd590300_1 conda-forge
libxkbcommon 1.13.1 hca5e8e5_0 conda-forge
libxml2 2.15.3 h49c6c72_0 conda-forge
libxml2-16 2.15.3 hca6bf5a_0 conda-forge
libzlib 1.3.2 h25fd6f3_2 conda-forge
markupsafe 3.0.3 py310h3406613_1 conda-forge
mccabe 0.7.0 pyhd8ed1ab_1 conda-forge
mpg123 1.32.9 hc50e24c_0 conda-forge
ncurses 6.6 hdb14827_0 conda-forge
numpy 2.2.5 py310h35d6838_3
numpy-base 2.2.5 py310h4bc27c9_3
nvidia-libnvcomp-cu12 5.2.0.13 pypi_0 pypi
nvidia-nvjpeg2k-cu12 0.10.0.49 pypi_0 pypi
nvidia-nvtiff-cu12 0.7.0.79 pypi_0 pypi
ocl-icd 2.3.3 hb9d3cd8_0 conda-forge
opencl-headers 2025.06.13 hecca717_0 conda-forge
opencv 4.13.0 qt6_py310h1a5f3ab_608 conda-forge
openexr 3.4.11 h9f1635d_0 conda-forge
openh264 2.6.0 hc22cd8d_0 conda-forge
openjpeg 2.5.4 h55fea9a_0 conda-forge
openjph 0.27.0 h8d634f6_0 conda-forge
openldap 2.6.13 hbde042b_0 conda-forge
openssl 3.6.2 h35e630c_0 conda-forge
packaging 26.2 pyhc364b38_0 conda-forge
pango 1.56.4 hda50119_1 conda-forge
pcre2 10.47 haa7fec5_0 conda-forge
pillow 12.2.0 pypi_0 pypi
pip 26.1.1 pyh8b19718_0 conda-forge
pixman 0.46.4 h54a6638_1 conda-forge
pkg-config 0.29.2 h4bc722e_1009 conda-forge
pluggy 1.6.0 pypi_0 pypi
pthread-stubs 0.4 hb9d3cd8_1002 conda-forge
pugixml 1.15 h3f63f65_0 conda-forge
pulseaudio-client 17.0 h9a6aba3_3 conda-forge
py-opencv 4.13.0 qt6_py310h510e9db_608 conda-forge
pycodestyle 2.14.0 pyhd8ed1ab_0 conda-forge
pydicom 3.0.2 pypi_0 pypi
pyflakes 3.4.0 pyhd8ed1ab_0 conda-forge
pygments 2.20.0 pyhd8ed1ab_0 conda-forge
pylibjpeg 2.1.0 pypi_0 pypi
pylibjpeg-libjpeg 2.4.0 pypi_0 pypi
pylibjpeg-openjpeg 2.5.0 pypi_0 pypi
pysocks 1.7.1 pyha55dd90_7 conda-forge
pytest 9.0.3 pypi_0 pypi
python 3.10.20 h3c07f61_0_cpython conda-forge
python-clang 14.0.6 default_hccd1708_1 conda-forge
python_abi 3.10 8_cp310 conda-forge
qt6-main 6.11.0 pl5321h16c4a6b_4 conda-forge
rav1e 0.8.1 h1fbca29_0 conda-forge
readline 8.3 h853b02a_0 conda-forge
requests 2.33.1 pyhcf101f3_1 conda-forge
s2n 1.7.2 hc5a330e_1 conda-forge
sdl2 2.32.56 h54a6638_0 conda-forge
sdl3 3.4.8 hdeec2a5_0 conda-forge
setuptools 82.0.1 pyh332efcf_0 conda-forge
shaderc 2026.2 h718be3e_0 conda-forge
snappy 1.2.2 h03e3b7b_1 conda-forge
snowballstemmer 3.0.1 pyhd8ed1ab_0 conda-forge
sphinx 4.5.0 pyh6c4a22f_0 conda-forge
sphinx_rtd_theme 1.3.0 pyha770c72_0 conda-forge
sphinxcontrib-applehelp 1.0.4 pyhd8ed1ab_0 conda-forge
sphinxcontrib-devhelp 1.0.2 py_0 conda-forge
sphinxcontrib-htmlhelp 2.0.1 pyhd8ed1ab_0 conda-forge
sphinxcontrib-jquery 4.1 pyhd8ed1ab_1 conda-forge
sphinxcontrib-jsmath 1.0.1 pyhd8ed1ab_1 conda-forge
sphinxcontrib-qthelp 1.0.3 py_0 conda-forge
sphinxcontrib-serializinghtml 1.1.5 pyhd8ed1ab_2 conda-forge
spirv-tools 2026.1 hb700be7_0 conda-forge
svt-av1 4.0.1 hecca717_0 conda-forge
sysroot_linux-64 2.34 h087de78_3 conda-forge
tbb 2023.0.0 h51de99f_1 conda-forge
tk 8.6.13 noxft_h366c992_103 conda-forge
tomli 2.4.1 pypi_0 pypi
typing-extensions 4.15.0 pypi_0 pypi
tzdata 2025c hc9c84f9_1 conda-forge
urllib3 2.6.3 pyhd8ed1ab_0 conda-forge
wayland 1.25.0 hd6090a7_0 conda-forge
wayland-protocols 1.47 hd8ed1ab_0 conda-forge
wheel 0.47.0 pyhd8ed1ab_0 conda-forge
x264 1!164.3095 h166bdaf_2 conda-forge
x265 3.5 h924138e_3 conda-forge
xcb-util 0.4.1 h4f16b4b_2 conda-forge
xcb-util-cursor 0.1.6 hb03c661_0 conda-forge
xcb-util-image 0.4.0 hb711507_2 conda-forge
xcb-util-keysyms 0.4.1 hb711507_0 conda-forge
xcb-util-renderutil 0.3.10 hb711507_0 conda-forge
xcb-util-wm 0.4.2 hb711507_0 conda-forge
xkeyboard-config 2.47 hb03c661_0 conda-forge
xorg-libice 1.1.2 hb9d3cd8_0 conda-forge
xorg-libsm 1.2.6 he73a12e_0 conda-forge
xorg-libx11 1.8.13 he1eb515_0 conda-forge
xorg-libxau 1.0.12 hb03c661_1 conda-forge
xorg-libxcomposite 0.4.7 hb03c661_0 conda-forge
xorg-libxcursor 1.2.3 hb9d3cd8_0 conda-forge
xorg-libxdamage 1.1.6 hb9d3cd8_0 conda-forge
xorg-libxdmcp 1.1.5 hb03c661_1 conda-forge
xorg-libxext 1.3.7 hb03c661_0 conda-forge
xorg-libxfixes 6.0.2 hb03c661_0 conda-forge
xorg-libxi 1.8.2 hb9d3cd8_0 conda-forge
xorg-libxrandr 1.5.5 hb03c661_0 conda-forge
xorg-libxrender 0.9.12 hb9d3cd8_0 conda-forge
xorg-libxscrnsaver 1.2.4 hb9d3cd8_0 conda-forge
xorg-libxtst 1.2.5 hb9d3cd8_3 conda-forge
xorg-libxxf86vm 1.1.7 hb03c661_0 conda-forge
xorg-xorgproto 2025.1 hb03c661_0 conda-forge
zipp 3.23.1 pyhcf101f3_0 conda-forge
zlib 1.3.2 h25fd6f3_2 conda-forge
zstd 1.5.7 hb78ec9c_6 conda-forge
</pre></details>
Relevant log output
I created a script that attempts to use nvImageCodec, GDCM, and decoder_nvimgcodec.py (attempts to use nvImageCodec decoders first before falling back to any others present, like GDCM) to handle these compressed DICOM cases, and then compares GDCM to decoder_nvimgcodec outputs. Results for 3 files of interest shown below:
bad_sequence.dcm (no issues):
File : bad_sequence.dcm
TS=1.2.840.10008.1.2.4.70 BitsAllocated=16 BitsStored=12
[nvimgcodec decoder] decoded shape=(512, 512, 1) dtype=uint16 all_zero=False
[gdcm decoder ] decoded shape=(512, 512) dtype=uint16 all_zero=False
[decoder pipeline ] decoded shape=(512, 512) dtype=uint16 all_zero=False [via nvimgcodec]
[comparison ] MATCH (decoder pipeline pixel-identical to GDCM)
MR (SOF3 P = 12):
File : MR.dcm
TS=1.2.840.10008.1.2.4.70 BitsAllocated=16 BitsStored=12
[nvimgcodec decoder] decoded shape=(320, 320, 1) dtype=uint16 all_zero=True <-- SILENT ZERO-FILL BUG
[gdcm decoder ] decoded shape=(320, 320) dtype=uint16 all_zero=False
[decoder pipeline ] decoded shape=(320, 320) dtype=uint16 all_zero=True [via nvimgcodec] <-- ALL ZERO
[comparison ] MISMATCH <-- PIXEL CORRUPTION max_diff=1092 mean_diff=75.5825
CT (DHT before SOF3):
File : CT.dcm
TS=1.2.840.10008.1.2.4.70 BitsAllocated=16 BitsStored=12
[nvimgcodec decoder] decoded shape=(512, 512, 1) dtype=uint16 all_zero=True <-- SILENT ZERO-FILL BUG
[gdcm decoder ] decoded shape=(512, 512) dtype=uint16 all_zero=False
[decoder pipeline ] decoded shape=(512, 512) dtype=uint16 all_zero=True [via nvimgcodec] <-- ALL ZERO
[comparison ] MISMATCH <-- PIXEL CORRUPTION max_diff=2540 mean_diff=467.2943
Other/Misc.
A fix is implemented in extensions/nvjpeg/lossless_decoder.cpp in canDecode, adding:
- A precision check using
cs_image_info.plane_info[0].precision(the SOF3 P byte read by the nvimgcodec JPEG parser) to reject P in [9,15] - A
has_dht_before_sof3()pre-scan of the raw bitstream before callingnvjpegJpegStreamParseto reject DHT-before-SOF3 streams
The three aforementioned anonymized DICOM files were converted to .jpeg and used for testing - test/extensions/nvjpeg_ext_lossless_decoder_test.cpp was updated to include these new tests.
References:
- ITU-T T.81 (ISO/IEC 10918-1), Annex B — JPEG interchange format syntax
- MONAI Deploy App SDK PR
Check for duplicates
- I have searched the open bugs/issues and have found no duplicates for this bug report
- Ngôn ngữ chính
- Jupyter Notebook
- Star
- 164
- Fork
- 26
- Merge trung bình
- 27 phút
- Pull request đã merge (30 ngày)
- 1
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của NVIDIA/nvImageCodec
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 79/100
NVIDIA/nvImageCodec#65 · 1 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 72/100
NVIDIA/nvImageCodec#66 · 1 bình luận ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 38/100
NVIDIA/nvImageCodec#64 ·
-
nvjpeg2k error 3 (Bad jpeg) on valid JPEG 2000 aerial photos that OpenJPEG and ffmpeg decode identicallyCó thể đã có người làm @mkepa-nv đã nhận 6 ngày trước. Đang mởbug
NVIDIA/nvImageCodec#63 · 2 bình luận · 1 người được giao ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 8/100
NVIDIA/nvImageCodec#60 ·
Tất cả issue của NVIDIA/nvImageCodec
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Stirling-Tools/Stirling-PDF#8875 · 1 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
COCO crowd annotations (iscrowd=1) are counted as ground truth, lowering detection recall and APĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
JdeRobot/PerceptionMetrics#681 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
opencv/opencv#30744 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 Dưới một giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 2 ngày