mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-09-20 21:36:48 +00:00
vble: Convert to the new bitstream reader
This commit is contained in:
parent
104a4289f9
commit
e5bdfc6790
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#define BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "bitstream.h"
|
||||||
#include "huffyuvdsp.h"
|
#include "huffyuvdsp.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "mathops.h"
|
#include "mathops.h"
|
||||||
@ -41,18 +41,18 @@ typedef struct VBLEContext {
|
|||||||
uint8_t *val; /* First holds the lengths of vlc symbols and then their values */
|
uint8_t *val; /* First holds the lengths of vlc symbols and then their values */
|
||||||
} VBLEContext;
|
} VBLEContext;
|
||||||
|
|
||||||
static uint8_t vble_read_reverse_unary(GetBitContext *gb)
|
static uint8_t vble_read_reverse_unary(BitstreamContext *bc)
|
||||||
{
|
{
|
||||||
/* At most we need to read 9 bits total to get indices up to 8 */
|
/* At most we need to read 9 bits total to get indices up to 8 */
|
||||||
uint8_t val = show_bits(gb, 8);
|
uint8_t val = bitstream_peek(bc, 8);
|
||||||
|
|
||||||
if (val) {
|
if (val) {
|
||||||
val = 7 - av_log2_16bit(ff_reverse[val]);
|
val = 7 - av_log2_16bit(ff_reverse[val]);
|
||||||
skip_bits(gb, val + 1);
|
bitstream_skip(bc, val + 1);
|
||||||
return val;
|
return val;
|
||||||
} else {
|
} else {
|
||||||
skip_bits(gb, 8);
|
bitstream_skip(bc, 8);
|
||||||
if (get_bits1(gb))
|
if (bitstream_read_bit(bc))
|
||||||
return 8;
|
return 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,13 +60,13 @@ static uint8_t vble_read_reverse_unary(GetBitContext *gb)
|
|||||||
return UINT8_MAX;
|
return UINT8_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vble_unpack(VBLEContext *ctx, GetBitContext *gb)
|
static int vble_unpack(VBLEContext *ctx, BitstreamContext *bc)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Read all the lengths in first */
|
/* Read all the lengths in first */
|
||||||
for (i = 0; i < ctx->size; i++) {
|
for (i = 0; i < ctx->size; i++) {
|
||||||
ctx->val[i] = vble_read_reverse_unary(gb);
|
ctx->val[i] = vble_read_reverse_unary(bc);
|
||||||
|
|
||||||
if (ctx->val[i] == UINT8_MAX)
|
if (ctx->val[i] == UINT8_MAX)
|
||||||
return -1;
|
return -1;
|
||||||
@ -74,12 +74,12 @@ static int vble_unpack(VBLEContext *ctx, GetBitContext *gb)
|
|||||||
|
|
||||||
for (i = 0; i < ctx->size; i++) {
|
for (i = 0; i < ctx->size; i++) {
|
||||||
/* Check we have enough bits left */
|
/* Check we have enough bits left */
|
||||||
if (get_bits_left(gb) < ctx->val[i])
|
if (bitstream_bits_left(bc) < ctx->val[i])
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* get_bits can't take a length of 0 */
|
/* get_bits can't take a length of 0 */
|
||||||
if (ctx->val[i])
|
if (ctx->val[i])
|
||||||
ctx->val[i] = (1 << ctx->val[i]) + get_bits(gb, ctx->val[i]) - 1;
|
ctx->val[i] = (1 << ctx->val[i]) + bitstream_read(bc, ctx->val[i]) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -118,7 +118,7 @@ static int vble_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
|
|||||||
{
|
{
|
||||||
VBLEContext *ctx = avctx->priv_data;
|
VBLEContext *ctx = avctx->priv_data;
|
||||||
AVFrame *pic = data;
|
AVFrame *pic = data;
|
||||||
GetBitContext gb;
|
BitstreamContext bc;
|
||||||
const uint8_t *src = avpkt->data;
|
const uint8_t *src = avpkt->data;
|
||||||
int version;
|
int version;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
@ -140,10 +140,10 @@ static int vble_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
|
|||||||
if (version != 1)
|
if (version != 1)
|
||||||
av_log(avctx, AV_LOG_WARNING, "Unsupported VBLE Version: %d\n", version);
|
av_log(avctx, AV_LOG_WARNING, "Unsupported VBLE Version: %d\n", version);
|
||||||
|
|
||||||
init_get_bits(&gb, src + 4, (avpkt->size - 4) * 8);
|
bitstream_init(&bc, src + 4, (avpkt->size - 4) * 8);
|
||||||
|
|
||||||
/* Unpack */
|
/* Unpack */
|
||||||
if (vble_unpack(ctx, &gb) < 0) {
|
if (vble_unpack(ctx, &bc) < 0) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Invalid Code\n");
|
av_log(avctx, AV_LOG_ERROR, "Invalid Code\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user