Skip to content

Commit

Permalink
audiodecoder: Add max-errors property
Browse files Browse the repository at this point in the history
The number of consecutive decode errors that should be tolerated before
returning flow error should be up to the application, not the element.

Hence max-error should be exposed as a property.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/720>
  • Loading branch information
sdroege authored and GStreamer Merge Bot committed Jun 23, 2020
1 parent 226a371 commit 63933da
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
42 changes: 42 additions & 0 deletions docs/plugins/gst_plugins_cache.json
Expand Up @@ -10972,6 +10972,20 @@
"type": "gboolean",
"writable": true
},
"max-errors": {
"blurb": "Max consecutive decoder errors before returning flow error",
"conditionally-available": false,
"construct": false,
"construct-only": false,
"controllable": false,
"default": "10",
"max": "2147483647",
"min": "-1",
"mutable": "null",
"readable": true,
"type": "gint",
"writable": true
},
"min-latency": {
"blurb": "Aggregate output data to a minimum of latency time (ns)",
"conditionally-available": false,
Expand Down Expand Up @@ -19525,6 +19539,20 @@
}
},
"properties": {
"max-errors": {
"blurb": "Max consecutive decoder errors before returning flow error",
"conditionally-available": false,
"construct": false,
"construct-only": false,
"controllable": false,
"default": "10",
"max": "2147483647",
"min": "-1",
"mutable": "null",
"readable": true,
"type": "gint",
"writable": true
},
"qos": {
"blurb": "Handle Quality-of-Service events from downstream",
"conditionally-available": false,
Expand Down Expand Up @@ -21154,6 +21182,20 @@
}
},
"properties": {
"max-errors": {
"blurb": "Max consecutive decoder errors before returning flow error",
"conditionally-available": false,
"construct": false,
"construct-only": false,
"controllable": false,
"default": "10",
"max": "2147483647",
"min": "-1",
"mutable": "null",
"readable": true,
"type": "gint",
"writable": true
},
"min-latency": {
"blurb": "Aggregate output data to a minimum of latency time (ns)",
"conditionally-available": false,
Expand Down
24 changes: 23 additions & 1 deletion gst-libs/gst/audio/gstaudiodecoder.c
Expand Up @@ -142,14 +142,16 @@ enum
PROP_0,
PROP_LATENCY,
PROP_TOLERANCE,
PROP_PLC
PROP_PLC,
PROP_MAX_ERRORS
};

#define DEFAULT_LATENCY 0
#define DEFAULT_TOLERANCE 0
#define DEFAULT_PLC FALSE
#define DEFAULT_DRAINABLE TRUE
#define DEFAULT_NEEDS_FORMAT FALSE
#define DEFAULT_MAX_ERRORS GST_AUDIO_DECODER_MAX_ERRORS

typedef struct _GstAudioDecoderContext
{
Expand Down Expand Up @@ -408,6 +410,20 @@ gst_audio_decoder_class_init (GstAudioDecoderClass * klass)
"Perform packet loss concealment (if supported)",
DEFAULT_PLC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

/**
* GstAudioDecoder:max-errors:
*
* Maximum number of tolerated consecutive decode errors. See
* gst_audio_decoder_set_max_errors() for more details.
*
* Since: 1.18
*/
g_object_class_install_property (gobject_class, PROP_MAX_ERRORS,
g_param_spec_int ("max-errors", "Max errors",
"Max consecutive decoder errors before returning flow error",
-1, G_MAXINT, DEFAULT_MAX_ERRORS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

audiodecoder_class->sink_event =
GST_DEBUG_FUNCPTR (gst_audio_decoder_sink_eventfunc);
audiodecoder_class->src_event =
Expand Down Expand Up @@ -3104,6 +3120,9 @@ gst_audio_decoder_get_property (GObject * object, guint prop_id,
case PROP_PLC:
g_value_set_boolean (value, dec->priv->plc);
break;
case PROP_MAX_ERRORS:
g_value_set_int (value, gst_audio_decoder_get_max_errors (dec));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
Expand All @@ -3128,6 +3147,9 @@ gst_audio_decoder_set_property (GObject * object, guint prop_id,
case PROP_PLC:
dec->priv->plc = g_value_get_boolean (value);
break;
case PROP_MAX_ERRORS:
gst_audio_decoder_set_max_errors (dec, g_value_get_int (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
Expand Down

0 comments on commit 63933da

Please sign in to comment.