mirror of https://git.ffmpeg.org/ffmpeg.git
Merge commit '104a97beaffa6348e6fd2c2d07d67c1402322bb3'
* commit '104a97beaffa6348e6fd2c2d07d67c1402322bb3': buffersrc: handle non-refcounted frames in av_buffersrc_add_frame() correctly Conflicts: libavfilter/buffersrc.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
cd259cdaa9
|
@ -120,7 +120,7 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
|
|||
{
|
||||
BufferSourceContext *s = ctx->priv;
|
||||
AVFrame *copy;
|
||||
int ret;
|
||||
int refcounted, ret;
|
||||
|
||||
s->nb_failed_requests = 0;
|
||||
|
||||
|
@ -130,6 +130,8 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
|
|||
} else if (s->eof)
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
refcounted = !!frame->buf[0];
|
||||
|
||||
if (!(flags & AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT)) {
|
||||
|
||||
switch (ctx->outputs[0]->type) {
|
||||
|
@ -157,10 +159,20 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
|
|||
|
||||
if (!(copy = av_frame_alloc()))
|
||||
return AVERROR(ENOMEM);
|
||||
av_frame_move_ref(copy, frame);
|
||||
|
||||
if (refcounted) {
|
||||
av_frame_move_ref(copy, frame);
|
||||
} else {
|
||||
ret = av_frame_ref(copy, frame);
|
||||
if (ret < 0) {
|
||||
av_frame_free(©);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if ((ret = av_fifo_generic_write(s->fifo, ©, sizeof(copy), NULL)) < 0) {
|
||||
av_frame_move_ref(frame, copy);
|
||||
if (refcounted)
|
||||
av_frame_move_ref(frame, copy);
|
||||
av_frame_free(©);
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue