diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-07-03 14:07:20 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-07-03 15:00:04 +0300 |
commit | 6675e33109adf1c763436dc46a0afc2e87435aa2 (patch) | |
tree | 62035683bb437b4a61529b67d926fcfd3700f35a | |
parent | ef8d630a5983e7708321e2fad786d167c2a68da9 (diff) |
sbcpay: Attach payload directly to the output instead of copying
-rw-r--r-- | gst/rtp/gstrtpsbcpay.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/gst/rtp/gstrtpsbcpay.c b/gst/rtp/gstrtpsbcpay.c index 7c4d3dab2..1b455ca6b 100644 --- a/gst/rtp/gstrtpsbcpay.c +++ b/gst/rtp/gstrtpsbcpay.c @@ -160,7 +160,7 @@ gst_rtp_sbc_pay_flush_buffers (GstRtpSBCPay * sbcpay) GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; guint available; guint max_payload; - GstBuffer *outbuf; + GstBuffer *outbuf, *paybuf; guint8 *payload_data; guint frame_count; guint payload_length; @@ -183,8 +183,7 @@ gst_rtp_sbc_pay_flush_buffers (GstRtpSBCPay * sbcpay) if (payload_length == 0) /* Nothing to send */ return GST_FLOW_OK; - outbuf = gst_rtp_buffer_new_allocate (payload_length + - RTP_SBC_PAYLOAD_HEADER_SIZE, 0, 0); + outbuf = gst_rtp_buffer_new_allocate (RTP_SBC_PAYLOAD_HEADER_SIZE, 0, 0); /* get payload */ gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); @@ -197,12 +196,10 @@ gst_rtp_sbc_pay_flush_buffers (GstRtpSBCPay * sbcpay) memset (payload, 0, sizeof (struct rtp_payload)); payload->frame_count = frame_count; - gst_adapter_copy (sbcpay->adapter, payload_data + - RTP_SBC_PAYLOAD_HEADER_SIZE, 0, payload_length); - gst_rtp_buffer_unmap (&rtp); - gst_adapter_flush (sbcpay->adapter, payload_length); + paybuf = gst_adapter_take_buffer_fast (sbcpay->adapter, payload_length); + outbuf = gst_buffer_append (outbuf, paybuf); /* FIXME: what about duration? */ GST_BUFFER_PTS (outbuf) = sbcpay->timestamp; |