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