Sinks without an activate callback have no means to request frames in their
input, therefore the default activate callback should do it for them.

Fixes ticket #11624.
Fixes ticket #10988.
Fixes ticket #10990.

Signed-off-by: Marton Balint <c...@passwd.hu>
---
 libavfilter/avfilter.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index e03dc65fc6..5bcf0b4ef7 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -1288,6 +1288,10 @@ static int filter_activate_default(AVFilterContext 
*filter)
         if (li->frame_wanted_out)
             return request_frame_to_filter(filter->outputs[i]);
     }
+    if (!filter->nb_outputs) {
+        ff_inlink_request_frame(filter->inputs[0]);
+        return 0;
+    }
     return FFERROR_NOT_READY;
 }
 
@@ -1427,6 +1431,11 @@ static int filter_activate_default(AVFilterContext 
*filter)
      Rationale: even if all inputs are blocked an activate callback should
      request a frame on some if its inputs if a frame is requested on any of
      its output.
+
+   - Request a frame on the input for sinks.
+
+     Rationale: sinks using the old api have no way to request a frame on their
+     input, so we need to do it for them.
  */
 
 int ff_filter_activate(AVFilterContext *filter)
-- 
2.43.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to