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]

Reply via email to