diff --git a/subprojects/gst-plugins-good/docs/gst_plugins_cache.json b/subprojects/gst-plugins-good/docs/gst_plugins_cache.json index 2269260b70..e9f2ad360c 100644 --- a/subprojects/gst-plugins-good/docs/gst_plugins_cache.json +++ b/subprojects/gst-plugins-good/docs/gst_plugins_cache.json @@ -11002,10 +11002,57 @@ "readable": true, "type": "gchararray", "writable": true + }, + "num-lookahead": { + "blurb": "When switching fragments, ensure the next N fragments are prepared. Useful on slow devices if opening/preparing a new fragment can cause playback stalls", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "1", + "max": "-1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "guint", + "writable": true + }, + "num-open-fragments": { + "blurb": "Number of files to keep open simultaneously. (0 = open all fragments at the start). May still use slightly more if set to less than the number of streams in the files", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "default": "100", + "max": "-1", + "min": "0", + "mutable": "null", + "readable": true, + "type": "guint", + "writable": true } }, "rank": "none", "signals": { + "add-fragment": { + "action": true, + "args": [ + { + "name": "arg0", + "type": "gchararray" + }, + { + "name": "arg1", + "type": "guint64" + }, + { + "name": "arg2", + "type": "guint64" + } + ], + "return-type": "gboolean", + "when": "last" + }, "format-location": { "args": [], "return-type": "GStrv", diff --git a/subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsrc.c b/subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsrc.c index 75db590a14..76ea174394 100644 --- a/subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsrc.c +++ b/subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsrc.c @@ -249,10 +249,33 @@ gst_splitmux_src_class_init (GstSplitMuxSrcClass * klass) gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_splitmux_src_change_state); + /** + * GstSplitMuxSrc:location: + * + * File glob pattern for the input file fragments. Files that match the glob will be + * sorted and added to the set of fragments to play. + * + * This property is ignored if files are provided via the #GstSplitMuxSrc::format-location + * signal, or #GstSplitMuxSrc::add-fragment signal + * + */ g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "File Input Pattern", "Glob pattern for the location of the files to read", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * GstSplitMuxSrc:num-open-fragments: + * + * Upper target for the number of files the splitmuxsrc will try to keep open + * simultaneously. This limits the number of file handles and threads that + * will be active. + * + * If num-open-fragments is quite small, a few more files might be open + * than requested, because of the way splitmuxsrc operates internally. + * + * Since: 1.26 + */ g_object_class_install_property (gobject_class, PROP_NUM_OPEN_FRAGMENTS, g_param_spec_uint ("num-open-fragments", "Open files limit", "Number of files to keep open simultaneously. " @@ -260,6 +283,23 @@ gst_splitmux_src_class_init (GstSplitMuxSrcClass * klass) "May still use slightly more if set to less than the number of streams in the files", 0, G_MAXUINT, DEFAULT_OPEN_FRAGMENTS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * GstSplitMuxSrc:num-lookahead: + * + * During playback, prepare / open the next N fragments in advance of the playback + * position. + * + * When used in conjunction with a #GstSplitMuxSrc:num-open-fragments limit, + * that closes fragments that haven't been used recently, lookahead can + * re-prepare a fragment before it is used, by opening the file and reading + * file headers and creating internal pads early. + * + * This can help when reading off very slow media by avoiding any data stall + * at fragment transitions. + * + * Since: 1.26 + */ g_object_class_install_property (gobject_class, PROP_NUM_LOOKAHEAD, g_param_spec_uint ("num-lookahead", "Fragment Lookahead", "When switching fragments, ensure the next N fragments are prepared. " @@ -269,7 +309,7 @@ gst_splitmux_src_class_init (GstSplitMuxSrcClass * klass) /** - * GstSplitMuxSrc::format-location: + * GstSplitMuxSrc:format-location: * @splitmux: the #GstSplitMuxSrc * * Returns: A NULL-terminated sorted array of strings containing the @@ -293,10 +333,14 @@ gst_splitmux_src_class_init (GstSplitMuxSrcClass * klass) * the file will be placed in the set immediately without loading the file to measure * it. * + * At least one fragment must be ready and available before starting + * splitmuxsrc, either via this signal or via the #GstSplitMuxSrc:location property + * or #GstSplitMuxSrc::format-location signal. + * * Returns: A boolean. TRUE if the fragment was successfully appended. * FALSE on failure. * - * Since: 1.24 + * Since: 1.26 */ signals[SIGNAL_ADD_FRAGMENT] = g_signal_new_class_handler ("add-fragment",