summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorVivia Nikolaidou <vivia@ahiru.eu>2021-08-26 21:26:01 +0300
committerVivia Nikolaidou <vivia@ahiru.eu>2021-08-27 09:40:50 +0000
commit43199bc883d68b1935b51b07a5c464f9f80c605a (patch)
tree5f66861cc5d36ad5d88ef183a04dfade14c03a54 /gst
parentdee294809f3781e662180c66ed2fd59c267def45 (diff)
downloadgstreamer-plugins-bad-43199bc883d68b1935b51b07a5c464f9f80c605a.tar.gz
errorignore: Add ignore-eos mode
It's otherwise very complicated to ignore GST_FLOW_EOS without a ghostpad's chain function to rewrite. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2492>
Diffstat (limited to 'gst')
-rw-r--r--gst/debugutils/gsterrorignore.c19
-rw-r--r--gst/debugutils/gsterrorignore.h1
2 files changed, 20 insertions, 0 deletions
diff --git a/gst/debugutils/gsterrorignore.c b/gst/debugutils/gsterrorignore.c
index f65ca9210..8f3546fcf 100644
--- a/gst/debugutils/gsterrorignore.c
+++ b/gst/debugutils/gsterrorignore.c
@@ -50,6 +50,7 @@ enum
PROP_IGNORE_ERROR,
PROP_IGNORE_NOTLINKED,
PROP_IGNORE_NOTNEGOTIATED,
+ PROP_IGNORE_EOS,
PROP_CONVERT_TO
};
@@ -122,6 +123,16 @@ gst_error_ignore_class_init (GstErrorIgnoreClass * klass)
"Whether to ignore GST_FLOW_NOT_NEGOTIATED",
TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstErrorIgnore:ignore-eos:
+ *
+ * Since: 1.20
+ */
+ g_object_class_install_property (object_class, PROP_IGNORE_EOS,
+ g_param_spec_boolean ("ignore-eos",
+ "Ignore GST_FLOW_EOS", "Whether to ignore GST_FLOW_EOS",
+ FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
g_object_class_install_property (object_class, PROP_CONVERT_TO,
g_param_spec_enum ("convert-to", "GstFlowReturn to convert to",
"Which GstFlowReturn value we should convert to when ignoring",
@@ -153,6 +164,7 @@ gst_error_ignore_init (GstErrorIgnore * self)
self->ignore_error = TRUE;
self->ignore_notlinked = FALSE;
self->ignore_notnegotiated = TRUE;
+ self->ignore_eos = FALSE;
self->convert_to = GST_FLOW_NOT_LINKED;
}
@@ -172,6 +184,9 @@ gst_error_ignore_set_property (GObject * object, guint prop_id,
case PROP_IGNORE_NOTNEGOTIATED:
self->ignore_notnegotiated = g_value_get_boolean (value);
break;
+ case PROP_IGNORE_EOS:
+ self->ignore_eos = g_value_get_boolean (value);
+ break;
case PROP_CONVERT_TO:
self->convert_to = g_value_get_enum (value);
break;
@@ -197,6 +212,9 @@ gst_error_ignore_get_property (GObject * object, guint prop_id, GValue * value,
case PROP_IGNORE_NOTNEGOTIATED:
g_value_set_boolean (value, self->ignore_notnegotiated);
break;
+ case PROP_IGNORE_EOS:
+ g_value_set_boolean (value, self->ignore_eos);
+ break;
case PROP_CONVERT_TO:
g_value_set_enum (value, self->convert_to);
break;
@@ -246,6 +264,7 @@ gst_error_ignore_sink_chain (GstPad * pad, GstObject * parent,
if ((ret == GST_FLOW_ERROR && self->ignore_error) ||
(ret == GST_FLOW_NOT_LINKED && self->ignore_notlinked) ||
+ (ret == GST_FLOW_EOS && self->ignore_eos) ||
(ret == GST_FLOW_NOT_NEGOTIATED && self->ignore_notnegotiated))
return self->convert_to;
else
diff --git a/gst/debugutils/gsterrorignore.h b/gst/debugutils/gsterrorignore.h
index 21d08641f..63d7aee0b 100644
--- a/gst/debugutils/gsterrorignore.h
+++ b/gst/debugutils/gsterrorignore.h
@@ -44,6 +44,7 @@ struct _GstErrorIgnore {
gboolean ignore_error;
gboolean ignore_notlinked;
gboolean ignore_notnegotiated;
+ gboolean ignore_eos;
GstFlowReturn convert_to;
};