gstfakesink.c \
gstfilesink.c \
gstfilesrc.c \
+ gstfdsrc.c \
gstidentity.c \
gstelements.c \
gsttee.c \
gstfakesrc.h \
gstfilesink.h \
gstfilesrc.h \
+ gstfdsrc.h \
gstidentity.h \
gsttee.h \
gsttypefindelement.h
#include "gstfakesrc.h"
#include "gstfilesink.h"
#include "gstfilesrc.h"
+#include "gstfdsrc.h"
#include "gstidentity.h"
#include "gsttee.h"
#include "gsttypefindelement.h"
{"fakesrc", GST_RANK_NONE, gst_fake_src_get_type},
{"fakesink", GST_RANK_NONE, gst_fake_sink_get_type},
{"filesrc", GST_RANK_NONE, gst_file_src_get_type},
+ {"fdsrc", GST_RANK_NONE, gst_fdsrc_get_type},
{"identity", GST_RANK_NONE, gst_identity_get_type},
{"filesink", GST_RANK_NONE, gst_file_sink_get_type},
{"tee", GST_RANK_NONE, gst_tee_get_type},
/* GStreamer
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
+ * 2005 Philippe Khalaf <burger@speedy.org>
*
* gstfdsrc.c:
*
#define _do_init(bla) \
GST_DEBUG_CATEGORY_INIT (gst_fdsrc_debug, "fdsrc", 0, "fdsrc element");
-GST_BOILERPLATE_FULL (GstFdSrc, gst_fdsrc, GstElement, GST_TYPE_ELEMENT,
+GST_BOILERPLATE_FULL (GstFdSrc, gst_fdsrc, GstElement, GST_TYPE_PUSH_SRC,
_do_init);
static void gst_fdsrc_set_property (GObject * object, guint prop_id,
static GstElementStateReturn gst_fdsrc_change_state (GstElement * element);
-static GstData *gst_fdsrc_get (GstPad * pad);
-
+static GstFlowReturn gst_fdsrc_create (GstPushSrc * psrc, GstBuffer ** outbuf);
static void
gst_fdsrc_base_init (gpointer g_class)
gst_fdsrc_class_init (GstFdSrcClass * klass)
{
GObjectClass *gobject_class;
+ GstBaseSrcClass *gstbasesrc_class;
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+ GstPushSrcClass *gstpush_src_class;
gobject_class = G_OBJECT_CLASS (klass);
+ gstbasesrc_class = (GstBaseSrcClass *) klass;
+ gstpush_src_class = (GstPushSrcClass *) klass;
+
+ parent_class = g_type_class_ref (GST_TYPE_PUSH_SRC);
gobject_class->set_property = gst_fdsrc_set_property;
gobject_class->get_property = gst_fdsrc_get_property;
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
gstelement_class->change_state = gst_fdsrc_change_state;
+
+ gstpush_src_class->create = gst_fdsrc_create;
+
}
static void
gst_fdsrc_init (GstFdSrc * fdsrc)
{
- fdsrc->srcpad =
- gst_pad_new_from_template (gst_static_pad_template_get (&srctemplate),
- "src");
-
- gst_pad_set_get_function (fdsrc->srcpad, gst_fdsrc_get);
- gst_element_add_pad (GST_ELEMENT (fdsrc), fdsrc->srcpad);
+ // TODO set live only if it's actually a live source
+ gst_base_src_set_live (GST_BASE_SRC (fdsrc), TRUE);
fdsrc->fd = 0;
fdsrc->curoffset = 0;
}
}
-static GstData *
-gst_fdsrc_get (GstPad * pad)
+static GstFlowReturn
+gst_fdsrc_create (GstPushSrc * psrc, GstBuffer ** outbuf)
{
GstFdSrc *src;
GstBuffer *buf;
gint retval;
#endif
- src = GST_FDSRC (gst_pad_get_parent (pad));
+ src = GST_FDSRC (psrc);
/* create the buffer */
buf = gst_buffer_new_and_alloc (src->blocksize);
if (retval == -1) {
GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
("select on file descriptor: %s.", g_strerror (errno)));
- gst_element_set_eos (GST_ELEMENT (src));
- return GST_DATA (gst_event_new (GST_EVENT_EOS));
+ return GST_FLOW_ERROR;
} else if (retval == 0) {
g_signal_emit (G_OBJECT (src), gst_fdsrc_signals[SIGNAL_TIMEOUT], 0);
- gst_element_set_eos (GST_ELEMENT (src));
- return GST_DATA (gst_event_new (GST_EVENT_EOS));
+ return GST_FLOW_ERROR;
}
#endif
src->curoffset += readbytes;
/* we're done, return the buffer */
- return GST_DATA (buf);
+ *outbuf = buf;
+ return GST_FLOW_OK;
} else if (readbytes == 0) {
- gst_element_set_eos (GST_ELEMENT (src));
- return GST_DATA (gst_event_new (GST_EVENT_EOS));
+ return GST_FLOW_ERROR;
} else {
GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
("read on file descriptor: %s.", g_strerror (errno)));
- gst_element_set_eos (GST_ELEMENT (src));
- return GST_DATA (gst_event_new (GST_EVENT_EOS));
+ return GST_FLOW_ERROR;
}
}
/* GStreamer
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
+ * 2005 Philippe Khalaf <burger@speedy.org>
*
* gstfdsrc.h:
*
#define __GST_FDSRC_H__
#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
G_BEGIN_DECLS
typedef struct _GstFdSrcClass GstFdSrcClass;
struct _GstFdSrc {
- GstElement element;
- /* pads */
- GstPad *srcpad;
+ GstPushSrc element;
/* fd */
gint fd;
};
struct _GstFdSrcClass {
- GstElementClass parent_class;
+ GstPushSrcClass parent_class;
/* signals */
void (*timeout) (GstElement *element);
gstfakesink.c \
gstfilesink.c \
gstfilesrc.c \
+ gstfdsrc.c \
gstidentity.c \
gstelements.c \
gsttee.c \
gstfakesrc.h \
gstfilesink.h \
gstfilesrc.h \
+ gstfdsrc.h \
gstidentity.h \
gsttee.h \
gsttypefindelement.h
#include "gstfakesrc.h"
#include "gstfilesink.h"
#include "gstfilesrc.h"
+#include "gstfdsrc.h"
#include "gstidentity.h"
#include "gsttee.h"
#include "gsttypefindelement.h"
{"fakesrc", GST_RANK_NONE, gst_fake_src_get_type},
{"fakesink", GST_RANK_NONE, gst_fake_sink_get_type},
{"filesrc", GST_RANK_NONE, gst_file_src_get_type},
+ {"fdsrc", GST_RANK_NONE, gst_fdsrc_get_type},
{"identity", GST_RANK_NONE, gst_identity_get_type},
{"filesink", GST_RANK_NONE, gst_file_sink_get_type},
{"tee", GST_RANK_NONE, gst_tee_get_type},
/* GStreamer
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
+ * 2005 Philippe Khalaf <burger@speedy.org>
*
* gstfdsrc.c:
*
#define _do_init(bla) \
GST_DEBUG_CATEGORY_INIT (gst_fdsrc_debug, "fdsrc", 0, "fdsrc element");
-GST_BOILERPLATE_FULL (GstFdSrc, gst_fdsrc, GstElement, GST_TYPE_ELEMENT,
+GST_BOILERPLATE_FULL (GstFdSrc, gst_fdsrc, GstElement, GST_TYPE_PUSH_SRC,
_do_init);
static void gst_fdsrc_set_property (GObject * object, guint prop_id,
static GstElementStateReturn gst_fdsrc_change_state (GstElement * element);
-static GstData *gst_fdsrc_get (GstPad * pad);
-
+static GstFlowReturn gst_fdsrc_create (GstPushSrc * psrc, GstBuffer ** outbuf);
static void
gst_fdsrc_base_init (gpointer g_class)
gst_fdsrc_class_init (GstFdSrcClass * klass)
{
GObjectClass *gobject_class;
+ GstBaseSrcClass *gstbasesrc_class;
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+ GstPushSrcClass *gstpush_src_class;
gobject_class = G_OBJECT_CLASS (klass);
+ gstbasesrc_class = (GstBaseSrcClass *) klass;
+ gstpush_src_class = (GstPushSrcClass *) klass;
+
+ parent_class = g_type_class_ref (GST_TYPE_PUSH_SRC);
gobject_class->set_property = gst_fdsrc_set_property;
gobject_class->get_property = gst_fdsrc_get_property;
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
gstelement_class->change_state = gst_fdsrc_change_state;
+
+ gstpush_src_class->create = gst_fdsrc_create;
+
}
static void
gst_fdsrc_init (GstFdSrc * fdsrc)
{
- fdsrc->srcpad =
- gst_pad_new_from_template (gst_static_pad_template_get (&srctemplate),
- "src");
-
- gst_pad_set_get_function (fdsrc->srcpad, gst_fdsrc_get);
- gst_element_add_pad (GST_ELEMENT (fdsrc), fdsrc->srcpad);
+ // TODO set live only if it's actually a live source
+ gst_base_src_set_live (GST_BASE_SRC (fdsrc), TRUE);
fdsrc->fd = 0;
fdsrc->curoffset = 0;
}
}
-static GstData *
-gst_fdsrc_get (GstPad * pad)
+static GstFlowReturn
+gst_fdsrc_create (GstPushSrc * psrc, GstBuffer ** outbuf)
{
GstFdSrc *src;
GstBuffer *buf;
gint retval;
#endif
- src = GST_FDSRC (gst_pad_get_parent (pad));
+ src = GST_FDSRC (psrc);
/* create the buffer */
buf = gst_buffer_new_and_alloc (src->blocksize);
if (retval == -1) {
GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
("select on file descriptor: %s.", g_strerror (errno)));
- gst_element_set_eos (GST_ELEMENT (src));
- return GST_DATA (gst_event_new (GST_EVENT_EOS));
+ return GST_FLOW_ERROR;
} else if (retval == 0) {
g_signal_emit (G_OBJECT (src), gst_fdsrc_signals[SIGNAL_TIMEOUT], 0);
- gst_element_set_eos (GST_ELEMENT (src));
- return GST_DATA (gst_event_new (GST_EVENT_EOS));
+ return GST_FLOW_ERROR;
}
#endif
src->curoffset += readbytes;
/* we're done, return the buffer */
- return GST_DATA (buf);
+ *outbuf = buf;
+ return GST_FLOW_OK;
} else if (readbytes == 0) {
- gst_element_set_eos (GST_ELEMENT (src));
- return GST_DATA (gst_event_new (GST_EVENT_EOS));
+ return GST_FLOW_ERROR;
} else {
GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
("read on file descriptor: %s.", g_strerror (errno)));
- gst_element_set_eos (GST_ELEMENT (src));
- return GST_DATA (gst_event_new (GST_EVENT_EOS));
+ return GST_FLOW_ERROR;
}
}
/* GStreamer
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
+ * 2005 Philippe Khalaf <burger@speedy.org>
*
* gstfdsrc.h:
*
#define __GST_FDSRC_H__
#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
G_BEGIN_DECLS
typedef struct _GstFdSrcClass GstFdSrcClass;
struct _GstFdSrc {
- GstElement element;
- /* pads */
- GstPad *srcpad;
+ GstPushSrc element;
/* fd */
gint fd;
};
struct _GstFdSrcClass {
- GstElementClass parent_class;
+ GstPushSrcClass parent_class;
/* signals */
void (*timeout) (GstElement *element);