[FFmpeg-devel] [PATCH 1/1] avfilter/f_mix: disable fast on discontinuities

Ignacy Gawędzki bugs at qult.net
Sun Jul 6 21:30:14 EEST 2025


FAST_TMIX_SLICE can work properly only in the case the filter is run
from the start and has never been disabled.  Therefore, once s->fast
is set to 0, it shall never be set back to 1.

Signed-off-by: Ignacy Gawędzki <bugs at qult.net>
---
 libavfilter/vf_mix.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavfilter/vf_mix.c b/libavfilter/vf_mix.c
index 517bb2450f..c996cdd9fb 100644
--- a/libavfilter/vf_mix.c
+++ b/libavfilter/vf_mix.c
@@ -88,7 +88,6 @@ static int parse_weights(AVFilterContext *ctx)
     char *p, *arg, *saveptr = NULL;
     int i, last = 0;
 
-    s->fast = 1;
     s->wfactor = 0.f;
     p = s->weights_str;
     for (i = 0; i < s->nb_inputs; i++) {
@@ -150,6 +149,8 @@ static av_cold int init(AVFilterContext *ctx)
         }
     }
 
+    s->fast = 1;
+
     return parse_weights(ctx);
 }
 
@@ -295,6 +296,7 @@ static int process_frame(FFFrameSync *fs)
     }
 
     if (ctx->is_disabled) {
+        s->fast = 0;
         out = av_frame_clone(s->frames[0]);
         if (!out)
             return AVERROR(ENOMEM);
@@ -506,6 +508,7 @@ static int tmix_filter_frame(AVFilterLink *inlink, AVFrame *in)
     }
 
     if (ctx->is_disabled) {
+        s->fast = 0;
         out = av_frame_clone(s->frames[0]);
         if (!out)
             return AVERROR(ENOMEM);
-- 
2.48.1


More information about the ffmpeg-devel mailing list