"(C) 2001",
};
+GST_FORMATS_FUNCTION (gst_gnomevfssrc_get_formats,
+ GST_FORMAT_BYTES
+)
+
+GST_PAD_QUERY_TYPE_FUNCTION (gst_gnomevfssrc_get_query_types,
+ GST_PAD_QUERY_TOTAL,
+ GST_PAD_QUERY_POSITION
+)
+
+GST_EVENT_MASK_FUNCTION (gst_gnomevfssrc_get_event_mask,
+ { GST_EVENT_SEEK, GST_SEEK_METHOD_CUR |
+ GST_SEEK_METHOD_SET |
+ GST_SEEK_METHOD_END |
+ GST_SEEK_FLAG_FLUSH },
+ { GST_EVENT_FLUSH, 0 },
+ { GST_EVENT_SIZE, 0 }
+)
+
/* GnomeVFSSrc signals and args */
enum {
LAST_SIGNAL
static gboolean gst_gnomevfssrc_srcpad_event (GstPad *pad, GstEvent *event);
static gboolean gst_gnomevfssrc_srcpad_query (GstPad *pad, GstPadQueryType type,
GstFormat *format, gint64 *value);
-
-
static GstElementClass *parent_class = NULL;
GType gst_gnomevfssrc_get_type(void)
{
gnomevfssrc->srcpad = gst_pad_new("src", GST_PAD_SRC);
gst_pad_set_get_function(gnomevfssrc->srcpad, gst_gnomevfssrc_get);
+ gst_pad_set_event_mask_function (gnomevfssrc->srcpad,
+ gst_gnomevfssrc_get_event_mask);
gst_pad_set_event_function (gnomevfssrc->srcpad,
gst_gnomevfssrc_srcpad_event);
+ gst_pad_set_query_type_function (gnomevfssrc->srcpad,
+ gst_gnomevfssrc_get_query_types);
gst_pad_set_query_function (gnomevfssrc->srcpad,
gst_gnomevfssrc_srcpad_query);
+ gst_pad_set_formats_function (gnomevfssrc->srcpad,
+ gst_gnomevfssrc_get_formats);
gst_element_add_pad(GST_ELEMENT(gnomevfssrc), gnomevfssrc->srcpad);
gnomevfssrc->filename = NULL;
return TRUE;
}
+
static gboolean
gst_gnomevfssrc_srcpad_query (GstPad *pad, GstPadQueryType type,
GstFormat *format, gint64 *value)
gint64 desired_offset;
if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_BYTES) {
+ gst_event_unref (event);
return FALSE;
}
switch (GST_EVENT_SEEK_METHOD (event)) {
desired_offset = src->size - ABS (GST_EVENT_SEEK_OFFSET (event));
break;
default:
+ gst_event_unref (event);
return FALSE;
break;
}
gnome_vfs_result_to_string(result));
if (result != GNOME_VFS_OK) {
+ gst_event_unref (event);
return FALSE;
}
}
}
case GST_EVENT_SIZE:
if (GST_EVENT_SIZE_FORMAT (event) != GST_FORMAT_BYTES) {
+ gst_event_unref (event);
return FALSE;
}
src->bytes_per_read = GST_EVENT_SIZE_VALUE (event);
src->need_flush = TRUE;
break;
default:
+ gst_event_unref (event);
return FALSE;
break;
}
+ gst_event_unref (event);
return TRUE;
}