* Copyright (c) 2000, 2001 Fabrice Bellard
* Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
* alternative bitstream reader & writer by Michael Niedermayer <michaelni@gmx.at>
+ * Copyright (C) 2009 Andre Noll <maan@tuebingen.mpg.de>
*
- * Licensed under the GNU Lesser General Public License.
- * For licencing details see COPYING.LIB.
+ * Licensed under the GNU Lesser General Public License. see file COPYING.LIB.
*/
/** \file bitstream.c Bitstream API for the wma decoder. */
#include "error.h"
#include "string.h"
#include "wma.h"
+#include "portable_io.h"
#include "bitstream.h"
static inline uint32_t get_data(const void *table, int i, int size)
if (vlc->table_size > vlc->table_allocated) {
vlc->table_allocated += (1 << vlc->bits);
vlc->table = para_realloc(vlc->table,
- sizeof(VLC_TYPE) * 2 * vlc->table_allocated);
+ sizeof(int16_t) * 2 * vlc->table_allocated);
}
}
{
int i, j, k, n, table_size, table_index, nb, n1, idx;
uint32_t code;
- VLC_TYPE(*table)[2];
+ int16_t (*table)[2];
table_size = 1 << table_nb_bits;
table_index = vlc->table_size;
* Parse a vlc code.
*
* \param gbc The getbit context structure.
- * \param table The vlc tables to use.
- * \param bits The number of bits which will be read at once.
- * \param max_depth The number of times \a bits bits must be read to completely
- * read the longest vlc code = (max_vlc_length + bits - 1) / bits.
- *
- * The \a bits parameter must be identical to the \a nb_bits value supplied to
- * \ref init_vlc().
+ * \param vlc The vlc tables to use.
*
* \return The vlc code.
*/
-int get_vlc(struct getbit_context *gbc, VLC_TYPE(*table)[2], int bits,
- int max_depth)
+int get_vlc(struct getbit_context *gbc, const struct vlc *vlc)
{
int n, idx, nb_bits, code;
- idx = show_bits(gbc, bits);
- code = table[idx][0];
- n = table[idx][1];
- if (max_depth > 1 && n < 0) {
- skip_bits(gbc, bits);
+ idx = show_bits(gbc, vlc->bits);
+ code = vlc->table[idx][0];
+ n = vlc->table[idx][1];
+ if (n < 0) {
+ skip_bits(gbc, vlc->bits);
nb_bits = -n;
idx = show_bits(gbc, nb_bits) + code;
- code = table[idx][0];
- n = table[idx][1];
- if (max_depth > 2 && n < 0) {
+ code = vlc->table[idx][0];
+ n = vlc->table[idx][1];
+ if (n < 0) {
skip_bits(gbc, nb_bits);
nb_bits = -n;
idx = show_bits(gbc, nb_bits) + code;
- code = table[idx][0];
- n = table[idx][1];
+ code = vlc->table[idx][0];
+ n = vlc->table[idx][1];
}
}
skip_bits(gbc, n);