00001 00024 #include "libavutil/common.h" 00025 #include "vp56dsp.h" 00026 00027 00028 void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, int stride, 00029 const int16_t *h_weights, const int16_t *v_weights) 00030 { 00031 int x, y; 00032 int tmp[8*11]; 00033 int *t = tmp; 00034 00035 src -= stride; 00036 00037 for (y=0; y<11; y++) { 00038 for (x=0; x<8; x++) { 00039 t[x] = av_clip_uint8(( src[x-1] * h_weights[0] 00040 + src[x ] * h_weights[1] 00041 + src[x+1] * h_weights[2] 00042 + src[x+2] * h_weights[3] + 64) >> 7); 00043 } 00044 src += stride; 00045 t += 8; 00046 } 00047 00048 t = tmp + 8; 00049 for (y=0; y<8; y++) { 00050 for (x=0; x<8; x++) { 00051 dst[x] = av_clip_uint8(( t[x-8 ] * v_weights[0] 00052 + t[x ] * v_weights[1] 00053 + t[x+8 ] * v_weights[2] 00054 + t[x+16] * v_weights[3] + 64) >> 7); 00055 } 00056 dst += stride; 00057 t += 8; 00058 } 00059 }