gst/rtp/gstrtpL16pay.c: Only put an integral amount of samples in the RTP packet.
authorWim Taymans <wim.taymans@gmail.com>
Wed, 29 Oct 2008 18:28:25 +0000 (18:28 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Wed, 29 Oct 2008 18:28:25 +0000 (18:28 +0000)
Original commit message from CVS:
* gst/rtp/gstrtpL16pay.c: (gst_rtp_L16_pay_flush),
(gst_rtp_L16_pay_getcaps):
Only put an integral amount of samples in the RTP packet.
Fixes #556641.

ChangeLog
gst/rtp/gstrtpL16pay.c

index c3fce95..90e651f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-10-29  Wim Taymans  <wim.taymans@collabora.co.uk>
+
+       * gst/rtp/gstrtpL16pay.c: (gst_rtp_L16_pay_flush),
+       (gst_rtp_L16_pay_getcaps):
+       Only put an integral amount of samples in the RTP packet.
+       Fixes #556641.
+
 2008-10-28  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        * gst/rtp/gstrtpchannels.c: (gst_rtp_channels_get_by_index):
index 2b5f250..f361ef3 100644 (file)
@@ -245,6 +245,10 @@ gst_rtp_L16_pay_flush (GstRtpL16Pay * rtpL16pay, guint len)
   guint samples;
   GstClockTime duration;
 
+  /* calculate the amount of samples and round down the length */
+  samples = len / (2 * rtpL16pay->channels);
+  len = samples * (2 * rtpL16pay->channels);
+
   /* now alloc output buffer */
   outbuf = gst_rtp_buffer_new_allocate (len, 0, 0);
 
@@ -255,7 +259,6 @@ gst_rtp_L16_pay_flush (GstRtpL16Pay * rtpL16pay, guint len)
   gst_adapter_copy (rtpL16pay->adapter, payload, 0, len);
   gst_adapter_flush (rtpL16pay->adapter, len);
 
-  samples = len / (2 * rtpL16pay->channels);
   duration = gst_util_uint64_scale_int (samples, GST_SECOND, rtpL16pay->rate);
 
   GST_BUFFER_TIMESTAMP (outbuf) = rtpL16pay->first_ts;
@@ -348,7 +351,6 @@ gst_rtp_L16_pay_getcaps (GstBaseRTPPayload * rtppayload, GstPad * pad)
     }
     gst_caps_unref (otherpadcaps);
   }
-
   return caps;
 }