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:
parent
87dd62e141
commit
9b672d4017
@ -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++;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user