mirror of https://git.ffmpeg.org/ffmpeg.git
4xm: Convert to the new bitstream reader
Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
parent
b25180801b
commit
ed006ae4e2
|
@ -29,11 +29,12 @@
|
|||
#include "libavutil/frame.h"
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "bitstream.h"
|
||||
#include "blockdsp.h"
|
||||
#include "bswapdsp.h"
|
||||
#include "bytestream.h"
|
||||
#include "get_bits.h"
|
||||
#include "internal.h"
|
||||
|
||||
#define BLOCK_TYPE_VLC_BITS 5
|
||||
|
@ -136,8 +137,8 @@ typedef struct FourXContext {
|
|||
BswapDSPContext bbdsp;
|
||||
uint16_t *frame_buffer;
|
||||
uint16_t *last_frame_buffer;
|
||||
GetBitContext pre_gb; ///< ac/dc prefix
|
||||
GetBitContext gb;
|
||||
BitstreamContext pre_bc; // ac/dc prefix
|
||||
BitstreamContext bc;
|
||||
GetByteContext g;
|
||||
GetByteContext g2;
|
||||
int mv[256];
|
||||
|
@ -352,8 +353,8 @@ static int decode_p_block(FourXContext *f, uint16_t *dst, uint16_t *src,
|
|||
return AVERROR_INVALIDDATA;
|
||||
|
||||
h = 1 << log2h;
|
||||
code = get_vlc2(&f->gb, block_type_vlc[1 - (f->version > 1)][index].table,
|
||||
BLOCK_TYPE_VLC_BITS, 1);
|
||||
code = bitstream_read_vlc(&f->bc, block_type_vlc[1 - (f->version > 1)][index].table,
|
||||
BLOCK_TYPE_VLC_BITS, 1);
|
||||
if (code < 0 || code > 6)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
|
@ -453,7 +454,7 @@ static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length)
|
|||
bitstream_size / 4);
|
||||
memset((uint8_t*)f->bitstream_buffer + bitstream_size,
|
||||
0, AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
init_get_bits(&f->gb, f->bitstream_buffer, 8 * bitstream_size);
|
||||
bitstream_init(&f->bc, f->bitstream_buffer, 8 * bitstream_size);
|
||||
|
||||
wordstream_offset = extra + bitstream_size;
|
||||
bytestream_offset = extra + bitstream_size + wordstream_size;
|
||||
|
@ -484,19 +485,19 @@ static int decode_i_block(FourXContext *f, int16_t *block)
|
|||
int code, i, j, level, val;
|
||||
|
||||
/* DC coef */
|
||||
val = get_vlc2(&f->pre_gb, f->pre_vlc.table, ACDC_VLC_BITS, 3);
|
||||
val = bitstream_read_vlc(&f->pre_bc, f->pre_vlc.table, ACDC_VLC_BITS, 3);
|
||||
if (val >> 4)
|
||||
av_log(f->avctx, AV_LOG_ERROR, "error dc run != 0\n");
|
||||
|
||||
if (val)
|
||||
val = get_xbits(&f->gb, val);
|
||||
val = bitstream_read_xbits(&f->bc, val);
|
||||
|
||||
val = val * dequant_table[0] + f->last_dc;
|
||||
f->last_dc = block[0] = val;
|
||||
/* AC coefs */
|
||||
i = 1;
|
||||
for (;;) {
|
||||
code = get_vlc2(&f->pre_gb, f->pre_vlc.table, ACDC_VLC_BITS, 3);
|
||||
code = bitstream_read_vlc(&f->pre_bc, f->pre_vlc.table, ACDC_VLC_BITS, 3);
|
||||
|
||||
/* EOB */
|
||||
if (code == 0)
|
||||
|
@ -504,7 +505,7 @@ static int decode_i_block(FourXContext *f, int16_t *block)
|
|||
if (code == 0xf0) {
|
||||
i += 16;
|
||||
} else {
|
||||
level = get_xbits(&f->gb, code & 0xf);
|
||||
level = bitstream_read_xbits(&f->bc, code & 0xf);
|
||||
i += code >> 4;
|
||||
if (i >= 64) {
|
||||
av_log(f->avctx, AV_LOG_ERROR, "run %d oveflow\n", i);
|
||||
|
@ -764,7 +765,7 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length)
|
|||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
init_get_bits(&f->gb, buf + 4, 8 * bitstream_size);
|
||||
bitstream_init(&f->bc, buf + 4, 8 * bitstream_size);
|
||||
|
||||
prestream_size = length + buf - prestream;
|
||||
|
||||
|
@ -776,7 +777,7 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length)
|
|||
prestream_size / 4);
|
||||
memset((uint8_t*)f->bitstream_buffer + prestream_size,
|
||||
0, AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
init_get_bits(&f->pre_gb, f->bitstream_buffer, 8 * prestream_size);
|
||||
bitstream_init(&f->pre_bc, f->bitstream_buffer, 8 * prestream_size);
|
||||
|
||||
f->last_dc = 0 * 128 * 8 * 8;
|
||||
|
||||
|
@ -789,7 +790,7 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length)
|
|||
}
|
||||
}
|
||||
|
||||
if (get_vlc2(&f->pre_gb, f->pre_vlc.table, ACDC_VLC_BITS, 3) != 256)
|
||||
if (bitstream_read_vlc(&f->pre_bc, f->pre_vlc.table, ACDC_VLC_BITS, 3) != 256)
|
||||
av_log(f->avctx, AV_LOG_ERROR, "end mismatch\n");
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue