]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/vf_shuffleframes.c
Merge commit 'c3f113d58488df7594a489bdbb993a69ad47063c'
[ffmpeg] / libavfilter / vf_shuffleframes.c
index f49c9c604973b71adacedb8bea87a08c5efcfb3d..bfbf4bd2688c0d01a321154d303c057b0eeda3e1 100644 (file)
@@ -84,14 +84,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
 {
     AVFilterContext    *ctx = inlink->dst;
     ShuffleFramesContext *s = ctx->priv;
-    int ret;
+    int ret = 0;
 
     if (s->in_frames < s->nb_frames) {
         s->frames[s->in_frames] = frame;
         s->pts[s->in_frames] = frame->pts;
         s->in_frames++;
-        ret = 0;
-    } else if (s->in_frames == s->nb_frames) {
+    }
+
+    if (s->in_frames == s->nb_frames) {
         int n, x;
 
         for (n = 0; n < s->nb_frames; n++) {
@@ -108,8 +109,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
 
         for (n = 0; n < s->nb_frames; n++)
             av_frame_free(&s->frames[n]);
-    } else
-        av_assert0(0);
+    }
 
     return ret;
 }
@@ -118,6 +118,11 @@ static av_cold void uninit(AVFilterContext *ctx)
 {
     ShuffleFramesContext *s = ctx->priv;
 
+    while (s->in_frames > 0) {
+        s->in_frames--;
+        av_frame_free(&s->frames[s->in_frames]);
+    }
+
     av_freep(&s->frames);
     av_freep(&s->map);
     av_freep(&s->pts);