convert h264_deblock_q1 to an inline function.
part 1/2 of fixing Altivec-accelerated H264 luma inloop filter Originally committed as revision 9348 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		@@ -741,24 +741,28 @@ static inline vector unsigned char h264_deblock_mask ( register vector unsigned
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// out: p1 = clip((p2 + ((p0 + q0 + 1) >> 1)) >> 1, p1-tc0, p1+tc0)
 | 
					// out: p1 = clip((p2 + ((p0 + q0 + 1) >> 1)) >> 1, p1-tc0, p1+tc0)
 | 
				
			||||||
#define h264_deblock_q1(p0, p1, p2, q0, tc0) {                     \
 | 
					static inline void h264_deblock_q1(register vector unsigned char p0,
 | 
				
			||||||
                                                                   \
 | 
					                                                   register vector unsigned char p1,
 | 
				
			||||||
    register vector unsigned char average = vec_avg(p0, q0);       \
 | 
					                                                   register vector unsigned char p2,
 | 
				
			||||||
    register vector unsigned char temp;                            \
 | 
					                                                   register vector unsigned char q0,
 | 
				
			||||||
    register vector unsigned char uncliped;                        \
 | 
					                                                   register vector unsigned char tc0) {
 | 
				
			||||||
    register vector unsigned char ones;                            \
 | 
					
 | 
				
			||||||
    register vector unsigned char max;                             \
 | 
					    register vector unsigned char average = vec_avg(p0, q0);
 | 
				
			||||||
    register vector unsigned char min;                             \
 | 
					    register vector unsigned char temp;
 | 
				
			||||||
                                                                   \
 | 
					    register vector unsigned char uncliped;
 | 
				
			||||||
    temp = vec_xor(average, p2);                                   \
 | 
					    register vector unsigned char ones;
 | 
				
			||||||
    average = vec_avg(average, p2);     /*avg(p2, avg(p0, q0)) */  \
 | 
					    register vector unsigned char max;
 | 
				
			||||||
    ones = vec_splat_u8(1);                                        \
 | 
					    register vector unsigned char min;
 | 
				
			||||||
    temp = vec_and(temp, ones);         /*(p2^avg(p0, q0)) & 1 */  \
 | 
					
 | 
				
			||||||
    uncliped = vec_subs(average, temp); /*(p2+((p0+q0+1)>>1))>>1 */\
 | 
					    temp = vec_xor(average, p2);
 | 
				
			||||||
    max = vec_adds(p1, tc0);                                       \
 | 
					    average = vec_avg(average, p2);     /*avg(p2, avg(p0, q0)) */
 | 
				
			||||||
    min = vec_subs(p1, tc0);                                       \
 | 
					    ones = vec_splat_u8(1);
 | 
				
			||||||
    p1 = vec_max(min, uncliped);                                   \
 | 
					    temp = vec_and(temp, ones);         /*(p2^avg(p0, q0)) & 1 */
 | 
				
			||||||
    p1 = vec_min(max, p1);                                         \
 | 
					    uncliped = vec_subs(average, temp); /*(p2+((p0+q0+1)>>1))>>1 */
 | 
				
			||||||
 | 
					    max = vec_adds(p1, tc0);
 | 
				
			||||||
 | 
					    min = vec_subs(p1, tc0);
 | 
				
			||||||
 | 
					    p1 = vec_max(min, uncliped);
 | 
				
			||||||
 | 
					    p1 = vec_min(max, p1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define h264_deblock_p0_q0(p0, p1, q0, q1, tc0masked) {                                           \
 | 
					#define h264_deblock_p0_q0(p0, p1, q0, q1, tc0masked) {                                           \
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user