summaryrefslogtreecommitdiff
path: root/libavfilter/buffersrc.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2021-02-07 11:29:58 -0300
committerJames Almer <jamrial@gmail.com>2021-02-16 12:36:37 -0300
commit04dfdde09b8533076993d2a90b5f9af6d5a68604 (patch)
tree1fc4dee586efc2346ba7f6702db2abeebce87a63 /libavfilter/buffersrc.c
parent38aea9b0416f574757a56591b8a6f305cbc659ad (diff)
downloadffmpeg-04dfdde09b8533076993d2a90b5f9af6d5a68604.tar.gz
avfilter/buffersrc: simplify av_buffersrc_add_frame_flags()
Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavfilter/buffersrc.c')
-rw-r--r--libavfilter/buffersrc.c38
1 files changed, 8 insertions, 30 deletions
diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
index bf30f54177..da1cf9941e 100644
--- a/libavfilter/buffersrc.c
+++ b/libavfilter/buffersrc.c
@@ -149,33 +149,6 @@ int attribute_align_arg av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *fr
return av_buffersrc_add_frame_flags(ctx, frame, 0);
}
-static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
- AVFrame *frame, int flags);
-
-int attribute_align_arg av_buffersrc_add_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
-{
- AVFrame *copy = NULL;
- int ret = 0;
-
- if (frame && frame->channel_layout &&
- av_get_channel_layout_nb_channels(frame->channel_layout) != frame->channels) {
- av_log(ctx, AV_LOG_ERROR, "Layout indicates a different number of channels than actually present\n");
- return AVERROR(EINVAL);
- }
-
- if (!(flags & AV_BUFFERSRC_FLAG_KEEP_REF) || !frame)
- return av_buffersrc_add_frame_internal(ctx, frame, flags);
-
- if (!(copy = av_frame_alloc()))
- return AVERROR(ENOMEM);
- ret = av_frame_ref(copy, frame);
- if (ret >= 0)
- ret = av_buffersrc_add_frame_internal(ctx, copy, flags);
-
- av_frame_free(&copy);
- return ret;
-}
-
static int push_frame(AVFilterGraph *graph)
{
int ret;
@@ -190,13 +163,18 @@ static int push_frame(AVFilterGraph *graph)
return 0;
}
-static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
- AVFrame *frame, int flags)
+int attribute_align_arg av_buffersrc_add_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
{
BufferSourceContext *s = ctx->priv;
AVFrame *copy;
int refcounted, ret;
+ if (frame && frame->channel_layout &&
+ av_get_channel_layout_nb_channels(frame->channel_layout) != frame->channels) {
+ av_log(ctx, AV_LOG_ERROR, "Layout indicates a different number of channels than actually present\n");
+ return AVERROR(EINVAL);
+ }
+
s->nb_failed_requests = 0;
if (!frame)
@@ -229,7 +207,7 @@ static int av_buffersrc_add_frame_internal(AVFilterContext *ctx,
if (!(copy = av_frame_alloc()))
return AVERROR(ENOMEM);
- if (refcounted) {
+ if (refcounted && !(flags & AV_BUFFERSRC_FLAG_KEEP_REF)) {
av_frame_move_ref(copy, frame);
} else {
ret = av_frame_ref(copy, frame);