summaryrefslogtreecommitdiffstats
path: root/gst/auparse
diff options
context:
space:
mode:
authorEdgard Lima <edgard.lima@indt.org.br>2005-09-22 22:38:48 +0000
committerEdgard Lima <edgard.lima@indt.org.br>2005-09-22 22:38:48 +0000
commit50bdf8c4623926eadd834e463357077bba0eec90 (patch)
tree0f406f2ec5b86a916633ceef49326f6d63c07fd2 /gst/auparse
parent7067b806e016f349cb9e83e49eddc8ede4d9c0d5 (diff)
Auparse ported to 0.9. Tested with filesrc ! auparse ! osssink and alsasink
Original commit message from CVS: Auparse ported to 0.9. Tested with filesrc ! auparse ! osssink and alsasink
Diffstat (limited to 'gst/auparse')
-rw-r--r--gst/auparse/gstauparse.c88
-rw-r--r--gst/auparse/gstauparse.h11
2 files changed, 43 insertions, 56 deletions
diff --git a/gst/auparse/gstauparse.c b/gst/auparse/gstauparse.c
index 0ab92e98..5147a944 100644
--- a/gst/auparse/gstauparse.c
+++ b/gst/auparse/gstauparse.c
@@ -67,13 +67,6 @@ static GstStaticPadTemplate gst_auparse_src_template =
"audio/x-adpcm, " "layout = (string) { g721, g722, g723_3, g723_5 }")
);
-/* AuParse signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
enum
{
ARG_0
@@ -84,13 +77,14 @@ static void gst_auparse_base_init (gpointer g_class);
static void gst_auparse_class_init (GstAuParseClass * klass);
static void gst_auparse_init (GstAuParse * auparse);
-static void gst_auparse_chain (GstPad * pad, GstData * _data);
+static GstFlowReturn gst_auparse_chain (GstPad * pad, GstBuffer * buf);
static GstStateChangeReturn gst_auparse_change_state (GstElement * element,
GstStateChange transition);
static GstElementClass *parent_class = NULL;
+
/*static guint gst_auparse_signals[LAST_SIGNAL] = { 0 }; */
GType
@@ -157,7 +151,7 @@ gst_auparse_init (GstAuParse * auparse)
gst_pad_new_from_template (gst_static_pad_template_get
(&gst_auparse_src_template), "src");
gst_element_add_pad (GST_ELEMENT (auparse), auparse->srcpad);
- gst_pad_use_explicit_caps (auparse->srcpad);
+ gst_pad_use_fixed_caps (auparse->srcpad);
#endif
auparse->offset = 0;
@@ -167,10 +161,10 @@ gst_auparse_init (GstAuParse * auparse)
auparse->channels = 0;
}
-static void
-gst_auparse_chain (GstPad * pad, GstData * _data)
+static GstFlowReturn
+gst_auparse_chain (GstPad * pad, GstBuffer * buf)
{
- GstBuffer *buf = GST_BUFFER (_data);
+ GstFlowReturn ret;
GstAuParse *auparse;
gchar *data;
glong size;
@@ -180,9 +174,9 @@ gst_auparse_chain (GstPad * pad, GstData * _data)
layout[0] = 0;
- g_return_if_fail (pad != NULL);
- g_return_if_fail (GST_IS_PAD (pad));
- g_return_if_fail (buf != NULL);
+ g_return_val_if_fail (pad != NULL, GST_FLOW_ERROR);
+ g_return_val_if_fail (GST_IS_PAD (pad), GST_FLOW_ERROR);
+ g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR);
auparse = GST_AUPARSE (gst_pad_get_parent (pad));
@@ -232,12 +226,11 @@ gst_auparse_chain (GstPad * pad, GstData * _data)
} else {
GST_ELEMENT_ERROR (auparse, STREAM, WRONG_TYPE, (NULL), (NULL));
- gst_buffer_unref (buf);
- return;
+ return GST_FLOW_ERROR;
}
GST_DEBUG
- ("offset %ld, size %ld, encoding %ld, frequency %ld, channels %ld",
+ ("offset %ld, size %ld, encoding %ld, frequency %ld, channels %ld\n",
auparse->offset, auparse->size, auparse->encoding, auparse->frequency,
auparse->channels);
@@ -318,14 +311,17 @@ Samples :
default:
GST_ELEMENT_ERROR (auparse, STREAM, FORMAT, (NULL), (NULL));
- gst_buffer_unref (buf);
- return;
+ return GST_FLOW_ERROR;
}
auparse->srcpad =
gst_pad_new_from_template (gst_static_pad_template_get
(&gst_auparse_src_template), "src");
- gst_pad_use_explicit_caps (auparse->srcpad);
+
+ g_return_val_if_fail (auparse->srcpad != NULL, GST_FLOW_ERROR);
+
+
+ gst_pad_use_fixed_caps (auparse->srcpad);
if (law) {
tempcaps =
@@ -352,47 +348,45 @@ Samples :
NULL);
}
- if (!gst_pad_set_explicit_caps (auparse->srcpad, tempcaps)) {
- GST_ELEMENT_ERROR (auparse, CORE, NEGOTIATION, (NULL), (NULL));
- gst_buffer_unref (buf);
- gst_object_unref (GST_OBJECT (auparse->srcpad));
- auparse->srcpad = NULL;
- return;
+ gst_pad_use_fixed_caps (auparse->srcpad);
+ gst_pad_set_active (auparse->srcpad, TRUE);
+ gst_pad_set_caps (auparse->srcpad, tempcaps);
+ gst_element_add_pad (GST_ELEMENT (auparse), auparse->srcpad);
+
+ if ((ret = gst_pad_alloc_buffer (auparse->srcpad, GST_BUFFER_OFFSET_NONE,
+ size - (auparse->offset),
+ GST_PAD_CAPS (auparse->srcpad), &newbuf)) != GST_FLOW_OK) {
+ printf ("failed gst_pad_alloc_buffer\n");
+ return ret;
}
+ ret = GST_FLOW_OK;
- gst_element_add_pad (GST_ELEMENT (auparse), auparse->srcpad);
- newbuf = gst_buffer_new ();
- GST_BUFFER_DATA (newbuf) = (gpointer) malloc (size - (auparse->offset));
memcpy (GST_BUFFER_DATA (newbuf), data + (auparse->offset),
size - (auparse->offset));
GST_BUFFER_SIZE (newbuf) = size - (auparse->offset);
- gst_buffer_unref (buf);
+ GstEvent *event;
+
+ event = NULL;
+
+ event = gst_event_new_newsegment (1.0, GST_FORMAT_DEFAULT,
+ 0, GST_CLOCK_TIME_NONE, 0);
+
+
+ gst_pad_push_event (auparse->srcpad, event);
+
+ return gst_pad_push (auparse->srcpad, newbuf);
- gst_pad_push (auparse->srcpad, GST_DATA (newbuf));
- return;
}
- gst_pad_push (auparse->srcpad, GST_DATA (buf));
+ return gst_pad_push (auparse->srcpad, buf);
+
}
static GstStateChangeReturn
gst_auparse_change_state (GstElement * element, GstStateChange transition)
{
- GstAuParse *auparse = GST_AUPARSE (element);
-
- switch (transition) {
- case GST_STATE_CHANGE_PAUSED_TO_READY:
- if (auparse->srcpad) {
- gst_element_remove_pad (element, auparse->srcpad);
- auparse->srcpad = NULL;
- }
- break;
- default:
- break;
- }
-
if (parent_class->change_state)
return parent_class->change_state (element, transition);
diff --git a/gst/auparse/gstauparse.h b/gst/auparse/gstauparse.h
index d6e5a082..9c9a8cd8 100644
--- a/gst/auparse/gstauparse.h
+++ b/gst/auparse/gstauparse.h
@@ -25,10 +25,7 @@
#include <gst/gst.h>
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
+G_BEGIN_DECLS
#define GST_TYPE_AUPARSE \
(gst_auparse_get_type())
@@ -64,10 +61,6 @@ struct _GstAuParseClass {
GType gst_auparse_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
+G_END_DECLS
#endif /* __GST_AUPARSE_H__ */