PR #22836 opened by Priyanshuthapliyal URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22836 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22836.patch
This PR makes `libavdevice/timefilter.c` coverage runnable in generic `avdevice` builds (without requiring JACK) and extends the existing FATE test to exercise the remaining deterministic paths. >From e1c55e390c6df515be42dd351e42a83e38223810 Mon Sep 17 00:00:00 2001 From: Priyanshu Thapliyal <[email protected]> Date: Thu, 16 Apr 2026 12:17:28 +0530 Subject: [PATCH] avdevice/timefilter: decouple FATE test from JACK and extend coverage Add an internal timefilter subsystem in configure and select it from indevs that use it (alsa, jack, pulse, v4l2). This prevents the FATE coverage from depending strictly on JACK being enabled and prevents binary bloat. Centralize timefilter.o under CONFIG_TIMEFILTER in libavdevice/Makefile to remove per-indev duplication. Run fate-timefilter whenever AVDEVICE is enabled, and extend libavdevice/tests/timefilter.c with deterministic update/eval/reset assertions while preserving the existing stdout reference. --- configure | 5 +++++ libavdevice/Makefile | 13 ++++++++----- libavdevice/tests/timefilter.c | 32 +++++++++++++++++++++++++++++++- tests/fate/libavdevice.mak | 2 +- 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/configure b/configure index 645a1af072..94a76d3f36 100755 --- a/configure +++ b/configure @@ -2262,6 +2262,7 @@ SUBSYSTEM_LIST=" iamf lsp pixelutils + timefilter network " @@ -4017,6 +4018,7 @@ xwma_demuxer_select="riffdec" # indevs / outdevs android_camera_indev_deps="android camera2ndk mediandk pthreads" alsa_indev_deps="alsa" +alsa_indev_select="timefilter" alsa_outdev_deps="alsa" avfoundation_indev_deps="avfoundation corevideo coremedia pthreads AVCaptureSession" avfoundation_indev_suggest="coregraphics applicationservices" @@ -4042,6 +4044,7 @@ iec61883_indev_deps="libiec61883" iec61883_indev_select="dv_demuxer" jack_indev_deps="libjack" jack_indev_deps_any="sem_timedwait dispatch_dispatch_h" +jack_indev_select="timefilter" kmsgrab_indev_deps="libdrm" lavfi_indev_deps="avfilter" libcdio_indev_deps="libcdio" @@ -4050,10 +4053,12 @@ openal_indev_deps="openal" oss_indev_deps_any="sys_soundcard_h" oss_outdev_deps_any="sys_soundcard_h" pulse_indev_deps="libpulse" +pulse_indev_select="timefilter" pulse_outdev_deps="libpulse" sndio_indev_deps="sndio" sndio_outdev_deps="sndio" v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h" +v4l2_indev_select="timefilter" v4l2_indev_suggest="libv4l2" v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h" v4l2_outdev_suggest="libv4l2" diff --git a/libavdevice/Makefile b/libavdevice/Makefile index a226368d16..62a84787ae 100644 --- a/libavdevice/Makefile +++ b/libavdevice/Makefile @@ -10,10 +10,11 @@ OBJS = alldevices.o \ utils.o \ version.o \ +OBJS-$(CONFIG_TIMEFILTER) += timefilter.o OBJS-$(HAVE_LIBC_MSVCRT) += file_open.o # input/output devices -OBJS-$(CONFIG_ALSA_INDEV) += alsa_dec.o alsa.o timefilter.o +OBJS-$(CONFIG_ALSA_INDEV) += alsa_dec.o alsa.o OBJS-$(CONFIG_ALSA_OUTDEV) += alsa_enc.o alsa.o OBJS-$(CONFIG_ANDROID_CAMERA_INDEV) += android_camera.o OBJS-$(CONFIG_AUDIOTOOLBOX_OUTDEV) += audiotoolbox.o @@ -30,19 +31,19 @@ OBJS-$(CONFIG_FBDEV_OUTDEV) += fbdev_enc.o \ fbdev_common.o OBJS-$(CONFIG_GDIGRAB_INDEV) += gdigrab.o OBJS-$(CONFIG_IEC61883_INDEV) += iec61883.o -OBJS-$(CONFIG_JACK_INDEV) += jack.o timefilter.o +OBJS-$(CONFIG_JACK_INDEV) += jack.o OBJS-$(CONFIG_KMSGRAB_INDEV) += kmsgrab.o OBJS-$(CONFIG_LAVFI_INDEV) += lavfi.o OBJS-$(CONFIG_OPENAL_INDEV) += openal-dec.o OBJS-$(CONFIG_OSS_INDEV) += oss_dec.o oss.o OBJS-$(CONFIG_OSS_OUTDEV) += oss_enc.o oss.o OBJS-$(CONFIG_PULSE_INDEV) += pulse_audio_dec.o \ - pulse_audio_common.o timefilter.o + pulse_audio_common.o OBJS-$(CONFIG_PULSE_OUTDEV) += pulse_audio_enc.o \ pulse_audio_common.o OBJS-$(CONFIG_SNDIO_INDEV) += sndio_dec.o sndio.o OBJS-$(CONFIG_SNDIO_OUTDEV) += sndio_enc.o sndio.o -OBJS-$(CONFIG_V4L2_INDEV) += v4l2.o v4l2-common.o timefilter.o +OBJS-$(CONFIG_V4L2_INDEV) += v4l2.o v4l2-common.o OBJS-$(CONFIG_V4L2_OUTDEV) += v4l2enc.o v4l2-common.o OBJS-$(CONFIG_VFWCAP_INDEV) += vfwcap.o OBJS-$(CONFIG_XCBGRAB_INDEV) += xcbgrab.o @@ -71,4 +72,6 @@ SKIPHEADERS-$(CONFIG_V4L2_OUTDEV) += v4l2-common.h SKIPHEADERS-$(CONFIG_ALSA) += alsa.h SKIPHEADERS-$(CONFIG_SNDIO) += sndio.h -TESTPROGS-$(CONFIG_JACK_INDEV) += timefilter +TESTPROGS-$(CONFIG_AVDEVICE) += timefilter + +$(SUBDIR)tests/timefilter$(EXESUF): $(SUBDIR)timefilter.o diff --git a/libavdevice/tests/timefilter.c b/libavdevice/tests/timefilter.c index 9aee91c6c7..d9b841e902 100644 --- a/libavdevice/tests/timefilter.c +++ b/libavdevice/tests/timefilter.c @@ -17,7 +17,6 @@ */ #include <stdio.h> - #include "libavutil/common.h" #include "libavutil/lfg.h" @@ -25,6 +24,11 @@ #define LFG_MAX ((1LL << 32) - 1) +static int close_enough(double a, double b) +{ + return FFABS(a - b) <= 1e-12; +} + int main(void) { AVLFG prng; @@ -81,5 +85,31 @@ int main(void) } printf("\n"); } + + { + TimeFilter *tf = ff_timefilter_new(1, 1, 1); + double filtered; + if (!tf) + return 1; + + filtered = ff_timefilter_update(tf, 42.0, 1.0); + if (!close_enough(filtered, 42.0)) + return 1; + + if (!close_enough(ff_timefilter_eval(tf, 2.0), 44.0)) + return 1; + + ff_timefilter_reset(tf); + + filtered = ff_timefilter_update(tf, 100.0, 1.0); + if (!close_enough(filtered, 100.0)) + return 1; + + if (!close_enough(ff_timefilter_eval(tf, -1.0), 99.0)) + return 1; + + ff_timefilter_destroy(tf); + } + return 0; } diff --git a/tests/fate/libavdevice.mak b/tests/fate/libavdevice.mak index e983327a50..6dd7b7a9a2 100644 --- a/tests/fate/libavdevice.mak +++ b/tests/fate/libavdevice.mak @@ -1,4 +1,4 @@ -FATE_LIBAVDEVICE-$(CONFIG_JACK_INDEV) += fate-timefilter +FATE_LIBAVDEVICE-$(CONFIG_AVDEVICE) += fate-timefilter fate-timefilter: libavdevice/tests/timefilter$(EXESUF) fate-timefilter: CMD = run libavdevice/tests/timefilter -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
