[FFmpeg-cvslog] avfilter/vf_mix: output same number of frames from input for tmix

Paul B Mahol git at videolan.org
Fri Apr 29 23:26:16 EEST 2022


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Fri Apr 29 21:56:02 2022 +0200| [55e0b041b370b09593e5d9f02ff56409d4ce3ad7] | committer: Paul B Mahol

avfilter/vf_mix: output same number of frames from input for tmix

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=55e0b041b370b09593e5d9f02ff56409d4ce3ad7
---

 libavfilter/vf_mix.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/libavfilter/vf_mix.c b/libavfilter/vf_mix.c
index 79c96e5aec..64d07bbbbb 100644
--- a/libavfilter/vf_mix.c
+++ b/libavfilter/vf_mix.c
@@ -415,8 +415,12 @@ static int tmix_filter_frame(AVFilterLink *inlink, AVFrame *in)
     if (s->nb_frames < s->nb_inputs) {
         s->frames[s->nb_frames] = in;
         s->nb_frames++;
-        if (s->nb_frames < s->nb_inputs)
-            return 0;
+        while (s->nb_frames < s->nb_inputs) {
+            s->frames[s->nb_frames] = av_frame_clone(s->frames[s->nb_frames - 1]);
+            if (!s->frames[s->nb_frames])
+                return AVERROR(ENOMEM);
+            s->nb_frames++;
+        }
     } else {
         av_frame_free(&s->frames[0]);
         memmove(&s->frames[0], &s->frames[1], sizeof(*s->frames) * (s->nb_inputs - 1));
@@ -433,7 +437,7 @@ static int tmix_filter_frame(AVFilterLink *inlink, AVFrame *in)
     out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
     if (!out)
         return AVERROR(ENOMEM);
-    out->pts = s->frames[0]->pts;
+    out->pts = s->frames[s->nb_frames - 1]->pts;
 
     td.out = out;
     td.in = s->frames;



More information about the ffmpeg-cvslog mailing list