From 7b39d55850d32a2ecfb5c7552d2cd542f7897db5 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 24 May 2006 10:00:50 +0000 Subject: 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. --- gst/law/alaw-decode.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'gst/law/alaw-decode.c') 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; } -- cgit