NVIDIA / NVIDIA/nvImageCodec

C++ API works wrong with decode dependencies although process of building from sources is full and successful

Open
#28 9 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Jupyter Notebook
Stars
159
Forks
22
PR merge metrics
No merged PRs in 30d

Description

Version

v0.4.1

Describe the bug.

After I built successfully C++ API on Jetson AGX Orin (Jetpack 6.0) when I run the example by the command-line:
./example/nvimtrans/nvimtrans -i ../example/assets/images/tabby_tiger_cat.jpg -o /app/test.jpg -v 5
I have received the error message as below:

nvImageCodec version: 0.4.1
 - extension API version: 0.4.0
 - CUDA Runtime version: 12.2
Using GPU: Orin with Compute Capability 8.7
[INFO] [nvimgcodec] Registering extension nvimgcodec_builtin_parsers version:0.4.1
[INFO] [nvimgcodec] Framework is registering parser (id:bmp_parser codec:bmp)
[INFO] [nvimgcodec] Codec bmp not yet registered, registering for first time
[INFO] [nvimgcodec] Framework is registering parser (id:jpeg_parser codec:jpeg)
[INFO] [nvimgcodec] Codec jpeg not yet registered, registering for first time
[INFO] [nvimgcodec] Framework is registering parser (id:jpeg2k_parser codec:jpeg2k)
[INFO] [nvimgcodec] Codec jpeg2k not yet registered, registering for first time
[INFO] [nvimgcodec] Framework is registering parser (id:png_parser codec:png)
[INFO] [nvimgcodec] Codec png not yet registered, registering for first time
[INFO] [nvimgcodec] Framework is registering parser (id:pnm_parser codec:pnm)
[INFO] [nvimgcodec] Codec pnm not yet registered, registering for first time
[INFO] [nvimgcodec] Framework is registering parser (id:tiff_parser codec:tiff)
[INFO] [nvimgcodec] Codec tiff not yet registered, registering for first time
[INFO] [nvimgcodec] Framework is registering parser (id:webp_parser codec:webp)
[INFO] [nvimgcodec] Codec webp not yet registered, registering for first time
Loading /app/nvImageCodec/build/./example/nvimtrans/../example/assets/images/tabby_tiger_cat.jpg file
Error: Unsupported  file format
[INFO] [nvimgcodec] Unregistering extension nvimgcodec_builtin_parsers version:0.4.1
[INFO] [nvimgcodec] Framework is unregistering parser (id:bmp_parser codec:bmp)
[INFO] [nvimgcodec] Framework is unregistering parser (id:jpeg_parser codec:jpeg)
[INFO] [nvimgcodec] Framework is unregistering parser (id:jpeg2k_parser codec:jpeg2k)
[INFO] [nvimgcodec] Framework is unregistering parser (id:png_parser codec:png)
[INFO] [nvimgcodec] Framework is unregistering parser (id:pnm_parser codec:pnm)
[INFO] [nvimgcodec] Framework is unregistering parser (id:tiff_parser codec:tiff)
[INFO] [nvimgcodec] Framework is unregistering parser (id:webp_parser codec:webp)

While I checked extensions, it had fully all above dependencies. The following is a trace of my build and installation.
Firstly, I built a docker image using Dockerfile below:

ARG BASE_IMAGE=nvcr.io/nvidia/deepstream:7.0-triton-multiarch
FROM ${BASE_IMAGE}

ENV DEBIAN_FRONTEND=noninteractive

ARG LIB_PREFIX=/usr/local/
ARG CMAKE_VERSION=3.24.3

ENV PATH="/usr/local/cuda-12.2/bin:${PATH}"
ENV LD_LIBRARY_PATH="${LIB_PREFIX}/lib/:/usr/lib/aarch64-linux-gnu/tegra/:${LD_LIBRARY_PATH}"

RUN rm /etc/apt/sources.list.d/cuda.list || true
RUN apt update && \
	apt install -y python3-clang python3-pip wget git && \
	apt install -y --no-install-recommends python3-pytest

WORKDIR /tmp 
RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz && \
	tar xvf cmake-${CMAKE_VERSION}.tar.gz && \
	cd cmake-${CMAKE_VERSION} && \
	./bootstrap --parallel=4 && \
	make -j$(nproc) && make install && ldconfig && \
	cd .. && rm -f cmake-${CMAKE_VERSION}.tar.gz && rm -rf cmake-${CMAKE_VERSION}
RUN wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.13.0-beta/cvcuda-lib-0.13.0_beta-cuda12-aarch64-linux.tar.xz && \
	wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.13.0-beta/cvcuda-dev-0.13.0_beta-cuda12-aarch64-linux.tar.xz && \
	apt install -y ./cvcuda-lib-0.13.0_beta-cuda12-aarch64-linux.deb  ./cvcuda-dev-0.13.0_beta-cuda12-aarch64-linux.deb && \
	rm cvcuda-*
RUN wget https://github.com/NixOS/patchelf/releases/download/0.17.2/patchelf-0.17.2.tar.gz && \
	tar -xvzf patchelf-0.17.2.tar.gz && \
	cd patchelf-0.17.2 && \
	./configure --prefix=/usr/local/ --docdir=/usr/share/doc/patchelf-0.17.2 && \
	make -j$(nproc) && make install && ldconfig && \
	cd .. && rm -rf patchelf-0.17.2*
	
RUN python3 -m pip install sphinx==5.0.0 sphinx_rtd_theme breathe future setuptools wheel clang==14.0 flake8 && \
	python3 -m pip install libclang==14.0.1

ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES all
RUN apt --fix-broken install

WORKDIR /app

In the container based from the above image, I set up nvImageCodec C++ API as following:

git clone https://github.com/NVIDIA/nvImageCodec.git && \
cd nvImageCodec && \
git checkout v0.4.1 && git switch -c v0.4.1 && \
git submodule update --init --recursive --depth 1 && \
cd external/libtiff/build/ && \
cmake .. && make -j$(nproc) && make install

Because when I directly executed ./build_deps.sh to install libtiff that made error when I build the API:

/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMASetupEncode':
tif_lzma.c:(.text+0xb4): undefined reference to `lzma_end'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMASetupDecode':
tif_lzma.c:(.text+0x104): undefined reference to `lzma_end'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMACleanup':
tif_lzma.c:(.text+0x170): undefined reference to `lzma_end'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMAVSetField':
tif_lzma.c:(.text+0x1fc): undefined reference to `lzma_lzma_preset'
/usr/bin/ld: tif_lzma.c:(.text+0x238): undefined reference to `lzma_stream_encoder'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMAEncode':
tif_lzma.c:(.text+0x384): undefined reference to `lzma_code'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMAPostEncode':
tif_lzma.c:(.text+0x564): undefined reference to `lzma_code'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMAPreDecode':
tif_lzma.c:(.text+0x6e0): undefined reference to `lzma_stream_decoder'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMAPreEncode':
tif_lzma.c:(.text+0x864): undefined reference to `lzma_stream_encoder'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `LZMADecode':
tif_lzma.c:(.text+0x9ec): undefined reference to `lzma_code'
/usr/bin/ld: tif_lzma.c:(.text+0xa04): undefined reference to `lzma_memusage'
/usr/bin/ld: tif_lzma.c:(.text+0xa14): undefined reference to `lzma_stream_decoder'
/usr/bin/ld: /usr/local/lib/libtiff.a(tif_lzma.c.o): in function `TIFFInitLZMA':
tif_lzma.c:(.text+0xd98): undefined reference to `lzma_lzma_preset'
collect2: error: ld returned 1 exit status
make[2]: *** [test/CMakeFiles/nvimgcodec_tests.dir/build.make:693: test/nvimgcodec_tests] Error 1
make[1]: *** [CMakeFiles/Makefile2:1002: test/CMakeFiles/nvimgcodec_tests.dir/all] Error 2
make: *** [Makefile:166: all] Error 2

This issue will be fixed if I build it from source in the repo and then comment line 39 in the build_deps.sh file.

cd ../../../ && ./external/build_deps.sh && \
mkdir build && cd build && \
cmake .. -DCMAKE_BUILD_TYPE=Release && \
make -j$(nproc) && \
cmake --install . --config Release --prefix /opt/nvidia/nvimgcodec_cuda12

Please help me correct my processing if it is wrong, or help me debug this issue.
Thanks all in advance.

Minimum reproducible example

Environment details

Relevant log output

Other/Misc.

No response

Check for duplicates
  • I have searched the open bugs/issues and have found no duplicates for this bug report

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with example/nvimtrans and external/build_deps.sh, especially line 39, then inspect the libtiff build and the CMake configuration used for the C++ API. Reproduce the unsupported-format error with the provided command and compare it with the linker failures from the dependency build. Done means the dependencies build without manual script edits and the example processes the JPEG successfully.

Written by the indexing model from the issue text.

Assessment

Tech stack
cmake, cpp, docker
Domain
build-system, computer-vision
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.