Allocate source buffers to be multiples of 16
authorYunqing Wang <yunqingwang@google.com>
Wed, 16 Feb 2011 17:00:25 +0000 (12:00 -0500)
committerYunqing Wang <yunqingwang@google.com>
Wed, 16 Feb 2011 17:57:17 +0000 (12:57 -0500)
Currently, when the video frame width is not multiples of 16, the
source buffer has a stride of non-multiples of 16, which forces
an unaligned load in SAD function and hurts the performance. To
avoid that, this change allocates source buffers to be multiples
of 16.

Change-Id: Ib7506e3eb2cea06657d56be5a899f38dfe3eeb39

vp8/encoder/onyx_if.c

index 3f787d6..47c46ca 100644 (file)
@@ -1280,6 +1280,8 @@ void vp8_set_speed_features(VP8_COMP *cpi)
 static void alloc_raw_frame_buffers(VP8_COMP *cpi)
 {
     int i, buffers;
+    /* allocate source_buffer to be multiples of 16 */
+    int width = (cpi->oxcf.Width + 15) & ~15;
 
     buffers = cpi->oxcf.lag_in_frames;
 
@@ -1291,7 +1293,7 @@ static void alloc_raw_frame_buffers(VP8_COMP *cpi)
 
     for (i = 0; i < buffers; i++)
         if (vp8_yv12_alloc_frame_buffer(&cpi->src_buffer[i].source_buffer,
-                                        cpi->oxcf.Width, cpi->oxcf.Height,
+                                        width, cpi->oxcf.Height,
                                         16))
             vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,
                                "Failed to allocate lag buffer");
@@ -1299,7 +1301,7 @@ static void alloc_raw_frame_buffers(VP8_COMP *cpi)
 #if VP8_TEMPORAL_ALT_REF
 
     if (vp8_yv12_alloc_frame_buffer(&cpi->alt_ref_buffer.source_buffer,
-                                    cpi->oxcf.Width, cpi->oxcf.Height, 16))
+                                    width, cpi->oxcf.Height, 16))
         vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,
                            "Failed to allocate altref buffer");