On 2/7/2021 11:29 AM, James Almer wrote:
Signed-off-by: James Almer <[email protected]>
---
  libavfilter/buffersrc.c | 38 ++++++++------------------------------
  1 file 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);

Will apply soon if there are no objections.
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to