diff --git a/arch/ffmpeg-v4l2-request-fourier/0016-h264-mb-inspect-callback.patch b/arch/ffmpeg-v4l2-request-fourier/0016-h264-mb-inspect-callback.patch index 22871dc4d6..71ff20d3c2 100644 --- a/arch/ffmpeg-v4l2-request-fourier/0016-h264-mb-inspect-callback.patch +++ b/arch/ffmpeg-v4l2-request-fourier/0016-h264-mb-inspect-callback.patch @@ -35,13 +35,20 @@ to fall through. Used by: - daedalus-decoder/tools/daedalus_decode_h264 (PR-A1b) - - future daedalus-v4l2 daemon refactor + - daedalus-v4l2 daemon shadow-mode path (PR-Q3a.1+) + +The CLI static-links libavcodec.a so symbol visibility doesn't matter +there. The daemon dlopens libavcodec.so.62 and resolves the callback +via dlsym, so the symbol MUST be exported — added to libavcodec.v +explicitly (FFmpeg's default version script hides every `ff_*` symbol +as LOCAL behind a glob). Refs reauktion/daedalus-decoder!12 (Stage 2 PR-b complete). --- - libavcodec/h264_mb.c | 20 ++++++++++++++++++++ - libavcodec/h264dec.h | 26 ++++++++++++++++++++++++++ - 2 files changed, 46 insertions(+) + libavcodec/h264_mb.c | 20 ++++++++++++++++++++ + libavcodec/h264dec.h | 26 ++++++++++++++++++++++++++ + libavcodec/libavcodec.v | 1 + + 3 files changed, 47 insertions(+) --- a/libavcodec/h264dec.h +++ b/libavcodec/h264dec.h @@ -113,3 +120,13 @@ Refs reauktion/daedalus-decoder!12 (Stage 2 PR-b complete). + h->mb_inspect_cb = cb; + h->mb_inspect_opaque = opaque; } +--- a/libavcodec/libavcodec.v ++++ b/libavcodec/libavcodec.v +@@ -3,6 +3,7 @@ + av_*; + avcodec_*; + avpriv_*; ++ ff_h264_set_mb_inspect_cb; + avsubtitle_free; + local: + *; diff --git a/arch/ffmpeg-v4l2-request-fourier/PKGBUILD b/arch/ffmpeg-v4l2-request-fourier/PKGBUILD index 6380351ac6..98bdab121d 100644 --- a/arch/ffmpeg-v4l2-request-fourier/PKGBUILD +++ b/arch/ffmpeg-v4l2-request-fourier/PKGBUILD @@ -24,7 +24,7 @@ _srcname=FFmpeg _version='8.1' _commit='b57fbbe50c9b2656fad86a1a7eeabfd2b2a50935' # v4l2-request-n8.1 tip 2026-04-24 pkgver=8.1.r123329.b57fbbe -pkgrel=14 # pkgrel=14 — per-MB coefficient side buffer (0017) extending 0016 for daedalus-decoder CLI IDCT validation; observation-only, no behaviour change to existing decode path +pkgrel=15 # pkgrel=15 — export ff_h264_set_mb_inspect_cb via libavcodec.v so dlsym consumers (daedalus-v4l2 daemon shadow_decoder, PR-Q3a.1) can resolve the symbol; static-link CLI was unaffected. No behaviour change to existing decode path. (2026-05-26) epoch=2 # daedalus-fourier pin. 209a421 = PR #2 merge (Phase 8c — public API diff --git a/debian/ffmpeg-v4l2-request-fourier/0016-h264-mb-inspect-callback.patch b/debian/ffmpeg-v4l2-request-fourier/0016-h264-mb-inspect-callback.patch index 22871dc4d6..71ff20d3c2 100644 --- a/debian/ffmpeg-v4l2-request-fourier/0016-h264-mb-inspect-callback.patch +++ b/debian/ffmpeg-v4l2-request-fourier/0016-h264-mb-inspect-callback.patch @@ -35,13 +35,20 @@ to fall through. Used by: - daedalus-decoder/tools/daedalus_decode_h264 (PR-A1b) - - future daedalus-v4l2 daemon refactor + - daedalus-v4l2 daemon shadow-mode path (PR-Q3a.1+) + +The CLI static-links libavcodec.a so symbol visibility doesn't matter +there. The daemon dlopens libavcodec.so.62 and resolves the callback +via dlsym, so the symbol MUST be exported — added to libavcodec.v +explicitly (FFmpeg's default version script hides every `ff_*` symbol +as LOCAL behind a glob). Refs reauktion/daedalus-decoder!12 (Stage 2 PR-b complete). --- - libavcodec/h264_mb.c | 20 ++++++++++++++++++++ - libavcodec/h264dec.h | 26 ++++++++++++++++++++++++++ - 2 files changed, 46 insertions(+) + libavcodec/h264_mb.c | 20 ++++++++++++++++++++ + libavcodec/h264dec.h | 26 ++++++++++++++++++++++++++ + libavcodec/libavcodec.v | 1 + + 3 files changed, 47 insertions(+) --- a/libavcodec/h264dec.h +++ b/libavcodec/h264dec.h @@ -113,3 +120,13 @@ Refs reauktion/daedalus-decoder!12 (Stage 2 PR-b complete). + h->mb_inspect_cb = cb; + h->mb_inspect_opaque = opaque; } +--- a/libavcodec/libavcodec.v ++++ b/libavcodec/libavcodec.v +@@ -3,6 +3,7 @@ + av_*; + avcodec_*; + avpriv_*; ++ ff_h264_set_mb_inspect_cb; + avsubtitle_free; + local: + *; diff --git a/debian/ffmpeg-v4l2-request-fourier/build-deb.sh b/debian/ffmpeg-v4l2-request-fourier/build-deb.sh index d56a92c4f9..3e9ab3a792 100755 --- a/debian/ffmpeg-v4l2-request-fourier/build-deb.sh +++ b/debian/ffmpeg-v4l2-request-fourier/build-deb.sh @@ -33,12 +33,10 @@ FFMPEG_VERSION=8.1 # epoch 2 matches Debian's stock ffmpeg (currently 7:7.1.x in trixie); # +rfourier suffix to avoid colliding with upstream/Debian rebuilds. PKGVER=2:${FFMPEG_VERSION}+rfourier+gb57fbbe -PKGREL=14 # pkgrel=14 — per-MB coefficient side buffer (0017) extending 0016 for daedalus-decoder CLI IDCT validation; observation-only, no behaviour change to existing decode path - # (cycle 9 of the daedalus-v4l2#11 step 2 substitution arc; closes - # the libavcodec.so substitution sequence 6 IDCT4 / 7 IDCT8 / - # 8 luma-v deblock / 9 qpel mc20). Pulls daedalus-fourier PR #2 - # which extends the public API with - # daedalus_recipe_dispatch_h264_qpel_mc20. (2026-05-23) +PKGREL=15 # pkgrel=15 — export ff_h264_set_mb_inspect_cb via libavcodec.v so + # dlsym consumers (daedalus-v4l2 daemon shadow_decoder, PR-Q3a.1) + # can resolve the symbol; static-link CLI was unaffected. No + # behaviour change to existing decode path. (2026-05-26) # daedalus-fourier pin. 209a421 = daedalus-fourier PR #2 merge — public # API now exposes daedalus_recipe_dispatch_h264_qpel_mc20 + diff --git a/debian/ffmpeg-v4l2-request-fourier/debian/changelog b/debian/ffmpeg-v4l2-request-fourier/debian/changelog index 84c4bf51d8..4145f9ac73 100644 --- a/debian/ffmpeg-v4l2-request-fourier/debian/changelog +++ b/debian/ffmpeg-v4l2-request-fourier/debian/changelog @@ -1,3 +1,21 @@ +ffmpeg-v4l2-request-fourier (2:8.1+rfourier+gb57fbbe-15) bookworm trixie; urgency=medium + + * Amend 0016-h264-mb-inspect-callback.patch to also add + ff_h264_set_mb_inspect_cb to libavcodec/libavcodec.v so the + symbol is exported (GLOBAL) on the shipped libavcodec.so.62. + Without this, FFmpeg's default version script hides every ff_* + symbol behind a glob → LOCAL → dlsym() returns NULL. The CLI + consumer (daedalus_decode_h264) was unaffected because it + static-links libavcodec.a; the daedalus-v4l2 daemon (PR-Q3a.1 + shadow_decoder path) dlopens libavcodec.so.62 and needs the + symbol resolvable at runtime. + * No behaviour change to existing decode path. Callback is still + opt-in via the function pointer (NULL default), so paying the + one-load-one-branch cost only when a consumer has explicitly + installed an inspection callback. + + -- Markus Fritsche Tue, 26 May 2026 15:00:00 +0200 + ffmpeg-v4l2-request-fourier (2:8.1+rfourier+gb57fbbe-10) bookworm trixie; urgency=medium * Add 0007-h264-qpel-mc20-daedalus-fourier.patch —