diff --git a/libavcodec/binkaudio.c b/libavcodec/binkaudio.c index 2638eb2b04..cf61135529 100644 --- a/libavcodec/binkaudio.c +++ b/libavcodec/binkaudio.c @@ -33,8 +33,8 @@ #define BITSTREAM_READER_LE #include "avcodec.h" +#include "bitstream.h" #include "dct.h" -#include "get_bits.h" #include "internal.h" #include "rdft.h" #include "wma_freqs.h" @@ -45,7 +45,7 @@ static float quant_table[96]; #define BINK_BLOCK_MAX_SIZE (MAX_CHANNELS << 11) typedef struct BinkAudioContext { - GetBitContext gb; + BitstreamContext bc; int version_b; ///< Bink version 'b' int first; int channels; @@ -143,11 +143,11 @@ static av_cold int decode_init(AVCodecContext *avctx) return 0; } -static float get_float(GetBitContext *gb) +static float get_float(BitstreamContext *bc) { - int power = get_bits(gb, 5); - float f = ldexpf(get_bits_long(gb, 23), power - 23); - if (get_bits1(gb)) + int power = bitstream_read(bc, 5); + float f = ldexpf(bitstream_read(bc, 23), power - 23); + if (bitstream_read_bit(bc)) f = -f; return f; } @@ -166,30 +166,30 @@ static int decode_block(BinkAudioContext *s, float **out, int use_dct) int ch, i, j, k; float q, quant[25]; int width, coeff; - GetBitContext *gb = &s->gb; + BitstreamContext *bc = &s->bc; if (use_dct) - skip_bits(gb, 2); + bitstream_skip(bc, 2); for (ch = 0; ch < s->channels; ch++) { FFTSample *coeffs = out[ch]; if (s->version_b) { - if (get_bits_left(gb) < 64) + if (bitstream_bits_left(bc) < 64) return AVERROR_INVALIDDATA; - coeffs[0] = av_int2float(get_bits_long(gb, 32)) * s->root; - coeffs[1] = av_int2float(get_bits_long(gb, 32)) * s->root; + coeffs[0] = av_int2float(bitstream_read(bc, 32)) * s->root; + coeffs[1] = av_int2float(bitstream_read(bc, 32)) * s->root; } else { - if (get_bits_left(gb) < 58) + if (bitstream_bits_left(bc) < 58) return AVERROR_INVALIDDATA; - coeffs[0] = get_float(gb) * s->root; - coeffs[1] = get_float(gb) * s->root; + coeffs[0] = get_float(bc) * s->root; + coeffs[1] = get_float(bc) * s->root; } - if (get_bits_left(gb) < s->num_bands * 8) + if (bitstream_bits_left(bc) < s->num_bands * 8) return AVERROR_INVALIDDATA; for (i = 0; i < s->num_bands; i++) { - int value = get_bits(gb, 8); + int value = bitstream_read(bc, 8); quant[i] = quant_table[FFMIN(value, 95)]; } @@ -202,9 +202,9 @@ static int decode_block(BinkAudioContext *s, float **out, int use_dct) if (s->version_b) { j = i + 16; } else { - int v = get_bits1(gb); + int v = bitstream_read_bit(bc); if (v) { - v = get_bits(gb, 4); + v = bitstream_read(bc, 4); j = i + rle_length_tab[v] * 8; } else { j = i + 8; @@ -213,7 +213,7 @@ static int decode_block(BinkAudioContext *s, float **out, int use_dct) j = FFMIN(j, s->frame_len); - width = get_bits(gb, 4); + width = bitstream_read(bc, 4); if (width == 0) { memset(coeffs + i, 0, (j - i) * sizeof(*coeffs)); i = j; @@ -223,10 +223,10 @@ static int decode_block(BinkAudioContext *s, float **out, int use_dct) while (i < j) { if (s->bands[k] == i) q = quant[k++]; - coeff = get_bits(gb, width); + coeff = bitstream_read(bc, width); if (coeff) { int v; - v = get_bits1(gb); + v = bitstream_read_bit(bc); if (v) coeffs[i] = -q * coeff; else @@ -278,10 +278,11 @@ static av_cold int decode_end(AVCodecContext *avctx) return 0; } -static void get_bits_align32(GetBitContext *s) +static void get_bits_align32(BitstreamContext *s) { - int n = (-get_bits_count(s)) & 31; - if (n) skip_bits(s, n); + int n = (-bitstream_tell(s)) & 31; + if (n) + bitstream_skip(s, n); } static int decode_frame(AVCodecContext *avctx, void *data, @@ -289,10 +290,10 @@ static int decode_frame(AVCodecContext *avctx, void *data, { BinkAudioContext *s = avctx->priv_data; AVFrame *frame = data; - GetBitContext *gb = &s->gb; + BitstreamContext *bc = &s->bc; int ret, consumed = 0; - if (!get_bits_left(gb)) { + if (!bitstream_bits_left(bc)) { uint8_t *buf; /* handle end-of-stream */ if (!avpkt->size) { @@ -308,11 +309,11 @@ static int decode_frame(AVCodecContext *avctx, void *data, return AVERROR(ENOMEM); s->packet_buffer = buf; memcpy(s->packet_buffer, avpkt->data, avpkt->size); - init_get_bits(gb, s->packet_buffer, avpkt->size * 8); + bitstream_init(bc, s->packet_buffer, avpkt->size * 8); consumed = avpkt->size; /* skip reported size */ - skip_bits_long(gb, 32); + bitstream_skip(bc, 32); } /* get output buffer */ @@ -327,7 +328,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, av_log(avctx, AV_LOG_ERROR, "Incomplete packet\n"); return AVERROR_INVALIDDATA; } - get_bits_align32(gb); + get_bits_align32(bc); frame->nb_samples = s->block_size / avctx->channels; *got_frame_ptr = 1;