Commit 3d58f1e0 authored by lu_zero's avatar lu_zero

40% faster decode


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@5315 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 769c39af
...@@ -423,8 +423,8 @@ static void inner_add_yblock_bw_8_obmc_16_altivec(uint8_t *obmc, ...@@ -423,8 +423,8 @@ static void inner_add_yblock_bw_8_obmc_16_altivec(uint8_t *obmc,
{ {
int y, x; int y, x;
DWTELEM * dst; DWTELEM * dst;
vector bool int mask; // vector bool int mask;
vector signed int vs; // vector signed int vs;
vector unsigned short h1, h2, l1, l2; vector unsigned short h1, h2, l1, l2;
vector unsigned char ih, il, tmp1, tmp2, align; vector unsigned char ih, il, tmp1, tmp2, align;
vector unsigned char b0,b1,b2,b3; vector unsigned char b0,b1,b2,b3;
...@@ -546,6 +546,18 @@ static void inner_add_yblock_bw_8_obmc_16_altivec(uint8_t *obmc, ...@@ -546,6 +546,18 @@ static void inner_add_yblock_bw_8_obmc_16_altivec(uint8_t *obmc,
#endif #endif
#if 1
for(x=0; x<b_w; x++)
if(add){
vbuf[x] += dst[x + src_x];
vbuf[x] = (vbuf[x] + (1<<(FRAC_BITS-1))) >> FRAC_BITS;
if(vbuf[x]&(~255)) vbuf[x]= ~(vbuf[x]>>31);
dst8[x + y*src_stride] = vbuf[x];
}else{
dst[x + src_x] -= vbuf[x];
}
#else
if(add) if(add)
{ {
for(x=0; x<b_w/4; x++) for(x=0; x<b_w/4; x++)
...@@ -579,7 +591,7 @@ static void inner_add_yblock_bw_8_obmc_16_altivec(uint8_t *obmc, ...@@ -579,7 +591,7 @@ static void inner_add_yblock_bw_8_obmc_16_altivec(uint8_t *obmc,
else else
for(x=0; x<b_w/4; x++) for(x=0; x<b_w/4; x++)
d[x] = vec_sub(d[x], v[x]); d[x] = vec_sub(d[x], v[x]);
#endif
} }
...@@ -792,11 +804,12 @@ void ff_snow_inner_add_yblock_altivec(uint8_t *obmc, const int obmc_stride, ...@@ -792,11 +804,12 @@ void ff_snow_inner_add_yblock_altivec(uint8_t *obmc, const int obmc_stride,
slice_buffer * sb, int add, slice_buffer * sb, int add,
uint8_t * dst8) uint8_t * dst8)
{ {
//FIXME implement src_x&15 cases later
if (b_w == 16) if (b_w == 16)
inner_add_yblock_bw_16_obmc_32_altivec(obmc, obmc_stride, block, b_w, inner_add_yblock_bw_16_obmc_32_altivec(obmc, obmc_stride, block, b_w,
b_h, src_x, src_y, src_stride, b_h, src_x, src_y, src_stride,
sb, add, dst8); sb, add, dst8);
else if (b_w == 8 && ! src_x&15 ) else if (b_w == 8)
inner_add_yblock_bw_8_obmc_16_altivec(obmc, obmc_stride, block, inner_add_yblock_bw_8_obmc_16_altivec(obmc, obmc_stride, block,
b_w, b_h, src_x, src_y, b_w, b_h, src_x, src_y,
src_stride, sb, add, dst8); src_stride, sb, add, dst8);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment