# HG changeset patch # User michael # Date 1116363047 0 # Node ID 1b4a3c083f9d5c9591af10d6bede8960cb1baec2 # Parent fae7fce1a202140c5a5672a9a6f148366b7d6b32 some optimizations gcc should have done (10% faster loop filter) diff -r fae7fce1a202 -r 1b4a3c083f9d vp3.c --- a/vp3.c Tue May 17 20:30:22 2005 +0000 +++ b/vp3.c Tue May 17 20:50:47 2005 +0000 @@ -2248,15 +2248,13 @@ static void horizontal_filter(unsigned char *first_pixel, int stride, int *bounding_values) { - int i; + unsigned char *end; int filter_value; - for (i = 0; i < 8; i++, first_pixel += stride) { + for (end= first_pixel + 8*stride; first_pixel < end; first_pixel += stride) { filter_value = - (first_pixel[-2] * 1) - - (first_pixel[-1] * 3) + - (first_pixel[ 0] * 3) - - (first_pixel[ 1] * 1); + (first_pixel[-2] - first_pixel[ 1]) + +3*(first_pixel[ 0] - first_pixel[-1]); filter_value = bounding_values[(filter_value + 4) >> 3]; first_pixel[-1] = clip_uint8(first_pixel[-1] + filter_value); first_pixel[ 0] = clip_uint8(first_pixel[ 0] - filter_value); @@ -2266,17 +2264,16 @@ static void vertical_filter(unsigned char *first_pixel, int stride, int *bounding_values) { - int i; + unsigned char *end; int filter_value; - - for (i = 0; i < 8; i++, first_pixel++) { + const int nstride= -stride; + + for (end= first_pixel + 8; first_pixel < end; first_pixel++) { filter_value = - (first_pixel[-(2 * stride)] * 1) - - (first_pixel[-(1 * stride)] * 3) + - (first_pixel[ (0 )] * 3) - - (first_pixel[ (1 * stride)] * 1); + (first_pixel[2 * nstride] - first_pixel[ stride]) + +3*(first_pixel[0 ] - first_pixel[nstride]); filter_value = bounding_values[(filter_value + 4) >> 3]; - first_pixel[-(1 * stride)] = clip_uint8(first_pixel[-(1 * stride)] + filter_value); + first_pixel[nstride] = clip_uint8(first_pixel[nstride] + filter_value); first_pixel[0] = clip_uint8(first_pixel[0] - filter_value); } }