diff --git a/editor/gsteditorelement.c b/editor/gsteditorelement.c index f5c0fc3df0..3b26eaa674 100644 --- a/editor/gsteditorelement.c +++ b/editor/gsteditorelement.c @@ -746,11 +746,12 @@ gst_editor_element_add_pad_func (GstEditorElement *element, editorpad = gst_editor_pad_new (element, pad, NULL); - if (pad->direction == GST_PAD_SINK) { + // FIXME does this need to check for ghost/real? + if (GST_PAD_DIRECTION(pad) == GST_PAD_SINK) { element->sinkpads = g_list_prepend(element->sinkpads,editorpad); element->sinks++; // g_print("added 'new' pad to sink list\n"); - } else if (pad->direction == GST_PAD_SRC) { + } else if (GST_PAD_DIRECTION(pad) == GST_PAD_SRC) { element->srcpads = g_list_prepend(element->srcpads,editorpad); element->srcs++; // g_print("added 'new' pad to src list\n"); diff --git a/editor/gsteditorimage.c b/editor/gsteditorimage.c index 78e956ad31..0631f69fa8 100644 --- a/editor/gsteditorimage.c +++ b/editor/gsteditorimage.c @@ -45,12 +45,11 @@ struct _image_entry { GtkType (*gtktype) (void); }; -#define TYPES_SIZE 4 +#define TYPES_SIZE 3 struct _image_entry _image_types[TYPES_SIZE] = { {GST_EDITOR_IMAGE_BIN, gst_bin_get_type }, {GST_EDITOR_IMAGE_THREAD, gst_thread_get_type }, {GST_EDITOR_IMAGE_PIPELINE, gst_pipeline_get_type }, - {GST_EDITOR_IMAGE_TEE, gst_tee_get_type }, }; GstEditorImage* diff --git a/editor/gsteditorpad.c b/editor/gsteditorpad.c index baf9a994bf..0a99d462b1 100644 --- a/editor/gsteditorpad.c +++ b/editor/gsteditorpad.c @@ -138,7 +138,8 @@ gst_editor_pad_new(GstEditorElement *parent,GstPad *pad, GstPad *peerpad; GstEditorPad *peereditorpad; - peerpad = pad->peer; + // FIXME does this need to check for ghost/real? + peerpad = GST_PAD_PEER(pad); peereditorpad = GST_EDITOR_GET_OBJECT (peerpad); @@ -270,7 +271,8 @@ gst_editor_pad_realize (GstEditorPad *pad) GST_EDITOR_SET_OBJECT(pad->border,pad); /* create the pad box on the correct side */ - pad->issrc = (pad->pad->direction == GST_PAD_SRC); + // FIXME does this need to check for ghost/real? + pad->issrc = (GST_PAD_DIRECTION(pad->pad) == GST_PAD_SRC); if (pad->issrc) pad->padbox = gnome_canvas_item_new(pad->group, gnome_canvas_rect_get_type(), diff --git a/editor/gsteditorpalette.c b/editor/gsteditorpalette.c index 27b58ba7ce..7fc7a109b0 100644 --- a/editor/gsteditorpalette.c +++ b/editor/gsteditorpalette.c @@ -41,12 +41,11 @@ struct _palette_entry { gchar *factoryname; }; -#define CORE_ELEMENT_SIZE 4 +#define CORE_ELEMENT_SIZE 3 struct _palette_entry _palette_contents_core[CORE_ELEMENT_SIZE] = { {"Bin", gst_bin_get_type, "bin" }, {"Thread", gst_thread_get_type, "thread" }, {"Pipeline", gst_pipeline_get_type, "pipeline" }, - {"Tee", gst_tee_get_type, "tee" }, }; enum { diff --git a/gst/gstalpha.h b/gst/gstalpha.h index 27eb612da1..0d200197b9 100644 --- a/gst/gstalpha.h +++ b/gst/gstalpha.h @@ -20,30 +20,27 @@ * Boston, MA 02111-1307, USA. */ -#ifndef GST_HGUARD_GSTALPHA_H -#define GST_HGUARD_GSTALPHA_H +#ifndef __GST_GSTALPHA_H__ +#define __GST_GSTALPHA_H__ -#warning in gstalpha.h - -#define GET_SP(target) \ - __asm__("stq $30,%0" : "=m"(target) : : "30"); - -#define SET_SP(stackpointer) \ +#define GST_ARCH_SET_SP(stackpointer) \ __asm__("bis $31,%0,$30" : : "r"(stackpointer)); -#define CALL(target) \ +#define GST_ARCH_CALL(target) \ __asm__( "bis $31,%0,$27\n\t" \ "jsr $26,($27),0" : : "r"(target) ); -struct minimal_ppc_stackframe { +// Need to get more information about the stackframe format +// and get the fields more correct. Check GDB sources maybe? +struct minimal_stackframe { unsigned long back_chain; unsigned long LR_save; unsigned long unused1; unsigned long unused2; }; -#define SETUP_STACK(sp) \ +#define GST_ARCH_SETUP_STACK(sp) \ sp = ((unsigned long *)(sp)) - 4; \ - ((struct minimal_ppc_stackframe *)sp)->back_chain = 0; + ((struct minimal_stackframe *)sp)->back_chain = 0; -#endif /* GST_HGUARD_GSTALPHA_H */ +#endif /* __GST_GSTALPHA_H__ */ diff --git a/gst/gstbin.c b/gst/gstbin.c index a4743974af..ac657f897d 100644 --- a/gst/gstbin.c +++ b/gst/gstbin.c @@ -754,7 +754,7 @@ gst_bin_iterate_func (GstBin *bin) pads = entry->pads; while (pads) { pad = GST_PAD (pads->data); - if (GST_REAL_PAD(pad)->direction == GST_PAD_SRC) { + if (GST_RPAD_DIRECTION(pad) == GST_PAD_SRC) { GST_DEBUG (0,"calling getfunc of %s:%s\n",GST_DEBUG_PAD_NAME(pad)); if (GST_REAL_PAD(pad)->getfunc == NULL) fprintf(stderr, "error, no getfunc in \"%s\"\n", gst_element_get_name (entry)); diff --git a/gst/gsti386.h b/gst/gsti386.h index 568ad67ba1..7aa9e40912 100644 --- a/gst/gsti386.h +++ b/gst/gsti386.h @@ -20,18 +20,16 @@ * Boston, MA 02111-1307, USA. */ -#ifndef GST_HGUARD_GSTI386_H -#define GST_HGUARD_GSTI386_H +#ifndef __GST_GSTI386_H__ +#define __GST_GSTI386_H__ -#define GET_SP(target) \ - __asm__( "movl %%esp, %0" : "=r"(target) : : "esp", "ebp" ); +#define GST_ARCH_SET_SP(stackpointer) \ + __asm__( "movl %0, %%esp\n" : : "r"(stackpointer) ); -#define SET_SP(source) \ - __asm__( "movl %0, %%esp\n" : : "r"(source) ); - -#define CALL(target) \ +#define GST_ARCH_CALL(target) \ __asm__("call *%0" : : "r"(target) ); -#define SETUP_STACK(sp) do ; while(0) +// assuming the stackframe is 16 bytes +#define GST_ARCH_SETUP_STACK(sp) sp -= 4 -#endif /* GST_HGUARD_GSTI386_H */ +#endif /* __GST_GSTI386_H__ */ diff --git a/gst/gstinfo.h b/gst/gstinfo.h index f53c638bdd..5678aef66c 100644 --- a/gst/gstinfo.h +++ b/gst/gstinfo.h @@ -110,7 +110,9 @@ G_GNUC_UNUSED static gchar *_debug_string = NULL; /********** some convenience macros for debugging **********/ #define GST_DEBUG_PAD_NAME(pad) \ - ((pad)->parent != NULL) ? gst_element_get_name(GST_ELEMENT((pad)->parent)) : "''", gst_pad_get_name(pad) + (((GstPad*)(pad))->parent != NULL) ? \ + gst_element_get_name(GST_ELEMENT(((GstPad*)(pad))->parent)) : \ + "''", gst_pad_get_name((GstPad*)pad) diff --git a/gst/gstpad.c b/gst/gstpad.c index 84a8838d18..8eef9f8598 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -28,21 +28,6 @@ #include "gsttype.h" -/* Pad signals and args */ -enum { - SET_ACTIVE, - CAPS_CHANGED, - /* FILL ME */ - LAST_SIGNAL -}; - -enum { - ARG_0, - ARG_ACTIVE, - /* FILL ME */ -}; - - /***** Start with the base GstPad class *****/ static void gst_pad_class_init (GstPadClass *klass); static void gst_pad_init (GstPad *pad); @@ -88,6 +73,20 @@ gst_pad_init (GstPad *pad) /***** Then do the Real Pad *****/ +/* Pad signals and args */ +enum { + REAL_SET_ACTIVE, + REAL_CAPS_CHANGED, + /* FILL ME */ + REAL_LAST_SIGNAL +}; + +enum { + REAL_ARG_0, + REAL_ARG_ACTIVE, + /* FILL ME */ +}; + static void gst_real_pad_class_init (GstRealPadClass *klass); static void gst_real_pad_init (GstRealPad *pad); @@ -99,7 +98,7 @@ static void gst_real_pad_destroy (GtkObject *object); static void gst_pad_push_func (GstPad *pad, GstBuffer *buf); static GstPad *real_pad_parent_class = NULL; -static guint gst_real_pad_signals[LAST_SIGNAL] = { 0 }; +static guint gst_real_pad_signals[REAL_LAST_SIGNAL] = { 0 }; GtkType gst_real_pad_get_type(void) { @@ -130,20 +129,20 @@ gst_real_pad_class_init (GstRealPadClass *klass) real_pad_parent_class = gtk_type_class(GST_TYPE_PAD); - gst_real_pad_signals[SET_ACTIVE] = + gst_real_pad_signals[REAL_SET_ACTIVE] = gtk_signal_new ("set_active", GTK_RUN_LAST, gtkobject_class->type, GTK_SIGNAL_OFFSET (GstRealPadClass, set_active), gtk_marshal_NONE__BOOL, GTK_TYPE_NONE, 1, GTK_TYPE_BOOL); - gst_real_pad_signals[CAPS_CHANGED] = + gst_real_pad_signals[REAL_CAPS_CHANGED] = gtk_signal_new ("caps_changed", GTK_RUN_LAST, gtkobject_class->type, GTK_SIGNAL_OFFSET (GstRealPadClass, caps_changed), gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); - gtk_object_class_add_signals (gtkobject_class, gst_real_pad_signals, LAST_SIGNAL); + gtk_object_class_add_signals (gtkobject_class, gst_real_pad_signals, REAL_LAST_SIGNAL); gtk_object_add_arg_type ("GstRealPad::active", GTK_TYPE_BOOL, - GTK_ARG_READWRITE, ARG_ACTIVE); + GTK_ARG_READWRITE, REAL_ARG_ACTIVE); gtkobject_class->destroy = gst_real_pad_destroy; gtkobject_class->set_arg = gst_real_pad_set_arg; @@ -176,7 +175,7 @@ gst_real_pad_set_arg (GtkObject *object, GtkArg *arg, guint id) g_return_if_fail(GST_IS_PAD(object)); switch (id) { - case ARG_ACTIVE: + case REAL_ARG_ACTIVE: if (GTK_VALUE_BOOL(*arg)) { gst_info("gstpad: activating pad\n"); GST_FLAG_UNSET(object,GST_PAD_DISABLED); @@ -184,7 +183,7 @@ gst_real_pad_set_arg (GtkObject *object, GtkArg *arg, guint id) gst_info("gstpad: de-activating pad\n"); GST_FLAG_SET(object,GST_PAD_DISABLED); } - gtk_signal_emit(GTK_OBJECT(object), gst_real_pad_signals[SET_ACTIVE], + gtk_signal_emit(GTK_OBJECT(object), gst_real_pad_signals[REAL_SET_ACTIVE], ! GST_FLAG_IS_SET(object,GST_PAD_DISABLED)); break; default: @@ -199,7 +198,7 @@ gst_real_pad_get_arg (GtkObject *object, GtkArg *arg, guint id) g_return_if_fail (GST_IS_PAD (object)); switch (id) { - case ARG_ACTIVE: + case REAL_ARG_ACTIVE: GTK_VALUE_BOOL (*arg) = ! GST_FLAG_IS_SET (object, GST_PAD_DISABLED); break; default: @@ -221,18 +220,16 @@ GstPad* gst_pad_new (gchar *name, GstPadDirection direction) { - GstPad *pad; - GstRealPad *realpad; + GstRealPad *pad; g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (direction != GST_PAD_UNKNOWN, NULL); - realpad = gtk_type_new (gst_real_pad_get_type ()); - pad = GST_PAD(realpad); - pad->name = g_strdup (name); - realpad->direction = direction; + pad = gtk_type_new (gst_real_pad_get_type ()); + GST_PAD_NAME(pad) = g_strdup (name); + GST_RPAD_DIRECTION(pad) = direction; - return pad; + return GST_PAD(pad); } /** @@ -249,15 +246,13 @@ gst_pad_new_from_template (GstPadTemplate *templ, gchar *name) { GstPad *pad; - GstRealPad *realpad; g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (templ != NULL, NULL); pad = gst_pad_new (name, templ->direction); - realpad = GST_REAL_PAD (pad); - realpad->caps = templ->caps; - pad->padtemplate = templ; + GST_PAD_CAPS(pad) = templ->caps; + GST_PAD_PADTEMPLATE(pad) = templ; return pad; } @@ -274,9 +269,9 @@ GstPadDirection gst_pad_get_direction (GstPad *pad) { g_return_val_if_fail (pad != NULL, GST_PAD_UNKNOWN); - g_return_val_if_fail (GST_IS_REAL_PAD (pad), GST_PAD_UNKNOWN); + g_return_val_if_fail (GST_IS_PAD (pad), GST_PAD_UNKNOWN); - return GST_REAL_PAD(pad)->direction; + return GST_PAD_DIRECTION(pad); } /** @@ -328,8 +323,10 @@ void gst_pad_set_chain_function (GstPad *pad, { g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_REAL_PAD (pad)); - - GST_REAL_PAD(pad)->chainfunc = chain; + + GST_RPAD_CHAINFUNC(pad) = chain; + GST_DEBUG (0,"chainfunc for %s:%s(@%p) at %p is set to %p\n", + GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_CHAINFUNC(pad),chain); } /** @@ -346,12 +343,9 @@ gst_pad_set_get_function (GstPad *pad, g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_REAL_PAD (pad)); - // the if and such should optimize out when DEBUG is off - GST_DEBUG (0,"setting get function for %s:%s\n",GST_DEBUG_PAD_NAME(pad)); - - GST_REAL_PAD(pad)->getfunc = get; + GST_RPAD_GETFUNC(pad) = get; GST_DEBUG (0,"getfunc for %s:%s(@%p) at %p is set to %p\n", - GST_DEBUG_PAD_NAME(pad),pad,&GST_REAL_PAD(pad)->getfunc,get); + GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_GETFUNC(pad),get); } /** @@ -368,9 +362,9 @@ gst_pad_set_getregion_function (GstPad *pad, g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_REAL_PAD (pad)); - GST_DEBUG (0,"gstpad: pad setting getregion function\n"); - - GST_REAL_PAD(pad)->getregionfunc = getregion; + GST_RPAD_GETREGIONFUNC(pad) = getregion; + GST_DEBUG (0,"getregionfunc for %s:%s(@%p) at %p is set to %p\n", + GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_GETREGIONFUNC(pad),getregion); } /** @@ -387,7 +381,9 @@ gst_pad_set_qos_function (GstPad *pad, g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_REAL_PAD (pad)); - GST_REAL_PAD(pad)->qosfunc = qos; + GST_RPAD_QOSFUNC(pad) = qos; + GST_DEBUG (0,"qosfunc for %s:%s(@%p) at %p is set to %p\n", + GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_QOSFUNC(pad),qos); } /** @@ -404,7 +400,9 @@ gst_pad_set_eos_function (GstPad *pad, g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_REAL_PAD (pad)); - GST_REAL_PAD(pad)->eosfunc = eos; + GST_RPAD_EOSFUNC(pad) = eos; + GST_DEBUG (0,"eosfunc for %s:%s(@%p) at %p is set to %p\n", + GST_DEBUG_PAD_NAME(pad),pad,&GST_RPAD_EOSFUNC(pad),eos); } @@ -412,10 +410,9 @@ gst_pad_set_eos_function (GstPad *pad, static void gst_pad_push_func(GstPad *pad, GstBuffer *buf) { - GstRealPad *realpad = GST_REAL_PAD(pad); - if (realpad->peer->chainfunc != NULL) { + if (GST_RPAD_CHAINFUNC(GST_RPAD_PEER(pad)) != NULL) { GST_DEBUG (0,"calling chain function\n"); - (realpad->peer->chainfunc)(pad,buf); + (GST_RPAD_CHAINFUNC(GST_RPAD_PEER(pad)))(pad,buf); } else { GST_DEBUG (0,"got a problem here: default pad_push handler in place, no chain function\n"); } @@ -433,23 +430,22 @@ void gst_pad_handle_qos(GstPad *pad, glong qos_message) { - GstRealPad *realpad = GST_REAL_PAD (pad); GstElement *element; GList *pads; GstPad *target_pad; GST_DEBUG (0,"gst_pad_handle_qos(\"%s\",%08ld)\n", GST_ELEMENT(pad->parent)->name,qos_message); - if (realpad->qosfunc) { - (realpad->qosfunc) (pad,qos_message); + if (GST_RPAD_QOSFUNC(pad)) { + (GST_RPAD_QOSFUNC(pad)) (pad,qos_message); } else { - element = GST_ELEMENT (GST_PAD(realpad->peer)->parent); + element = GST_ELEMENT (GST_PAD_PARENT(GST_RPAD_PEER(pad))); pads = element->pads; GST_DEBUG (0,"gst_pad_handle_qos recurse(\"%s\",%08ld)\n", element->name, qos_message); while (pads) { target_pad = GST_PAD (pads->data); - if (GST_REAL_PAD(target_pad)->direction == GST_PAD_SINK) { + if (GST_RPAD_DIRECTION(target_pad) == GST_PAD_SINK) { gst_pad_handle_qos (target_pad, qos_message); } pads = g_list_next (pads); @@ -479,20 +475,18 @@ gst_pad_disconnect (GstPad *srcpad, g_return_if_fail (GST_IS_PAD (sinkpad)); // now we need to deal with the real/ghost stuff - if (GST_IS_GHOST_PAD(srcpad)) realsrc = GST_GHOST_PAD(srcpad)->realpad; - else realsrc = GST_REAL_PAD(srcpad); - if (GST_IS_GHOST_PAD(sinkpad)) realsink = GST_GHOST_PAD(sinkpad)->realpad; - else realsink = GST_REAL_PAD(sinkpad); + realsrc = GST_PAD_REALIZE(srcpad); + realsink = GST_PAD_REALIZE(sinkpad); - g_return_if_fail (realsrc->peer != NULL); - g_return_if_fail (realsink->peer != NULL); + g_return_if_fail (GST_RPAD_PEER(realsrc) != NULL); + g_return_if_fail (GST_RPAD_PEER(realsink) != NULL); - g_return_if_fail ((realsrc->direction == GST_PAD_SRC) && - (realsink->direction == GST_PAD_SINK)); + g_return_if_fail ((GST_RPAD_DIRECTION(realsrc) == GST_PAD_SRC) && + (GST_RPAD_DIRECTION(realsink) == GST_PAD_SINK)); /* first clear peers */ - realsrc->peer = NULL; - realsink->peer = NULL; + GST_RPAD_PEER(realsrc) = NULL; + GST_RPAD_PEER(realsink) = NULL; GST_INFO (GST_CAT_ELEMENT_PADS, "disconnected %s:%s and %s:%s", GST_DEBUG_PAD_NAME(srcpad), GST_DEBUG_PAD_NAME(sinkpad)); @@ -517,26 +511,23 @@ gst_pad_connect (GstPad *srcpad, g_return_if_fail(GST_IS_PAD(srcpad)); g_return_if_fail(sinkpad != NULL); g_return_if_fail(GST_IS_PAD(sinkpad)); -// g_return_if_fail(sinkpad->chain != NULL); // now we need to deal with the real/ghost stuff - if (GST_IS_GHOST_PAD(srcpad)) realsrc = GST_GHOST_PAD(srcpad)->realpad; - else realsrc = GST_REAL_PAD(srcpad); - if (GST_IS_GHOST_PAD(sinkpad)) realsink = GST_GHOST_PAD(sinkpad)->realpad; - else realsink = GST_REAL_PAD(sinkpad); + realsrc = GST_PAD_REALIZE(srcpad); + realsink = GST_PAD_REALIZE(sinkpad); - g_return_if_fail(realsrc->peer == NULL); - g_return_if_fail(realsink->peer == NULL); + g_return_if_fail(GST_RPAD_PEER(realsrc) == NULL); + g_return_if_fail(GST_RPAD_PEER(realsink) == NULL); /* check for reversed directions and swap if necessary */ - if ((realsrc->direction == GST_PAD_SINK) && - (realsink->direction == GST_PAD_SRC)) { + if ((GST_RPAD_DIRECTION(realsrc) == GST_PAD_SINK) && + (GST_RPAD_DIRECTION(realsink) == GST_PAD_SRC)) { temppad = realsrc; realsrc = realsink; realsink = temppad; } - g_return_if_fail((realsrc->direction == GST_PAD_SRC) && - (realsink->direction == GST_PAD_SINK)); + g_return_if_fail((GST_RPAD_DIRECTION(realsrc) == GST_PAD_SRC) && + (GST_RPAD_DIRECTION(realsink) == GST_PAD_SINK)); if (!gst_pad_check_compatibility (srcpad, sinkpad)) { g_warning ("gstpad: connecting incompatible pads (%s:%s) and (%s:%s)\n", @@ -548,14 +539,8 @@ gst_pad_connect (GstPad *srcpad, } /* first set peers */ - realsrc->peer = realsink; - realsink->peer = realsrc; - -// FIXME this is irrelevant now - /* now copy the chain pointer from sink to src */ - //srcpad->chainfunc = sinkpad->chainfunc; - /* and the pull function */ - //srcpad->pullfunc = sinkpad->pullfunc; + GST_RPAD_PEER(realsrc) = realsink; + GST_RPAD_PEER(realsink) = realsrc; /* set the connected flag */ /* FIXME: set connected flag */ @@ -584,7 +569,7 @@ gst_pad_set_parent (GstPad *pad, //g_print("set parent %s\n", gst_element_get_name(parent)); - pad->parent = parent; + GST_PAD_PARENT(pad) = parent; } /** @@ -605,13 +590,7 @@ gst_pad_add_ghost_parent (GstPad *pad, g_return_if_fail (parent != NULL); g_return_if_fail (GTK_IS_OBJECT (parent)); - realpad = GST_REAL_PAD (pad); - -/* FIXME is this going to be needed? - // now we need to deal with the real/ghost stuff - if (GST_IS_GHOST_PAD(srcpad)) realsrc = GST_GHOST_PAD(srcpad)->realpad; - else realsrc = GST_REAL_PAD(srcpad); -*/ + realpad = GST_PAD_REALIZE(pad); realpad->ghostparents = g_list_prepend (realpad->ghostparents, parent); } @@ -635,7 +614,7 @@ gst_pad_remove_ghost_parent (GstPad *pad, g_return_if_fail (parent != NULL); g_return_if_fail (GTK_IS_OBJECT (parent)); - realpad = GST_REAL_PAD (pad); + realpad = GST_PAD_REALIZE (pad); realpad->ghostparents = g_list_remove (realpad->ghostparents, parent); } @@ -654,7 +633,7 @@ gst_pad_get_parent (GstPad *pad) g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL); - return pad->parent; + return GST_PAD_PARENT(pad); } /** @@ -671,24 +650,24 @@ gst_pad_get_ghost_parents (GstPad *pad) g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (GST_IS_REAL_PAD (pad), NULL); // NOTE this restriction - return GST_REAL_PAD(pad)->ghostparents; + return GST_PAD_REALIZE(pad)->ghostparents; } /** * gst_pad_set_caps_list: * @pad: the pad to set the caps to - * @caps: the capslist to attach to this pad + * @caps: a GList of the capabilities to attach to this pad * * Set the capabilities of this pad. */ void gst_pad_set_caps_list (GstPad *pad, - GList *caps) + GList *caps) { g_return_if_fail (pad != NULL); g_return_if_fail (GST_IS_REAL_PAD (pad)); // NOTE this restriction - GST_REAL_PAD(pad)->caps = caps; + GST_PAD_CAPS(pad) = caps; } /** @@ -697,21 +676,15 @@ gst_pad_set_caps_list (GstPad *pad, * * Get the capabilities of this pad. * - * Returns: a list of capabilities of this pad + * Returns: a list of the capabilities of this pad */ GList * gst_pad_get_caps_list (GstPad *pad) { - GstRealPad *realpad; - g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL); - // find the real pad - if (GST_IS_GHOST_PAD (pad)) realpad = GST_GHOST_PAD(pad)->realpad; - else realpad = GST_REAL_PAD(pad); - - return realpad->caps; + return GST_PAD_CAPS(pad); } /** @@ -726,17 +699,12 @@ gst_pad_get_caps_list (GstPad *pad) GstCaps * gst_pad_get_caps_by_name (GstPad *pad, gchar *name) { - GstRealPad *realpad; GList *caps; g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL); - // find the real pad - if (GST_IS_GHOST_PAD (pad)) realpad = GST_GHOST_PAD(pad)->realpad; - else realpad = GST_REAL_PAD(pad); - - caps = realpad->caps; + caps = GST_PAD_CAPS(pad); while (caps) { GstCaps *cap = (GstCaps *)caps->data; @@ -770,14 +738,11 @@ gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad) g_return_val_if_fail (sinkpad != NULL, FALSE); g_return_val_if_fail (GST_IS_PAD (sinkpad), FALSE); - // find the real pad - if (GST_IS_GHOST_PAD (srcpad)) realsrc = GST_GHOST_PAD(srcpad)->realpad; - else realsrc = GST_REAL_PAD(srcpad); - if (GST_IS_GHOST_PAD (sinkpad)) realsink = GST_GHOST_PAD(sinkpad)->realpad; - else realsink = GST_REAL_PAD(sinkpad); + realsrc = GST_PAD_REALIZE(srcpad); + realsink = GST_PAD_REALIZE(sinkpad); - if (realsrc->caps && realsink->caps) { - if (!gst_caps_list_check_compatibility (realsrc->caps, realsink->caps)) { + if (GST_RPAD_CAPS(realsrc) && GST_RPAD_CAPS(realsink)) { + if (!gst_caps_list_check_compatibility (GST_RPAD_CAPS(realsrc), GST_RPAD_CAPS(realsink))) { return FALSE; } else { @@ -802,15 +767,10 @@ gst_pad_check_compatibility (GstPad *srcpad, GstPad *sinkpad) GstPad* gst_pad_get_peer (GstPad *pad) { - GstRealPad *realpad; g_return_val_if_fail (pad != NULL, NULL); g_return_val_if_fail (GST_IS_PAD (pad), NULL); - // find the real pad - if (GST_IS_GHOST_PAD (pad)) realpad = GST_GHOST_PAD(pad)->realpad; - else realpad = GST_REAL_PAD(pad); - - return GST_PAD(realpad->peer); + return GST_PAD(GST_PAD_PEER(pad)); } // FIXME this needs to be rethought soon @@ -896,14 +856,13 @@ gst_pad_save_thyself (GstPad *pad, GstRealPad *realpad; GstPad *peer; - // FIXME ? - if (GST_IS_GHOST_PAD(pad)) return NULL; + g_return_val_if_fail (GST_IS_REAL_PAD (pad), NULL); realpad = GST_REAL_PAD(pad); xmlNewChild(parent,NULL,"name",pad->name); - if (realpad->peer != NULL) { - peer = GST_PAD(realpad->peer); + if (GST_RPAD_PEER(realpad) != NULL) { + peer = GST_PAD(GST_RPAD_PEER(realpad)); // first check to see if the peer's parent's parent is the same //if (pad->parent->parent == peer->parent->parent) // we just save it off @@ -932,21 +891,25 @@ gst_pad_ghost_save_thyself (GstPad *pad, { xmlNodePtr self; + g_return_val_if_fail (GST_IS_GHOST_PAD (pad), NULL); + self = xmlNewChild(parent,NULL,"ghostpad",NULL); xmlNewChild(self,NULL,"name",pad->name); xmlNewChild(self,NULL,"parent",GST_ELEMENT(pad->parent)->name); + // FIXME FIXME FIXME! + return self; } #ifndef gst_pad_push void gst_pad_push(GstPad *pad,GstBuffer *buf) { - GstRealPad *realpad = GST_REAL_PAD(pad); + GstRealPad *peer = GST_RPAD_PEER(pad); GST_DEBUG_ENTER("(%s:%s)",GST_DEBUG_PAD_NAME(pad)); - if (realpad->peer->pushfunc) { + if (peer->pushfunc) { GST_DEBUG (0,"calling pushfunc &%s of peer pad %s:%s\n", - GST_DEBUG_FUNCPTR_NAME(realpad->peer->pushfunc),GST_DEBUG_PAD_NAME(GST_PAD(realpad->peer))); - (realpad->peer->pushfunc)(GST_PAD(realpad->peer),buf); + GST_DEBUG_FUNCPTR_NAME(peer->pushfunc),GST_DEBUG_PAD_NAME(((GstPad*)peer))); + (peer->pushfunc)(((GstPad*)peer),buf); } else GST_DEBUG (0,"no pushfunc\n"); } @@ -954,15 +917,14 @@ void gst_pad_push(GstPad *pad,GstBuffer *buf) { #ifndef gst_pad_pull GstBuffer *gst_pad_pull(GstPad *pad) { - GstRealPad *realpad = GST_REAL_PAD(pad); - GstRealPad *peer = realpad->peer; + GstRealPad *peer = GST_RPAD_PEER(pad); GST_DEBUG_ENTER("(%s:%s)",GST_DEBUG_PAD_NAME(pad)); if (peer->pullfunc) { GST_DEBUG (0,"calling pullfunc &%s (@%p) of peer pad %s:%s\n", - GST_DEBUG_FUNCPTR_NAME(peer->pullfunc),&peer->pullfunc,GST_DEBUG_PAD_NAME(GST_PAD(peer))); - return (peer->pullfunc)(GST_PAD(peer)); + GST_DEBUG_FUNCPTR_NAME(peer->pullfunc),&peer->pullfunc,GST_DEBUG_PAD_NAME(((GstPad*)peer))); + return (peer->pullfunc)(((GstPad*)peer)); } else { - GST_DEBUG (0,"no pullfunc for peer pad %s:%s at %p\n",GST_DEBUG_PAD_NAME(GST_PAD(peer)),&peer->pullfunc); + GST_DEBUG (0,"no pullfunc for peer pad %s:%s at %p\n",GST_DEBUG_PAD_NAME(((GstPad*)peer)),&peer->pullfunc); return NULL; } } @@ -970,12 +932,12 @@ GstBuffer *gst_pad_pull(GstPad *pad) { #ifndef gst_pad_pullregion GstBuffer *gst_pad_pullregion(GstPad *pad,gulong offset,gulong size) { - GstRealPad *realpad = GST_REAL_PAD(pad); + GstRealPad *peer = GST_RPAD_PEER(pad); GST_DEBUG_ENTER("(%s:%s,%ld,%ld)",GST_DEBUG_PAD_NAME(pad),offset,size); - if (realpad->peer->pullregionfunc) { + if (peer->pullregionfunc) { GST_DEBUG (0,"calling pullregionfunc &%s of peer pad %s:%s\n", - GST_DEBUG_FUNCPTR_NAME(realpad->peer->pullregionfunc),GST_DEBUG_PAD_NAME(GST_PAD(realpad->peer))); - return (realpad->peer->pullregionfunc)(GST_PAD(realpad->peer),offset,size); + GST_DEBUG_FUNCPTR_NAME(peer->pullregionfunc),GST_DEBUG_PAD_NAME(((GstPad*)peer))); + return (peer->pullregionfunc)(((GstPad*)peer),offset,size); } else { GST_DEBUG (0,"no pullregionfunc\n"); return NULL; diff --git a/gst/gstpad.h b/gst/gstpad.h index 19c5ceb4cd..50e996bb98 100644 --- a/gst/gstpad.h +++ b/gst/gstpad.h @@ -107,11 +107,6 @@ struct _GstPadClass { GstObjectClass parent_class; }; -/* quick access macros */ -#define GST_PAD_NAME(pad) (GST_PAD(pad)->name) -#define GST_PAD_DIRECTION(pad) (GST_PAD(pad)->direction) -#define GST_PAD_PARENT(pad) (GST_PAD(pad)->parent) - struct _GstRealPad { GstPad pad; @@ -137,10 +132,6 @@ struct _GstRealPad { GList *ghostparents; }; -/* quick test to see if the pad is connected */ -#define GST_PAD_CONNECTED(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->peer != NULL) -#define GST_PAD_CAN_PULL(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->pullfunc != NULL) - struct _GstRealPadClass { GstPadClass parent_class; @@ -160,7 +151,43 @@ struct _GstGhostPadClass { GstPadClass parent_class; }; -/* template */ + +/***** helper macros *****/ +/* GstPad */ +#define GST_PAD_NAME(pad) (((GstPad *)(pad))->name) +#define GST_PAD_ELEMENT_PRIVATE(pad) (((GstPad *)(pad))->element_private) +#define GST_PAD_PARENT(pad) (((GstPad *)(pad))->parent) +#define GST_PAD_PADTEMPLATE(pad) (((GstPad *)(pad))->padtemplate) + +/* GstRealPad */ +#define GST_RPAD_DIRECTION(pad) (((GstRealPad *)(pad))->direction) +#define GST_RPAD_CAPS(pad) (((GstRealPad *)(pad))->caps) +#define GST_RPAD_PEER(pad) (((GstRealPad *)(pad))->peer) +#define GST_RPAD_BUFPEN(pad) (((GstRealPad *)(pad))->bufpen) +#define GST_RPAD_CHAINFUNC(pad) (((GstRealPad *)(pad))->chainfunc) +#define GST_RPAD_GETFUNC(pad) (((GstRealPad *)(pad))->getfunc) +#define GST_RPAD_GETREGIONFUNC(pad) (((GstRealPad *)(pad))->getregionfunc) +#define GST_RPAD_PUSHFUNC(pad) (((GstRealPad *)(pad))->pushfunc) +#define GST_RPAD_PULLFUNC(pad) (((GstRealPad *)(pad))->pullfunc) +#define GST_RPAD_PULLREGIONFUNC(pad) (((GstRealPad *)(pad))->pullregionfunc) +#define GST_RPAD_QOSFUNC(pad) (((GstRealPad *)(pad))->qosfunc) +#define GST_RPAD_EOSFUNC(pad) (((GstRealPad *)(pad))->eosfunc) + +/* GstGhostPad */ +#define GST_GPAD_REALPAD(pad) (((GstGhostPad *)(pad))->realpad) + +/* Generic */ +#define GST_PAD_REALIZE(pad) (GST_IS_REAL_PAD(pad) ? ((GstRealPad *)(pad)) : GST_GPAD_REALPAD(pad)) +#define GST_PAD_DIRECTION(pad) GST_RPAD_DIRECTION(GST_PAD_REALIZE(pad)) +#define GST_PAD_CAPS(pad) GST_RPAD_CAPS(GST_PAD_REALIZE(pad)) +#define GST_PAD_PEER(pad) GST_RPAD_PEER(GST_PAD_REALIZE(pad)) + +/* Some check functions (unused?) */ +#define GST_PAD_CONNECTED(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->peer != NULL) +#define GST_PAD_CAN_PULL(pad) (GST_IS_REAL_PAD(pad) && GST_REAL_PAD(pad)->pullfunc != NULL) + + +/***** PadTemplate *****/ #define GST_TYPE_PADTEMPLATE (gst_padtemplate_get_type ()) #define GST_PADTEMPLATE(obj) (GTK_CHECK_CAST ((obj), GST_TYPE_PADTEMPLATE,GstPad)) #define GST_PADTEMPLATE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_PADTEMPLATE,GstPadClass)) @@ -261,7 +288,7 @@ GstBuffer* gst_pad_pull_region (GstPad *pad, gulong offset, gulong size); GstPad * gst_pad_select (GstPad *nextpad, ...); -#define gst_pad_eos(pad) ((pad)->peer->eosfunc((pad)->peer)) +#define gst_pad_eos(pad) (GST_RPAD_EOSFUNC(GST_RPAD_PEER(pad))(GST_PAD(GST_RPAD_PEER(pad)))) gboolean gst_pad_set_eos (GstPad *pad); gboolean gst_pad_eos_func (GstPad *pad); diff --git a/gst/gstppc.h b/gst/gstppc.h index fe530eaa6f..80e2781991 100644 --- a/gst/gstppc.h +++ b/gst/gstppc.h @@ -20,18 +20,17 @@ * Boston, MA 02111-1307, USA. */ -#ifndef GST_HGUARD_GSTPPC_H -#define GST_HGUARD_GSTPPC_H +#ifndef __GST_GSTPPC_H__ +#define __GST_GSTPPC_H__ /* FIXME: Hmm - does this work? */ -#define GET_SP(target) \ - __asm__("stw 1,%0" : "=m"(target) : : "r1"); -#define SET_SP(source) \ - __asm__("lwz 1,%0" : "=m"(source)) +// should bring this in line with others and use an "r" +#define GST_ARCH_SET_SP(stackpointer) \ + __asm__("lwz 1,%0" : : "m"(stackpointer)) -#define CALL(target) \ +#define GST_ARCH_CALL(target) \ __asm__( "mr 0,%0\n\t" \ "mtlr 0\n\t" \ "blrl" : : "r"(target) ); @@ -43,8 +42,8 @@ struct minimal_ppc_stackframe { unsigned long unused2; }; -#define SETUP_STACK(sp) \ +#define GST_ARCH_SETUP_STACK(sp) \ sp = ((unsigned long *)(sp)) - 4; \ ((struct minimal_ppc_stackframe *)sp)->back_chain = 0; -#endif /* GST_HGUARD_GSTPPC_H */ +#endif /* __GST_GSTPPC_H__ */ diff --git a/gst/gstscheduler.c b/gst/gstscheduler.c index 2ecbbb6a51..c69e2c4a85 100644 --- a/gst/gstscheduler.c +++ b/gst/gstscheduler.c @@ -55,7 +55,7 @@ gst_bin_chain_wrapper (int argc,char *argv[]) GstPad *pad; GstRealPad *realpad; GstBuffer *buf; - + GST_DEBUG_ENTER("(\"%s\")",name); GST_DEBUG (0,"stepping through pads\n"); do { @@ -65,11 +65,11 @@ gst_bin_chain_wrapper (int argc,char *argv[]) pads = g_list_next (pads); if (!GST_IS_REAL_PAD(pad)) continue; realpad = GST_REAL_PAD(pad); - if (realpad->direction == GST_PAD_SINK) { + if (GST_RPAD_DIRECTION(realpad) == GST_PAD_SINK) { GST_DEBUG (0,"pulling a buffer from %s:%s\n", name, gst_pad_get_name (pad)); buf = gst_pad_pull (pad); GST_DEBUG (0,"calling chain function of %s:%s\n", name, gst_pad_get_name (pad)); - (realpad->chainfunc) (pad,buf); + GST_RPAD_CHAINFUNC(realpad) (pad,buf); GST_DEBUG (0,"calling chain function of %s:%s done\n", name, gst_pad_get_name (pad)); } } @@ -85,7 +85,6 @@ gst_bin_src_wrapper (int argc,char *argv[]) { GstElement *element = GST_ELEMENT (argv); GList *pads; - GstPad *pad; GstRealPad *realpad; GstBuffer *buf; G_GNUC_UNUSED const gchar *name = gst_element_get_name (element); @@ -95,26 +94,25 @@ gst_bin_src_wrapper (int argc,char *argv[]) do { pads = element->pads; while (pads) { - pad = GST_PAD (pads->data); + if (!GST_IS_REAL_PAD(pads->data)) continue; + realpad = (GstRealPad*)(pads->data); pads = g_list_next(pads); - if (!GST_IS_REAL_PAD(pad)) continue; - realpad = GST_REAL_PAD(pad); - if (realpad->direction == GST_PAD_SRC) { + if (GST_RPAD_DIRECTION(realpad) == GST_PAD_SRC) { // region_struct *region = cothread_get_data (element->threadstate, "region"); - GST_DEBUG (0,"calling _getfunc for %s:%s\n",GST_DEBUG_PAD_NAME(pad)); + GST_DEBUG (0,"calling _getfunc for %s:%s\n",GST_DEBUG_PAD_NAME(realpad)); // if (region) { - //gst_src_push_region (GST_SRC (element), region->offset, region->size); -// if (eralpad->getregionfunc == NULL) +// gst_src_push_region (GST_SRC (element), region->offset, region->size); +// if (GST_RPAD_GETREGIONFUNC(realpad) == NULL) // fprintf(stderr,"error, no getregionfunc in \"%s\"\n", name); -// buf = (realpad->getregionfunc)(pad, region->offset, region->size); +// buf = (GST_RPAD_GETREGIONFUNC(realpad))((GstPad*)realpad, region->offset, region->size); // } else { - if (realpad->getfunc == NULL) + if (GST_RPAD_GETFUNC(realpad) == NULL) fprintf(stderr,"error, no getfunc in \"%s\"\n", name); - buf = (realpad->getfunc)(pad); + buf = GST_RPAD_GETFUNC(realpad) ((GstPad*)realpad); // } - - GST_DEBUG (0,"calling gst_pad_push on pad %s:%s\n",GST_DEBUG_PAD_NAME(pad)); - gst_pad_push (pad, buf); + + GST_DEBUG (0,"calling gst_pad_push on pad %s:%s\n",GST_DEBUG_PAD_NAME(realpad)); + gst_pad_push ((GstPad*)realpad, buf); } } } while (!GST_ELEMENT_IS_COTHREAD_STOPPING(element)); @@ -130,8 +128,8 @@ gst_bin_pushfunc_proxy (GstPad *pad, GstBuffer *buf) cothread_state *threadstate = GST_ELEMENT(pad->parent)->threadstate; GST_DEBUG_ENTER("(%s:%s)",GST_DEBUG_PAD_NAME(pad)); GST_DEBUG (0,"putting buffer %p in peer's pen\n",buf); - GST_REAL_PAD(pad)->peer->bufpen = buf; - GST_DEBUG (0,"switching to %p (@%p)\n",threadstate,&(GST_ELEMENT(pad->parent)->threadstate)); + GST_RPAD_BUFPEN(GST_RPAD_PEER(pad)) = buf; + GST_DEBUG (0,"switching to %p (@%p)\n",threadstate,&(GST_ELEMENT(GST_PAD_PARENT(pad))->threadstate)); cothread_switch (threadstate); GST_DEBUG (0,"done switching\n"); } @@ -139,18 +137,18 @@ gst_bin_pushfunc_proxy (GstPad *pad, GstBuffer *buf) static GstBuffer* gst_bin_pullfunc_proxy (GstPad *pad) { - GstRealPad *realpad = GST_REAL_PAD(pad); GstBuffer *buf; - cothread_state *threadstate = GST_ELEMENT(pad->parent)->threadstate; + cothread_state *threadstate = GST_ELEMENT(GST_PAD_PARENT(pad))->threadstate; GST_DEBUG_ENTER("(%s:%s)",GST_DEBUG_PAD_NAME(pad)); - if (realpad->bufpen == NULL) { - GST_DEBUG (0,"switching to %p (@%p)\n",threadstate,&(GST_ELEMENT(pad->parent)->threadstate)); + // FIXME this should be a while + if (GST_RPAD_BUFPEN(pad) == NULL) { + GST_DEBUG (0,"switching to %p (@%p)\n",threadstate,&(GST_ELEMENT(GST_PAD_PARENT(pad))->threadstate)); cothread_switch (threadstate); } GST_DEBUG (0,"done switching\n"); - buf = realpad->bufpen; - realpad->bufpen = NULL; + buf = GST_RPAD_BUFPEN(pad); + GST_RPAD_BUFPEN(pad) = NULL; return buf; } @@ -190,7 +188,6 @@ gst_schedule_cothreaded_chain (GstBin *bin, _GstBinChain *chain) { cothread_func wrapper_function; GList *pads; GstPad *pad; - GstRealPad *realpad; GST_DEBUG (0,"chain is using cothreads\n"); @@ -234,29 +231,28 @@ gst_schedule_cothreaded_chain (GstBin *bin, _GstBinChain *chain) { pad = GST_PAD (pads->data); pads = g_list_next (pads); if (!GST_IS_REAL_PAD(pad)) continue; - realpad = GST_REAL_PAD(pad); // if the element is DECOUPLED or outside the manager, we have to chain if ((wrapper_function == NULL) || - (GST_ELEMENT(GST_PAD(realpad->peer)->parent)->manager != GST_ELEMENT(bin))) { + (GST_ELEMENT(GST_PAD(GST_RPAD_PEER(pad))->parent)->manager != GST_ELEMENT(bin))) { // set the chain proxies - if (gst_pad_get_direction (pad) == GST_PAD_SINK) { + if (GST_RPAD_DIRECTION(pad) == GST_PAD_SINK) { GST_DEBUG (0,"copying chain function into push proxy for %s:%s\n",GST_DEBUG_PAD_NAME(pad)); - realpad->pushfunc = realpad->chainfunc; + GST_RPAD_PUSHFUNC(pad) = GST_RPAD_CHAINFUNC(pad); } else { GST_DEBUG (0,"copying get function into pull proxy for %s:%s\n",GST_DEBUG_PAD_NAME(pad)); - realpad->pullfunc = realpad->getfunc; - realpad->pullregionfunc = realpad->getregionfunc; + GST_RPAD_PULLFUNC(pad) = GST_RPAD_GETFUNC(pad); + GST_RPAD_PULLREGIONFUNC(pad) = GST_RPAD_GETREGIONFUNC(pad); } // otherwise we really are a cothread } else { if (gst_pad_get_direction (pad) == GST_PAD_SINK) { GST_DEBUG (0,"setting cothreaded push proxy for sinkpad %s:%s\n",GST_DEBUG_PAD_NAME(pad)); - realpad->pushfunc = GST_DEBUG_FUNCPTR(gst_bin_pushfunc_proxy); + GST_RPAD_PUSHFUNC(pad) = GST_DEBUG_FUNCPTR(gst_bin_pushfunc_proxy); } else { GST_DEBUG (0,"setting cothreaded pull proxy for srcpad %s:%s\n",GST_DEBUG_PAD_NAME(pad)); - realpad->pullfunc = GST_DEBUG_FUNCPTR(gst_bin_pullfunc_proxy); + GST_RPAD_PULLFUNC(pad) = GST_DEBUG_FUNCPTR(gst_bin_pullfunc_proxy); } } } @@ -280,7 +276,6 @@ gst_schedule_chained_chain (GstBin *bin, _GstBinChain *chain) { GstElement *element; GList *pads; GstPad *pad; - GstRealPad *realpad; GST_DEBUG (0,"chain entered\n"); // walk through all the elements @@ -295,15 +290,14 @@ gst_schedule_chained_chain (GstBin *bin, _GstBinChain *chain) { pad = GST_PAD (pads->data); pads = g_list_next (pads); if (!GST_IS_REAL_PAD(pad)) continue; - realpad = GST_REAL_PAD(pad); - if (gst_pad_get_direction (pad) == GST_PAD_SINK) { + if (GST_RPAD_DIRECTION(pad) == GST_PAD_SINK) { GST_DEBUG (0,"copying chain function into push proxy for %s:%s\n",GST_DEBUG_PAD_NAME(pad)); - realpad->pushfunc = realpad->chainfunc; + GST_RPAD_PUSHFUNC(pad) = GST_RPAD_CHAINFUNC(pad); } else { GST_DEBUG (0,"copying get function into pull proxy for %s:%s\n",GST_DEBUG_PAD_NAME(pad)); - realpad->pullfunc = realpad->getfunc; - realpad->pullregionfunc = realpad->getregionfunc; + GST_RPAD_PULLFUNC(pad) = GST_RPAD_GETFUNC(pad); + GST_RPAD_PULLREGIONFUNC(pad) = GST_RPAD_GETREGIONFUNC(pad); } } } @@ -334,7 +328,6 @@ void gst_bin_schedule_func(GstBin *bin) { GSList *pending = NULL; GList *pads; GstPad *pad; - GstRealPad *realpad; GstElement *peerparent; GList *chains; _GstBinChain *chain; @@ -405,16 +398,15 @@ void gst_bin_schedule_func(GstBin *bin) { pad = GST_PAD (pads->data); pads = g_list_next (pads); if (!GST_IS_REAL_PAD(pad)) continue; - realpad = GST_REAL_PAD(pad); GST_DEBUG (0,"have pad %s:%s\n",GST_DEBUG_PAD_NAME(pad)); -if (realpad->peer == NULL) GST_ERROR(pad,"peer is null!"); - g_assert(realpad->peer != NULL); - g_assert(GST_PAD(realpad->peer)->parent != NULL); +if (GST_RPAD_PEER(pad) == NULL) GST_ERROR(pad,"peer is null!"); + g_assert(GST_RPAD_PEER(pad) != NULL); + g_assert(GST_PAD(GST_RPAD_PEER(pad))->parent != NULL); - peerparent = GST_ELEMENT(GST_PAD(realpad->peer)->parent); + peerparent = GST_ELEMENT(GST_PAD(GST_RPAD_PEER(pad))->parent); - GST_DEBUG (0,"peer pad %p\n", realpad->peer); + GST_DEBUG (0,"peer pad %p\n", GST_RPAD_PEER(pad)); // only bother with if the pad's peer's parent is this bin or it's DECOUPLED // only add it if it's in the list of un-visited elements still if ((g_list_find (elements, peerparent) != NULL) || @@ -425,7 +417,7 @@ if (realpad->peer == NULL) GST_ERROR(pad,"peer is null!"); pending = g_slist_prepend (pending, peerparent); // if this is a sink pad, then the element on the other side is an entry - if ((gst_pad_get_direction (pad) == GST_PAD_SINK) && + if ((GST_RPAD_DIRECTION(pad) == GST_PAD_SINK) && (GST_FLAG_IS_SET (peerparent, GST_ELEMENT_DECOUPLED))) { chain->entries = g_list_prepend (chain->entries, peerparent); GST_DEBUG (0,"added '%s' as DECOUPLED entry into the chain\n",gst_element_get_name(peerparent)); @@ -560,18 +552,18 @@ if (realpad->peer == NULL) GST_ERROR(pad,"peer is null!"); // copy the peer's chain function, easy enough GST_DEBUG (0,"copying peer's chainfunc to %s:%s's pushfunc\n",GST_DEBUG_PAD_NAME(pad)); - pad->pushfunc = GST_DEBUG_FUNCPTR(pad->peer->chainfunc); + GST_RPAD_PUSHFUNC(pad) = GST_DEBUG_FUNCPTR(GST_RPAD_CHAINFUNC(GST_RPAD_PEER(pad))); // need to walk through and check for outside connections //FIXME need to do this for all pads // get the pad's peer - peer = gst_pad_get_peer (pad); + peer = GST_RPAD_PEER(pad); if (!peer) { GST_DEBUG (0,"found SINK pad %s has no peer\n", gst_pad_get_name (pad)); break; } // get the parent of the peer of the pad - outside = GST_ELEMENT (gst_pad_get_parent (peer)); + outside = GST_ELEMENT (GST_RPAD_PARENT(peer)); if (!outside) break; // if it's a connection and it's not ours... if (GST_IS_CONNECTION (outside) && diff --git a/test/qtest.c b/test/qtest.c index 9d585b9aec..edbef469e8 100644 --- a/test/qtest.c +++ b/test/qtest.c @@ -1,6 +1,5 @@ #include #include -#include extern gboolean _gst_plugin_spew; diff --git a/tests/eos/Makefile.am b/tests/eos/Makefile.am index 7a6a621391..77bf55a037 100644 --- a/tests/eos/Makefile.am +++ b/tests/eos/Makefile.am @@ -1,4 +1,4 @@ -noinst_PROGRAMS = case1 case2 case3 +noinst_PROGRAMS = case1 #case2 case3 # jsut apps here, this is safe LIBS += $(GST_LIBS)