mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 19:51:11 +00:00
gst/: Make those function act on the ghostpad target when it's a ghostpad. (Closes #331727)
Original commit message from CVS: * gst/gstpad.c: (gst_pad_set_blocked_async): * gst/gstutils.c: (gst_pad_add_data_probe), (gst_pad_add_event_probe), (gst_pad_add_buffer_probe), (gst_pad_remove_data_probe), (gst_pad_remove_event_probe), (gst_pad_remove_buffer_probe): Make those function act on the ghostpad target when it's a ghostpad. (Closes #331727) ------------------------------------------------------
This commit is contained in:
parent
2c04844949
commit
52cfed6470
3 changed files with 108 additions and 1 deletions
|
@ -1,3 +1,12 @@
|
|||
2006-02-20 Julien MOUTTE <julien@moutte.net>
|
||||
|
||||
* gst/gstpad.c: (gst_pad_set_blocked_async):
|
||||
* gst/gstutils.c: (gst_pad_add_data_probe),
|
||||
(gst_pad_add_event_probe), (gst_pad_add_buffer_probe),
|
||||
(gst_pad_remove_data_probe), (gst_pad_remove_event_probe),
|
||||
(gst_pad_remove_buffer_probe): Make those function act on the
|
||||
ghostpad target when it's a ghostpad. (Closes #331727)
|
||||
|
||||
2006-02-20 Julien MOUTTE <julien@moutte.net>
|
||||
|
||||
* libs/gst/base/gstbasetransform.c:
|
||||
|
|
19
gst/gstpad.c
19
gst/gstpad.c
|
@ -63,6 +63,7 @@
|
|||
#include "gst_private.h"
|
||||
|
||||
#include "gstpad.h"
|
||||
#include "gstghostpad.h"
|
||||
#include "gstpadtemplate.h"
|
||||
#include "gstenumtypes.h"
|
||||
#include "gstmarshal.h"
|
||||
|
@ -876,10 +877,18 @@ gboolean
|
|||
gst_pad_set_blocked_async (GstPad * pad, gboolean blocked,
|
||||
GstPadBlockCallback callback, gpointer user_data)
|
||||
{
|
||||
gboolean was_blocked;
|
||||
gboolean was_blocked, was_ghost = FALSE;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PAD (pad), FALSE);
|
||||
|
||||
if (GST_IS_GHOST_PAD (pad)) {
|
||||
pad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
||||
if (!pad) {
|
||||
return FALSE;
|
||||
}
|
||||
was_ghost = TRUE;
|
||||
}
|
||||
|
||||
GST_OBJECT_LOCK (pad);
|
||||
|
||||
was_blocked = GST_PAD_IS_BLOCKED (pad);
|
||||
|
@ -919,6 +928,10 @@ gst_pad_set_blocked_async (GstPad * pad, gboolean blocked,
|
|||
}
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
if (was_ghost) {
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
had_right_state:
|
||||
|
@ -926,6 +939,10 @@ had_right_state:
|
|||
GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad,
|
||||
"pad %s:%s was in right state", GST_DEBUG_PAD_NAME (pad));
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
if (was_ghost) {
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2652,10 +2652,19 @@ gulong
|
|||
gst_pad_add_data_probe (GstPad * pad, GCallback handler, gpointer data)
|
||||
{
|
||||
gulong sigid;
|
||||
gboolean was_ghost = FALSE;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PAD (pad), 0);
|
||||
g_return_val_if_fail (handler != NULL, 0);
|
||||
|
||||
if (GST_IS_GHOST_PAD (pad)) {
|
||||
pad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
||||
if (!pad) {
|
||||
return 0;
|
||||
}
|
||||
was_ghost = TRUE;
|
||||
}
|
||||
|
||||
GST_OBJECT_LOCK (pad);
|
||||
sigid = g_signal_connect (pad, "have-data", handler, data);
|
||||
GST_PAD_DO_EVENT_SIGNALS (pad)++;
|
||||
|
@ -2665,6 +2674,10 @@ gst_pad_add_data_probe (GstPad * pad, GCallback handler, gpointer data)
|
|||
GST_PAD_DO_BUFFER_SIGNALS (pad), GST_PAD_DO_EVENT_SIGNALS (pad));
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
if (was_ghost) {
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
|
||||
return sigid;
|
||||
}
|
||||
|
||||
|
@ -2683,10 +2696,19 @@ gulong
|
|||
gst_pad_add_event_probe (GstPad * pad, GCallback handler, gpointer data)
|
||||
{
|
||||
gulong sigid;
|
||||
gboolean was_ghost = FALSE;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PAD (pad), 0);
|
||||
g_return_val_if_fail (handler != NULL, 0);
|
||||
|
||||
if (GST_IS_GHOST_PAD (pad)) {
|
||||
pad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
||||
if (!pad) {
|
||||
return 0;
|
||||
}
|
||||
was_ghost = TRUE;
|
||||
}
|
||||
|
||||
GST_OBJECT_LOCK (pad);
|
||||
sigid = g_signal_connect (pad, "have-data::event", handler, data);
|
||||
GST_PAD_DO_EVENT_SIGNALS (pad)++;
|
||||
|
@ -2694,6 +2716,10 @@ gst_pad_add_event_probe (GstPad * pad, GCallback handler, gpointer data)
|
|||
GST_DEBUG_PAD_NAME (pad), GST_PAD_DO_EVENT_SIGNALS (pad));
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
if (was_ghost) {
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
|
||||
return sigid;
|
||||
}
|
||||
|
||||
|
@ -2712,10 +2738,19 @@ gulong
|
|||
gst_pad_add_buffer_probe (GstPad * pad, GCallback handler, gpointer data)
|
||||
{
|
||||
gulong sigid;
|
||||
gboolean was_ghost = FALSE;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PAD (pad), 0);
|
||||
g_return_val_if_fail (handler != NULL, 0);
|
||||
|
||||
if (GST_IS_GHOST_PAD (pad)) {
|
||||
pad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
||||
if (!pad) {
|
||||
return 0;
|
||||
}
|
||||
was_ghost = TRUE;
|
||||
}
|
||||
|
||||
GST_OBJECT_LOCK (pad);
|
||||
sigid = g_signal_connect (pad, "have-data::buffer", handler, data);
|
||||
GST_PAD_DO_BUFFER_SIGNALS (pad)++;
|
||||
|
@ -2723,6 +2758,10 @@ gst_pad_add_buffer_probe (GstPad * pad, GCallback handler, gpointer data)
|
|||
GST_DEBUG_PAD_NAME (pad), GST_PAD_DO_BUFFER_SIGNALS (pad));
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
if (was_ghost) {
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
|
||||
return sigid;
|
||||
}
|
||||
|
||||
|
@ -2736,9 +2775,19 @@ gst_pad_add_buffer_probe (GstPad * pad, GCallback handler, gpointer data)
|
|||
void
|
||||
gst_pad_remove_data_probe (GstPad * pad, guint handler_id)
|
||||
{
|
||||
gboolean was_ghost = FALSE;
|
||||
|
||||
g_return_if_fail (GST_IS_PAD (pad));
|
||||
g_return_if_fail (handler_id > 0);
|
||||
|
||||
if (GST_IS_GHOST_PAD (pad)) {
|
||||
pad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
||||
if (!pad) {
|
||||
return;
|
||||
}
|
||||
was_ghost = TRUE;
|
||||
}
|
||||
|
||||
GST_OBJECT_LOCK (pad);
|
||||
g_signal_handler_disconnect (pad, handler_id);
|
||||
GST_PAD_DO_BUFFER_SIGNALS (pad)--;
|
||||
|
@ -2748,6 +2797,10 @@ gst_pad_remove_data_probe (GstPad * pad, guint handler_id)
|
|||
GST_DEBUG_PAD_NAME (pad), GST_PAD_DO_EVENT_SIGNALS (pad),
|
||||
GST_PAD_DO_BUFFER_SIGNALS (pad));
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
if (was_ghost) {
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2760,15 +2813,29 @@ gst_pad_remove_data_probe (GstPad * pad, guint handler_id)
|
|||
void
|
||||
gst_pad_remove_event_probe (GstPad * pad, guint handler_id)
|
||||
{
|
||||
gboolean was_ghost = FALSE;
|
||||
|
||||
g_return_if_fail (GST_IS_PAD (pad));
|
||||
g_return_if_fail (handler_id > 0);
|
||||
|
||||
if (GST_IS_GHOST_PAD (pad)) {
|
||||
pad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
||||
if (!pad) {
|
||||
return;
|
||||
}
|
||||
was_ghost = TRUE;
|
||||
}
|
||||
|
||||
GST_OBJECT_LOCK (pad);
|
||||
g_signal_handler_disconnect (pad, handler_id);
|
||||
GST_PAD_DO_EVENT_SIGNALS (pad)--;
|
||||
GST_DEBUG ("removed event probe from pad %s:%s, now %d event probes",
|
||||
GST_DEBUG_PAD_NAME (pad), GST_PAD_DO_EVENT_SIGNALS (pad));
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
if (was_ghost) {
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2781,15 +2848,29 @@ gst_pad_remove_event_probe (GstPad * pad, guint handler_id)
|
|||
void
|
||||
gst_pad_remove_buffer_probe (GstPad * pad, guint handler_id)
|
||||
{
|
||||
gboolean was_ghost = FALSE;
|
||||
|
||||
g_return_if_fail (GST_IS_PAD (pad));
|
||||
g_return_if_fail (handler_id > 0);
|
||||
|
||||
if (GST_IS_GHOST_PAD (pad)) {
|
||||
pad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
|
||||
if (!pad) {
|
||||
return;
|
||||
}
|
||||
was_ghost = TRUE;
|
||||
}
|
||||
|
||||
GST_OBJECT_LOCK (pad);
|
||||
g_signal_handler_disconnect (pad, handler_id);
|
||||
GST_PAD_DO_BUFFER_SIGNALS (pad)--;
|
||||
GST_DEBUG ("removed buffer probe from pad %s:%s, now %d buffer probes",
|
||||
GST_DEBUG_PAD_NAME (pad), GST_PAD_DO_BUFFER_SIGNALS (pad));
|
||||
GST_OBJECT_UNLOCK (pad);
|
||||
|
||||
if (was_ghost) {
|
||||
gst_object_unref (pad);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue