Mercurial > libavcodec.hg
comparison h264.c @ 8395:195cba8f6257 libavcodec
Move filter_luma_intra into dsputil for later addition of asm.
author | darkshikari |
---|---|
date | Fri, 19 Dec 2008 00:44:51 +0000 |
parents | a9132c1bd56a |
children | 11b1f7762830 |
comparison
equal
deleted
inserted
replaced
8394:a9132c1bd56a | 8395:195cba8f6257 |
---|---|
5852 int8_t tc[4]; | 5852 int8_t tc[4]; |
5853 for(i=0; i<4; i++) | 5853 for(i=0; i<4; i++) |
5854 tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] : -1; | 5854 tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] : -1; |
5855 h->s.dsp.h264_h_loop_filter_luma(pix, stride, alpha, beta, tc); | 5855 h->s.dsp.h264_h_loop_filter_luma(pix, stride, alpha, beta, tc); |
5856 } else { | 5856 } else { |
5857 /* 16px edge length, because bS=4 is triggered by being at | 5857 h->s.dsp.h264_h_loop_filter_luma_intra(pix, stride, alpha, beta); |
5858 * the edge of an intra MB, so all 4 bS are the same */ | |
5859 for( d = 0; d < 16; d++ ) { | |
5860 const int p0 = pix[-1]; | |
5861 const int p1 = pix[-2]; | |
5862 const int p2 = pix[-3]; | |
5863 | |
5864 const int q0 = pix[0]; | |
5865 const int q1 = pix[1]; | |
5866 const int q2 = pix[2]; | |
5867 | |
5868 if( FFABS( p0 - q0 ) < alpha && | |
5869 FFABS( p1 - p0 ) < beta && | |
5870 FFABS( q1 - q0 ) < beta ) { | |
5871 | |
5872 if(FFABS( p0 - q0 ) < (( alpha >> 2 ) + 2 )){ | |
5873 if( FFABS( p2 - p0 ) < beta) | |
5874 { | |
5875 const int p3 = pix[-4]; | |
5876 /* p0', p1', p2' */ | |
5877 pix[-1] = ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3; | |
5878 pix[-2] = ( p2 + p1 + p0 + q0 + 2 ) >> 2; | |
5879 pix[-3] = ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3; | |
5880 } else { | |
5881 /* p0' */ | |
5882 pix[-1] = ( 2*p1 + p0 + q1 + 2 ) >> 2; | |
5883 } | |
5884 if( FFABS( q2 - q0 ) < beta) | |
5885 { | |
5886 const int q3 = pix[3]; | |
5887 /* q0', q1', q2' */ | |
5888 pix[0] = ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3; | |
5889 pix[1] = ( p0 + q0 + q1 + q2 + 2 ) >> 2; | |
5890 pix[2] = ( 2*q3 + 3*q2 + q1 + q0 + p0 + 4 ) >> 3; | |
5891 } else { | |
5892 /* q0' */ | |
5893 pix[0] = ( 2*q1 + q0 + p1 + 2 ) >> 2; | |
5894 } | |
5895 }else{ | |
5896 /* p0', q0' */ | |
5897 pix[-1] = ( 2*p1 + p0 + q1 + 2 ) >> 2; | |
5898 pix[ 0] = ( 2*q1 + q0 + p1 + 2 ) >> 2; | |
5899 } | |
5900 tprintf(h->s.avctx, "filter_mb_edgev i:%d d:%d\n# bS:4 -> [%02x, %02x, %02x, %02x, %02x, %02x] =>[%02x, %02x, %02x, %02x]\n", i, d, p2, p1, p0, q0, q1, q2, pix[-2], pix[-1], pix[0], pix[1]); | |
5901 } | |
5902 pix += stride; | |
5903 } | |
5904 } | 5858 } |
5905 } | 5859 } |
5906 static void filter_mb_edgecv( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) { | 5860 static void filter_mb_edgecv( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) { |
5907 int i; | 5861 int i; |
5908 const int index_a = qp + h->slice_alpha_c0_offset; | 5862 const int index_a = qp + h->slice_alpha_c0_offset; |
6081 int8_t tc[4]; | 6035 int8_t tc[4]; |
6082 for(i=0; i<4; i++) | 6036 for(i=0; i<4; i++) |
6083 tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] : -1; | 6037 tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] : -1; |
6084 h->s.dsp.h264_v_loop_filter_luma(pix, stride, alpha, beta, tc); | 6038 h->s.dsp.h264_v_loop_filter_luma(pix, stride, alpha, beta, tc); |
6085 } else { | 6039 } else { |
6086 /* 16px edge length, see filter_mb_edgev */ | 6040 h->s.dsp.h264_v_loop_filter_luma_intra(pix, stride, alpha, beta); |
6087 for( d = 0; d < 16; d++ ) { | |
6088 const int p0 = pix[-1*pix_next]; | |
6089 const int p1 = pix[-2*pix_next]; | |
6090 const int p2 = pix[-3*pix_next]; | |
6091 const int q0 = pix[0]; | |
6092 const int q1 = pix[1*pix_next]; | |
6093 const int q2 = pix[2*pix_next]; | |
6094 | |
6095 if( FFABS( p0 - q0 ) < alpha && | |
6096 FFABS( p1 - p0 ) < beta && | |
6097 FFABS( q1 - q0 ) < beta ) { | |
6098 | |
6099 const int p3 = pix[-4*pix_next]; | |
6100 const int q3 = pix[ 3*pix_next]; | |
6101 | |
6102 if(FFABS( p0 - q0 ) < (( alpha >> 2 ) + 2 )){ | |
6103 if( FFABS( p2 - p0 ) < beta) { | |
6104 /* p0', p1', p2' */ | |
6105 pix[-1*pix_next] = ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3; | |
6106 pix[-2*pix_next] = ( p2 + p1 + p0 + q0 + 2 ) >> 2; | |
6107 pix[-3*pix_next] = ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3; | |
6108 } else { | |
6109 /* p0' */ | |
6110 pix[-1*pix_next] = ( 2*p1 + p0 + q1 + 2 ) >> 2; | |
6111 } | |
6112 if( FFABS( q2 - q0 ) < beta) { | |
6113 /* q0', q1', q2' */ | |
6114 pix[0*pix_next] = ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3; | |
6115 pix[1*pix_next] = ( p0 + q0 + q1 + q2 + 2 ) >> 2; | |
6116 pix[2*pix_next] = ( 2*q3 + 3*q2 + q1 + q0 + p0 + 4 ) >> 3; | |
6117 } else { | |
6118 /* q0' */ | |
6119 pix[0*pix_next] = ( 2*q1 + q0 + p1 + 2 ) >> 2; | |
6120 } | |
6121 }else{ | |
6122 /* p0', q0' */ | |
6123 pix[-1*pix_next] = ( 2*p1 + p0 + q1 + 2 ) >> 2; | |
6124 pix[ 0*pix_next] = ( 2*q1 + q0 + p1 + 2 ) >> 2; | |
6125 } | |
6126 tprintf(h->s.avctx, "filter_mb_edgeh i:%d d:%d, qp:%d, indexA:%d, alpha:%d, beta:%d\n# bS:%d -> [%02x, %02x, %02x, %02x, %02x, %02x] =>[%02x, %02x, %02x, %02x]\n", i, d, qp, index_a, alpha, beta, bS[i], p2, p1, p0, q0, q1, q2, pix[-2*pix_next], pix[-pix_next], pix[0], pix[pix_next]); | |
6127 } | |
6128 pix++; | |
6129 } | |
6130 } | 6041 } |
6131 } | 6042 } |
6132 | 6043 |
6133 static void filter_mb_edgech( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) { | 6044 static void filter_mb_edgech( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) { |
6134 int i; | 6045 int i; |