Upstream-Status: Pending --- /tmp/image-format-conversions.h 2009-02-03 10:18:04.000000000 +0100 +++ git/src/image-format-conversions.h 2009-02-03 10:19:18.000000000 +0100 @@ -30,6 +30,8 @@ /* Basic C implementation of YV12/I420 to UYVY conversion */ void uv12_to_uyvy(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest); +/* NEON implementation of YV12/I420 to UYVY conversion */ +void uv12_to_uyvy_neon(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest); #endif /* __IMAGE_FORMAT_CONVERSIONS_H__ */ --- /tmp/image-format-conversions.c 2009-02-03 10:18:04.000000000 +0100 +++ git/src/image-format-conversions.c 2009-02-03 10:16:47.000000000 +0100 @@ -2,6 +2,7 @@ * Copyright 2008 Kalle Vahlman, * Ilpo Ruotsalainen, * Tuomas Kulve, + * Ian Rickards, * * * Permission to use, copy, modify, distribute and sell this software and its @@ -89,3 +90,104 @@ } } +void uv12_to_uyvy_neon(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest) +{ + int x, y; + uint8_t *dest_even = dest; + uint8_t *dest_odd = dest + w * 2; + uint8_t *y_p_even = y_p; + uint8_t *y_p_odd = y_p + y_pitch; + + /*ErrorF("in uv12_to_uyvy, w: %d, pitch: %d\n", w, pitch);*/ + if (w<16) + { + for (y=0; y> 1; + v_p += ((uv_pitch << 1) - w) >> 1; + + y_p_even += (y_pitch - w) + y_pitch; + y_p_odd += (y_pitch - w) + y_pitch; + } + } + else + { + for (y=0; y> 1; + v_p += ((uv_pitch << 1) - w) >> 1; + + y_p_even += (y_pitch - w) + y_pitch; + y_p_odd += (y_pitch - w) + y_pitch; + } + } +} + --- /tmp/omapfb-xv-generic.c 2009-02-03 10:52:18.000000000 +0100 +++ git/src/omapfb-xv-generic.c 2009-02-03 10:52:24.000000000 +0100 @@ -240,7 +240,7 @@ uint8_t *yb = buf; uint8_t *ub = yb + (src_y_pitch * src_h); uint8_t *vb = ub + (src_uv_pitch * (src_h / 2)); - uv12_to_uyvy(src_w & ~15, + uv12_to_uyvy_neon(src_w & ~15, src_h & ~15, src_y_pitch, src_uv_pitch, @@ -256,7 +256,7 @@ uint8_t *yb = buf; uint8_t *vb = yb + (src_y_pitch * src_h); uint8_t *ub = vb + (src_uv_pitch * (src_h / 2)); - uv12_to_uyvy(src_w & ~15, + uv12_to_uyvy_neon(src_w & ~15, src_h & ~15, src_y_pitch, src_uv_pitch,