summaryrefslogtreecommitdiffstats
path: root/ext/speex/gstspeexenc.c
diff options
context:
space:
mode:
authorEdgard Lima <edgard.lima@indt.org.br>2005-10-28 19:19:40 +0000
committerEdgard Lima <edgard.lima@indt.org.br>2005-10-28 19:19:40 +0000
commit758cd8fd1855f26d4e59ca1036e71d043aa9aaa1 (patch)
tree87470c6b9e2f18c2cb89a24b20fec3d65e83b5c4 /ext/speex/gstspeexenc.c
parent0166570e093c14e10a5c0e64ada784357dc8aa0f (diff)
Add checks for return values from gst_pad_push and gst_pad_alloc_buffer.
Original commit message from CVS: Add checks for return values from gst_pad_push and gst_pad_alloc_buffer.
Diffstat (limited to 'ext/speex/gstspeexenc.c')
-rw-r--r--ext/speex/gstspeexenc.c46
1 files changed, 33 insertions, 13 deletions
diff --git a/ext/speex/gstspeexenc.c b/ext/speex/gstspeexenc.c
index bd84ea7f..8dea5a07 100644
--- a/ext/speex/gstspeexenc.c
+++ b/ext/speex/gstspeexenc.c
@@ -813,17 +813,15 @@ gst_speexenc_buffer_from_data (GstSpeexEnc * speexenc, guchar * data,
return outbuf;
}
+
/* push out the buffer and do internal bookkeeping */
-static void
+static GstFlowReturn
gst_speexenc_push_buffer (GstSpeexEnc * speexenc, GstBuffer * buffer)
{
speexenc->bytes_out += GST_BUFFER_SIZE (buffer);
- if (GST_PAD_IS_USABLE (speexenc->srcpad)) {
- gst_pad_push (speexenc->srcpad, buffer);
- } else {
- gst_buffer_unref (buffer);
- }
+ return gst_pad_push (speexenc->srcpad, buffer);
+
}
static GstCaps *
@@ -890,18 +888,21 @@ gst_speexenc_sinkevent (GstPad * pad, GstEvent * event)
return res;
}
+
static GstFlowReturn
gst_speexenc_chain (GstPad * pad, GstBuffer * buf)
{
GstSpeexEnc *speexenc;
+ GstFlowReturn ret = GST_FLOW_OK;
- speexenc = GST_SPEEXENC (GST_PAD_PARENT (pad));
+ speexenc = GST_SPEEXENC (gst_pad_get_parent (pad));
if (!speexenc->setup) {
gst_buffer_unref (buf);
GST_ELEMENT_ERROR (speexenc, CORE, NEGOTIATION, (NULL),
("encoder not initialized (input is not audio?)"));
- return GST_FLOW_UNEXPECTED;
+ ret = GST_FLOW_UNEXPECTED;
+ goto error;
}
if (!speexenc->header_sent) {
@@ -939,8 +940,15 @@ gst_speexenc_chain (GstPad * pad, GstBuffer * buf)
gst_buffer_set_caps (buf2, caps);
/* push out buffers */
- gst_speexenc_push_buffer (speexenc, buf1);
- gst_speexenc_push_buffer (speexenc, buf2);
+ if (GST_FLOW_OK != (ret = gst_speexenc_push_buffer (speexenc, buf1))) {
+ gst_buffer_unref (buf1);
+ goto error;
+ }
+
+ if (GST_FLOW_OK != (ret = gst_speexenc_push_buffer (speexenc, buf2))) {
+ gst_buffer_unref (buf2);
+ goto error;
+ }
speex_bits_init (&speexenc->bits);
speex_bits_reset (&speexenc->bits);
@@ -983,10 +991,14 @@ gst_speexenc_chain (GstPad * pad, GstBuffer * buf)
speex_bits_insert_terminator (&speexenc->bits);
outsize = speex_bits_nbytes (&speexenc->bits);
- gst_pad_alloc_buffer (speexenc->srcpad,
+ ret = gst_pad_alloc_buffer (speexenc->srcpad,
GST_BUFFER_OFFSET_NONE, outsize, GST_PAD_CAPS (speexenc->srcpad),
&outbuf);
+ if (GST_FLOW_OK != ret) {
+ goto error;
+ }
+
written = speex_bits_write (&speexenc->bits,
(gchar *) GST_BUFFER_DATA (outbuf), outsize);
g_assert (written == outsize);
@@ -1000,13 +1012,21 @@ gst_speexenc_chain (GstPad * pad, GstBuffer * buf)
GST_BUFFER_OFFSET_END (outbuf) =
speexenc->frameno * frame_size - speexenc->lookahead;
- gst_speexenc_push_buffer (speexenc, outbuf);
+ if (GST_FLOW_OK != (ret = gst_speexenc_push_buffer (speexenc, outbuf))) {
+ printf ("ret = %d\n", ret);
+ // gst_buffer_unref(outbuf);
+ // goto error;
+ }
}
}
- return GST_FLOW_OK;
+error:
+
+ gst_object_unref (speexenc);
+ return ret;
}
+
static void
gst_speexenc_get_property (GObject * object, guint prop_id, GValue * value,
GParamSpec * pspec)