---
libavcodec/wmv2dec.c | 100 ++++++++++++++++++++++++++-------------------------
1 file changed, 52 insertions(+), 48 deletions(-)
diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c
index e1f86d8..7dc3688 100644
--- a/libavcodec/wmv2dec.c
+++ b/libavcodec/wmv2dec.c
@@ -19,6 +19,7 @@
*/
#include "avcodec.h"
+#include "bitstream.h"
#include "h263.h"
#include "internal.h"
#include "intrax8.h"
@@ -36,7 +37,7 @@ static void parse_mb_skip(Wmv2Context *w)
MpegEncContext *const s = &w->s;
uint32_t *const mb_type = s->current_picture_ptr->mb_type;
- w->skip_type = get_bits(&s->gb, 2);
+ w->skip_type = bitstream_read(&s->bc, 2);
switch (w->skip_type) {
case SKIP_TYPE_NONE:
for (mb_y = 0; mb_y < s->mb_height; mb_y++)
@@ -48,31 +49,34 @@ static void parse_mb_skip(Wmv2Context *w)
for (mb_y = 0; mb_y < s->mb_height; mb_y++)
for (mb_x = 0; mb_x < s->mb_width; mb_x++)
mb_type[mb_y * s->mb_stride + mb_x] =
- (get_bits1(&s->gb) ? MB_TYPE_SKIP : 0) | MB_TYPE_16x16 |
MB_TYPE_L0;
+ (bitstream_read_bit(&s->bc) ? MB_TYPE_SKIP : 0) |
+ MB_TYPE_16x16 | MB_TYPE_L0;
break;
case SKIP_TYPE_ROW:
for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
for (mb_x = 0; mb_x < s->mb_width; mb_x++)
mb_type[mb_y * s->mb_stride + mb_x] =
MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
} else {
for (mb_x = 0; mb_x < s->mb_width; mb_x++)
mb_type[mb_y * s->mb_stride + mb_x] =
- (get_bits1(&s->gb) ? MB_TYPE_SKIP : 0) | MB_TYPE_16x16
| MB_TYPE_L0;
+ (bitstream_read_bit(&s->bc) ? MB_TYPE_SKIP : 0) |
+ MB_TYPE_16x16 | MB_TYPE_L0;
}
}
break;
case SKIP_TYPE_COL:
for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
- if (get_bits1(&s->gb)) {
+ if (bitstream_read_bit(&s->bc)) {
for (mb_y = 0; mb_y < s->mb_height; mb_y++)
mb_type[mb_y * s->mb_stride + mb_x] =
MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
} else {
for (mb_y = 0; mb_y < s->mb_height; mb_y++)
mb_type[mb_y * s->mb_stride + mb_x] =
- (get_bits1(&s->gb) ? MB_TYPE_SKIP : 0) | MB_TYPE_16x16
| MB_TYPE_L0;
+ (bitstream_read_bit(&s->bc) ? MB_TYPE_SKIP : 0) |
+ MB_TYPE_16x16 | MB_TYPE_L0;
}
}
break;
@@ -82,24 +86,24 @@ static void parse_mb_skip(Wmv2Context *w)
static int decode_ext_header(Wmv2Context *w)
{
MpegEncContext *const s = &w->s;
- GetBitContext gb;
+ BitstreamContext bc;
int fps;
int code;
if (s->avctx->extradata_size < 4)
return AVERROR_INVALIDDATA;
- init_get_bits(&gb, s->avctx->extradata, 32);
+ bitstream_init(&bc, s->avctx->extradata, 32);
- fps = get_bits(&gb, 5);
- s->bit_rate = get_bits(&gb, 11) * 1024;
- w->mspel_bit = get_bits1(&gb);
- s->loop_filter = get_bits1(&gb);
- w->abt_flag = get_bits1(&gb);
- w->j_type_bit = get_bits1(&gb);
- w->top_left_mv_flag = get_bits1(&gb);
- w->per_mb_rl_bit = get_bits1(&gb);
- code = get_bits(&gb, 3);
+ fps = bitstream_read(&bc, 5);
+ s->bit_rate = bitstream_read(&bc, 11) * 1024;
+ w->mspel_bit = bitstream_read_bit(&bc);
+ s->loop_filter = bitstream_read_bit(&bc);
+ w->abt_flag = bitstream_read_bit(&bc);
+ w->j_type_bit = bitstream_read_bit(&bc);
+ w->top_left_mv_flag = bitstream_read_bit(&bc);
+ w->per_mb_rl_bit = bitstream_read_bit(&bc);
+ code = bitstream_read(&bc, 3);
if (code == 0)
return AVERROR_INVALIDDATA;
@@ -125,12 +129,12 @@ int ff_wmv2_decode_picture_header(MpegEncContext *s)
if (s->picture_number == 0)
decode_ext_header(w);
- s->pict_type = get_bits1(&s->gb) + 1;
+ s->pict_type = bitstream_read_bit(&s->bc) + 1;
if (s->pict_type == AV_PICTURE_TYPE_I) {
- code = get_bits(&s->gb, 7);
+ code = bitstream_read(&s->bc, 7);
av_log(s->avctx, AV_LOG_DEBUG, "I7:%X/\n", code);
}
- s->chroma_qscale = s->qscale = get_bits(&s->gb, 5);
+ s->chroma_qscale = s->qscale = bitstream_read(&s->bc, 5);
if (s->qscale <= 0)
return AVERROR_INVALIDDATA;
@@ -143,22 +147,22 @@ int
ff_wmv2_decode_secondary_picture_header(MpegEncContext *s)
if (s->pict_type == AV_PICTURE_TYPE_I) {
if (w->j_type_bit)
- w->j_type = get_bits1(&s->gb);
+ w->j_type = bitstream_read_bit(&s->bc);
else
w->j_type = 0; // FIXME check
if (!w->j_type) {
if (w->per_mb_rl_bit)
- s->per_mb_rl_table = get_bits1(&s->gb);
+ s->per_mb_rl_table = bitstream_read_bit(&s->bc);
else
s->per_mb_rl_table = 0;
if (!s->per_mb_rl_table) {
- s->rl_chroma_table_index = decode012(&s->gb);
- s->rl_table_index = decode012(&s->gb);
+ s->rl_chroma_table_index = bitstream_decode012(&s->bc);
+ s->rl_table_index = bitstream_decode012(&s->bc);
}
- s->dc_table_index = get_bits1(&s->gb);
+ s->dc_table_index = bitstream_read_bit(&s->bc);
}
s->inter_intra_pred = 0;
s->no_rounding = 1;
@@ -173,7 +177,7 @@ int ff_wmv2_decode_secondary_picture_header(MpegEncContext
*s)
w->j_type = 0;
parse_mb_skip(w);
- cbp_index = decode012(&s->gb);
+ cbp_index = bitstream_decode012(&s->bc);
if (s->qscale <= 10) {
int map[3] = { 0, 2, 1 };
w->cbp_table_index = map[cbp_index];
@@ -186,28 +190,28 @@ int
ff_wmv2_decode_secondary_picture_header(MpegEncContext *s)
}
if (w->mspel_bit)
- s->mspel = get_bits1(&s->gb);
+ s->mspel = bitstream_read_bit(&s->bc);
else
s->mspel = 0; // FIXME check
if (w->abt_flag) {
- w->per_mb_abt = get_bits1(&s->gb) ^ 1;
+ w->per_mb_abt = bitstream_read_bit(&s->bc) ^ 1;
if (!w->per_mb_abt)
- w->abt_type = decode012(&s->gb);
+ w->abt_type = bitstream_decode012(&s->bc);
}
if (w->per_mb_rl_bit)
- s->per_mb_rl_table = get_bits1(&s->gb);
+ s->per_mb_rl_table = bitstream_read_bit(&s->bc);
else
s->per_mb_rl_table = 0;
if (!s->per_mb_rl_table) {
- s->rl_table_index = decode012(&s->gb);
+ s->rl_table_index = bitstream_decode012(&s->bc);
s->rl_chroma_table_index = s->rl_table_index;
}
- s->dc_table_index = get_bits1(&s->gb);
- s->mv_table_index = get_bits1(&s->gb);
+ s->dc_table_index = bitstream_read_bit(&s->bc);
+ s->mv_table_index = bitstream_read_bit(&s->bc);
s->inter_intra_pred = 0; // (s->width * s->height < 320 * 240 &&
s->bit_rate <= II_BITRATE);
s->no_rounding ^= 1;
@@ -229,7 +233,7 @@ int ff_wmv2_decode_secondary_picture_header(MpegEncContext
*s)
if (w->j_type) {
ff_intrax8_decode_picture(&w->x8, &s->current_picture,
- &s->gb, &s->mb_x, &s->mb_y,
+ &s->bc, &s->mb_x, &s->mb_y,
2 * s->qscale, (s->qscale - 1) | 1,
s->loop_filter, s->low_delay);
@@ -253,7 +257,7 @@ static inline int wmv2_decode_motion(Wmv2Context *w, int
*mx_ptr, int *my_ptr)
return ret;
if ((((*mx_ptr) | (*my_ptr)) & 1) && s->mspel)
- w->hshift = get_bits1(&s->gb);
+ w->hshift = bitstream_read_bit(&s->bc);
else
w->hshift = 0;
@@ -281,7 +285,7 @@ static int16_t *wmv2_pred_motion(Wmv2Context *w, int *px,
int *py)
diff = 0;
if (diff >= 8)
- type = get_bits1(&s->gb);
+ type = bitstream_read_bit(&s->bc);
else
type = 2;
@@ -318,7 +322,7 @@ static inline int wmv2_decode_inter_block(Wmv2Context *w,
int16_t *block,
}
if (w->per_block_abt)
- w->abt_type = decode012(&s->gb);
+ w->abt_type = bitstream_decode012(&s->bc);
w->abt_type_table[n] = w->abt_type;
if (w->abt_type) {
@@ -326,7 +330,7 @@ static inline int wmv2_decode_inter_block(Wmv2Context *w,
int16_t *block,
const uint8_t *scantable = w->abt_scantable[w->abt_type - 1].scantable;
// const uint8_t *scantable = w->abt_type - 1 ?
w->abt_scantable[1].permutated : w->abt_scantable[0].scantable;
- sub_cbp = sub_cbp_table[decode012(&s->gb)];
+ sub_cbp = sub_cbp_table[bitstream_decode012(&s->bc)];
if (sub_cbp & 1)
if ((ret = ff_msmpeg4_decode_block(s, block, n, 1, scantable)) < 0)
@@ -369,7 +373,7 @@ int ff_wmv2_decode_mb(MpegEncContext *s, int16_t
block[6][64])
return 0;
}
- code = get_vlc2(&s->gb, ff_mb_non_intra_vlc[w->cbp_table_index].table,
+ code = bitstream_read_vlc(&s->bc,
ff_mb_non_intra_vlc[w->cbp_table_index].table,
MB_NON_INTRA_VLC_BITS, 3);
if (code < 0)
return AVERROR_INVALIDDATA;
@@ -378,7 +382,7 @@ int ff_wmv2_decode_mb(MpegEncContext *s, int16_t
block[6][64])
cbp = code & 0x3f;
} else {
s->mb_intra = 1;
- code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2);
+ code = bitstream_read_vlc(&s->bc, ff_msmp4_mb_i_vlc.table,
MB_INTRA_VLC_BITS, 2);
if (code < 0) {
av_log(s->avctx, AV_LOG_ERROR,
"II-cbp illegal at %d %d\n", s->mb_x, s->mb_y);
@@ -404,14 +408,14 @@ int ff_wmv2_decode_mb(MpegEncContext *s, int16_t
block[6][64])
if (cbp) {
s->bdsp.clear_blocks(s->block[0]);
if (s->per_mb_rl_table) {
- s->rl_table_index = decode012(&s->gb);
+ s->rl_table_index = bitstream_decode012(&s->bc);
s->rl_chroma_table_index = s->rl_table_index;
}
if (w->abt_flag && w->per_mb_abt) {
- w->per_block_abt = get_bits1(&s->gb);
+ w->per_block_abt = bitstream_read_bit(&s->bc);
if (!w->per_block_abt)
- w->abt_type = decode012(&s->gb);
+ w->abt_type = bitstream_decode012(&s->bc);
} else
w->per_block_abt = 0;
}
@@ -437,16 +441,16 @@ int ff_wmv2_decode_mb(MpegEncContext *s, int16_t
block[6][64])
ff_dlog(s->avctx, "%d%d ", s->inter_intra_pred, cbp);
ff_dlog(s->avctx, "I at %d %d %d %06X\n", s->mb_x, s->mb_y,
((cbp & 3) ? 1 : 0) + ((cbp & 0x3C) ? 2 : 0),
- show_bits(&s->gb, 24));
- s->ac_pred = get_bits1(&s->gb);
+ bitstream_peek(&s->bc, 24));
+ s->ac_pred = bitstream_read_bit(&s->bc);
if (s->inter_intra_pred) {
- s->h263_aic_dir = get_vlc2(&s->gb, ff_inter_intra_vlc.table,
- INTER_INTRA_VLC_BITS, 1);
+ s->h263_aic_dir = bitstream_read_vlc(&s->bc,
ff_inter_intra_vlc.table,
+ INTER_INTRA_VLC_BITS, 1);
ff_dlog(s->avctx, "%d%d %d %d/",
s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y);
}
if (s->per_mb_rl_table && cbp) {
- s->rl_table_index = decode012(&s->gb);
+ s->rl_table_index = bitstream_decode012(&s->bc);
s->rl_chroma_table_index = s->rl_table_index;
}
--
2.1.4
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel