# HG changeset patch # User darkshikari # Date 1281184244 0 # Node ID 37fc04bf57b4daee3624fb9da0e19f5d3af12f69 # Parent 7e9b2d528e597d85214b4ad3c8ea51b12c464281 H.264: 8% faster CAVLC zero-run decoding diff -r 7e9b2d528e59 -r 37fc04bf57b4 h264_cavlc.c --- a/h264_cavlc.c Sat Aug 07 01:36:35 2010 +0000 +++ b/h264_cavlc.c Sat Aug 07 12:30:44 2010 +0000 @@ -367,7 +367,7 @@ MpegEncContext * const s = &h->s; static const int coeff_token_table_index[17]= {0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3}; int level[16]; - int zeros_left, coeff_num, coeff_token, total_coeff, i, j, trailing_ones, run_before; + int zeros_left, coeff_token, total_coeff, i, trailing_ones, run_before; //FIXME put trailing_onex into the context @@ -488,39 +488,36 @@ zeros_left= get_vlc2(gb, (total_zeros_vlc-1)[ total_coeff ].table, TOTAL_ZEROS_VLC_BITS, 1); } - coeff_num = zeros_left + total_coeff - 1; - j = scantable[coeff_num]; + scantable += zeros_left + total_coeff - 1; if(n > 24){ - block[j] = level[0]; - for(i=1;i 0;i++) { + if(zeros_left < 7) run_before= get_vlc2(gb, (run_vlc-1)[zeros_left].table, RUN_VLC_BITS, 1); - }else{ + else run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); - } zeros_left -= run_before; - coeff_num -= 1 + run_before; - j= scantable[ coeff_num ]; - - block[j]= level[i]; + scantable -= 1 + run_before; + block[*scantable]= level[i]; + } + for(;i>6; - for(i=1;i>6; + for(i=1;i 0;i++) { + if(zeros_left < 7) run_before= get_vlc2(gb, (run_vlc-1)[zeros_left].table, RUN_VLC_BITS, 1); - }else{ + else run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); - } zeros_left -= run_before; - coeff_num -= 1 + run_before; - j= scantable[ coeff_num ]; - - block[j]= (level[i] * qmul[j] + 32)>>6; + scantable -= 1 + run_before; + block[*scantable]= (level[i] * qmul[*scantable] + 32)>>6; + } + for(;i>6; } }