Quoting Diego Biurrun (2016-06-09 17:11:54) > From: Alexandra Hájková <[email protected]> > > --- > libavcodec/h261dec.c | 92 > ++++++++++++++++++++++++++------------------------- > libavformat/h261dec.c | 11 +++--- > 2 files changed, 53 insertions(+), 50 deletions(-) > > diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c > index 9a323ec..b08598e 100644 > --- a/libavcodec/h261dec.c > +++ b/libavcodec/h261dec.c > @@ -26,12 +26,14 @@ > */ > > #include "avcodec.h" > +#include "bitstream.h" > #include "mpeg_er.h" > #include "mpegutils.h" > #include "mpegvideo.h" > #include "h263.h" > #include "h261.h" > #include "internal.h" > +#include "vlc.h" > > #define H261_MBA_VLC_BITS 9 > #define H261_MTYPE_VLC_BITS 6 > @@ -103,18 +105,18 @@ static int h261_decode_gob_header(H261Context *h) > > if (!h->gob_start_code_skipped) { > /* Check for GOB Start Code */ > - val = show_bits(&s->gb, 15); > + val = bitstream_peek(&s->bc, 15); > if (val) > return -1; > > /* We have a GBSC */ > - skip_bits(&s->gb, 16); > + bitstream_skip(&s->bc, 16); > } > > h->gob_start_code_skipped = 0; > > - h->gob_number = get_bits(&s->gb, 4); /* GN */ > - s->qscale = get_bits(&s->gb, 5); /* GQUANT */ > + h->gob_number = bitstream_read(&s->bc, 4); /* GN */ > + s->qscale = bitstream_read(&s->bc, 5); /* GQUANT */ > > /* Check if gob_number is valid */ > if (s->mb_height == 18) { // CIF > @@ -127,8 +129,8 @@ static int h261_decode_gob_header(H261Context *h) > } > > /* GEI */ > - while (get_bits1(&s->gb) != 0) > - skip_bits(&s->gb, 8); > + while (bitstream_read_bit(&s->bc) != 0) > + bitstream_skip(&s->bc, 8); > > if (s->qscale == 0) { > av_log(s->avctx, AV_LOG_ERROR, "qscale has forbidden 0 value\n"); > @@ -160,27 +162,27 @@ static int h261_resync(H261Context *h) > if (ret >= 0) > return 0; > } else { > - if (show_bits(&s->gb, 15) == 0) { > + if (bitstream_peek(&s->bc, 15) == 0) { > ret = h261_decode_gob_header(h); > if (ret >= 0) > return 0; > } > // OK, it is not where it is supposed to be ... > - s->gb = s->last_resync_gb; > - align_get_bits(&s->gb); > - left = get_bits_left(&s->gb); > + s->bc = s->last_resync_bc; > + bitstream_align(&s->bc); > + left = bitstream_bits_left(&s->bc); > > for (; left > 15 + 1 + 4 + 5; left -= 8) { > - if (show_bits(&s->gb, 15) == 0) { > - GetBitContext bak = s->gb; > + if (bitstream_peek(&s->bc, 15) == 0) { > + BitstreamContext bak = s->bc; > > ret = h261_decode_gob_header(h); > if (ret >= 0) > return 0; > > - s->gb = bak; > + s->bc = bak; > } > - skip_bits(&s->gb, 8); > + bitstream_skip(&s->bc, 8); > } > } > > @@ -228,9 +230,9 @@ static const int mvmap[17] = { > 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16 > }; > > -static int decode_mv_component(GetBitContext *gb, int v) > +static int decode_mv_component(BitstreamContext *bc, int v) > { > - int mv_diff = get_vlc2(gb, h261_mv_vlc.table, H261_MV_VLC_BITS, 2); > + int mv_diff = bitstream_read_vlc(bc, h261_mv_vlc.table, > H261_MV_VLC_BITS, 2); > > /* check if mv_diff is valid */ > if (mv_diff < 0) > @@ -238,7 +240,7 @@ static int decode_mv_component(GetBitContext *gb, int v) > > mv_diff = mvmap[mv_diff]; > > - if (mv_diff && !get_bits1(gb)) > + if (mv_diff && !bitstream_read_bit(bc)) > mv_diff = -mv_diff; > > v += mv_diff; > @@ -270,7 +272,7 @@ static int h261_decode_block(H261Context *h, int16_t > *block, int n, int coded) > scan_table = s->intra_scantable.permutated; > if (s->mb_intra) { > /* DC coef */ > - level = get_bits(&s->gb, 8); > + level = bitstream_read(&s->bc, 8); > // 0 (00000000b) and -128 (10000000b) are FORBIDDEN > if ((level & 0x7F) == 0) { > av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n", > @@ -288,10 +290,10 @@ static int h261_decode_block(H261Context *h, int16_t > *block, int n, int coded) > // EOB Not possible for first level when cbp is available > (that's why the table is different) > // 0 1 1s > // * * 0* > - int check = show_bits(&s->gb, 2); > + int check = bitstream_peek(&s->bc, 2); > i = 0; > if (check & 0x2) { > - skip_bits(&s->gb, 2); > + bitstream_skip(&s->bc, 2); > block[0] = (check & 0x1) ? -1 : 1; > i = 1; > } > @@ -303,7 +305,7 @@ static int h261_decode_block(H261Context *h, int16_t > *block, int n, int coded) > return 0; > } > for (;;) { > - code = get_vlc2(&s->gb, rl->vlc.table, TCOEFF_VLC_BITS, 2); > + code = bitstream_read_vlc(&s->bc, rl->vlc.table, TCOEFF_VLC_BITS, 2); > if (code < 0) { > av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", > s->mb_x, s->mb_y); > @@ -314,14 +316,14 @@ static int h261_decode_block(H261Context *h, int16_t > *block, int n, int coded) > /* The remaining combinations of (run, level) are encoded with a > * 20-bit word consisting of 6 bits escape, 6 bits run and 8 bits > * level. */ > - run = get_bits(&s->gb, 6); > - level = get_sbits(&s->gb, 8); > + run = bitstream_read(&s->bc, 6); > + level = bitstream_read_signed(&s->bc, 8); > } else if (code == 0) { > break; > } else { > run = rl->table_run[code]; > level = rl->table_level[code]; > - if (get_bits1(&s->gb)) > + if (bitstream_read_bit(&s->bc)) > level = -level; > } > i += run; > @@ -346,8 +348,8 @@ static int h261_decode_mb(H261Context *h) > cbp = 63; > // Read mba > do { > - h->mba_diff = get_vlc2(&s->gb, h261_mba_vlc.table, > - H261_MBA_VLC_BITS, 2); > + h->mba_diff = bitstream_read_vlc(&s->bc, h261_mba_vlc.table, > + H261_MBA_VLC_BITS, 2); > > /* Check for slice end */ > /* NOTE: GOB can be empty (no MB data) or exist only of MBA_stuffing > */ > @@ -358,7 +360,7 @@ static int h261_decode_mb(H261Context *h) > } while (h->mba_diff == MBA_STUFFING); // stuffing > > if (h->mba_diff < 0) { > - if (get_bits_left(&s->gb) <= 7) > + if (bitstream_bits_left(&s->bc) <= 7) > return SLICE_END; > > av_log(s->avctx, AV_LOG_ERROR, "illegal mba at %d %d\n", s->mb_x, > s->mb_y); > @@ -378,7 +380,7 @@ static int h261_decode_mb(H261Context *h) > ff_update_block_index(s); > > // Read mtype > - h->mtype = get_vlc2(&s->gb, h261_mtype_vlc.table, H261_MTYPE_VLC_BITS, > 2); > + h->mtype = bitstream_read_vlc(&s->bc, h261_mtype_vlc.table, > H261_MTYPE_VLC_BITS, 2); > if (h->mtype < 0 || h->mtype >= FF_ARRAY_ELEMS(ff_h261_mtype_map)) { > av_log(s->avctx, AV_LOG_ERROR, "Invalid mtype index %d\n", > h->mtype); > @@ -388,7 +390,7 @@ static int h261_decode_mb(H261Context *h) > > // Read mquant > if (IS_QUANT(h->mtype)) > - ff_set_qscale(s, get_bits(&s->gb, 5)); > + ff_set_qscale(s, bitstream_read(&s->bc, 5)); > > s->mb_intra = IS_INTRA4x4(h->mtype); > > @@ -408,8 +410,8 @@ static int h261_decode_mb(H261Context *h) > h->current_mv_y = 0; > } > > - h->current_mv_x = decode_mv_component(&s->gb, h->current_mv_x); > - h->current_mv_y = decode_mv_component(&s->gb, h->current_mv_y); > + h->current_mv_x = decode_mv_component(&s->bc, h->current_mv_x); > + h->current_mv_y = decode_mv_component(&s->bc, h->current_mv_y); > } else { > h->current_mv_x = 0; > h->current_mv_y = 0; > @@ -417,7 +419,7 @@ static int h261_decode_mb(H261Context *h) > > // Read cbp > if (HAS_CBP(h->mtype)) > - cbp = get_vlc2(&s->gb, h261_cbp_vlc.table, H261_CBP_VLC_BITS, 2) + 1; > + cbp = bitstream_read_vlc(&s->bc, h261_cbp_vlc.table, > H261_CBP_VLC_BITS, 2) + 1; > > if (s->mb_intra) { > s->current_picture.mb_type[xy] = MB_TYPE_INTRA; > @@ -460,8 +462,8 @@ static int h261_decode_picture_header(H261Context *h) > int format, i; > uint32_t startcode = 0; > > - for (i = get_bits_left(&s->gb); i > 24; i -= 1) { > - startcode = ((startcode << 1) | get_bits(&s->gb, 1)) & 0x000FFFFF; > + for (i = bitstream_bits_left(&s->bc); i > 24; i -= 1) { > + startcode = ((startcode << 1) | bitstream_read(&s->bc, 1)) & > 0x000FFFFF; > > if (startcode == 0x10) > break; > @@ -473,7 +475,7 @@ static int h261_decode_picture_header(H261Context *h) > } > > /* temporal reference */ > - i = get_bits(&s->gb, 5); /* picture timestamp */ > + i = bitstream_read(&s->bc, 5); /* picture timestamp */ > if (i < (s->picture_number & 31)) > i += 32; > s->picture_number = (s->picture_number & ~31) + i; > @@ -481,11 +483,11 @@ static int h261_decode_picture_header(H261Context *h) > s->avctx->framerate = (AVRational) { 30000, 1001 }; > > /* PTYPE starts here */ > - skip_bits1(&s->gb); /* split screen off */ > - skip_bits1(&s->gb); /* camera off */ > - skip_bits1(&s->gb); /* freeze picture release off */ > + bitstream_skip(&s->bc, 1); /* split screen off */ > + bitstream_skip(&s->bc, 1); /* camera off */ > + bitstream_skip(&s->bc, 1); /* freeze picture release off */ > > - format = get_bits1(&s->gb); > + format = bitstream_read_bit(&s->bc); > > // only 2 formats possible > if (format == 0) { // QCIF > @@ -502,12 +504,12 @@ static int h261_decode_picture_header(H261Context *h) > > s->mb_num = s->mb_width * s->mb_height; > > - skip_bits1(&s->gb); /* still image mode off */ > - skip_bits1(&s->gb); /* Reserved */ > + bitstream_skip(&s->bc, 1); /* still image mode off */ > + bitstream_skip(&s->bc, 1); /* Reserved */ > > /* PEI */ > - while (get_bits1(&s->gb) != 0) > - skip_bits(&s->gb, 8); > + while (bitstream_read_bit(&s->bc) != 0) > + bitstream_skip(&s->bc, 8); > > /* H.261 has no I-frames, but if we pass AV_PICTURE_TYPE_I for the first > * frame, the codec crashes if it does not contain all I-blocks > @@ -552,7 +554,7 @@ static int h261_decode_gob(H261Context *h) > */ > static int get_consumed_bytes(MpegEncContext *s, int buf_size) > { > - int pos = get_bits_count(&s->gb) >> 3; > + int pos = bitstream_tell(&s->bc) >> 3; > if (pos == 0) > pos = 1; // avoid infinite loops (i doubt that is needed but > ...) > if (pos + 10 > buf_size) > @@ -577,7 +579,7 @@ static int h261_decode_frame(AVCodecContext *avctx, void > *data, > h->gob_start_code_skipped = 0; > > retry: > - init_get_bits(&s->gb, buf, buf_size * 8); > + bitstream_init8(&s->bc, buf, buf_size); > > if (!s->context_initialized) > // we need the IDCT permutation for reading a custom matrix > diff --git a/libavformat/h261dec.c b/libavformat/h261dec.c > index 4a58050..d8a2cec 100644 > --- a/libavformat/h261dec.c > +++ b/libavformat/h261dec.c > @@ -19,7 +19,8 @@ > * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 > USA > */ > > -#include "libavcodec/get_bits.h" > +#include "libavcodec/bitstream.h" > + > #include "avformat.h" > #include "rawdec.h" > > @@ -31,16 +32,16 @@ static int h261_probe(AVProbeData *p) > int invalid_psc=0; > int next_gn=0; > int src_fmt=0; > - GetBitContext gb; > + BitstreamContext bc; > > - init_get_bits(&gb, p->buf, p->buf_size*8); > + bitstream_init(&bc, p->buf, p->buf_size * 8); > > for(i=0; i<p->buf_size*8; i++){ > if ((code & 0x01ff0000) || !(code & 0xff00)) { > - code = (code<<8) + get_bits(&gb, 8); > + code = (code << 8) + bitstream_read(&bc, 8); > i += 7; > } else > - code = (code<<1) + get_bits1(&gb); > + code = (code << 1) + bitstream_read_bit(&bc); > if ((code & 0xffff0000) == 0x10000) { > int gn= (code>>12)&0xf; > if(!gn) > -- > 2.7.3
Looks ok. -- Anton Khirnov _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
