mpeg2dec: Copy planes in one go when possible
authorEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 14 Jan 2011 17:50:41 +0000 (18:50 +0100)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Mon, 5 Mar 2012 12:01:52 +0000 (13:01 +0100)
ext/mpeg2dec/gstmpeg2dec.c

index 51c47e66d6522f0eac92148cf39875c26aa0b4ec..5c3d2a0e9bbbcffb4e906081b784931ce528bbe3 100644 (file)
@@ -357,10 +357,20 @@ gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstBuffer ** buf)
         gst_video_format_get_component_height (dec->format, c, dec->height);
     c_width = gst_video_format_get_component_width (dec->format, c, dec->width);
 
-    for (line = 0; line < c_height; line++) {
-      memcpy (dest, src, c_width);
-      dest += stride_out;
-      src += stride_in;
+    GST_DEBUG ("stride_in:%d _out:%d c_width:%d c_height:%d",
+        stride_in, stride_out, c_width, c_height);
+
+    if (stride_in == stride_out && stride_in == c_width) {
+      /* FAST PATH */
+      memcpy (dest, src, c_height * stride_out);
+      dest += stride_out * c_height;
+      src += stride_out * c_height;
+    } else {
+      for (line = 0; line < c_height; line++) {
+        memcpy (dest, src, c_width);
+        dest += stride_out;
+        src += stride_in;
+      }
     }
   }