summaryrefslogtreecommitdiffstats
path: root/gst/law/alaw-decode.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2006-05-24 10:00:50 +0000
committerWim Taymans <wim.taymans@gmail.com>2006-05-24 10:00:50 +0000
commit7b39d55850d32a2ecfb5c7552d2cd542f7897db5 (patch)
tree1a198a70d86b2c44b6042344d2b0c650aea20b81 /gst/law/alaw-decode.c
parentd4e266cd6dd1d0aad4942f48fe427f2a6ccf870e (diff)
gst/law/: Some cleanups in the chain functions.
Original commit message from CVS: * gst/law/alaw-decode.c: (gst_alawdec_chain): * gst/law/alaw-decode.h: * gst/law/alaw-encode.c: (gst_alawenc_chain): * gst/law/alaw-encode.h: * gst/law/mulaw-decode.c: (gst_mulawdec_chain): * gst/law/mulaw-decode.h: * gst/law/mulaw-encode.c: (gst_mulawenc_chain): * gst/law/mulaw-encode.h: Some cleanups in the chain functions. Remove some GStreamer 0.0.2 bits.
Diffstat (limited to 'gst/law/alaw-decode.c')
-rw-r--r--gst/law/alaw-decode.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/gst/law/alaw-decode.c b/gst/law/alaw-decode.c
index 69951853..294406b7 100644
--- a/gst/law/alaw-decode.c
+++ b/gst/law/alaw-decode.c
@@ -229,24 +229,35 @@ gst_alawdec_chain (GstPad * pad, GstBuffer * buffer)
GstALawDec *alawdec;
gint16 *linear_data;
guint8 *alaw_data;
+ guint alaw_size;
GstBuffer *outbuf;
gint i;
+ GstFlowReturn ret;
- alawdec = GST_ALAWDEC (GST_OBJECT_PARENT (pad));
+ alawdec = GST_ALAWDEC (gst_pad_get_parent (pad));
+
+ alaw_data = GST_BUFFER_DATA (buffer);
+ alaw_size = GST_BUFFER_SIZE (buffer);
+
+ outbuf = gst_buffer_new_and_alloc (alaw_size * 2);
+ linear_data = (gint16 *) GST_BUFFER_DATA (outbuf);
+
+ /* copy discont flag */
+ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
- alaw_data = (guint8 *) GST_BUFFER_DATA (buffer);
- outbuf = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (buffer) * 2);
GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buffer);
GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buffer);
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (alawdec->srcpad));
- linear_data = (gint16 *) GST_BUFFER_DATA (outbuf);
- for (i = 0; i < GST_BUFFER_SIZE (buffer); i++) {
- *linear_data = alaw_to_s16 (*alaw_data);
- linear_data++;
- alaw_data++;
+ for (i = 0; i < alaw_size; i++) {
+ linear_data[i] = alaw_to_s16 (alaw_data[i]);
}
-
gst_buffer_unref (buffer);
- return gst_pad_push (alawdec->srcpad, outbuf);
+
+ ret = gst_pad_push (alawdec->srcpad, outbuf);
+
+ gst_object_unref (alawdec);
+
+ return ret;
}