From a4f9624261425ad3fcb85c96205e2edabc57b0c3 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 24 Jan 2008 14:25:29 +0000 Subject: [PATCH] rtpsbcpay: Fix gtreamer payloader sending fragmented frames. --- gst/rtp/gstrtpsbcpay.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/gst/rtp/gstrtpsbcpay.c b/gst/rtp/gstrtpsbcpay.c index befeb50..73c42d7 100644 --- a/gst/rtp/gstrtpsbcpay.c +++ b/gst/rtp/gstrtpsbcpay.c @@ -165,6 +165,8 @@ gst_rtp_sbc_pay_flush_buffers (GstRtpSBCPay * sbcpay) GstBuffer *outbuf; guint8 *payload_data; guint8 *data; + guint frame_count; + guint payload_length; struct rtp_payload *payload; if (sbcpay->frame_length == 0) { @@ -179,24 +181,25 @@ gst_rtp_sbc_pay_flush_buffers (GstRtpSBCPay * sbcpay) RTP_SBC_PAYLOAD_HEADER_SIZE, 0, 0); max_payload = MIN (max_payload, available); + frame_count = max_payload / sbcpay->frame_length; + payload_length = frame_count * sbcpay->frame_length; - outbuf = gst_rtp_buffer_new_allocate (max_payload + + outbuf = gst_rtp_buffer_new_allocate (payload_length + RTP_SBC_PAYLOAD_HEADER_SIZE, 0, 0); gst_rtp_buffer_set_payload_type (outbuf, GST_BASE_RTP_PAYLOAD_PT (sbcpay)); - data = gst_adapter_take (sbcpay->adapter, max_payload); payload_data = gst_rtp_buffer_get_payload (outbuf); - payload = (struct rtp_payload *) payload_data; memset (payload, 0, sizeof (struct rtp_payload)); - payload->frame_count = max_payload / sbcpay->frame_length; + payload->frame_count = frame_count; - memcpy (payload_data + RTP_SBC_PAYLOAD_HEADER_SIZE, data, max_payload); + data = gst_adapter_take (sbcpay->adapter, payload_length); + memcpy (payload_data + RTP_SBC_PAYLOAD_HEADER_SIZE, data, payload_length); g_free (data); GST_BUFFER_TIMESTAMP (outbuf) = sbcpay->timestamp; - GST_DEBUG_OBJECT (sbcpay, "Pushing %d bytes", max_payload); + GST_DEBUG_OBJECT (sbcpay, "Pushing %d bytes", payload_length); return gst_basertppayload_push (GST_BASE_RTP_PAYLOAD (sbcpay), outbuf); } -- 2.7.4