From: Michael Niedermayer Date: Mon, 25 Jan 2010 02:44:34 +0000 (+0000) Subject: Optimize decode_cabac_field_decoding_flag(). X-Git-Tag: v0.6~1659 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2773920698beab30525bbd7249655f3223874d65;p=coroid%2Flibav_saccubus.git Optimize decode_cabac_field_decoding_flag(). ~4 cpu cycles faster Originally committed as revision 21447 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/h264_cabac.c b/libavcodec/h264_cabac.c index 0c2a2466c..aba25a539 100644 --- a/libavcodec/h264_cabac.c +++ b/libavcodec/h264_cabac.c @@ -706,21 +706,15 @@ void ff_h264_init_cabac_states(H264Context *h) { static int decode_cabac_field_decoding_flag(H264Context *h) { MpegEncContext * const s = &h->s; - const int mb_x = s->mb_x; - const int mb_y = s->mb_y & ~1; - const int mba_xy = mb_x - 1 + mb_y *s->mb_stride; - const int mbb_xy = mb_x + (mb_y-2)*s->mb_stride; + const long mba_xy = h->mb_xy - 1L; + const long mbb_xy = h->mb_xy - 2L*s->mb_stride; - unsigned int ctx = 0; + unsigned long ctx = 0; - if( h->slice_table[mba_xy] == h->slice_num && IS_INTERLACED( s->current_picture.mb_type[mba_xy] ) ) { - ctx += 1; - } - if( h->slice_table[mbb_xy] == h->slice_num && IS_INTERLACED( s->current_picture.mb_type[mbb_xy] ) ) { - ctx += 1; - } + ctx += (s->current_picture.mb_type[mba_xy]>>7)&(h->slice_table[mba_xy] == h->slice_num); + ctx += (s->current_picture.mb_type[mbb_xy]>>7)&(h->slice_table[mbb_xy] == h->slice_num); - return get_cabac_noinline( &h->cabac, &h->cabac_state[70 + ctx] ); + return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] ); } static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) {