Originally committed as revision 4835 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -2489,7 +2489,7 @@ H264_MC(avg_, 16) | |||||
| #define op_scale2(x) dst[x] = clip_uint8( (src[x]*weights + dst[x]*weightd + offset) >> (log2_denom+1)) | #define op_scale2(x) dst[x] = clip_uint8( (src[x]*weights + dst[x]*weightd + offset) >> (log2_denom+1)) | ||||
| #define H264_WEIGHT(W,H) \ | #define H264_WEIGHT(W,H) \ | ||||
| static void weight_h264_pixels ## W ## x ## H ## _c(uint8_t *block, int stride, int log2_denom, int weight, int offset){ \ | static void weight_h264_pixels ## W ## x ## H ## _c(uint8_t *block, int stride, int log2_denom, int weight, int offset){ \ | ||||
| int attribute_unused x, y; \ | |||||
| int y; \ | |||||
| offset <<= log2_denom; \ | offset <<= log2_denom; \ | ||||
| if(log2_denom) offset += 1<<(log2_denom-1); \ | if(log2_denom) offset += 1<<(log2_denom-1); \ | ||||
| for(y=0; y<H; y++, block += stride){ \ | for(y=0; y<H; y++, block += stride){ \ | ||||
| @@ -2514,10 +2514,9 @@ static void weight_h264_pixels ## W ## x ## H ## _c(uint8_t *block, int stride, | |||||
| op_scale1(15); \ | op_scale1(15); \ | ||||
| } \ | } \ | ||||
| } \ | } \ | ||||
| static void biweight_h264_pixels ## W ## x ## H ## _c(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offsetd, int offsets){ \ | |||||
| int attribute_unused x, y; \ | |||||
| int offset = (offsets + offsetd + 1) >> 1; \ | |||||
| offset = ((offset << 1) + 1) << log2_denom; \ | |||||
| static void biweight_h264_pixels ## W ## x ## H ## _c(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset){ \ | |||||
| int y; \ | |||||
| offset = ((offset + 1) | 1) << log2_denom; \ | |||||
| for(y=0; y<H; y++, dst += stride, src += stride){ \ | for(y=0; y<H; y++, dst += stride, src += stride){ \ | ||||
| op_scale2(0); \ | op_scale2(0); \ | ||||
| op_scale2(1); \ | op_scale2(1); \ | ||||
| @@ -99,7 +99,7 @@ typedef void (*tpel_mc_func)(uint8_t *block/*align width (8 or 16)*/, const uint | |||||
| typedef void (*qpel_mc_func)(uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, int stride); | typedef void (*qpel_mc_func)(uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, int stride); | ||||
| typedef void (*h264_chroma_mc_func)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride, int h, int x, int y); | typedef void (*h264_chroma_mc_func)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride, int h, int x, int y); | ||||
| typedef void (*h264_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int offset); | typedef void (*h264_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int offset); | ||||
| typedef void (*h264_biweight_func)(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offsetd, int offsets); | |||||
| typedef void (*h264_biweight_func)(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset); | |||||
| #define DEF_OLD_QPEL(name)\ | #define DEF_OLD_QPEL(name)\ | ||||
| void ff_put_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, int stride);\ | void ff_put_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, int stride);\ | ||||
| @@ -2709,19 +2709,19 @@ static inline void mc_part_weighted(H264Context *h, int n, int square, int chrom | |||||
| if(h->use_weight == 2){ | if(h->use_weight == 2){ | ||||
| int weight0 = h->implicit_weight[refn0][refn1]; | int weight0 = h->implicit_weight[refn0][refn1]; | ||||
| int weight1 = 64 - weight0; | int weight1 = 64 - weight0; | ||||
| luma_weight_avg( dest_y, tmp_y, s-> linesize, 5, weight0, weight1, 0, 0); | |||||
| chroma_weight_avg(dest_cb, tmp_cb, s->uvlinesize, 5, weight0, weight1, 0, 0); | |||||
| chroma_weight_avg(dest_cr, tmp_cr, s->uvlinesize, 5, weight0, weight1, 0, 0); | |||||
| luma_weight_avg( dest_y, tmp_y, s-> linesize, 5, weight0, weight1, 0); | |||||
| chroma_weight_avg(dest_cb, tmp_cb, s->uvlinesize, 5, weight0, weight1, 0); | |||||
| chroma_weight_avg(dest_cr, tmp_cr, s->uvlinesize, 5, weight0, weight1, 0); | |||||
| }else{ | }else{ | ||||
| luma_weight_avg(dest_y, tmp_y, s->linesize, h->luma_log2_weight_denom, | luma_weight_avg(dest_y, tmp_y, s->linesize, h->luma_log2_weight_denom, | ||||
| h->luma_weight[0][refn0], h->luma_weight[1][refn1], | h->luma_weight[0][refn0], h->luma_weight[1][refn1], | ||||
| h->luma_offset[0][refn0], h->luma_offset[1][refn1]); | |||||
| h->luma_offset[0][refn0] + h->luma_offset[1][refn1]); | |||||
| chroma_weight_avg(dest_cb, tmp_cb, s->uvlinesize, h->chroma_log2_weight_denom, | chroma_weight_avg(dest_cb, tmp_cb, s->uvlinesize, h->chroma_log2_weight_denom, | ||||
| h->chroma_weight[0][refn0][0], h->chroma_weight[1][refn1][0], | h->chroma_weight[0][refn0][0], h->chroma_weight[1][refn1][0], | ||||
| h->chroma_offset[0][refn0][0], h->chroma_offset[1][refn1][0]); | |||||
| h->chroma_offset[0][refn0][0] + h->chroma_offset[1][refn1][0]); | |||||
| chroma_weight_avg(dest_cr, tmp_cr, s->uvlinesize, h->chroma_log2_weight_denom, | chroma_weight_avg(dest_cr, tmp_cr, s->uvlinesize, h->chroma_log2_weight_denom, | ||||
| h->chroma_weight[0][refn0][1], h->chroma_weight[1][refn1][1], | h->chroma_weight[0][refn0][1], h->chroma_weight[1][refn1][1], | ||||
| h->chroma_offset[0][refn0][1], h->chroma_offset[1][refn1][1]); | |||||
| h->chroma_offset[0][refn0][1] + h->chroma_offset[1][refn1][1]); | |||||
| } | } | ||||
| }else{ | }else{ | ||||
| int list = list1 ? 1 : 0; | int list = list1 ? 1 : 0; | ||||
| @@ -971,10 +971,10 @@ static inline void ff_h264_weight_WxH_mmx2(uint8_t *dst, int stride, int log2_de | |||||
| } | } | ||||
| } | } | ||||
| static inline void ff_h264_biweight_WxH_mmx2(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offsetd, int offsets, int w, int h) | |||||
| static inline void ff_h264_biweight_WxH_mmx2(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset, int w, int h) | |||||
| { | { | ||||
| int x, y; | int x, y; | ||||
| int offset = ((offsets + offsetd + 1) | 1) << log2_denom; | |||||
| offset = ((offset + 1) | 1) << log2_denom; | |||||
| asm volatile( | asm volatile( | ||||
| "movd %0, %%mm3 \n\t" | "movd %0, %%mm3 \n\t" | ||||
| "movd %1, %%mm4 \n\t" | "movd %1, %%mm4 \n\t" | ||||
| @@ -1010,8 +1010,8 @@ static inline void ff_h264_biweight_WxH_mmx2(uint8_t *dst, uint8_t *src, int str | |||||
| } | } | ||||
| #define H264_WEIGHT(W,H) \ | #define H264_WEIGHT(W,H) \ | ||||
| static void ff_h264_biweight_ ## W ## x ## H ## _mmx2(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offsetd, int offsets){ \ | |||||
| ff_h264_biweight_WxH_mmx2(dst, src, stride, log2_denom, weightd, weights, offsetd, offsets, W, H); \ | |||||
| static void ff_h264_biweight_ ## W ## x ## H ## _mmx2(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset){ \ | |||||
| ff_h264_biweight_WxH_mmx2(dst, src, stride, log2_denom, weightd, weights, offset, W, H); \ | |||||
| } \ | } \ | ||||
| static void ff_h264_weight_ ## W ## x ## H ## _mmx2(uint8_t *dst, int stride, int log2_denom, int weight, int offset){ \ | static void ff_h264_weight_ ## W ## x ## H ## _mmx2(uint8_t *dst, int stride, int log2_denom, int weight, int offset){ \ | ||||
| ff_h264_weight_WxH_mmx2(dst, stride, log2_denom, weight, offset, W, H); \ | ff_h264_weight_WxH_mmx2(dst, stride, log2_denom, weight, offset, W, H); \ | ||||