videorate: avoid useless buffer copy in drop-only mode
authorFrédéric Bertolus <frederic.bertolus@parrot.com>
Tue, 29 Mar 2016 15:19:41 +0000 (17:19 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Sun, 3 Apr 2016 08:37:52 +0000 (11:37 +0300)
Make writable the buffer before pushing it lead to a buffer copy. It's
because a reference is keep for the previous buffer.
The previous buffer reference is only need to duplicate the buffer. In
drop-only mode, the previous buffer is release just after pushing the
buffer so a copy is done but it's useless.

https://bugzilla.gnome.org/show_bug.cgi?id=764319

gst/videorate/gstvideorate.c

index c004dba..11d9346 100644 (file)
@@ -608,8 +608,12 @@ gst_video_rate_flush_prev (GstVideoRate * videorate, gboolean duplicate)
   if (!videorate->prevbuf)
     goto eos_before_buffers;
 
+  outbuf = gst_buffer_ref (videorate->prevbuf);
+  if (videorate->drop_only)
+    gst_buffer_replace (&videorate->prevbuf, NULL);
+
   /* make sure we can write to the metadata */
-  outbuf = gst_buffer_make_writable (gst_buffer_ref (videorate->prevbuf));
+  outbuf = gst_buffer_make_writable (outbuf);
 
   GST_BUFFER_OFFSET (outbuf) = videorate->out;
   GST_BUFFER_OFFSET_END (outbuf) = videorate->out + 1;