Mercurial > libavcodec.hg
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; |