diff --git a/gst/rtp/gstrtpgstpay.c b/gst/rtp/gstrtpgstpay.c index 9b53ab7e79..9912bc81cc 100644 --- a/gst/rtp/gstrtpgstpay.c +++ b/gst/rtp/gstrtpgstpay.c @@ -208,7 +208,7 @@ gst_rtp_gst_pay_flush (GstRtpGSTPay * rtpgstpay, GstClockTime timestamp) /* create a new buf to hold the payload */ GST_DEBUG_OBJECT (rtpgstpay, "take %u bytes from adapter", payload_len); - paybuf = gst_adapter_take_buffer (rtpgstpay->adapter, payload_len); + paybuf = gst_adapter_take_buffer_fast (rtpgstpay->adapter, payload_len); /* create a new group to hold the rtp header and the payload */ gst_buffer_append (outbuf, paybuf); diff --git a/gst/rtp/gstrtpmp2tpay.c b/gst/rtp/gstrtpmp2tpay.c index f3851675b8..b64aaa6822 100644 --- a/gst/rtp/gstrtpmp2tpay.c +++ b/gst/rtp/gstrtpmp2tpay.c @@ -127,10 +127,9 @@ gst_rtp_mp2t_pay_flush (GstRTPMP2TPay * rtpmp2tpay) while (avail > 0 && (ret == GST_FLOW_OK)) { guint towrite; - guint8 *payload; guint payload_len; guint packet_len; - GstRTPBuffer rtp = { NULL }; + GstBuffer *paybuf; /* this will be the total length of the packet */ packet_len = gst_rtp_buffer_calc_packet_len (avail, 0, 0); @@ -147,16 +146,11 @@ gst_rtp_mp2t_pay_flush (GstRTPMP2TPay * rtpmp2tpay) break; /* create buffer to hold the payload */ - outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0); + outbuf = gst_rtp_buffer_new_allocate (0, 0, 0); /* get payload */ - gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); - payload = gst_rtp_buffer_get_payload (&rtp); - - /* copy stuff from adapter to payload */ - gst_adapter_copy (rtpmp2tpay->adapter, payload, 0, payload_len); - gst_rtp_buffer_unmap (&rtp); - gst_adapter_flush (rtpmp2tpay->adapter, payload_len); + paybuf = gst_adapter_take_buffer_fast (rtpmp2tpay->adapter, payload_len); + outbuf = gst_buffer_append (outbuf, paybuf); avail -= payload_len; GST_BUFFER_TIMESTAMP (outbuf) = rtpmp2tpay->first_ts; diff --git a/gst/rtp/gstrtpmp4gpay.c b/gst/rtp/gstrtpmp4gpay.c index 690e635042..7913d9aba3 100644 --- a/gst/rtp/gstrtpmp4gpay.c +++ b/gst/rtp/gstrtpmp4gpay.c @@ -469,6 +469,7 @@ gst_rtp_mp4g_pay_flush (GstRtpMP4GPay * rtpmp4gpay) guint payload_len; guint packet_len; GstRTPBuffer rtp = { NULL }; + GstBuffer *paybuf; /* this will be the total lenght of the packet */ packet_len = gst_rtp_buffer_calc_packet_len (avail, 0, 0); @@ -485,7 +486,7 @@ gst_rtp_mp4g_pay_flush (GstRtpMP4GPay * rtpmp4gpay) packet_len, payload_len); /* create buffer to hold the payload, also make room for the 4 header bytes. */ - outbuf = gst_rtp_buffer_new_allocate (payload_len + 4, 0, 0); + outbuf = gst_rtp_buffer_new_allocate (4, 0, 0); gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); @@ -526,15 +527,14 @@ gst_rtp_mp4g_pay_flush (GstRtpMP4GPay * rtpmp4gpay) payload[2] = (total & 0x1fe0) >> 5; payload[3] = (total & 0x1f) << 3; /* we use 13 bits for the size, 3 bits index */ - /* copy stuff from adapter to payload */ - gst_adapter_copy (rtpmp4gpay->adapter, &payload[4], 0, payload_len); - gst_adapter_flush (rtpmp4gpay->adapter, payload_len); - /* marker only if the packet is complete */ gst_rtp_buffer_set_marker (&rtp, avail <= payload_len); gst_rtp_buffer_unmap (&rtp); + paybuf = gst_adapter_take_buffer_fast (rtpmp4gpay->adapter, payload_len); + outbuf = gst_buffer_append (outbuf, paybuf); + GST_BUFFER_TIMESTAMP (outbuf) = rtpmp4gpay->first_timestamp; GST_BUFFER_DURATION (outbuf) = rtpmp4gpay->first_duration; diff --git a/gst/rtp/gstrtpmp4vpay.c b/gst/rtp/gstrtpmp4vpay.c index 5185d03623..8ac6d061bd 100644 --- a/gst/rtp/gstrtpmp4vpay.c +++ b/gst/rtp/gstrtpmp4vpay.c @@ -275,7 +275,8 @@ gst_rtp_mp4v_pay_flush (GstRtpMP4VPay * rtpmp4vpay) outbuf = gst_rtp_buffer_new_allocate (0, 0, 0); /* Take buffer with the payload from the adapter */ - outbuf_data = gst_adapter_take_buffer (rtpmp4vpay->adapter, payload_len); + outbuf_data = gst_adapter_take_buffer_fast (rtpmp4vpay->adapter, + payload_len); avail -= payload_len; diff --git a/gst/rtp/gstrtpmpapay.c b/gst/rtp/gstrtpmpapay.c index 0c7402d35c..2a7061c2f2 100644 --- a/gst/rtp/gstrtpmpapay.c +++ b/gst/rtp/gstrtpmpapay.c @@ -189,6 +189,7 @@ gst_rtp_mpa_pay_flush (GstRtpMPAPay * rtpmpapay) guint payload_len; guint packet_len; GstRTPBuffer rtp = { NULL }; + GstBuffer *paybuf; /* this will be the total length of the packet */ packet_len = gst_rtp_buffer_calc_packet_len (4 + avail, 0, 0); @@ -200,7 +201,7 @@ gst_rtp_mpa_pay_flush (GstRtpMPAPay * rtpmpapay) payload_len = gst_rtp_buffer_calc_payload_len (towrite, 0, 0); /* create buffer to hold the payload */ - outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0); + outbuf = gst_rtp_buffer_new_allocate (4, 0, 0); gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); @@ -221,9 +222,6 @@ gst_rtp_mpa_pay_flush (GstRtpMPAPay * rtpmpapay) payload[2] = frag_offset >> 8; payload[3] = frag_offset & 0xff; - gst_adapter_copy (rtpmpapay->adapter, &payload[4], 0, payload_len); - gst_adapter_flush (rtpmpapay->adapter, payload_len); - avail -= payload_len; frag_offset += payload_len; @@ -232,6 +230,9 @@ gst_rtp_mpa_pay_flush (GstRtpMPAPay * rtpmpapay) gst_rtp_buffer_unmap (&rtp); + paybuf = gst_adapter_take_buffer_fast (rtpmpapay->adapter, payload_len); + outbuf = gst_buffer_append (outbuf, paybuf); + GST_BUFFER_TIMESTAMP (outbuf) = rtpmpapay->first_ts; GST_BUFFER_DURATION (outbuf) = rtpmpapay->duration; diff --git a/gst/rtp/gstrtpmpvpay.c b/gst/rtp/gstrtpmpvpay.c index 9e9b65d291..87c511db66 100644 --- a/gst/rtp/gstrtpmpvpay.c +++ b/gst/rtp/gstrtpmpvpay.c @@ -178,6 +178,7 @@ gst_rtp_mpv_pay_flush (GstRTPMPVPay * rtpmpvpay) guint packet_len; guint payload_len; GstRTPBuffer rtp = { NULL }; + GstBuffer *paybuf; packet_len = gst_rtp_buffer_calc_packet_len (avail, 4, 0); @@ -185,7 +186,7 @@ gst_rtp_mpv_pay_flush (GstRTPMPVPay * rtpmpvpay) payload_len = gst_rtp_buffer_calc_payload_len (towrite, 4, 0); - outbuf = gst_rtp_buffer_new_allocate (payload_len, 4, 0); + outbuf = gst_rtp_buffer_new_allocate (4, 0, 0); gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); @@ -205,14 +206,14 @@ gst_rtp_mpv_pay_flush (GstRTPMPVPay * rtpmpvpay) */ memset (payload, 0x0, 4); - gst_adapter_copy (rtpmpvpay->adapter, payload + 4, 0, payload_len); - gst_adapter_flush (rtpmpvpay->adapter, payload_len); - avail -= payload_len; gst_rtp_buffer_set_marker (&rtp, avail == 0); gst_rtp_buffer_unmap (&rtp); + paybuf = gst_adapter_take_buffer_fast (rtpmpvpay->adapter, payload_len); + outbuf = gst_buffer_append (outbuf, paybuf); + GST_BUFFER_TIMESTAMP (outbuf) = rtpmpvpay->first_ts; ret = gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtpmpvpay), outbuf);