comparison mpegaudiodec.c @ 4469:a2e82396193c libavcodec

factorize switch_buffer()
author michael
date Sat, 03 Feb 2007 13:15:55 +0000
parents 5455cb5a759c
children 6679d37a3338
comparison
equal deleted inserted replaced
4468:5455cb5a759c 4469:a2e82396193c
1590 return 0; 1590 return 0;
1591 else 1591 else
1592 return get_bits(s, n); 1592 return get_bits(s, n);
1593 } 1593 }
1594 1594
1595
1596 static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos, int *end_pos2){
1597 if(s->in_gb.buffer && *pos >= s->gb.size_in_bits){
1598 s->gb= s->in_gb;
1599 s->in_gb.buffer=NULL;
1600 assert((get_bits_count(&s->gb) & 7) == 0);
1601 skip_bits_long(&s->gb, *pos - *end_pos);
1602 *end_pos2=
1603 *end_pos= *end_pos2 + get_bits_count(&s->gb) - *pos;
1604 *pos= get_bits_count(&s->gb);
1605 }
1606 }
1607
1595 static int huffman_decode(MPADecodeContext *s, GranuleDef *g, 1608 static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
1596 int16_t *exponents, int end_pos2) 1609 int16_t *exponents, int end_pos2)
1597 { 1610 {
1598 int s_index; 1611 int s_index;
1599 int i; 1612 int i;
1625 int exponent, x, y, v; 1638 int exponent, x, y, v;
1626 int pos= get_bits_count(&s->gb); 1639 int pos= get_bits_count(&s->gb);
1627 1640
1628 if (pos >= end_pos){ 1641 if (pos >= end_pos){
1629 // av_log(NULL, AV_LOG_ERROR, "pos: %d %d %d %d\n", pos, end_pos, end_pos2, s_index); 1642 // av_log(NULL, AV_LOG_ERROR, "pos: %d %d %d %d\n", pos, end_pos, end_pos2, s_index);
1630 if(s->in_gb.buffer && pos >= s->gb.size_in_bits){ 1643 switch_buffer(s, &pos, &end_pos, &end_pos2);
1631 s->gb= s->in_gb;
1632 s->in_gb.buffer=NULL;
1633 assert((get_bits_count(&s->gb) & 7) == 0);
1634 skip_bits_long(&s->gb, pos - end_pos);
1635 end_pos2=
1636 end_pos= end_pos2 + get_bits_count(&s->gb) - pos;
1637 pos= get_bits_count(&s->gb);
1638 }
1639 // av_log(NULL, AV_LOG_ERROR, "new pos: %d %d\n", pos, end_pos); 1644 // av_log(NULL, AV_LOG_ERROR, "new pos: %d %d\n", pos, end_pos);
1640 if(pos >= end_pos) 1645 if(pos >= end_pos)
1641 break; 1646 break;
1642 } 1647 }
1643 y = get_vlc2(&s->gb, vlc->table, 7, 3); 1648 y = get_vlc2(&s->gb, vlc->table, 7, 3);
1710 if(s->error_resilience >= FF_ER_COMPLIANT) 1715 if(s->error_resilience >= FF_ER_COMPLIANT)
1711 s_index=0; 1716 s_index=0;
1712 break; 1717 break;
1713 } 1718 }
1714 // av_log(NULL, AV_LOG_ERROR, "pos2: %d %d %d %d\n", pos, end_pos, end_pos2, s_index); 1719 // av_log(NULL, AV_LOG_ERROR, "pos2: %d %d %d %d\n", pos, end_pos, end_pos2, s_index);
1715 if(s->in_gb.buffer && pos >= s->gb.size_in_bits){ 1720 switch_buffer(s, &pos, &end_pos, &end_pos2);
1716 s->gb= s->in_gb;
1717 s->in_gb.buffer=NULL;
1718 assert((get_bits_count(&s->gb) & 7) == 0);
1719 skip_bits_long(&s->gb, pos - end_pos);
1720 end_pos2=
1721 end_pos= end_pos2 + get_bits_count(&s->gb) - pos;
1722 pos= get_bits_count(&s->gb);
1723 }
1724 // av_log(NULL, AV_LOG_ERROR, "new pos2: %d %d %d\n", pos, end_pos, s_index); 1721 // av_log(NULL, AV_LOG_ERROR, "new pos2: %d %d %d\n", pos, end_pos, s_index);
1725 if(pos >= end_pos) 1722 if(pos >= end_pos)
1726 break; 1723 break;
1727 } 1724 }
1728 last_pos= pos; 1725 last_pos= pos;
1758 } 1755 }
1759 memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid)*(576 - s_index)); 1756 memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid)*(576 - s_index));
1760 skip_bits_long(&s->gb, bits_left); 1757 skip_bits_long(&s->gb, bits_left);
1761 1758
1762 i= get_bits_count(&s->gb); 1759 i= get_bits_count(&s->gb);
1763 if(s->in_gb.buffer && i >= s->gb.size_in_bits){ 1760 switch_buffer(s, &i, &end_pos, &end_pos2);
1764 s->gb= s->in_gb;
1765 s->in_gb.buffer=NULL;
1766 assert((get_bits_count(&s->gb) & 7) == 0);
1767 skip_bits_long(&s->gb, i - end_pos);
1768 }
1769 1761
1770 return 0; 1762 return 0;
1771 } 1763 }
1772 1764
1773 /* Reorder short blocks from bitstream order to interleaved order. It 1765 /* Reorder short blocks from bitstream order to interleaved order. It