summaryrefslogtreecommitdiffstats
path: root/libavcodec/wmaprodec.c
diff options
context:
space:
mode:
authorAlexandra Hájková <alexandra@khirnov.net>2016-04-15 10:46:06 +0200
committerDiego Biurrun <diego@biurrun.de>2017-02-06 15:13:34 +0100
commitf7ec7f546f0021d28da284b024416b916b61c974 (patch)
treef828f7ee7c29dd6544fb944fa9fe2419b883cfca /libavcodec/wmaprodec.c
parent58d87e0f49bcbbc6f426328f53b657bae7430cd2 (diff)
downloadffmpeg-streaming-f7ec7f546f0021d28da284b024416b916b61c974.zip
ffmpeg-streaming-f7ec7f546f0021d28da284b024416b916b61c974.tar.gz
wma: Convert to the new bitstream reader
Diffstat (limited to 'libavcodec/wmaprodec.c')
-rw-r--r--libavcodec/wmaprodec.c207
1 files changed, 104 insertions, 103 deletions
diff --git a/libavcodec/wmaprodec.c b/libavcodec/wmaprodec.c
index 08b41f4..4eaeed6 100644
--- a/libavcodec/wmaprodec.c
+++ b/libavcodec/wmaprodec.c
@@ -91,9 +91,10 @@
#include "libavutil/float_dsp.h"
#include "libavutil/intfloat.h"
#include "libavutil/intreadwrite.h"
+
#include "avcodec.h"
+#include "bitstream.h"
#include "internal.h"
-#include "get_bits.h"
#include "put_bits.h"
#include "wmaprodata.h"
#include "sinewin.h"
@@ -197,7 +198,7 @@ typedef struct WMAProDecodeCtx {
int16_t subwoofer_cutoffs[WMAPRO_BLOCK_SIZES]; ///< subwoofer cutoff values
/* packet decode state */
- GetBitContext pgb; ///< bitstream reader context for the packet
+ BitstreamContext pbc; ///< bitstream reader context for the packet
int next_packet_start; ///< start offset of the next wma packet in the demuxer packet
uint8_t packet_offset; ///< frame offset in the packet
uint8_t packet_sequence_number; ///< current packet number
@@ -209,7 +210,7 @@ typedef struct WMAProDecodeCtx {
/* frame decode state */
uint32_t frame_num; ///< current frame number (not used for decoding)
- GetBitContext gb; ///< bitstream reader context
+ BitstreamContext bc; ///< bitstream reader context
int buf_bit_size; ///< buffer size in bits
uint8_t drc_gain; ///< gain for the DRC tool
int8_t skip_frame; ///< skip output step
@@ -495,10 +496,11 @@ static int decode_subframe_length(WMAProDecodeCtx *s, int offset)
/** 1 bit indicates if the subframe is of maximum length */
if (s->max_subframe_len_bit) {
- if (get_bits1(&s->gb))
- frame_len_shift = 1 + get_bits(&s->gb, s->subframe_len_bits-1);
+ if (bitstream_read_bit(&s->bc))
+ frame_len_shift = 1 + bitstream_read(&s->bc,
+ s->subframe_len_bits - 1);
} else
- frame_len_shift = get_bits(&s->gb, s->subframe_len_bits);
+ frame_len_shift = bitstream_read(&s->bc, s->subframe_len_bits);
subframe_len = s->samples_per_frame >> frame_len_shift;
@@ -551,7 +553,7 @@ static int decode_tilehdr(WMAProDecodeCtx *s)
for (c = 0; c < s->avctx->channels; c++)
s->channel[c].num_subframes = 0;
- if (s->max_num_subframes == 1 || get_bits1(&s->gb))
+ if (s->max_num_subframes == 1 || bitstream_read_bit(&s->bc))
fixed_channel_layout = 1;
/** loop until the frame data is split between the subframes */
@@ -565,7 +567,7 @@ static int decode_tilehdr(WMAProDecodeCtx *s)
(min_channel_len == s->samples_per_frame - s->min_samples_per_subframe))
contains_subframe[c] = 1;
else
- contains_subframe[c] = get_bits1(&s->gb);
+ contains_subframe[c] = bitstream_read_bit(&s->bc);
} else
contains_subframe[c] = 0;
}
@@ -633,11 +635,11 @@ static void decode_decorrelation_matrix(WMAProDecodeCtx *s,
s->avctx->channels * sizeof(*chgroup->decorrelation_matrix));
for (i = 0; i < chgroup->num_channels * (chgroup->num_channels - 1) >> 1; i++)
- rotation_offset[i] = get_bits(&s->gb, 6);
+ rotation_offset[i] = bitstream_read(&s->bc, 6);
for (i = 0; i < chgroup->num_channels; i++)
chgroup->decorrelation_matrix[chgroup->num_channels * i + i] =
- get_bits1(&s->gb) ? 1.0 : -1.0;
+ bitstream_read_bit(&s->bc) ? 1.0 : -1.0;
for (i = 1; i < chgroup->num_channels; i++) {
int x;
@@ -686,7 +688,7 @@ static int decode_channel_transform(WMAProDecodeCtx* s)
if (s->avctx->channels > 1) {
int remaining_channels = s->channels_for_cur_subframe;
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
avpriv_request_sample(s->avctx,
"Channel transform bit");
return AVERROR_PATCHWELCOME;
@@ -704,7 +706,7 @@ static int decode_channel_transform(WMAProDecodeCtx* s)
for (i = 0; i < s->channels_for_cur_subframe; i++) {
int channel_idx = s->channel_indexes_for_cur_subframe[i];
if (!s->channel[channel_idx].grouped
- && get_bits1(&s->gb)) {
+ && bitstream_read_bit(&s->bc)) {
++chgroup->num_channels;
s->channel[channel_idx].grouped = 1;
*channel_data++ = s->channel[channel_idx].coeffs;
@@ -722,8 +724,8 @@ static int decode_channel_transform(WMAProDecodeCtx* s)
/** decode transform type */
if (chgroup->num_channels == 2) {
- if (get_bits1(&s->gb)) {
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
+ if (bitstream_read_bit(&s->bc)) {
avpriv_request_sample(s->avctx,
"Unknown channel transform type");
return AVERROR_PATCHWELCOME;
@@ -744,9 +746,9 @@ static int decode_channel_transform(WMAProDecodeCtx* s)
}
}
} else if (chgroup->num_channels > 2) {
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
chgroup->transform = 1;
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
decode_decorrelation_matrix(s, chgroup);
} else {
/** FIXME: more than 6 coupled channels not supported */
@@ -765,11 +767,11 @@ static int decode_channel_transform(WMAProDecodeCtx* s)
/** decode transform on / off */
if (chgroup->transform) {
- if (!get_bits1(&s->gb)) {
+ if (!bitstream_read_bit(&s->bc)) {
int i;
/** transform can be enabled for individual bands */
for (i = 0; i < s->num_bands; i++) {
- chgroup->transform_band[i] = get_bits1(&s->gb);
+ chgroup->transform_band[i] = bitstream_read_bit(&s->bc);
}
} else {
memset(chgroup->transform_band, 1, s->num_bands);
@@ -809,7 +811,7 @@ static int decode_coeffs(WMAProDecodeCtx *s, int c)
ff_dlog(s->avctx, "decode coefficients for channel %i\n", c);
- vlctable = get_bits1(&s->gb);
+ vlctable = bitstream_read_bit(&s->bc);
vlc = &coef_vlc[vlctable];
if (vlctable) {
@@ -828,19 +830,19 @@ static int decode_coeffs(WMAProDecodeCtx *s, int c)
int i;
unsigned int idx;
- idx = get_vlc2(&s->gb, vec4_vlc.table, VLCBITS, VEC4MAXDEPTH);
+ idx = bitstream_read_vlc(&s->bc, vec4_vlc.table, VLCBITS, VEC4MAXDEPTH);
if (idx == HUFF_VEC4_SIZE - 1) {
for (i = 0; i < 4; i += 2) {
- idx = get_vlc2(&s->gb, vec2_vlc.table, VLCBITS, VEC2MAXDEPTH);
+ idx = bitstream_read_vlc(&s->bc, vec2_vlc.table, VLCBITS, VEC2MAXDEPTH);
if (idx == HUFF_VEC2_SIZE - 1) {
uint32_t v0, v1;
- v0 = get_vlc2(&s->gb, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
+ v0 = bitstream_read_vlc(&s->bc, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
if (v0 == HUFF_VEC1_SIZE - 1)
- v0 += ff_wma_get_large_val(&s->gb);
- v1 = get_vlc2(&s->gb, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
+ v0 += ff_wma_get_large_val(&s->bc);
+ v1 = bitstream_read_vlc(&s->bc, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
if (v1 == HUFF_VEC1_SIZE - 1)
- v1 += ff_wma_get_large_val(&s->gb);
+ v1 += ff_wma_get_large_val(&s->bc);
vals[i ] = av_float2int(v0);
vals[i+1] = av_float2int(v1);
} else {
@@ -858,7 +860,7 @@ static int decode_coeffs(WMAProDecodeCtx *s, int c)
/** decode sign */
for (i = 0; i < 4; i++) {
if (vals[i]) {
- uint32_t sign = get_bits1(&s->gb) - 1;
+ uint32_t sign = bitstream_read_bit(&s->bc) - 1;
AV_WN32A(&ci->coeffs[cur_coeff], vals[i] ^ sign << 31);
num_zeros = 0;
} else {
@@ -875,7 +877,7 @@ static int decode_coeffs(WMAProDecodeCtx *s, int c)
if (cur_coeff < s->subframe_len) {
memset(&ci->coeffs[cur_coeff], 0,
sizeof(*ci->coeffs) * (s->subframe_len - cur_coeff));
- if (ff_wma_run_level_decode(s->avctx, &s->gb, vlc,
+ if (ff_wma_run_level_decode(s->avctx, &s->bc, vlc,
level, run, 1, ci->coeffs,
cur_coeff, s->subframe_len,
s->subframe_len, s->esc_len, 0))
@@ -918,15 +920,14 @@ static int decode_scale_factors(WMAProDecodeCtx* s)
s->channel[c].saved_scale_factors[s->channel[c].scale_factor_idx][*sf_offsets++];
}
- if (!s->channel[c].cur_subframe || get_bits1(&s->gb)) {
-
+ if (!s->channel[c].cur_subframe || bitstream_read_bit(&s->bc)) {
if (!s->channel[c].reuse_sf) {
int val;
/** decode DPCM coded scale factors */
- s->channel[c].scale_factor_step = get_bits(&s->gb, 2) + 1;
+ s->channel[c].scale_factor_step = bitstream_read(&s->bc, 2) + 1;
val = 45 / s->channel[c].scale_factor_step;
for (sf = s->channel[c].scale_factors; sf < sf_end; sf++) {
- val += get_vlc2(&s->gb, sf_vlc.table, SCALEVLCBITS, SCALEMAXDEPTH) - 60;
+ val += bitstream_read_vlc(&s->bc, sf_vlc.table, SCALEVLCBITS, SCALEMAXDEPTH) - 60;
*sf = val;
}
} else {
@@ -938,10 +939,10 @@ static int decode_scale_factors(WMAProDecodeCtx* s)
int val;
int sign;
- idx = get_vlc2(&s->gb, sf_rl_vlc.table, VLCBITS, SCALERLMAXDEPTH);
+ idx = bitstream_read_vlc(&s->bc, sf_rl_vlc.table, VLCBITS, SCALERLMAXDEPTH);
if (!idx) {
- uint32_t code = get_bits(&s->gb, 14);
+ uint32_t code = bitstream_read(&s->bc, 14);
val = code >> 6;
sign = (code & 1) - 1;
skip = (code & 0x3f) >> 1;
@@ -950,7 +951,7 @@ static int decode_scale_factors(WMAProDecodeCtx* s)
} else {
skip = scale_rl_run[idx];
val = scale_rl_level[idx];
- sign = get_bits1(&s->gb)-1;
+ sign = bitstream_read_bit(&s->bc)-1;
}
i += skip;
@@ -1077,7 +1078,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
int transmit_coeffs = 0;
int cur_subwoofer_cutoff;
- s->subframe_offset = get_bits_count(&s->gb);
+ s->subframe_offset = bitstream_tell(&s->bc);
/** reset channel context and find the next block offset and size
== the next block of the channel with the smallest number of
@@ -1141,25 +1142,25 @@ static int decode_subframe(WMAProDecodeCtx *s)
s->esc_len = av_log2(s->subframe_len - 1) + 1;
/** skip extended header if any */
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
int num_fill_bits;
- if (!(num_fill_bits = get_bits(&s->gb, 2))) {
- int len = get_bits(&s->gb, 4);
- num_fill_bits = get_bitsz(&s->gb, len) + 1;
+ if (!(num_fill_bits = bitstream_read(&s->bc, 2))) {
+ int len = bitstream_read(&s->bc, 4);
+ num_fill_bits = bitstream_read(&s->bc, len) + 1;
}
if (num_fill_bits >= 0) {
- if (get_bits_count(&s->gb) + num_fill_bits > s->num_saved_bits) {
+ if (bitstream_tell(&s->bc) + num_fill_bits > s->num_saved_bits) {
av_log(s->avctx, AV_LOG_ERROR, "invalid number of fill bits\n");
return AVERROR_INVALIDDATA;
}
- skip_bits_long(&s->gb, num_fill_bits);
+ bitstream_skip(&s->bc, num_fill_bits);
}
}
/** no idea for what the following bit is used */
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
avpriv_request_sample(s->avctx, "Reserved bit");
return AVERROR_PATCHWELCOME;
}
@@ -1171,7 +1172,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
for (i = 0; i < s->channels_for_cur_subframe; i++) {
int c = s->channel_indexes_for_cur_subframe[i];
- if ((s->channel[c].transmit_coefs = get_bits1(&s->gb)))
+ if ((s->channel[c].transmit_coefs = bitstream_read_bit(&s->bc)))
transmit_coeffs = 1;
}
@@ -1180,11 +1181,11 @@ static int decode_subframe(WMAProDecodeCtx *s)
int quant_step = 90 * s->bits_per_sample >> 4;
/** decode number of vector coded coefficients */
- if ((s->transmit_num_vec_coeffs = get_bits1(&s->gb))) {
+ if ((s->transmit_num_vec_coeffs = bitstream_read_bit(&s->bc))) {
int num_bits = av_log2((s->subframe_len + 3)/4) + 1;
for (i = 0; i < s->channels_for_cur_subframe; i++) {
int c = s->channel_indexes_for_cur_subframe[i];
- int num_vec_coeffs = get_bits(&s->gb, num_bits) << 2;
+ int num_vec_coeffs = bitstream_read(&s->bc, num_bits) << 2;
if (num_vec_coeffs + offset > FF_ARRAY_ELEMS(s->channel[c].out)) {
av_log(s->avctx, AV_LOG_ERROR, "num_vec_coeffs %d is too large\n", num_vec_coeffs);
return AVERROR_INVALIDDATA;
@@ -1198,13 +1199,13 @@ static int decode_subframe(WMAProDecodeCtx *s)
}
}
/** decode quantization step */
- step = get_sbits(&s->gb, 6);
+ step = bitstream_read_signed(&s->bc, 6);
quant_step += step;
if (step == -32 || step == 31) {
const int sign = (step == 31) - 1;
int quant = 0;
- while (get_bits_count(&s->gb) + 5 < s->num_saved_bits &&
- (step = get_bits(&s->gb, 5)) == 31) {
+ while (bitstream_tell(&s->bc) + 5 < s->num_saved_bits &&
+ (step = bitstream_read(&s->bc, 5)) == 31) {
quant += 31;
}
quant_step += ((quant + step) ^ sign) - sign;
@@ -1218,13 +1219,13 @@ static int decode_subframe(WMAProDecodeCtx *s)
if (s->channels_for_cur_subframe == 1) {
s->channel[s->channel_indexes_for_cur_subframe[0]].quant_step = quant_step;
} else {
- int modifier_len = get_bits(&s->gb, 3);
+ int modifier_len = bitstream_read(&s->bc, 3);
for (i = 0; i < s->channels_for_cur_subframe; i++) {
int c = s->channel_indexes_for_cur_subframe[i];
s->channel[c].quant_step = quant_step;
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
if (modifier_len) {
- s->channel[c].quant_step += get_bits(&s->gb, modifier_len) + 1;
+ s->channel[c].quant_step += bitstream_read(&s->bc, modifier_len) + 1;
} else
++s->channel[c].quant_step;
}
@@ -1237,13 +1238,13 @@ static int decode_subframe(WMAProDecodeCtx *s)
}
ff_dlog(s->avctx, "BITSTREAM: subframe header length was %i\n",
- get_bits_count(&s->gb) - s->subframe_offset);
+ bitstream_tell(&s->bc) - s->subframe_offset);
/** parse coefficients */
for (i = 0; i < s->channels_for_cur_subframe; i++) {
int c = s->channel_indexes_for_cur_subframe[i];
if (s->channel[c].transmit_coefs &&
- get_bits_count(&s->gb) < s->num_saved_bits) {
+ bitstream_tell(&s->bc) < s->num_saved_bits) {
decode_coeffs(s, c);
} else
memset(s->channel[c].coeffs, 0,
@@ -1251,7 +1252,7 @@ static int decode_subframe(WMAProDecodeCtx *s)
}
ff_dlog(s->avctx, "BITSTREAM: subframe length was %i\n",
- get_bits_count(&s->gb) - s->subframe_offset);
+ bitstream_tell(&s->bc) - s->subframe_offset);
if (transmit_coeffs) {
FFTContext *mdct = &s->mdct_ctx[av_log2(subframe_len) - WMAPRO_BLOCK_MIN_BITS];
@@ -1309,14 +1310,14 @@ static int decode_subframe(WMAProDecodeCtx *s)
static int decode_frame(WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr)
{
AVCodecContext *avctx = s->avctx;
- GetBitContext* gb = &s->gb;
+ BitstreamContext *bc = &s->bc;
int more_frames = 0;
int len = 0;
int i, ret;
/** get frame length */
if (s->len_prefix)
- len = get_bits(gb, s->log2_frame_size);
+ len = bitstream_read(bc, s->log2_frame_size);
ff_dlog(s->avctx, "decoding frame with length %x\n", len);
@@ -1327,40 +1328,40 @@ static int decode_frame(WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr)
}
/** read postproc transform */
- if (s->avctx->channels > 1 && get_bits1(gb)) {
- if (get_bits1(gb)) {
+ if (s->avctx->channels > 1 && bitstream_read_bit(bc)) {
+ if (bitstream_read_bit(bc)) {
for (i = 0; i < avctx->channels * avctx->channels; i++)
- skip_bits(gb, 4);
+ bitstream_skip(bc, 4);
}
}
/** read drc info */
if (s->dynamic_range_compression) {
- s->drc_gain = get_bits(gb, 8);
+ s->drc_gain = bitstream_read(bc, 8);
ff_dlog(s->avctx, "drc_gain %i\n", s->drc_gain);
}
/** no idea what these are for, might be the number of samples
that need to be skipped at the beginning or end of a stream */
- if (get_bits1(gb)) {
+ if (bitstream_read_bit(bc)) {
int av_unused skip;
/** usually true for the first frame */
- if (get_bits1(gb)) {
- skip = get_bits(gb, av_log2(s->samples_per_frame * 2));
+ if (bitstream_read_bit(bc)) {
+ skip = bitstream_read(bc, av_log2(s->samples_per_frame * 2));
ff_dlog(s->avctx, "start skip: %i\n", skip);
}
/** sometimes true for the last frame */
- if (get_bits1(gb)) {
- skip = get_bits(gb, av_log2(s->samples_per_frame * 2));
+ if (bitstream_read_bit(bc)) {
+ skip = bitstream_read(bc, av_log2(s->samples_per_frame * 2));
ff_dlog(s->avctx, "end skip: %i\n", skip);
}
}
ff_dlog(s->avctx, "BITSTREAM: frame header length was %i\n",
- get_bits_count(gb) - s->frame_offset);
+ bitstream_tell(bc) - s->frame_offset);
/** reset subframe states */
s->parsed_all_subframes = 0;
@@ -1407,25 +1408,25 @@ static int decode_frame(WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr)
}
if (s->len_prefix) {
- if (len != (get_bits_count(gb) - s->frame_offset) + 2) {
+ if (len != (bitstream_tell(bc) - s->frame_offset) + 2) {
/** FIXME: not sure if this is always an error */
av_log(s->avctx, AV_LOG_ERROR,
"frame[%"PRIu32"] would have to skip %i bits\n",
s->frame_num,
- len - (get_bits_count(gb) - s->frame_offset) - 1);
+ len - (bitstream_tell(bc) - s->frame_offset) - 1);
s->packet_loss = 1;
return 0;
}
/** skip the rest of the frame data */
- skip_bits_long(gb, len - (get_bits_count(gb) - s->frame_offset) - 1);
+ bitstream_skip(bc, len - (bitstream_tell(bc) - s->frame_offset) - 1);
} else {
- while (get_bits_count(gb) < s->num_saved_bits && get_bits1(gb) == 0) {
+ while (bitstream_tell(bc) < s->num_saved_bits && bitstream_read_bit(bc) == 0) {
}
}
/** decode trailer bit */
- more_frames = get_bits1(gb);
+ more_frames = bitstream_read_bit(bc);
++s->frame_num;
return more_frames;
@@ -1434,22 +1435,22 @@ static int decode_frame(WMAProDecodeCtx *s, AVFrame *frame, int *got_frame_ptr)
/**
*@brief Calculate remaining input buffer length.
*@param s codec context
- *@param gb bitstream reader context
+ *@param bc bitstream reader context
*@return remaining size in bits
*/
-static int remaining_bits(WMAProDecodeCtx *s, GetBitContext *gb)
+static int remaining_bits(WMAProDecodeCtx *s, BitstreamContext *bc)
{
- return s->buf_bit_size - get_bits_count(gb);
+ return s->buf_bit_size - bitstream_tell(bc);
}
/**
*@brief Fill the bit reservoir with a (partial) frame.
*@param s codec context
- *@param gb bitstream reader context
+ *@param bc bitstream reader context
*@param len length of the partial frame
*@param append decides whether to reset the buffer or not
*/
-static void save_bits(WMAProDecodeCtx *s, GetBitContext* gb, int len,
+static void save_bits(WMAProDecodeCtx *s, BitstreamContext *bc, int len,
int append)
{
int buflen;
@@ -1459,7 +1460,7 @@ static void save_bits(WMAProDecodeCtx *s, GetBitContext* gb, int len,
and skipped later so that a fast byte copy is possible */
if (!append) {
- s->frame_offset = get_bits_count(gb) & 7;
+ s->frame_offset = bitstream_tell(bc) & 7;
s->num_saved_bits = s->frame_offset;
init_put_bits(&s->pb, s->frame_data, MAX_FRAMESIZE);
}
@@ -1482,24 +1483,24 @@ static void save_bits(WMAProDecodeCtx *s, GetBitContext* gb, int len,
s->num_saved_bits += len;
if (!append) {
- avpriv_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3),
- s->num_saved_bits);
+ avpriv_copy_bits(&s->pb, bc->buffer + (bitstream_tell(bc) >> 3),
+ s->num_saved_bits);
} else {
- int align = 8 - (get_bits_count(gb) & 7);
+ int align = 8 - (bitstream_tell(bc) & 7);
align = FFMIN(align, len);
- put_bits(&s->pb, align, get_bits(gb, align));
+ put_bits(&s->pb, align, bitstream_read(bc, align));
len -= align;
- avpriv_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3), len);
+ avpriv_copy_bits(&s->pb, bc->buffer + (bitstream_tell(bc) >> 3), len);
}
- skip_bits_long(gb, len);
+ bitstream_skip(bc, len);
{
PutBitContext tmp = s->pb;
flush_put_bits(&tmp);
}
- init_get_bits(&s->gb, s->frame_data, s->num_saved_bits);
- skip_bits(&s->gb, s->frame_offset);
+ bitstream_init(&s->bc, s->frame_data, s->num_saved_bits);
+ bitstream_skip(&s->bc, s->frame_offset);
}
/**
@@ -1513,7 +1514,7 @@ static int decode_packet(AVCodecContext *avctx, void *data,
int *got_frame_ptr, AVPacket* avpkt)
{
WMAProDecodeCtx *s = avctx->priv_data;
- GetBitContext* gb = &s->pgb;
+ BitstreamContext *bc = &s->pbc;
const uint8_t* buf = avpkt->data;
int buf_size = avpkt->size;
int num_bits_prev_frame;
@@ -1536,12 +1537,12 @@ static int decode_packet(AVCodecContext *avctx, void *data,
s->buf_bit_size = buf_size << 3;
/** parse packet header */
- init_get_bits(gb, buf, s->buf_bit_size);
- packet_sequence_number = get_bits(gb, 4);
- skip_bits(gb, 2);
+ bitstream_init(bc, buf, s->buf_bit_size);
+ packet_sequence_number = bitstream_read(bc, 4);
+ bitstream_skip(bc, 2);
/** get number of bits that need to be added to the previous frame */
- num_bits_prev_frame = get_bits(gb, s->log2_frame_size);
+ num_bits_prev_frame = bitstream_read(bc, s->log2_frame_size);
ff_dlog(avctx, "packet[%d]: nbpf %x\n", avctx->frame_number,
num_bits_prev_frame);
@@ -1556,7 +1557,7 @@ static int decode_packet(AVCodecContext *avctx, void *data,
s->packet_sequence_number = packet_sequence_number;
if (num_bits_prev_frame > 0) {
- int remaining_packet_bits = s->buf_bit_size - get_bits_count(gb);
+ int remaining_packet_bits = s->buf_bit_size - bitstream_tell(bc);
if (num_bits_prev_frame >= remaining_packet_bits) {
num_bits_prev_frame = remaining_packet_bits;
s->packet_done = 1;
@@ -1564,7 +1565,7 @@ static int decode_packet(AVCodecContext *avctx, void *data,
/** append the previous frame data to the remaining data from the
previous packet to create a full frame */
- save_bits(s, gb, num_bits_prev_frame, 1);
+ save_bits(s, bc, num_bits_prev_frame, 1);
ff_dlog(avctx, "accumulated %x bits of frame data\n",
s->num_saved_bits - s->frame_offset);
@@ -1587,15 +1588,15 @@ static int decode_packet(AVCodecContext *avctx, void *data,
} else {
int frame_size;
s->buf_bit_size = (avpkt->size - s->next_packet_start) << 3;
- init_get_bits(gb, avpkt->data, s->buf_bit_size);
- skip_bits(gb, s->packet_offset);
- if (s->len_prefix && remaining_bits(s, gb) > s->log2_frame_size &&
- (frame_size = show_bits(gb, s->log2_frame_size)) &&
- frame_size <= remaining_bits(s, gb)) {
- save_bits(s, gb, frame_size, 0);
+ bitstream_init(bc, avpkt->data, s->buf_bit_size);
+ bitstream_skip(bc, s->packet_offset);
+ if (s->len_prefix && remaining_bits(s, bc) > s->log2_frame_size &&
+ (frame_size = bitstream_peek(bc, s->log2_frame_size)) &&
+ frame_size <= remaining_bits(s, bc)) {
+ save_bits(s, bc, frame_size, 0);
s->packet_done = !decode_frame(s, data, got_frame_ptr);
} else if (!s->len_prefix
- && s->num_saved_bits > get_bits_count(&s->gb)) {
+ && s->num_saved_bits > bitstream_tell(&s->bc)) {
/** when the frames do not have a length prefix, we don't know
the compressed length of the individual frames
however, we know what part of a new packet belongs to the
@@ -1609,17 +1610,17 @@ static int decode_packet(AVCodecContext *avctx, void *data,
}
if (s->packet_done && !s->packet_loss &&
- remaining_bits(s, gb) > 0) {
+ remaining_bits(s, bc) > 0) {
/** save the rest of the data so that it can be decoded
with the next packet */
- save_bits(s, gb, remaining_bits(s, gb), 0);
+ save_bits(s, bc, remaining_bits(s, bc), 0);
}
- s->packet_offset = get_bits_count(gb) & 7;
+ s->packet_offset = bitstream_tell(bc) & 7;
if (s->packet_loss)
return AVERROR_INVALIDDATA;
- return get_bits_count(gb) >> 3;
+ return bitstream_tell(bc) >> 3;
}
/**
OpenPOWER on IntegriCloud