comparison h264_cabac.c @ 11201:4e2d74d7bad8 libavcodec

Speedup decode_cabac_field_decoding_flag() by 9 cpu cycles.
author michael
date Thu, 18 Feb 2010 12:13:21 +0000
parents 5e583a785508
children cb29d50bf6d4
comparison
equal deleted inserted replaced
11200:cd8a77473dd1 11201:4e2d74d7bad8
705 } 705 }
706 } 706 }
707 707
708 static int decode_cabac_field_decoding_flag(H264Context *h) { 708 static int decode_cabac_field_decoding_flag(H264Context *h) {
709 MpegEncContext * const s = &h->s; 709 MpegEncContext * const s = &h->s;
710 const long mba_xy = h->mb_xy - 1L;
711 const long mbb_xy = h->mb_xy - 2L*s->mb_stride; 710 const long mbb_xy = h->mb_xy - 2L*s->mb_stride;
712 711
713 unsigned long ctx = 0; 712 unsigned long ctx = 0;
714 713
715 ctx += (s->current_picture.mb_type[mba_xy]>>7)&(h->slice_table[mba_xy] == h->slice_num); 714 ctx += h->mb_field_decoding_flag & !!s->mb_x; //for FMO:(s->current_picture.mb_type[mba_xy]>>7)&(h->slice_table[mba_xy] == h->slice_num);
716 ctx += (s->current_picture.mb_type[mbb_xy]>>7)&(h->slice_table[mbb_xy] == h->slice_num); 715 ctx += (s->current_picture.mb_type[mbb_xy]>>7)&(h->slice_table[mbb_xy] == h->slice_num);
717 716
718 return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] ); 717 return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] );
719 } 718 }
720 719