diff options
author | Alexandra Hájková <alexandra@khirnov.net> | 2016-04-13 20:25:22 +0200 |
---|---|---|
committer | Alexandra Hájková <alexandra@khirnov.net> | 2016-05-22 16:47:59 +0200 |
commit | c3ac98ee2be3f27f98fe25fe1e45d5061fd00034 (patch) | |
tree | e0f51037b7e12c8f96df117ff6474862a60c7870 | |
parent | 52dbd79a80a34869a3f6494c1b427005e4026c4f (diff) |
svq1dec: convert to the new bitstream reader
-rw-r--r-- | libavcodec/svq1dec.c | 94 | ||||
-rw-r--r-- | libavcodec/svq1enc.h | 2 |
2 files changed, 47 insertions, 49 deletions
diff --git a/libavcodec/svq1dec.c b/libavcodec/svq1dec.c index d6f4b43539..f12e82dc2d 100644 --- a/libavcodec/svq1dec.c +++ b/libavcodec/svq1dec.c @@ -33,7 +33,6 @@ */ #include "avcodec.h" -#include "get_bits.h" #include "h263.h" #include "hpeldsp.h" #include "internal.h" @@ -55,7 +54,7 @@ typedef struct svq1_pmv_s { typedef struct SVQ1Context { HpelDSPContext hdsp; - GetBitContext gb; + BitstreamContext bc; AVFrame *prev; uint8_t *pkt_swapped; @@ -111,7 +110,7 @@ static const uint8_t string_table[256] = { break; \ } \ /* divide block if next bit set */ \ - if (get_bits1(bitbuf) == 0) \ + if (bitstream_read_bit(bitbuf) == 0) \ break; \ /* add child nodes */ \ list[n++] = list[i]; \ @@ -145,7 +144,7 @@ static const uint8_t string_table[256] = { #define SVQ1_CALC_CODEBOOK_ENTRIES(cbook) \ codebook = (const uint32_t *)cbook[level]; \ if (stages > 0) \ - bit_cache = get_bits(bitbuf, 4 * stages); \ + bit_cache = bitstream_read(bitbuf, 4 * stages); \ /* calculate codebook entries for this vector */ \ for (j = 0; j < stages; j++) { \ entries[j] = (((bit_cache >> (4 * (stages - j - 1))) & 0xF) + \ @@ -154,7 +153,7 @@ static const uint8_t string_table[256] = { mean -= stages * 128; \ n4 = mean + (mean >> 31) << 16 | (mean & 0xFFFF); -static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, +static int svq1_decode_block_intra(BitstreamContext *bitbuf, uint8_t *pixels, int pitch) { uint32_t bit_cache; @@ -180,7 +179,7 @@ static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, height = 1 << ((3 + level) / 2); /* get number of stages (-1 skips vector, 0 for mean only) */ - stages = get_vlc2(bitbuf, svq1_intra_multistage[level].table, 3, 3) - 1; + stages = bitstream_read_vlc(bitbuf, svq1_intra_multistage[level].table, 3, 3) - 1; if (stages == -1) { for (y = 0; y < height; y++) @@ -195,7 +194,7 @@ static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, return AVERROR_INVALIDDATA; /* invalid vector */ } - mean = get_vlc2(bitbuf, svq1_intra_mean.table, 8, 3); + mean = bitstream_read_vlc(bitbuf, svq1_intra_mean.table, 8, 3); if (stages == 0) { for (y = 0; y < height; y++) @@ -219,7 +218,7 @@ static int svq1_decode_block_intra(GetBitContext *bitbuf, uint8_t *pixels, return 0; } -static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pixels, +static int svq1_decode_block_non_intra(BitstreamContext *bitbuf, uint8_t *pixels, int pitch) { uint32_t bit_cache; @@ -245,7 +244,7 @@ static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pixels, height = 1 << ((3 + level) / 2); /* get number of stages (-1 skips vector, 0 for mean only) */ - stages = get_vlc2(bitbuf, svq1_inter_multistage[level].table, 3, 2) - 1; + stages = bitstream_read_vlc(bitbuf, svq1_inter_multistage[level].table, 3, 2) - 1; if (stages == -1) continue; /* skip vector */ @@ -257,7 +256,7 @@ static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pixels, return AVERROR_INVALIDDATA; /* invalid vector */ } - mean = get_vlc2(bitbuf, svq1_inter_mean.table, 9, 3) - 256; + mean = bitstream_read_vlc(bitbuf, svq1_inter_mean.table, 9, 3) - 256; SVQ1_CALC_CODEBOOK_ENTRIES(ff_svq1_inter_codebooks); @@ -277,7 +276,7 @@ static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pixels, return 0; } -static int svq1_decode_motion_vector(GetBitContext *bitbuf, svq1_pmv *mv, +static int svq1_decode_motion_vector(BitstreamContext *bitbuf, svq1_pmv *mv, svq1_pmv **pmv) { int diff; @@ -285,11 +284,11 @@ static int svq1_decode_motion_vector(GetBitContext *bitbuf, svq1_pmv *mv, for (i = 0; i < 2; i++) { /* get motion code */ - diff = get_vlc2(bitbuf, svq1_motion_component.table, 7, 2); + diff = bitstream_read_vlc(bitbuf, svq1_motion_component.table, 7, 2); if (diff < 0) return AVERROR_INVALIDDATA; else if (diff) { - if (get_bits1(bitbuf)) + if (bitstream_read_bit(bitbuf)) diff = -diff; } @@ -320,7 +319,7 @@ static void svq1_skip_block(uint8_t *current, uint8_t *previous, } } -static int svq1_motion_inter_block(HpelDSPContext *hdsp, GetBitContext *bitbuf, +static int svq1_motion_inter_block(HpelDSPContext *hdsp, BitstreamContext *bitbuf, uint8_t *current, uint8_t *previous, int pitch, svq1_pmv *motion, int x, int y, int width, int height) @@ -364,7 +363,7 @@ static int svq1_motion_inter_block(HpelDSPContext *hdsp, GetBitContext *bitbuf, return 0; } -static int svq1_motion_inter_4v_block(HpelDSPContext *hdsp, GetBitContext *bitbuf, +static int svq1_motion_inter_4v_block(HpelDSPContext *hdsp, BitstreamContext *bitbuf, uint8_t *current, uint8_t *previous, int pitch, svq1_pmv *motion, int x, int y, int width, int height) @@ -446,7 +445,7 @@ static int svq1_motion_inter_4v_block(HpelDSPContext *hdsp, GetBitContext *bitbu } static int svq1_decode_delta_block(AVCodecContext *avctx, HpelDSPContext *hdsp, - GetBitContext *bitbuf, + BitstreamContext *bitbuf, uint8_t *current, uint8_t *previous, int pitch, svq1_pmv *motion, int x, int y, int width, int height) @@ -455,7 +454,7 @@ static int svq1_decode_delta_block(AVCodecContext *avctx, HpelDSPContext *hdsp, int result = 0; /* get block type */ - block_type = get_vlc2(bitbuf, svq1_block_type.table, 2, 2); + block_type = bitstream_read_vlc(bitbuf, svq1_block_type.table, 2, 2); /* reset motion vectors */ if (block_type == SVQ1_BLOCK_SKIP || block_type == SVQ1_BLOCK_INTRA) { @@ -502,16 +501,16 @@ static int svq1_decode_delta_block(AVCodecContext *avctx, HpelDSPContext *hdsp, return result; } -static void svq1_parse_string(GetBitContext *bitbuf, uint8_t *out) +static void svq1_parse_string(BitstreamContext *bitbuf, uint8_t *out) { uint8_t seed; int i; - out[0] = get_bits(bitbuf, 8); + out[0] = bitstream_read(bitbuf, 8); seed = string_table[out[0]]; for (i = 1; i <= out[0]; i++) { - out[i] = get_bits(bitbuf, 8) ^ seed; + out[i] = bitstream_read(bitbuf, 8) ^ seed; seed = string_table[out[i] ^ seed]; } } @@ -519,14 +518,14 @@ static void svq1_parse_string(GetBitContext *bitbuf, uint8_t *out) static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) { SVQ1Context *s = avctx->priv_data; - GetBitContext *bitbuf = &s->gb; + BitstreamContext *bitbuf = &s->bc; int frame_size_code; - skip_bits(bitbuf, 8); /* temporal_reference */ + bitstream_skip(bitbuf, 8); /* temporal_reference */ /* frame type */ s->nonref = 0; - switch (get_bits(bitbuf, 2)) { + switch (bitstream_read(bitbuf, 2)) { case 0: frame->pict_type = AV_PICTURE_TYPE_I; break; @@ -543,7 +542,7 @@ static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) if (frame->pict_type == AV_PICTURE_TYPE_I) { /* unknown fields */ if (s->frame_code == 0x50 || s->frame_code == 0x60) { - int csum = get_bits(bitbuf, 16); + int csum = bitstream_read(bitbuf, 16); csum = ff_svq1_packet_checksum(bitbuf->buffer, bitbuf->size_in_bits >> 3, @@ -562,17 +561,17 @@ static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) "embedded message: \"%s\"\n", (char *)msg); } - skip_bits(bitbuf, 2); - skip_bits(bitbuf, 2); - skip_bits1(bitbuf); + bitstream_skip(bitbuf, 2); + bitstream_skip(bitbuf, 2); + bitstream_skip(bitbuf, 1); /* load frame size */ - frame_size_code = get_bits(bitbuf, 3); + frame_size_code = bitstream_read(bitbuf, 3); if (frame_size_code == 7) { /* load width, height (12 bits each) */ - s->width = get_bits(bitbuf, 12); - s->height = get_bits(bitbuf, 12); + s->width = bitstream_read(bitbuf, 12); + s->height = bitstream_read(bitbuf, 12); if (!s->width || !s->height) return AVERROR_INVALIDDATA; @@ -584,22 +583,22 @@ static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) } /* unknown fields */ - if (get_bits1(bitbuf) == 1) { - skip_bits1(bitbuf); /* use packet checksum if (1) */ - skip_bits1(bitbuf); /* component checksums after image data if (1) */ + if (bitstream_read_bit(bitbuf) == 1) { + bitstream_skip(bitbuf, 1); /* use packet checksum if (1) */ + bitstream_skip(bitbuf, 1); /* component checksums after image data if (1) */ - if (get_bits(bitbuf, 2) != 0) + if (bitstream_read(bitbuf, 2) != 0) return AVERROR_INVALIDDATA; } - if (get_bits1(bitbuf) == 1) { - skip_bits1(bitbuf); - skip_bits(bitbuf, 4); - skip_bits1(bitbuf); - skip_bits(bitbuf, 2); + if (bitstream_read_bit(bitbuf) == 1) { + bitstream_skip(bitbuf, 1); + bitstream_skip(bitbuf, 4); + bitstream_skip(bitbuf, 1); + bitstream_skip(bitbuf, 2); - while (get_bits1(bitbuf) == 1) - skip_bits(bitbuf, 8); + while (bitstream_read_bit(bitbuf) == 1) + bitstream_skip(bitbuf, 8); } return 0; @@ -617,10 +616,10 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data, svq1_pmv *pmv; /* initialize bit buffer */ - init_get_bits(&s->gb, buf, buf_size * 8); + bitstream_init(&s->bc, buf, buf_size * 8); /* decode frame header */ - s->frame_code = get_bits(&s->gb, 22); + s->frame_code = bitstream_read(&s->bc, 22); if ((s->frame_code & ~0x70) || !(s->frame_code & 0x60)) return AVERROR_INVALIDDATA; @@ -642,13 +641,14 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data, memcpy(s->pkt_swapped, buf, buf_size); buf = s->pkt_swapped; - init_get_bits(&s->gb, buf, buf_size * 8); - skip_bits(&s->gb, 22); src = (uint32_t *)(s->pkt_swapped + 4); for (i = 0; i < 4; i++) src[i] = ((src[i] << 16) | (src[i] >> 16)) ^ src[7 - i]; + + bitstream_init(&s->bc, buf, buf_size * 8); + bitstream_skip(&s->bc, 22); } result = svq1_decode_frame_header(avctx, cur); @@ -695,7 +695,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data, /* keyframe */ for (y = 0; y < height; y += 16) { for (x = 0; x < width; x += 16) { - result = svq1_decode_block_intra(&s->gb, ¤t[x], + result = svq1_decode_block_intra(&s->bc, ¤t[x], linesize); if (result != 0) { av_log(avctx, AV_LOG_INFO, @@ -721,7 +721,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, void *data, for (y = 0; y < height; y += 16) { for (x = 0; x < width; x += 16) { result = svq1_decode_delta_block(avctx, &s->hdsp, - &s->gb, ¤t[x], + &s->bc, ¤t[x], previous, linesize, pmv, x, y, width, height); if (result != 0) { diff --git a/libavcodec/svq1enc.h b/libavcodec/svq1enc.h index 62e8bb2699..64cddfe2c1 100644 --- a/libavcodec/svq1enc.h +++ b/libavcodec/svq1enc.h @@ -25,7 +25,6 @@ #include "libavutil/frame.h" #include "avcodec.h" -#include "get_bits.h" #include "hpeldsp.h" #include "me_cmp.h" #include "mpegvideo.h" @@ -42,7 +41,6 @@ typedef struct SVQ1EncContext { AVFrame *current_picture; AVFrame *last_picture; PutBitContext pb; - GetBitContext gb; /* Some compression statistics */ enum AVPictureType pict_type; |