diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2007-09-12 22:01:59 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2007-09-12 22:01:59 +0000 |
commit | 8a6f9aa51a68fc33ca91ac43b16c683d7a3ad71d (patch) | |
tree | 8f2bdd553d30b982f80e8181d89764e437bbc633 /gst/law/alaw-encode.c | |
parent | 5ff86cd79244bdacbf856a076e9719b0e6ffc13d (diff) |
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.
Diffstat (limited to 'gst/law/alaw-encode.c')
-rw-r--r-- | gst/law/alaw-encode.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/gst/law/alaw-encode.c b/gst/law/alaw-encode.c index 9cbcae98..8b1a4a21 100644 --- a/gst/law/alaw-encode.c +++ b/gst/law/alaw-encode.c @@ -264,7 +264,6 @@ gst_alawenc_init (GstALawEnc * alawenc) /* init rest */ alawenc->channels = 0; alawenc->rate = 0; - alawenc->ts = 0; } static GstFlowReturn @@ -278,6 +277,7 @@ gst_alawenc_chain (GstPad * pad, GstBuffer * buffer) GstBuffer *outbuf; gint i; GstFlowReturn ret; + GstClockTime timestamp, duration; alawenc = GST_ALAWENC (gst_pad_get_parent (pad)); @@ -289,14 +289,22 @@ gst_alawenc_chain (GstPad * pad, GstBuffer * buffer) 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); alaw_data = (guint8 *) GST_BUFFER_DATA (outbuf); - /* FIXME, just copy (and interpolate) timestamp */ - GST_BUFFER_DURATION (outbuf) = gst_util_uint64_scale_int (alaw_size, - GST_SECOND, alawenc->rate * alawenc->channels); - GST_BUFFER_TIMESTAMP (outbuf) = alawenc->ts; - alawenc->ts += GST_BUFFER_DURATION (outbuf); + /* copy discont flag */ + if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) + GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); + + GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + GST_BUFFER_DURATION (outbuf) = duration; gst_buffer_set_caps (outbuf, GST_PAD_CAPS (alawenc->srcpad)); |