Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/libavcodec/ppc/vc1dsp_altivec.c b/libavcodec/ppc/vc1dsp_altivec.c
- index a2f55f2d..d276fa7 100644
- --- a/libavcodec/ppc/vc1dsp_altivec.c
- +++ b/libavcodec/ppc/vc1dsp_altivec.c
- @@ -129,7 +129,8 @@ do { \
- /** Do inverse transform on 8x8 block
- */
- -static void vc1_inv_trans_8x8_altivec(DCTELEM block[64])
- +static void vc1_inv_trans_8x8_altivec_generic(DCTELEM block[64],
- + int sign, int rangered)
- {
- vector signed short src0, src1, src2, src3, src4, src5, src6, src7;
- vector signed int s0, s1, s2, s3, s4, s5, s6, s7;
- @@ -143,7 +144,9 @@ static void vc1_inv_trans_8x8_altivec(DCTELEM block[64])
- const vector unsigned int vec_2 = vec_splat_u32(2);
- const vector signed int vec_1s = vec_splat_s32(1);
- const vector unsigned int vec_1 = vec_splat_u32(1);
- -
- + const vector unsigned short rangered_shift = vec_splat_u16(1);
- + const vector unsigned short unsigned_bias = vec_sl(vec_splat_u16(4),
- + vec_splat_u16(4));
- src0 = vec_ld( 0, block);
- src1 = vec_ld( 16, block);
- @@ -214,6 +217,27 @@ static void vc1_inv_trans_8x8_altivec(DCTELEM block[64])
- src6 = vec_pack(sE, s6);
- src7 = vec_pack(sF, s7);
- + if (rangered) {
- + if (!sign) {
- + vec_sub(src0, unsigned_bias);
- + vec_sub(src1, unsigned_bias);
- + vec_sub(src2, unsigned_bias);
- + vec_sub(src3, unsigned_bias);
- + vec_sub(src4, unsigned_bias);
- + vec_sub(src5, unsigned_bias);
- + vec_sub(src6, unsigned_bias);
- + vec_sub(src7, unsigned_bias);
- + }
- + vec_sl(src0, rangered_shift);
- + vec_sl(src1, rangered_shift);
- + vec_sl(src2, rangered_shift);
- + vec_sl(src3, rangered_shift);
- + vec_sl(src4, rangered_shift);
- + vec_sl(src5, rangered_shift);
- + vec_sl(src6, rangered_shift);
- + vec_sl(src7, rangered_shift);
- + }
- +
- vec_st(src0, 0, block);
- vec_st(src1, 16, block);
- vec_st(src2, 32, block);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement