mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-08 23:42:28 +00:00
rtpsbcpay: Fix gtreamer payloader sending fragmented frames.
This commit is contained in:
parent
41e2f4f544
commit
a4f9624261
1 changed files with 9 additions and 6 deletions
|
@ -165,6 +165,8 @@ gst_rtp_sbc_pay_flush_buffers (GstRtpSBCPay * sbcpay)
|
||||||
GstBuffer *outbuf;
|
GstBuffer *outbuf;
|
||||||
guint8 *payload_data;
|
guint8 *payload_data;
|
||||||
guint8 *data;
|
guint8 *data;
|
||||||
|
guint frame_count;
|
||||||
|
guint payload_length;
|
||||||
struct rtp_payload *payload;
|
struct rtp_payload *payload;
|
||||||
|
|
||||||
if (sbcpay->frame_length == 0) {
|
if (sbcpay->frame_length == 0) {
|
||||||
|
@ -179,24 +181,25 @@ gst_rtp_sbc_pay_flush_buffers (GstRtpSBCPay * sbcpay)
|
||||||
RTP_SBC_PAYLOAD_HEADER_SIZE, 0, 0);
|
RTP_SBC_PAYLOAD_HEADER_SIZE, 0, 0);
|
||||||
|
|
||||||
max_payload = MIN (max_payload, available);
|
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);
|
RTP_SBC_PAYLOAD_HEADER_SIZE, 0, 0);
|
||||||
|
|
||||||
gst_rtp_buffer_set_payload_type (outbuf, GST_BASE_RTP_PAYLOAD_PT (sbcpay));
|
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_data = gst_rtp_buffer_get_payload (outbuf);
|
||||||
|
|
||||||
payload = (struct rtp_payload *) payload_data;
|
payload = (struct rtp_payload *) payload_data;
|
||||||
memset (payload, 0, sizeof (struct rtp_payload));
|
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);
|
g_free (data);
|
||||||
|
|
||||||
GST_BUFFER_TIMESTAMP (outbuf) = sbcpay->timestamp;
|
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);
|
return gst_basertppayload_push (GST_BASE_RTP_PAYLOAD (sbcpay), outbuf);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue