Mercurial > libavcodec.hg
comparison ppc/h264_altivec.c @ 5164:830b9dd36fef libavcodec
convert h264_deblock_q1 to an inline function.
part 1/2 of fixing Altivec-accelerated H264 luma inloop filter
author | gpoirier |
---|---|
date | Sun, 17 Jun 2007 09:14:02 +0000 |
parents | 883a5619f52f |
children | c99fa49eaa80 |
comparison
equal
deleted
inserted
replaced
5163:9ecbfc0c82bf | 5164:830b9dd36fef |
---|---|
739 | 739 |
740 return mask; | 740 return mask; |
741 } | 741 } |
742 | 742 |
743 // out: p1 = clip((p2 + ((p0 + q0 + 1) >> 1)) >> 1, p1-tc0, p1+tc0) | 743 // out: p1 = clip((p2 + ((p0 + q0 + 1) >> 1)) >> 1, p1-tc0, p1+tc0) |
744 #define h264_deblock_q1(p0, p1, p2, q0, tc0) { \ | 744 static inline void h264_deblock_q1(register vector unsigned char p0, |
745 \ | 745 register vector unsigned char p1, |
746 register vector unsigned char average = vec_avg(p0, q0); \ | 746 register vector unsigned char p2, |
747 register vector unsigned char temp; \ | 747 register vector unsigned char q0, |
748 register vector unsigned char uncliped; \ | 748 register vector unsigned char tc0) { |
749 register vector unsigned char ones; \ | 749 |
750 register vector unsigned char max; \ | 750 register vector unsigned char average = vec_avg(p0, q0); |
751 register vector unsigned char min; \ | 751 register vector unsigned char temp; |
752 \ | 752 register vector unsigned char uncliped; |
753 temp = vec_xor(average, p2); \ | 753 register vector unsigned char ones; |
754 average = vec_avg(average, p2); /*avg(p2, avg(p0, q0)) */ \ | 754 register vector unsigned char max; |
755 ones = vec_splat_u8(1); \ | 755 register vector unsigned char min; |
756 temp = vec_and(temp, ones); /*(p2^avg(p0, q0)) & 1 */ \ | 756 |
757 uncliped = vec_subs(average, temp); /*(p2+((p0+q0+1)>>1))>>1 */\ | 757 temp = vec_xor(average, p2); |
758 max = vec_adds(p1, tc0); \ | 758 average = vec_avg(average, p2); /*avg(p2, avg(p0, q0)) */ |
759 min = vec_subs(p1, tc0); \ | 759 ones = vec_splat_u8(1); |
760 p1 = vec_max(min, uncliped); \ | 760 temp = vec_and(temp, ones); /*(p2^avg(p0, q0)) & 1 */ |
761 p1 = vec_min(max, p1); \ | 761 uncliped = vec_subs(average, temp); /*(p2+((p0+q0+1)>>1))>>1 */ |
762 max = vec_adds(p1, tc0); | |
763 min = vec_subs(p1, tc0); | |
764 p1 = vec_max(min, uncliped); | |
765 p1 = vec_min(max, p1); | |
762 } | 766 } |
763 | 767 |
764 #define h264_deblock_p0_q0(p0, p1, q0, q1, tc0masked) { \ | 768 #define h264_deblock_p0_q0(p0, p1, q0, q1, tc0masked) { \ |
765 \ | 769 \ |
766 const vector unsigned char A0v = vec_sl(vec_splat_u8(10), vec_splat_u8(4)); \ | 770 const vector unsigned char A0v = vec_sl(vec_splat_u8(10), vec_splat_u8(4)); \ |