summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandra Hájková <alexandra@khirnov.net>2016-04-13 20:25:22 +0200
committerAlexandra Hájková <alexandra@khirnov.net>2016-05-22 16:47:59 +0200
commitc3ac98ee2be3f27f98fe25fe1e45d5061fd00034 (patch)
treee0f51037b7e12c8f96df117ff6474862a60c7870
parent52dbd79a80a34869a3f6494c1b427005e4026c4f (diff)
svq1dec: convert to the new bitstream reader
-rw-r--r--libavcodec/svq1dec.c94
-rw-r--r--libavcodec/svq1enc.h2
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, &current[x],
+ result = svq1_decode_block_intra(&s->bc, &current[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, &current[x],
+ &s->bc, &current[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;