[FFmpeg-cvslog] vf_mp: mp buffers are not compatible with the reference count system

Michael Niedermayer git at videolan.org
Sat Apr 13 15:08:03 CEST 2013


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sat Apr 13 15:00:22 2013 +0200| [9b672d4017bb34992045da2632c3599da791cbc6] | committer: Michael Niedermayer

vf_mp: mp buffers are not compatible with the reference count system

We thus must copy each frame on the vf_mp output.

This fixes artifacts with "ffplay -threads 1 dnxhdconv.mov -vf mp=eq2=1:1"

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavfilter/vf_mp.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/libavfilter/vf_mp.c b/libavfilter/vf_mp.c
index 9a05997..53cdd93 100644
--- a/libavfilter/vf_mp.c
+++ b/libavfilter/vf_mp.c
@@ -568,16 +568,18 @@ int ff_vf_next_put_image(struct vf_instance *vf,mp_image_t *mpi, double pts){
     memcpy(picref->linesize, mpi->stride, FFMIN(sizeof(picref->linesize), sizeof(mpi->stride)));
 
     for(i=0; i<4 && mpi->stride[i]; i++){
-        picref->buf[i] = av_buffer_create(mpi->planes[i], mpi->stride[i], dummy_free, NULL,
-                                          (mpi->flags & MP_IMGFLAG_PRESERVE) ? AV_BUFFER_FLAG_READONLY : 0);
-        if (!picref->buf[i])
-            goto fail;
-        picref->data[i] = picref->buf[i]->data;
+        picref->data[i] = mpi->planes[i];
     }
 
     if(pts != MP_NOPTS_VALUE)
         picref->pts= pts * av_q2d(outlink->time_base);
 
+    if(1) { // mp buffers are currently unsupported in libavfilter, we thus must copy
+        AVFrame *tofree = picref;
+        picref = av_frame_clone(picref);
+        av_frame_free(&tofree);
+    }
+
     ff_filter_frame(outlink, picref);
     m->frame_returned++;
 



More information about the ffmpeg-cvslog mailing list