From 08442cc79216956eff03a9b35040e6b1fff11ac1 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Tue, 9 Mar 2021 13:22:10 +0100 Subject: cccombiner: implement scheduling Prior to that, cccombiner's behaviour was essentially that of a funnel: it strictly looked at input timestamps to associate together video and caption buffers. This patch instead exposes a "schedule" property, with a default of TRUE, to control whether caption buffers should be smoothly scheduled, in order to have exactly one per output video buffer. This can involve rewriting input captions, for example when the input is CDP sequence counters are rewritten, time codes are dropped and potentially re-injected if the input video frame had a time code meta. Caption buffers may also get split up in order to assign captions to the correct field when the input is interlaced. This can also imply that the input will drift from synchronization, when there isn't enough padding in the input stream to catch up. In that case the element will start dropping old caption buffers once the number of buffers in its internal queue reaches a certain limit (configurable). The property is exposed so that existing users of cccombiner can revert back to the original behaviour, but should eventually be removed, as that behaviour was simply inadequate. This commit also disallows changing the input caption type, as this would needlessly complicate implementation, and removes the corresponding test. Part-of: --- docs/plugins/gst_plugins_cache.json | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/plugins/gst_plugins_cache.json b/docs/plugins/gst_plugins_cache.json index 9f995d555..6eae76468 100644 --- a/docs/plugins/gst_plugins_cache.json +++ b/docs/plugins/gst_plugins_cache.json @@ -3318,7 +3318,34 @@ "type": "GstAggregatorPad" } }, - "properties": {}, + "properties": { + "max-scheduled": { + "blurb": "Maximum number of buffers to queue for scheduling", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "0", + "max": "-1", + "min": "0", + "mutable": "ready", + "readable": true, + "type": "guint", + "writable": true + }, + "schedule": { + "blurb": "Schedule caption buffers so that exactly one is output per video frame", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "true", + "mutable": "ready", + "readable": true, + "type": "gboolean", + "writable": true + } + }, "rank": "none" }, "ccconverter": { -- cgit v1.2.1