Mercurial > libavcodec.hg
diff dsputil.c @ 612:c0005de2be59 libavcodec
new ratecontrol code
author | michaelni |
---|---|
date | Sun, 25 Aug 2002 21:19:50 +0000 |
parents | 3f8824eb4690 |
children | 92e99e506920 |
line wrap: on
line diff
--- a/dsputil.c Sat Aug 24 13:24:43 2002 +0000 +++ b/dsputil.c Sun Aug 25 21:19:50 2002 +0000 @@ -32,6 +32,8 @@ void (*add_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size); void (*gmc1)(UINT8 *dst, UINT8 *src, int srcStride, int h, int x16, int y16, int rounder); void (*clear_blocks)(DCTELEM *blocks); +int (*pix_sum)(UINT8 * pix, int line_size); +int (*pix_norm1)(UINT8 * pix, int line_size); op_pixels_abs_func pix_abs16x16; op_pixels_abs_func pix_abs16x16_x2; @@ -159,6 +161,52 @@ } } +int pix_sum_c(UINT8 * pix, int line_size) +{ + int s, i, j; + + s = 0; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j += 8) { + s += pix[0]; + s += pix[1]; + s += pix[2]; + s += pix[3]; + s += pix[4]; + s += pix[5]; + s += pix[6]; + s += pix[7]; + pix += 8; + } + pix += line_size - 16; + } + return s; +} + +int pix_norm1_c(UINT8 * pix, int line_size) +{ + int s, i, j; + UINT32 *sq = squareTbl + 256; + + s = 0; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j += 8) { + s += sq[pix[0]]; + s += sq[pix[1]]; + s += sq[pix[2]]; + s += sq[pix[3]]; + s += sq[pix[4]]; + s += sq[pix[5]]; + s += sq[pix[6]]; + s += sq[pix[7]]; + pix += 8; + } + pix += line_size - 16; + } + return s; +} + + void get_pixels_c(DCTELEM *restrict block, const UINT8 *pixels, int line_size) { int i; @@ -241,7 +289,6 @@ block += 8; } } - #if 0 #define PIXOP2(OPNAME, OP) \ @@ -569,7 +616,6 @@ }; #define op_avg(a, b) a = ( ((a)|(b)) - ((((a)^(b))&0xFEFEFEFEUL)>>1) ) #endif - #define op_put(a, b) a = b PIXOP2(avg, op_avg) @@ -684,8 +730,11 @@ #define op_avg(a, b) a = avg2(a, b) #define op_sub(a, b) a -= b +#define op_put(a, b) a = b PIXOP(DCTELEM, sub, op_sub, 8) +PIXOP(uint8_t, avg, op_avg, line_size) +PIXOP(uint8_t, put, op_put, line_size) /* not rounding primitives */ #undef avg2 @@ -693,6 +742,8 @@ #define avg2(a,b) ((a+b)>>1) #define avg4(a,b,c,d) ((a+b+c+d+1)>>2) +PIXOP(uint8_t, avg_no_rnd, op_avg, line_size) +PIXOP(uint8_t, put_no_rnd, op_put, line_size) /* motion estimation */ #undef avg2 @@ -1261,6 +1312,8 @@ add_pixels_clamped = add_pixels_clamped_c; gmc1= gmc1_c; clear_blocks= clear_blocks_c; + pix_sum= pix_sum_c; + pix_norm1= pix_norm1_c; pix_abs16x16 = pix_abs16x16_c; pix_abs16x16_x2 = pix_abs16x16_x2_c;