diff options
Diffstat (limited to 'gst/valve')
-rw-r--r-- | gst/valve/gstvalve.c | 16 |
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; |