1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

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@gmx.at>
This commit is contained in:
Michael Niedermayer 2013-04-13 15:00:22 +02:00
parent 87dd62e141
commit 9b672d4017

View File

@ -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))); memcpy(picref->linesize, mpi->stride, FFMIN(sizeof(picref->linesize), sizeof(mpi->stride)));
for(i=0; i<4 && mpi->stride[i]; i++){ for(i=0; i<4 && mpi->stride[i]; i++){
picref->buf[i] = av_buffer_create(mpi->planes[i], mpi->stride[i], dummy_free, NULL, picref->data[i] = mpi->planes[i];
(mpi->flags & MP_IMGFLAG_PRESERVE) ? AV_BUFFER_FLAG_READONLY : 0);
if (!picref->buf[i])
goto fail;
picref->data[i] = picref->buf[i]->data;
} }
if(pts != MP_NOPTS_VALUE) if(pts != MP_NOPTS_VALUE)
picref->pts= pts * av_q2d(outlink->time_base); 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); ff_filter_frame(outlink, picref);
m->frame_returned++; m->frame_returned++;