Browse Source

tweak h264_biweight

Originally committed as revision 4835 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Loren Merritt 20 years ago
parent
commit
e8b562087d
4 changed files with 15 additions and 16 deletions
  1. +4
    -5
      libavcodec/dsputil.c
  2. +1
    -1
      libavcodec/dsputil.h
  3. +6
    -6
      libavcodec/h264.c
  4. +4
    -4
      libavcodec/i386/h264dsp_mmx.c

+ 4
- 5
libavcodec/dsputil.c View File

@@ -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); \


+ 1
- 1
libavcodec/dsputil.h View File

@@ -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);\


+ 6
- 6
libavcodec/h264.c View File

@@ -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;


+ 4
- 4
libavcodec/i386/h264dsp_mmx.c View File

@@ -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); \


Loading…
Cancel
Save