ghostpad: Add guards against invalid parameters to the new, public functions

This commit is contained in:
Sebastian Dröge 2011-05-06 16:15:51 +02:00
parent 6807e536b0
commit 800b738715

View file

@ -90,12 +90,16 @@ static void on_src_target_notify (GstPad * target,
static GParamSpec *pspec_caps = NULL; static GParamSpec *pspec_caps = NULL;
const GstQueryType * const GstQueryType *
gst_proxy_pad_query_type_default (GstPad * pad) gst_proxy_pad_query_type_default (GstPad * pad)
{ {
GstPad *target = gst_proxy_pad_get_target (pad); GstPad *target;
const GstQueryType *res = NULL; const GstQueryType *res = NULL;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
target = gst_proxy_pad_get_target (pad);
if (target) { if (target) {
res = gst_pad_get_query_types (target); res = gst_pad_get_query_types (target);
gst_object_unref (target); gst_object_unref (target);
@ -107,9 +111,13 @@ gboolean
gst_proxy_pad_event_default (GstPad * pad, GstEvent * event) gst_proxy_pad_event_default (GstPad * pad, GstEvent * event)
{ {
gboolean res = FALSE; gboolean res = FALSE;
GstPad *internal = GstPad *internal;
GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad)));
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
g_return_val_if_fail (GST_IS_EVENT (event), FALSE);
internal =
GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad)));
if (internal) { if (internal) {
res = gst_pad_push_event (internal, event); res = gst_pad_push_event (internal, event);
gst_object_unref (internal); gst_object_unref (internal);
@ -122,8 +130,12 @@ gboolean
gst_proxy_pad_query_default (GstPad * pad, GstQuery * query) gst_proxy_pad_query_default (GstPad * pad, GstQuery * query)
{ {
gboolean res = FALSE; gboolean res = FALSE;
GstPad *target = gst_proxy_pad_get_target (pad); GstPad *target;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
g_return_val_if_fail (GST_IS_QUERY (query), FALSE);
target = gst_proxy_pad_get_target (pad);
if (target) { if (target) {
res = gst_pad_query (target, query); res = gst_pad_query (target, query);
gst_object_unref (target); gst_object_unref (target);
@ -138,6 +150,8 @@ gst_proxy_pad_iterate_internal_links_default (GstPad * pad)
GstIterator *res = NULL; GstIterator *res = NULL;
GstPad *internal; GstPad *internal;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
internal = internal =
GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad))); GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad)));
@ -156,9 +170,14 @@ gst_proxy_pad_bufferalloc_default (GstPad * pad, guint64 offset, guint size,
GstCaps * caps, GstBuffer ** buf) GstCaps * caps, GstBuffer ** buf)
{ {
GstFlowReturn result = GST_FLOW_WRONG_STATE; GstFlowReturn result = GST_FLOW_WRONG_STATE;
GstPad *internal = GstPad *internal;
GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad)));
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), GST_FLOW_ERROR);
g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR);
internal =
GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad)));
if (internal) { if (internal) {
result = gst_pad_alloc_buffer (internal, offset, size, caps, buf); result = gst_pad_alloc_buffer (internal, offset, size, caps, buf);
gst_object_unref (internal); gst_object_unref (internal);
@ -171,8 +190,12 @@ GstFlowReturn
gst_proxy_pad_chain_default (GstPad * pad, GstBuffer * buffer) gst_proxy_pad_chain_default (GstPad * pad, GstBuffer * buffer)
{ {
GstFlowReturn res; GstFlowReturn res;
GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); GstPad *internal;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
internal = GST_PROXY_PAD_INTERNAL (pad);
res = gst_pad_push (internal, buffer); res = gst_pad_push (internal, buffer);
return res; return res;
@ -182,8 +205,12 @@ GstFlowReturn
gst_proxy_pad_chain_list_default (GstPad * pad, GstBufferList * list) gst_proxy_pad_chain_list_default (GstPad * pad, GstBufferList * list)
{ {
GstFlowReturn res; GstFlowReturn res;
GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); GstPad *internal;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
g_return_val_if_fail (GST_IS_BUFFER_LIST (list), GST_FLOW_ERROR);
internal = GST_PROXY_PAD_INTERNAL (pad);
res = gst_pad_push_list (internal, list); res = gst_pad_push_list (internal, list);
return res; return res;
@ -194,8 +221,12 @@ gst_proxy_pad_getrange_default (GstPad * pad, guint64 offset, guint size,
GstBuffer ** buffer) GstBuffer ** buffer)
{ {
GstFlowReturn res; GstFlowReturn res;
GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); GstPad *internal;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR);
internal = GST_PROXY_PAD_INTERNAL (pad);
res = gst_pad_pull_range (internal, offset, size, buffer); res = gst_pad_pull_range (internal, offset, size, buffer);
return res; return res;
@ -205,8 +236,11 @@ gboolean
gst_proxy_pad_checkgetrange_default (GstPad * pad) gst_proxy_pad_checkgetrange_default (GstPad * pad)
{ {
gboolean result; gboolean result;
GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); GstPad *internal;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
internal = GST_PROXY_PAD_INTERNAL (pad);
result = gst_pad_check_pull_range (internal); result = gst_pad_check_pull_range (internal);
return result; return result;
@ -215,10 +249,14 @@ gst_proxy_pad_checkgetrange_default (GstPad * pad)
GstCaps * GstCaps *
gst_proxy_pad_getcaps_default (GstPad * pad) gst_proxy_pad_getcaps_default (GstPad * pad)
{ {
GstPad *target = gst_proxy_pad_get_target (pad); GstPad *target;
GstCaps *res; GstCaps *res;
GstPadTemplate *templ = GST_PAD_PAD_TEMPLATE (pad); GstPadTemplate *templ;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
templ = GST_PAD_PAD_TEMPLATE (pad);
target = gst_proxy_pad_get_target (pad);
if (target) { if (target) {
/* if we have a real target, proxy the call */ /* if we have a real target, proxy the call */
res = gst_pad_get_caps_reffed (target); res = gst_pad_get_caps_reffed (target);
@ -264,9 +302,13 @@ done:
gboolean gboolean
gst_proxy_pad_acceptcaps_default (GstPad * pad, GstCaps * caps) gst_proxy_pad_acceptcaps_default (GstPad * pad, GstCaps * caps)
{ {
GstPad *target = gst_proxy_pad_get_target (pad); GstPad *target;
gboolean res; gboolean res;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE);
target = gst_proxy_pad_get_target (pad);
if (target) { if (target) {
res = gst_pad_accept_caps (target, caps); res = gst_pad_accept_caps (target, caps);
gst_object_unref (target); gst_object_unref (target);
@ -282,8 +324,12 @@ gst_proxy_pad_acceptcaps_default (GstPad * pad, GstCaps * caps)
void void
gst_proxy_pad_fixatecaps_default (GstPad * pad, GstCaps * caps) gst_proxy_pad_fixatecaps_default (GstPad * pad, GstCaps * caps)
{ {
GstPad *target = gst_proxy_pad_get_target (pad); GstPad *target;
g_return_if_fail (GST_IS_PROXY_PAD (pad));
g_return_if_fail (GST_IS_CAPS (caps));
target = gst_proxy_pad_get_target (pad);
if (target) { if (target) {
gst_pad_fixate_caps (target, caps); gst_pad_fixate_caps (target, caps);
gst_object_unref (target); gst_object_unref (target);
@ -293,9 +339,13 @@ gst_proxy_pad_fixatecaps_default (GstPad * pad, GstCaps * caps)
gboolean gboolean
gst_proxy_pad_setcaps_default (GstPad * pad, GstCaps * caps) gst_proxy_pad_setcaps_default (GstPad * pad, GstCaps * caps)
{ {
GstPad *target = gst_proxy_pad_get_target (pad); GstPad *target;
gboolean res; gboolean res;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE);
target = gst_proxy_pad_get_target (pad);
if (target) { if (target) {
res = gst_pad_set_caps (target, caps); res = gst_pad_set_caps (target, caps);
gst_object_unref (target); gst_object_unref (target);
@ -584,6 +634,8 @@ gst_ghost_pad_internal_activate_push_default (GstPad * pad, gboolean active)
gboolean ret; gboolean ret;
GstPad *other; GstPad *other;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
GST_LOG_OBJECT (pad, "%sactivate push on %s:%s, we're ok", GST_LOG_OBJECT (pad, "%sactivate push on %s:%s, we're ok",
(active ? "" : "de"), GST_DEBUG_PAD_NAME (pad)); (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad));
@ -601,6 +653,8 @@ gst_ghost_pad_internal_activate_pull_default (GstPad * pad, gboolean active)
gboolean ret; gboolean ret;
GstPad *other; GstPad *other;
g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
GST_LOG_OBJECT (pad, "%sactivate pull on %s:%s", (active ? "" : "de"), GST_LOG_OBJECT (pad, "%sactivate pull on %s:%s", (active ? "" : "de"),
GST_DEBUG_PAD_NAME (pad)); GST_DEBUG_PAD_NAME (pad));
@ -634,6 +688,8 @@ gst_ghost_pad_activate_push_default (GstPad * pad, gboolean active)
gboolean ret; gboolean ret;
GstPad *other; GstPad *other;
g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE);
GST_LOG_OBJECT (pad, "%sactivate push on %s:%s, proxy internal", GST_LOG_OBJECT (pad, "%sactivate push on %s:%s, proxy internal",
(active ? "" : "de"), GST_DEBUG_PAD_NAME (pad)); (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad));
@ -650,6 +706,8 @@ gst_ghost_pad_activate_pull_default (GstPad * pad, gboolean active)
gboolean ret; gboolean ret;
GstPad *other; GstPad *other;
g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE);
GST_LOG_OBJECT (pad, "%sactivate pull on %s:%s", (active ? "" : "de"), GST_LOG_OBJECT (pad, "%sactivate pull on %s:%s", (active ? "" : "de"),
GST_DEBUG_PAD_NAME (pad)); GST_DEBUG_PAD_NAME (pad));
@ -681,6 +739,9 @@ gst_ghost_pad_link_default (GstPad * pad, GstPad * peer)
GstPadLinkReturn ret; GstPadLinkReturn ret;
GstPad *internal; GstPad *internal;
g_return_val_if_fail (GST_IS_GHOST_PAD (pad), GST_PAD_LINK_REFUSED);
g_return_val_if_fail (GST_IS_PAD (peer), GST_PAD_LINK_REFUSED);
GST_DEBUG_OBJECT (pad, "linking ghostpad"); GST_DEBUG_OBJECT (pad, "linking ghostpad");
internal = GST_PROXY_PAD_INTERNAL (pad); internal = GST_PROXY_PAD_INTERNAL (pad);
@ -719,6 +780,8 @@ gst_ghost_pad_unlink_default (GstPad * pad)
{ {
GstPad *internal; GstPad *internal;
g_return_if_fail (GST_IS_GHOST_PAD (pad));
internal = GST_PROXY_PAD_INTERNAL (pad); internal = GST_PROXY_PAD_INTERNAL (pad);
GST_DEBUG_OBJECT (pad, "unlinking ghostpad"); GST_DEBUG_OBJECT (pad, "unlinking ghostpad");
@ -814,6 +877,9 @@ done:
gboolean gboolean
gst_ghost_pad_setcaps_default (GstPad * pad, GstCaps * caps) gst_ghost_pad_setcaps_default (GstPad * pad, GstCaps * caps)
{ {
g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE);
g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE);
if (GST_PAD_DIRECTION (pad) == GST_PAD_SRC) if (GST_PAD_DIRECTION (pad) == GST_PAD_SRC)
return TRUE; return TRUE;