|
|
|
@ -1487,6 +1487,30 @@ H264_CHROMA_MC(avg_ , op_avg) |
|
|
|
|
#undef op_avg |
|
|
|
|
#undef op_put |
|
|
|
|
|
|
|
|
|
static void put_no_rnd_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){ |
|
|
|
|
const int A=(8-x)*(8-y); |
|
|
|
|
const int B=( x)*(8-y); |
|
|
|
|
const int C=(8-x)*( y); |
|
|
|
|
const int D=( x)*( y); |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
assert(x<8 && y<8 && x>=0 && y>=0); |
|
|
|
|
|
|
|
|
|
for(i=0; i<h; i++) |
|
|
|
|
{ |
|
|
|
|
dst[0] = (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1] + 32 - 4) >> 6; |
|
|
|
|
dst[1] = (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2] + 32 - 4) >> 6; |
|
|
|
|
dst[2] = (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3] + 32 - 4) >> 6; |
|
|
|
|
dst[3] = (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4] + 32 - 4) >> 6; |
|
|
|
|
dst[4] = (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5] + 32 - 4) >> 6; |
|
|
|
|
dst[5] = (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6] + 32 - 4) >> 6; |
|
|
|
|
dst[6] = (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7] + 32 - 4) >> 6; |
|
|
|
|
dst[7] = (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8] + 32 - 4) >> 6; |
|
|
|
|
dst+= stride; |
|
|
|
|
src+= stride; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void copy_block2(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
@ -4034,6 +4058,7 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx) |
|
|
|
|
c->avg_h264_chroma_pixels_tab[0]= avg_h264_chroma_mc8_c; |
|
|
|
|
c->avg_h264_chroma_pixels_tab[1]= avg_h264_chroma_mc4_c; |
|
|
|
|
c->avg_h264_chroma_pixels_tab[2]= avg_h264_chroma_mc2_c; |
|
|
|
|
c->put_no_rnd_h264_chroma_pixels_tab[0]= put_no_rnd_h264_chroma_mc8_c; |
|
|
|
|
|
|
|
|
|
c->weight_h264_pixels_tab[0]= weight_h264_pixels16x16_c; |
|
|
|
|
c->weight_h264_pixels_tab[1]= weight_h264_pixels16x8_c; |
|
|
|
|