diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2010-01-23 14:50:56 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2010-01-23 14:50:56 +0000 |
commit | 6b3661b22d95edda29af2b969244b20344bda6e2 (patch) | |
tree | d4d921ac1c207cc743a1b8a09fc7f2efe71f7893 /libavcodec/h264_loopfilter.c | |
parent | 933bea77e5792c993d196405ab04f4074d30db83 (diff) | |
download | ffmpeg-6b3661b22d95edda29af2b969244b20344bda6e2.tar.gz |
Optimize filter_mb_mbaff_edge*()
Originally committed as revision 21397 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h264_loopfilter.c')
-rw-r--r-- | libavcodec/h264_loopfilter.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/libavcodec/h264_loopfilter.c b/libavcodec/h264_loopfilter.c index 289f022dee..ca89bf0412 100644 --- a/libavcodec/h264_loopfilter.c +++ b/libavcodec/h264_loopfilter.c @@ -136,20 +136,16 @@ static void av_noinline filter_mb_edgecv( uint8_t *pix, int stride, int16_t bS[4 static void filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int bsi, int qp ) { int i; + int index_a = qp + h->slice_alpha_c0_offset; + int alpha = (alpha_table+52)[index_a]; + int beta = (beta_table+52)[qp + h->slice_beta_offset]; for( i = 0; i < 8; i++, pix += stride) { - int index_a; - int alpha; - int beta; const int bS_index = (i >> 1) * bsi; if( bS[bS_index] == 0 ) { continue; } - index_a = qp + h->slice_alpha_c0_offset; - alpha = (alpha_table+52)[index_a]; - beta = (beta_table+52)[qp + h->slice_beta_offset]; - if( bS[bS_index] < 4 ) { const int tc0 = (tc0_table+52)[index_a][bS[bS_index]]; const int p0 = pix[-1]; @@ -166,10 +162,12 @@ static void filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix, int stride, int int i_delta; if( FFABS( p2 - p0 ) < beta ) { + if(tc0) pix[-2] = p1 + av_clip( ( p2 + ( ( p0 + q0 + 1 ) >> 1 ) - ( p1 << 1 ) ) >> 1, -tc0, tc0 ); tc++; } if( FFABS( q2 - q0 ) < beta ) { + if(tc0) pix[1] = q1 + av_clip( ( q2 + ( ( p0 + q0 + 1 ) >> 1 ) - ( q1 << 1 ) ) >> 1, -tc0, tc0 ); tc++; } @@ -227,20 +225,16 @@ static void filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix, int stride, int } static void filter_mb_mbaff_edgecv( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int bsi, int qp ) { int i; + int index_a = qp + h->slice_alpha_c0_offset; + int alpha = (alpha_table+52)[index_a]; + int beta = (beta_table+52)[qp + h->slice_beta_offset]; for( i = 0; i < 4; i++, pix += stride) { - int index_a; - int alpha; - int beta; const int bS_index = i*bsi; if( bS[bS_index] == 0 ) { continue; } - index_a = qp + h->slice_alpha_c0_offset; - alpha = (alpha_table+52)[index_a]; - beta = (beta_table+52)[qp + h->slice_beta_offset]; - if( bS[bS_index] < 4 ) { const int tc = (tc0_table+52)[index_a][bS[bS_index]] + 1; const int p0 = pix[-1]; |