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)));
|
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++;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user