gst/law/: Fix law encoder timestamps.
Original commit message from CVS: * gst/law/alaw-encode.c: (gst_alawenc_init), (gst_alawenc_chain): * gst/law/alaw-encode.h: * gst/law/mulaw-encode.c: (gst_mulawenc_init), (gst_mulawenc_chain): * gst/law/mulaw-encode.h: Fix law encoder timestamps.
This commit is contained in:
parent
5ff86cd792
commit
8a6f9aa51a
@ -1,3 +1,12 @@
|
|||||||
|
2007-09-12 Wim Taymans <wim.taymans@gmail.com>
|
||||||
|
|
||||||
|
* gst/law/alaw-encode.c: (gst_alawenc_init), (gst_alawenc_chain):
|
||||||
|
* gst/law/alaw-encode.h:
|
||||||
|
* gst/law/mulaw-encode.c: (gst_mulawenc_init),
|
||||||
|
(gst_mulawenc_chain):
|
||||||
|
* gst/law/mulaw-encode.h:
|
||||||
|
Fix law encoder timestamps.
|
||||||
|
|
||||||
2007-09-12 Stefan Kost <ensonic@users.sf.net>
|
2007-09-12 Stefan Kost <ensonic@users.sf.net>
|
||||||
|
|
||||||
* ext/gconf/gstgconfaudiosink.c:
|
* ext/gconf/gstgconfaudiosink.c:
|
||||||
|
@ -264,7 +264,6 @@ gst_alawenc_init (GstALawEnc * alawenc)
|
|||||||
/* init rest */
|
/* init rest */
|
||||||
alawenc->channels = 0;
|
alawenc->channels = 0;
|
||||||
alawenc->rate = 0;
|
alawenc->rate = 0;
|
||||||
alawenc->ts = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
@ -278,6 +277,7 @@ gst_alawenc_chain (GstPad * pad, GstBuffer * buffer)
|
|||||||
GstBuffer *outbuf;
|
GstBuffer *outbuf;
|
||||||
gint i;
|
gint i;
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
GstClockTime timestamp, duration;
|
||||||
|
|
||||||
alawenc = GST_ALAWENC (gst_pad_get_parent (pad));
|
alawenc = GST_ALAWENC (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
@ -289,14 +289,22 @@ gst_alawenc_chain (GstPad * pad, GstBuffer * buffer)
|
|||||||
|
|
||||||
alaw_size = linear_size / 2;
|
alaw_size = linear_size / 2;
|
||||||
|
|
||||||
|
timestamp = GST_BUFFER_TIMESTAMP (buffer);
|
||||||
|
duration = GST_BUFFER_DURATION (buffer);
|
||||||
|
if (duration == -1) {
|
||||||
|
duration = gst_util_uint64_scale_int (alaw_size,
|
||||||
|
GST_SECOND, alawenc->rate * alawenc->channels);
|
||||||
|
}
|
||||||
|
|
||||||
outbuf = gst_buffer_new_and_alloc (alaw_size);
|
outbuf = gst_buffer_new_and_alloc (alaw_size);
|
||||||
alaw_data = (guint8 *) GST_BUFFER_DATA (outbuf);
|
alaw_data = (guint8 *) GST_BUFFER_DATA (outbuf);
|
||||||
|
|
||||||
/* FIXME, just copy (and interpolate) timestamp */
|
/* copy discont flag */
|
||||||
GST_BUFFER_DURATION (outbuf) = gst_util_uint64_scale_int (alaw_size,
|
if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))
|
||||||
GST_SECOND, alawenc->rate * alawenc->channels);
|
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
|
||||||
GST_BUFFER_TIMESTAMP (outbuf) = alawenc->ts;
|
|
||||||
alawenc->ts += GST_BUFFER_DURATION (outbuf);
|
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
|
||||||
|
GST_BUFFER_DURATION (outbuf) = duration;
|
||||||
|
|
||||||
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (alawenc->srcpad));
|
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (alawenc->srcpad));
|
||||||
|
|
||||||
|
@ -43,7 +43,6 @@ struct _GstALawEnc {
|
|||||||
GstElement element;
|
GstElement element;
|
||||||
|
|
||||||
GstPad *sinkpad,*srcpad;
|
GstPad *sinkpad,*srcpad;
|
||||||
guint64 ts;
|
|
||||||
|
|
||||||
gint channels;
|
gint channels;
|
||||||
gint rate;
|
gint rate;
|
||||||
|
@ -199,7 +199,6 @@ gst_mulawenc_init (GstMuLawEnc * mulawenc)
|
|||||||
/* init rest */
|
/* init rest */
|
||||||
mulawenc->channels = 0;
|
mulawenc->channels = 0;
|
||||||
mulawenc->rate = 0;
|
mulawenc->rate = 0;
|
||||||
mulawenc->ts = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
@ -207,10 +206,12 @@ gst_mulawenc_chain (GstPad * pad, GstBuffer * buffer)
|
|||||||
{
|
{
|
||||||
GstMuLawEnc *mulawenc;
|
GstMuLawEnc *mulawenc;
|
||||||
gint16 *linear_data;
|
gint16 *linear_data;
|
||||||
|
guint linear_size;
|
||||||
guint8 *mulaw_data;
|
guint8 *mulaw_data;
|
||||||
guint mulaw_size;
|
guint mulaw_size;
|
||||||
GstBuffer *outbuf;
|
GstBuffer *outbuf;
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
GstClockTime timestamp, duration;
|
||||||
|
|
||||||
mulawenc = GST_MULAWENC (gst_pad_get_parent (pad));
|
mulawenc = GST_MULAWENC (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
@ -218,7 +219,16 @@ gst_mulawenc_chain (GstPad * pad, GstBuffer * buffer)
|
|||||||
goto not_negotiated;
|
goto not_negotiated;
|
||||||
|
|
||||||
linear_data = (gint16 *) GST_BUFFER_DATA (buffer);
|
linear_data = (gint16 *) GST_BUFFER_DATA (buffer);
|
||||||
mulaw_size = GST_BUFFER_SIZE (buffer) / 2;
|
linear_size = GST_BUFFER_SIZE (buffer);
|
||||||
|
|
||||||
|
mulaw_size = linear_size / 2;
|
||||||
|
|
||||||
|
timestamp = GST_BUFFER_TIMESTAMP (buffer);
|
||||||
|
duration = GST_BUFFER_DURATION (buffer);
|
||||||
|
if (duration == -1) {
|
||||||
|
duration = gst_util_uint64_scale_int (mulaw_size,
|
||||||
|
GST_SECOND, mulawenc->rate * mulawenc->channels);
|
||||||
|
}
|
||||||
|
|
||||||
outbuf = gst_buffer_new_and_alloc (mulaw_size);
|
outbuf = gst_buffer_new_and_alloc (mulaw_size);
|
||||||
mulaw_data = (guint8 *) GST_BUFFER_DATA (outbuf);
|
mulaw_data = (guint8 *) GST_BUFFER_DATA (outbuf);
|
||||||
@ -227,8 +237,9 @@ gst_mulawenc_chain (GstPad * pad, GstBuffer * buffer)
|
|||||||
if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))
|
if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))
|
||||||
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
|
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
|
||||||
|
|
||||||
GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buffer);
|
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
|
||||||
GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buffer);
|
GST_BUFFER_DURATION (outbuf) = duration;
|
||||||
|
|
||||||
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (mulawenc->srcpad));
|
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (mulawenc->srcpad));
|
||||||
|
|
||||||
mulaw_encode (linear_data, mulaw_data, mulaw_size);
|
mulaw_encode (linear_data, mulaw_data, mulaw_size);
|
||||||
|
@ -44,8 +44,6 @@ struct _GstMuLawEnc {
|
|||||||
|
|
||||||
GstPad *sinkpad,*srcpad;
|
GstPad *sinkpad,*srcpad;
|
||||||
|
|
||||||
guint64 ts;
|
|
||||||
|
|
||||||
gint channels;
|
gint channels;
|
||||||
gint rate;
|
gint rate;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user