rtpg723pay: Attach payload buffer to the output instead of copying
authorSebastian Dröge <sebastian@centricular.com>
Wed, 1 Jul 2015 15:43:51 +0000 (17:43 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 1 Jul 2015 19:39:25 +0000 (21:39 +0200)
gst/rtp/gstrtpg723pay.c

index e791fc4..8c03a31 100644 (file)
@@ -146,27 +146,23 @@ gst_rtp_g723_pay_set_caps (GstRTPBasePayload * payload, GstCaps * caps)
 static GstFlowReturn
 gst_rtp_g723_pay_flush (GstRTPG723Pay * pay)
 {
-  GstBuffer *outbuf;
+  GstBuffer *outbuf, *payload_buf;
   GstFlowReturn ret;
-  guint8 *payload;
   guint avail;
   GstRTPBuffer rtp = { NULL };
 
   avail = gst_adapter_available (pay->adapter);
 
-  outbuf = gst_rtp_buffer_new_allocate (avail, 0, 0);
+  outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
 
   gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
-  payload = gst_rtp_buffer_get_payload (&rtp);
 
   GST_BUFFER_PTS (outbuf) = pay->timestamp;
   GST_BUFFER_DURATION (outbuf) = pay->duration;
 
   /* copy G723 data as payload */
-  gst_adapter_copy (pay->adapter, payload, 0, avail);
+  payload_buf = gst_adapter_take_buffer_fast (pay->adapter, avail);
 
-  /* flush bytes from adapter */
-  gst_adapter_flush (pay->adapter, avail);
   pay->timestamp = GST_CLOCK_TIME_NONE;
   pay->duration = 0;
 
@@ -178,6 +174,8 @@ gst_rtp_g723_pay_flush (GstRTPG723Pay * pay)
   }
   gst_rtp_buffer_unmap (&rtp);
 
+  outbuf = gst_buffer_append (outbuf, payload_buf);
+
   ret = gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (pay), outbuf);
 
   return ret;