comparison h263.c @ 542:d55978a3c369 libavcodec

rl vlc decoding optimizations
author michaelni
date Sat, 13 Jul 2002 14:55:12 +0000
parents c7e4c8b9a3c4
children 5264fb104700
comparison
equal deleted inserted replaced
541:4273be971bf8 542:d55978a3c369
1620 } 1620 }
1621 } 1621 }
1622 1622
1623 void init_vlc_rl(RLTable *rl) 1623 void init_vlc_rl(RLTable *rl)
1624 { 1624 {
1625 int i, q;
1626
1625 init_vlc(&rl->vlc, 9, rl->n + 1, 1627 init_vlc(&rl->vlc, 9, rl->n + 1,
1626 &rl->table_vlc[0][1], 4, 2, 1628 &rl->table_vlc[0][1], 4, 2,
1627 &rl->table_vlc[0][0], 4, 2); 1629 &rl->table_vlc[0][0], 4, 2);
1630
1631
1632 for(q=0; q<32; q++){
1633 int qmul= q*2;
1634 int qadd= (q-1)|1;
1635
1636 if(q==0){
1637 qmul=1;
1638 qadd=0;
1639 }
1640
1641 rl->rl_vlc[q]= av_malloc(rl->vlc.table_size*sizeof(RL_VLC_ELEM));
1642 for(i=0; i<rl->vlc.table_size; i++){
1643 int code= rl->vlc.table[i][0];
1644 int len = rl->vlc.table[i][1];
1645 int level, run;
1646
1647 if(len==0){ // illegal code
1648 run= 65;
1649 level= MAX_LEVEL;
1650 }else if(len<0){ //more bits needed
1651 run= 0;
1652 level= code;
1653 }else{
1654 if(code==rl->n){ //esc
1655 run= 65;
1656 level= 0;
1657 }else{
1658 run= rl->table_run [code] + 1;
1659 level= rl->table_level[code] * qmul + qadd;
1660 if(code >= rl->last) run+=192;
1661 }
1662 }
1663 rl->rl_vlc[q][i].len= len;
1664 rl->rl_vlc[q][i].level= level;
1665 rl->rl_vlc[q][i].run= run;
1666 }
1667 }
1628 } 1668 }
1629 1669
1630 /* init vlcs */ 1670 /* init vlcs */
1631 1671
1632 /* XXX: find a better solution to handle static init */ 1672 /* XXX: find a better solution to handle static init */