Quoting Diego Biurrun (2016-06-09 17:12:42) > From: Alexandra Hájková <[email protected]> > > --- > libavcodec/tta.c | 50 +++++++++++++++++++++++++------------------------- > 1 file changed, 25 insertions(+), 25 deletions(-) > > diff --git a/libavcodec/tta.c b/libavcodec/tta.c > index 2b57406..2f96933 100644 > --- a/libavcodec/tta.c > +++ b/libavcodec/tta.c > @@ -33,7 +33,7 @@ > > #define BITSTREAM_READER_LE > #include "avcodec.h" > -#include "get_bits.h" > +#include "bitstream.h" > #include "internal.h" > > #define FORMAT_SIMPLE 1 > @@ -59,7 +59,7 @@ typedef struct TTAChannel { > > typedef struct TTAContext { > AVCodecContext *avctx; > - GetBitContext gb; > + BitstreamContext bc; > const AVCRC *crc_table; > > int format, channels, bps; > @@ -171,12 +171,12 @@ static void rice_init(TTARice *c, uint32_t k0, uint32_t > k1) > c->sum1 = shift_16[k1]; > } > > -static int tta_get_unary(GetBitContext *gb) > +static int tta_get_unary(BitstreamContext *bc) > { > int ret = 0; > > // count ones > - while (get_bits_left(gb) > 0 && get_bits1(gb)) > + while (bitstream_bits_left(bc) > 0 && bitstream_read_bit(bc)) > ret++; > return ret; > } > @@ -206,18 +206,17 @@ static av_cold int tta_decode_init(AVCodecContext * > avctx) > if (avctx->extradata_size < 30) > return -1; > > - init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size * 8); > - if (show_bits_long(&s->gb, 32) == AV_RL32("TTA1")) > - { > + bitstream_init(&s->bc, avctx->extradata, avctx->extradata_size * 8); > + if (bitstream_peek(&s->bc, 32) == AV_RL32("TTA1")) { > if (avctx->err_recognition & AV_EF_CRCCHECK) { > s->crc_table = av_crc_get_table(AV_CRC_32_IEEE_LE); > tta_check_crc(s, avctx->extradata, 18); > } > > /* signature */ > - skip_bits_long(&s->gb, 32); > + bitstream_skip(&s->bc, 32); > > - s->format = get_bits(&s->gb, 16); > + s->format = bitstream_read(&s->bc, 16); > if (s->format > 2) { > av_log(s->avctx, AV_LOG_ERROR, "Invalid format\n"); > return -1; > @@ -226,12 +225,13 @@ static av_cold int tta_decode_init(AVCodecContext * > avctx) > avpriv_report_missing_feature(s->avctx, "Encrypted TTA"); > return AVERROR_PATCHWELCOME; > } > - avctx->channels = s->channels = get_bits(&s->gb, 16); > - avctx->bits_per_coded_sample = get_bits(&s->gb, 16); > + avctx->channels = > + s->channels = bitstream_read(&s->bc, 16); > + avctx->bits_per_coded_sample = bitstream_read(&s->bc, 16); > s->bps = (avctx->bits_per_coded_sample + 7) / 8; > - avctx->sample_rate = get_bits_long(&s->gb, 32); > - s->data_length = get_bits_long(&s->gb, 32); > - skip_bits_long(&s->gb, 32); // CRC32 of header > + avctx->sample_rate = bitstream_read(&s->bc, 32); > + s->data_length = bitstream_read(&s->bc, 32); > + bitstream_skip(&s->bc, 32); // CRC32 of header > > if (s->channels == 0) { > av_log(s->avctx, AV_LOG_ERROR, "Invalid number of channels\n"); > @@ -281,8 +281,8 @@ static av_cold int tta_decode_init(AVCodecContext * avctx) > if (ret < 0 && avctx->err_recognition & AV_EF_EXPLODE) > return AVERROR_INVALIDDATA; > } > - skip_bits_long(&s->gb, 32 * total_frames); > - skip_bits_long(&s->gb, 32); // CRC32 of seektable > + bitstream_skip(&s->bc, 32 * total_frames); > + bitstream_skip(&s->bc, 32); // CRC32 of seektable > > if(s->frame_length >= UINT_MAX / (s->channels * sizeof(int32_t))){ > av_log(avctx, AV_LOG_ERROR, "frame_length too large\n"); > @@ -324,7 +324,7 @@ static int tta_decode_frame(AVCodecContext *avctx, void > *data, > return AVERROR_INVALIDDATA; > } > > - init_get_bits(&s->gb, buf, buf_size*8); > + bitstream_init(&s->bc, buf, buf_size * 8); > > /* get output buffer */ > frame->nb_samples = framelen; > @@ -352,7 +352,7 @@ static int tta_decode_frame(AVCodecContext *avctx, void > *data, > uint32_t unary, depth, k; > int32_t value; > > - unary = tta_get_unary(&s->gb); > + unary = tta_get_unary(&s->bc); > > if (unary == 0) { > depth = 0; > @@ -363,17 +363,17 @@ static int tta_decode_frame(AVCodecContext *avctx, void > *data, > unary--; > } > > - if (get_bits_left(&s->gb) < k) { > + if (bitstream_bits_left(&s->bc) < k) { > ret = AVERROR_INVALIDDATA; > goto error; > } > > if (k) { > - if (k > MIN_CACHE_BITS) { > + if (k > 32) {
Shift by 32 is undefined behaviour. -- Anton Khirnov _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
