summaryrefslogtreecommitdiffstats
path: root/gst/valve/gstvalve.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/valve/gstvalve.c')
-rw-r--r--gst/valve/gstvalve.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gst/valve/gstvalve.c b/gst/valve/gstvalve.c
index ecd0f7dc..a61e009e 100644
--- a/gst/valve/gstvalve.c
+++ b/gst/valve/gstvalve.c
@@ -204,6 +204,12 @@ gst_valve_chain (GstPad *pad, GstBuffer *buffer)
else
ret = gst_pad_push (valve->srcpad, buffer);
+
+ GST_OBJECT_LOCK (GST_OBJECT (valve));
+ if (valve->drop)
+ ret = GST_FLOW_OK;
+ GST_OBJECT_UNLOCK (GST_OBJECT (valve));
+
gst_object_unref (valve);
return ret;
@@ -226,6 +232,11 @@ gst_valve_event (GstPad *pad, GstEvent *event)
else
ret = gst_pad_push_event (valve->srcpad, event);
+ GST_OBJECT_LOCK (GST_OBJECT (valve));
+ if (valve->drop)
+ ret = TRUE;
+ GST_OBJECT_UNLOCK (GST_OBJECT (valve));
+
gst_object_unref (valve);
return ret;
}
@@ -247,6 +258,11 @@ gst_valve_buffer_alloc (GstPad * pad, guint64 offset, guint size,
else
ret = gst_pad_alloc_buffer (valve->srcpad, offset, size, caps, buf);
+ GST_OBJECT_LOCK (GST_OBJECT (valve));
+ if (valve->drop)
+ ret = GST_FLOW_OK;
+ GST_OBJECT_UNLOCK (GST_OBJECT (valve));
+
gst_object_unref (valve);
return ret;