From 327013770260db747f129e4ab97cb37d610a675c Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Thu, 16 Apr 2015 15:11:05 -0300 Subject: [PATCH] vp9dec: optimize vpx image to gstbuffer copy when strides match Solving this FIXME. Copy the full plane when strides are the same --- ext/vpx/gstvp9dec.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/ext/vpx/gstvp9dec.c b/ext/vpx/gstvp9dec.c index 5a18f3a..db65c9f 100644 --- a/ext/vpx/gstvp9dec.c +++ b/ext/vpx/gstvp9dec.c @@ -387,12 +387,18 @@ gst_vp9_dec_image_to_buffer (GstVP9Dec * dec, const vpx_image_t * img, deststride = GST_VIDEO_FRAME_COMP_STRIDE (&frame, comp); srcstride = img->stride[comp]; - /* FIXME (Edward) : Do a plane memcpy is srcstride == deststride instead - * of copying line by line */ - for (line = 0; line < height; line++) { - memcpy (dest, src, width); - dest += deststride; - src += srcstride; + if (srcstride == deststride) { + GST_TRACE_OBJECT (dec, "Stride matches. Comp %d: %d, copying full plane", + comp, srcstride); + memcpy (dest, src, srcstride * height); + } else { + GST_TRACE_OBJECT (dec, "Stride mismatch. Comp %d: %d != %d, copying " + "line by line.", comp, srcstride, deststride); + for (line = 0; line < height; line++) { + memcpy (dest, src, width); + dest += deststride; + src += srcstride; + } } } -- 2.7.4