comparison dsputil.c @ 2707:360024d31dab libavcodec

H.264 deblocking optimizations (mmx for chroma_bS4 case, convert existing cases to 8-bit math)
author lorenm
date Wed, 18 May 2005 09:17:22 +0000
parents 9699d325049d
children 975074f04b95
comparison
equal deleted inserted replaced
2706:a23c44f7ed60 2707:360024d31dab
2641 src[xy] = (temp[yz-1] + 2*temp[yz] + temp[yz+1] + 8)>>4; 2641 src[xy] = (temp[yz-1] + 2*temp[yz] + temp[yz+1] + 8)>>4;
2642 } 2642 }
2643 } 2643 }
2644 } 2644 }
2645 2645
2646 static inline void h264_loop_filter_luma_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta, int *tc0) 2646 static inline void h264_loop_filter_luma_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta, int8_t *tc0)
2647 { 2647 {
2648 int i, d; 2648 int i, d;
2649 for( i = 0; i < 4; i++ ) { 2649 for( i = 0; i < 4; i++ ) {
2650 if( tc0[i] < 0 ) { 2650 if( tc0[i] < 0 ) {
2651 pix += 4*ystride; 2651 pix += 4*ystride;
2681 } 2681 }
2682 pix += ystride; 2682 pix += ystride;
2683 } 2683 }
2684 } 2684 }
2685 } 2685 }
2686 static void h264_v_loop_filter_luma_c(uint8_t *pix, int stride, int alpha, int beta, int *tc0) 2686 static void h264_v_loop_filter_luma_c(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
2687 { 2687 {
2688 h264_loop_filter_luma_c(pix, stride, 1, alpha, beta, tc0); 2688 h264_loop_filter_luma_c(pix, stride, 1, alpha, beta, tc0);
2689 } 2689 }
2690 static void h264_h_loop_filter_luma_c(uint8_t *pix, int stride, int alpha, int beta, int *tc0) 2690 static void h264_h_loop_filter_luma_c(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
2691 { 2691 {
2692 h264_loop_filter_luma_c(pix, 1, stride, alpha, beta, tc0); 2692 h264_loop_filter_luma_c(pix, 1, stride, alpha, beta, tc0);
2693 } 2693 }
2694 2694
2695 static inline void h264_loop_filter_chroma_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta, int *tc0) 2695 static inline void h264_loop_filter_chroma_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta, int8_t *tc0)
2696 { 2696 {
2697 int i, d; 2697 int i, d;
2698 for( i = 0; i < 4; i++ ) { 2698 for( i = 0; i < 4; i++ ) {
2699 const int tc = tc0[i]; 2699 const int tc = tc0[i];
2700 if( tc <= 0 ) { 2700 if( tc <= 0 ) {
2718 } 2718 }
2719 pix += ystride; 2719 pix += ystride;
2720 } 2720 }
2721 } 2721 }
2722 } 2722 }
2723 static void h264_v_loop_filter_chroma_c(uint8_t *pix, int stride, int alpha, int beta, int *tc0) 2723 static void h264_v_loop_filter_chroma_c(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
2724 { 2724 {
2725 h264_loop_filter_chroma_c(pix, stride, 1, alpha, beta, tc0); 2725 h264_loop_filter_chroma_c(pix, stride, 1, alpha, beta, tc0);
2726 } 2726 }
2727 static void h264_h_loop_filter_chroma_c(uint8_t *pix, int stride, int alpha, int beta, int *tc0) 2727 static void h264_h_loop_filter_chroma_c(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
2728 { 2728 {
2729 h264_loop_filter_chroma_c(pix, 1, stride, alpha, beta, tc0); 2729 h264_loop_filter_chroma_c(pix, 1, stride, alpha, beta, tc0);
2730 }
2731
2732 static inline void h264_loop_filter_chroma_intra_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta)
2733 {
2734 int d;
2735 for( d = 0; d < 8; d++ ) {
2736 const int p0 = pix[-1*xstride];
2737 const int p1 = pix[-2*xstride];
2738 const int q0 = pix[0];
2739 const int q1 = pix[1*xstride];
2740
2741 if( ABS( p0 - q0 ) < alpha &&
2742 ABS( p1 - p0 ) < beta &&
2743 ABS( q1 - q0 ) < beta ) {
2744
2745 pix[-xstride] = ( 2*p1 + p0 + q1 + 2 ) >> 2; /* p0' */
2746 pix[0] = ( 2*q1 + q0 + p1 + 2 ) >> 2; /* q0' */
2747 }
2748 pix += ystride;
2749 }
2750 }
2751 static void h264_v_loop_filter_chroma_intra_c(uint8_t *pix, int stride, int alpha, int beta)
2752 {
2753 h264_loop_filter_chroma_intra_c(pix, stride, 1, alpha, beta);
2754 }
2755 static void h264_h_loop_filter_chroma_intra_c(uint8_t *pix, int stride, int alpha, int beta)
2756 {
2757 h264_loop_filter_chroma_intra_c(pix, 1, stride, alpha, beta);
2730 } 2758 }
2731 2759
2732 static inline int pix_abs16_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 2760 static inline int pix_abs16_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
2733 { 2761 {
2734 int s, i; 2762 int s, i;
3832 3860
3833 c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_c; 3861 c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_c;
3834 c->h264_h_loop_filter_luma= h264_h_loop_filter_luma_c; 3862 c->h264_h_loop_filter_luma= h264_h_loop_filter_luma_c;
3835 c->h264_v_loop_filter_chroma= h264_v_loop_filter_chroma_c; 3863 c->h264_v_loop_filter_chroma= h264_v_loop_filter_chroma_c;
3836 c->h264_h_loop_filter_chroma= h264_h_loop_filter_chroma_c; 3864 c->h264_h_loop_filter_chroma= h264_h_loop_filter_chroma_c;
3865 c->h264_v_loop_filter_chroma_intra= h264_v_loop_filter_chroma_intra_c;
3866 c->h264_h_loop_filter_chroma_intra= h264_h_loop_filter_chroma_intra_c;
3837 3867
3838 c->h263_h_loop_filter= h263_h_loop_filter_c; 3868 c->h263_h_loop_filter= h263_h_loop_filter_c;
3839 c->h263_v_loop_filter= h263_v_loop_filter_c; 3869 c->h263_v_loop_filter= h263_v_loop_filter_c;
3840 3870
3841 c->h261_loop_filter= h261_loop_filter_c; 3871 c->h261_loop_filter= h261_loop_filter_c;