static void gst_element_dispose (GObject *object);
+static gboolean gst_element_send_event_default (GstElement *element, GstEvent *event);
+
static GstElementStateReturn gst_element_change_state (GstElement *element);
static void gst_element_error_func (GstElement* element, GstElement *source, gchar *errormsg);
klass->elementfactory = NULL;
klass->padtemplates = NULL;
klass->numpadtemplates = 0;
+ klass->send_event = GST_DEBUG_FUNCPTR (gst_element_send_event_default);
}
static void
srcpads = gst_element_get_pad_list (src);
while (srcpads) {
- pad = GST_PAD (srcpads->data);
+ pad = GST_PAD_CAST (srcpads->data);
if (GST_PAD_DIRECTION (pad) == GST_PAD_SRC)
if (GST_OBJECT_PARENT (GST_PAD_PEER (pad)) == (GstObject*) dest)
}
}
+static gboolean
+gst_element_send_event_default (GstElement *element, GstEvent *event)
+{
+ GList *pads = element->pads;
+ gboolean res = FALSE;
+
+ while (pads) {
+ GstPad *pad = GST_PAD_CAST (pads->data);
+
+ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) {
+ if (GST_PAD_IS_CONNECTED (pad)) {
+ res = gst_pad_send_event (GST_PAD_PEER (pad), event);
+ break;
+ }
+ }
+ pads = g_list_next (pads);
+ }
+ return res;
+}
+
+gboolean
+gst_element_send_event (GstElement *element, GstEvent *event)
+{
+ g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ if (CLASS (element)->send_event)
+ return CLASS (element)->send_event (element, event);
+
+ return FALSE;
+}
+
+
/**
* gst_element_error:
* @element: Element with the error
/* checks */
g_return_if_fail (GST_IS_ELEMENT (element));
- g_return_if_fail (element != NULL);
g_return_if_fail (error != NULL);
/* create error message */
/* vtable*/
gboolean (*release_locks) (GstElement *element);
+ gboolean (*send_event) (GstElement *element, GstEvent *event);
/* change the element state */
GstElementStateReturn (*change_state) (GstElement *element);
/* request a new pad */
void gst_element_disconnect_pads (GstElement *src, const gchar *srcpadname,
GstElement *dest, const gchar *destpadname);
+gboolean gst_element_send_event (GstElement *element, GstEvent *event);
+
void gst_element_set_eos (GstElement *element);
void gst_element_error (GstElement *element, const gchar *error, ...);
}
GstEvent*
-gst_event_new_discontinuous (gboolean new_media, GstSeekType format1, ...)
+gst_event_new_discontinuous (gboolean flush, GstSeekType format1, ...)
{
va_list var_args;
GstEvent *event;
gint count = 0;
event = gst_event_new (GST_EVENT_DISCONTINUOUS);
- GST_EVENT_DISCONT_NEW_MEDIA (event) = new_media;
+ GST_EVENT_DISCONT_FLUSH (event) = flush;
va_start (var_args, format1);
#define GST_EVENT_SEEK_OFFSET(event) (GST_EVENT(event)->event_data.seek.offset)
#define GST_EVENT_SEEK_ACCURACY(event) (GST_EVENT(event)->event_data.seek.accuracy)
-#define GST_EVENT_DISCONT_NEW_MEDIA(event) (GST_EVENT(event)->event_data.discont.new_media)
#define GST_EVENT_DISCONT_FLUSH(event) (GST_EVENT(event)->event_data.discont.flush)
#define GST_EVENT_DISCONT_OFFSET(event,i) (GST_EVENT(event)->event_data.discont.offsets[i])
#define GST_EVENT_DISCONT_OFFSET_LEN(event) (GST_EVENT(event)->event_data.discont.noffsets)
struct {
GstFormatValue offsets[8];
gint noffsets;
- gboolean new_media;
gboolean flush;
- GstSeekAccuracy accuracy;
} discont;
} event_data;
};
GstEvent* gst_event_copy (GstEvent *event);
void gst_event_free (GstEvent *event);
-/* seek events */
+/* seek event */
GstEvent* gst_event_new_seek (GstSeekType type, gint64 offset);
+
+/* discontinous event */
GstEvent* gst_event_new_discontinuous (gboolean new_media,
GstFormat format1, ...);
gboolean gst_event_discont_get_value (GstEvent *event, GstFormat format, gint64 *value);
GST_ELEMENT_NAME (queue), queue->level_buffers);
break;
case GST_EVENT_DISCONTINUOUS:
- //gst_queue_locked_flush (queue);
+ gst_queue_locked_flush (queue);
break;
default:
/*gst_pad_event_default (pad, GST_EVENT (buf)); */
GST_ELEMENT_NAME (queue), queue->level_buffers);
break;
case GST_EVENT_DISCONTINUOUS:
- //gst_queue_locked_flush (queue);
+ gst_queue_locked_flush (queue);
break;
default:
/*gst_pad_event_default (pad, GST_EVENT (buf)); */