Mercurial > libavcodec.hg
comparison h264_cabac.c @ 11004:1c3b1752d6d6 libavcodec
Optimize decode_cabac_field_decoding_flag().
~4 cpu cycles faster
author | michael |
---|---|
date | Mon, 25 Jan 2010 02:44:34 +0000 |
parents | 34a65026fa06 |
children | 5bd834bd759b |
comparison
equal
deleted
inserted
replaced
11003:72c026446d67 | 11004:1c3b1752d6d6 |
---|---|
704 } | 704 } |
705 } | 705 } |
706 | 706 |
707 static int decode_cabac_field_decoding_flag(H264Context *h) { | 707 static int decode_cabac_field_decoding_flag(H264Context *h) { |
708 MpegEncContext * const s = &h->s; | 708 MpegEncContext * const s = &h->s; |
709 const int mb_x = s->mb_x; | 709 const long mba_xy = h->mb_xy - 1L; |
710 const int mb_y = s->mb_y & ~1; | 710 const long mbb_xy = h->mb_xy - 2L*s->mb_stride; |
711 const int mba_xy = mb_x - 1 + mb_y *s->mb_stride; | 711 |
712 const int mbb_xy = mb_x + (mb_y-2)*s->mb_stride; | 712 unsigned long ctx = 0; |
713 | 713 |
714 unsigned int ctx = 0; | 714 ctx += (s->current_picture.mb_type[mba_xy]>>7)&(h->slice_table[mba_xy] == h->slice_num); |
715 | 715 ctx += (s->current_picture.mb_type[mbb_xy]>>7)&(h->slice_table[mbb_xy] == h->slice_num); |
716 if( h->slice_table[mba_xy] == h->slice_num && IS_INTERLACED( s->current_picture.mb_type[mba_xy] ) ) { | 716 |
717 ctx += 1; | 717 return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] ); |
718 } | |
719 if( h->slice_table[mbb_xy] == h->slice_num && IS_INTERLACED( s->current_picture.mb_type[mbb_xy] ) ) { | |
720 ctx += 1; | |
721 } | |
722 | |
723 return get_cabac_noinline( &h->cabac, &h->cabac_state[70 + ctx] ); | |
724 } | 718 } |
725 | 719 |
726 static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) { | 720 static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) { |
727 uint8_t *state= &h->cabac_state[ctx_base]; | 721 uint8_t *state= &h->cabac_state[ctx_base]; |
728 int mb_type; | 722 int mb_type; |