1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

escape130: Convert to the new bitstream reader

Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
Alexandra Hájková 2016-04-09 20:47:04 +02:00 committed by Anton Khirnov
parent c43eb73172
commit 2906d8dcb3

View File

@ -24,7 +24,7 @@
#define BITSTREAM_READER_LE #define BITSTREAM_READER_LE
#include "avcodec.h" #include "avcodec.h"
#include "get_bits.h" #include "bitstream.h"
#include "internal.h" #include "internal.h"
typedef struct Escape130Context { typedef struct Escape130Context {
@ -163,23 +163,23 @@ static av_cold int escape130_decode_close(AVCodecContext *avctx)
return 0; return 0;
} }
static int decode_skip_count(GetBitContext* gb) static int decode_skip_count(BitstreamContext *bc)
{ {
int value; int value;
value = get_bits1(gb); value = bitstream_read_bit(bc);
if (value) if (value)
return 0; return 0;
value = get_bits(gb, 3); value = bitstream_read(bc, 3);
if (value) if (value)
return value; return value;
value = get_bits(gb, 8); value = bitstream_read(bc, 8);
if (value) if (value)
return value + 7; return value + 7;
value = get_bits(gb, 15); value = bitstream_read(bc, 15);
if (value) if (value)
return value + 262; return value + 262;
@ -193,7 +193,7 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data,
int buf_size = avpkt->size; int buf_size = avpkt->size;
Escape130Context *s = avctx->priv_data; Escape130Context *s = avctx->priv_data;
AVFrame *pic = data; AVFrame *pic = data;
GetBitContext gb; BitstreamContext bc;
int ret; int ret;
uint8_t *old_y, *old_cb, *old_cr, uint8_t *old_y, *old_cb, *old_cr,
@ -216,7 +216,7 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data,
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
return ret; return ret;
init_get_bits(&gb, buf + 16, (buf_size - 16) * 8); bitstream_init(&bc, buf + 16, (buf_size - 16) * 8);
new_y = s->new_y; new_y = s->new_y;
new_cb = s->new_u; new_cb = s->new_u;
@ -235,7 +235,7 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data,
// Note that this call will make us skip the rest of the blocks // Note that this call will make us skip the rest of the blocks
// if the frame ends prematurely. // if the frame ends prematurely.
if (skip == -1) if (skip == -1)
skip = decode_skip_count(&gb); skip = decode_skip_count(&bc);
if (skip == -1) { if (skip == -1) {
av_log(avctx, AV_LOG_ERROR, "Error decoding skip value\n"); av_log(avctx, AV_LOG_ERROR, "Error decoding skip value\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
@ -250,31 +250,31 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data,
cb = old_cb[0]; cb = old_cb[0];
cr = old_cr[0]; cr = old_cr[0];
} else { } else {
if (get_bits1(&gb)) { if (bitstream_read_bit(&bc)) {
unsigned sign_selector = get_bits(&gb, 6); unsigned sign_selector = bitstream_read(&bc, 6);
unsigned difference_selector = get_bits(&gb, 2); unsigned difference_selector = bitstream_read(&bc, 2);
y_avg = 2 * get_bits(&gb, 5); y_avg = 2 * bitstream_read(&bc, 5);
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
y[i] = av_clip(y_avg + offset_table[difference_selector] * y[i] = av_clip(y_avg + offset_table[difference_selector] *
sign_table[sign_selector][i], 0, 63); sign_table[sign_selector][i], 0, 63);
} }
} else if (get_bits1(&gb)) { } else if (bitstream_read_bit(&bc)) {
if (get_bits1(&gb)) { if (bitstream_read_bit(&bc)) {
y_avg = get_bits(&gb, 6); y_avg = bitstream_read(&bc, 6);
} else { } else {
unsigned adjust_index = get_bits(&gb, 3); unsigned adjust_index = bitstream_read(&bc, 3);
y_avg = (y_avg + luma_adjust[adjust_index]) & 63; y_avg = (y_avg + luma_adjust[adjust_index]) & 63;
} }
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
y[i] = y_avg; y[i] = y_avg;
} }
if (get_bits1(&gb)) { if (bitstream_read_bit(&bc)) {
if (get_bits1(&gb)) { if (bitstream_read_bit(&bc)) {
cb = get_bits(&gb, 5); cb = bitstream_read(&bc, 5);
cr = get_bits(&gb, 5); cr = bitstream_read(&bc, 5);
} else { } else {
unsigned adjust_index = get_bits(&gb, 3); unsigned adjust_index = bitstream_read(&bc, 3);
cb = (cb + chroma_adjust[0][adjust_index]) & 31; cb = (cb + chroma_adjust[0][adjust_index]) & 31;
cr = (cr + chroma_adjust[1][adjust_index]) & 31; cr = (cr + chroma_adjust[1][adjust_index]) & 31;
} }
@ -333,7 +333,7 @@ static int escape130_decode_frame(AVCodecContext *avctx, void *data,
} }
ff_dlog(avctx, "Frame data: provided %d bytes, used %d bytes\n", ff_dlog(avctx, "Frame data: provided %d bytes, used %d bytes\n",
buf_size, get_bits_count(&gb) >> 3); buf_size, bitstream_tell(&bc) >> 3);
FFSWAP(uint8_t*, s->old_y, s->new_y); FFSWAP(uint8_t*, s->old_y, s->new_y);
FFSWAP(uint8_t*, s->old_u, s->new_u); FFSWAP(uint8_t*, s->old_u, s->new_u);