Skip to content

FAQ Features and Fork Differences

G.J.R. Timmer edited this page Jun 25, 2026 · 2 revisions

FAQ — Features & Fork Differences

How this fork (gjrtimmer/jetson-ffmpeg) differs from upstream jocover and Keylost, and what is on the roadmap. The full provenance is in the Fork Analysis Results.

← Back to FAQ

Why this fork

  • Widest FFmpeg matrix — 6.0 → 8.1 (v3.0.0+) with an idempotent, auto-detecting patcher and committed per-version patches. See Compatibility.
  • Memory-safety and crash fixes ported and regression-guarded by a per-feature hardware test suite.
  • Tag-driven releases with prebuilt artifacts — see Release Process and releases.

Fixed in this fork

Area What changed Issue
Decoder memory safety Ported cgutman fixes: EOS deadlock, delete[] mismatch, uninitialized pointers, close-hang #2
Undefined behavior Missing return in decoder/encoder capture-loop callbacks (segfault on GCC 11+) #3
Encoder keyframe flag Honor V4L2 KeyFrame metadata — stop flagging every packet as a keyframe #4
H.265 global header GLOBAL_HEADER support + bounded SPS/PPS/VPS NAL scan (buffer-overread guard) #5
glibc ≥ 2.34 Vendored patched NvV4l2ElementPlane — fixes pthread_join segfault #6
4K I-frames Enlarge + bounds-check + make decoder CHUNK_SIZE configurable #7
Decoder crash on exit Drain and clean up queued DMA buffers in teardown #8
Decode performance setMaxPerfMode, optional DPB disable, poc-type=2 (up to ~6×) #9
Low-delay decode Blocking wait in get_frame for AV_CODEC_FLAG_LOW_DELAY #10
Configurable pools frame_pool_size / packet_pool_size / chunk_size AVOptions #11
Pixel formats YUVJ420P acceptance, NV12 I/O, P010 10-bit decode, XRGB32 converter fix, insert_vui #12
Codec flush avcodec_flush_buffers for decoder and encoder #16
RTSP / out-of-band SPS/PPS Hardened extradata priming at decoder init (zero-frames fix) #1
FFmpeg ≥ 6.1 SIGABRT Decode callback returned EAGAIN on input-feed failure #28
MJPEG decode Hardware MJPEG decode via NvJPEGDecoder, baseline JPEG only #18
MJPEG encode Hardware MJPEG encode via NvJPEGEncoder (quality 1–100) #19
Encoder level Wire -level through to V4L2 setLevel for H.264 and H.265 #14
Encoder runtime control Force IDR, dynamic bitrate, CABAC, AUD, lossless AVOptions, encoder flush #13
Blocking encoder wait -flags low_delay activates blocking get_packet, configurable wait_timeout #31
Build system CMake JP6 auto-detect, cross-compile sysroot, CPack .deb, pkg-config fix #22
Stream dimension hints Pre-allocate frame pool from container headers, reduce first-frame latency
Structured logging NVMPI_LOG / NVMPI_LOG_SUB macros, compile-time threshold
FFmpeg 8.1 Support for FFmpeg 8.1 (libavcodec 62)

Roadmap / in progress

Area Goal Issue
JPEG zero-copy decode→encode DMA-fd passthrough #20
Zero-copy GPU pipeline dlopen, DMA-BUF/DRM_PRIME, hwcontext_nvmpi, VIC scaling, CUDA interop #21
Modern encode API full send_frame/receive_packet with proper EOS drain #15
AV1 hardware AV1 decode/encode on Orin-class modules #23
Upstreaming nvmpi codec support to FFmpeg mainline #25

See all open issues for current status.

Clone this wiki locally