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