Mercurial > libavcodec.hg
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 */ |