From 0b3294af6c426c4c29a068ddc53511bf3304ce27 Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Tue, 16 Jun 2015 11:09:03 -0700 Subject: [PATCH] disable I422ToYUY2 sse for odd sizes. BUG=455 R=harryjin@google.com Review URL: https://webrtc-codereview.appspot.com/51239004. --- source/row_any.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/source/row_any.cc b/source/row_any.cc index b1c7d2ba1..3f79c3054 100644 --- a/source/row_any.cc +++ b/source/row_any.cc @@ -22,6 +22,11 @@ extern "C" { // Subsampled source needs to be increase by 1 of not even. #define SS(width, shift) (((width) + (1 << (shift)) - 1) >> (shift)) +// Debugable memcpy. Remove once bug 448 is closed. +static void fmemcpy(uint8* d, const uint8* s, int len) { + memcpy(d, s, len); +} + // YUV to RGB does multiple of 8 with SIMD and remainder with C. #define YANY(NAMEANY, I420TORGB_SIMD, UVSHIFT, DUVSHIFT, BPP, MASK) \ void NAMEANY(const uint8* y_buf, const uint8* u_buf, const uint8* v_buf, \ @@ -32,11 +37,12 @@ extern "C" { if (n > 0) { \ I420TORGB_SIMD(y_buf, u_buf, v_buf, rgb_buf, n); \ } \ - memcpy(temp, y_buf + n, r); \ - memcpy(temp + 64, u_buf + (n >> UVSHIFT), SS(r, UVSHIFT)); \ - memcpy(temp + 128, v_buf + (n >> UVSHIFT), SS(r, UVSHIFT)); \ + fmemcpy(temp, y_buf + n, r); \ + fmemcpy(temp + 64, u_buf + (n >> UVSHIFT), SS(r, UVSHIFT)); \ + fmemcpy(temp + 128, v_buf + (n >> UVSHIFT), SS(r, UVSHIFT)); \ I420TORGB_SIMD(temp, temp + 64, temp + 128, temp + 192, MASK + 1); \ - memcpy(rgb_buf + n * BPP, temp + 192, SS(r, DUVSHIFT) * BPP); \ + fmemcpy(rgb_buf + (n >> DUVSHIFT) * BPP, temp + 192, \ + SS(r, DUVSHIFT) * BPP); \ } #ifdef HAS_I422TOARGBROW_SSSE3