mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-27 18:02:11 +00:00
lagarith: Convert to the new bitstream reader
This commit is contained in:
parent
c3defda0d8
commit
6fad5abcad
@ -28,7 +28,7 @@
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "get_bits.h"
|
||||
#include "bitstream.h"
|
||||
#include "mathops.h"
|
||||
#include "huffyuvdsp.h"
|
||||
#include "lagarithrac.h"
|
||||
@ -101,7 +101,7 @@ static uint8_t lag_calc_zero_run(int8_t x)
|
||||
return (x << 1) ^ (x >> 7);
|
||||
}
|
||||
|
||||
static int lag_decode_prob(GetBitContext *gb, uint32_t *value)
|
||||
static int lag_decode_prob(BitstreamContext *bc, uint32_t *value)
|
||||
{
|
||||
static const uint8_t series[] = { 1, 2, 3, 5, 8, 13, 21 };
|
||||
int i;
|
||||
@ -114,7 +114,7 @@ static int lag_decode_prob(GetBitContext *gb, uint32_t *value)
|
||||
if (prevbit && bit)
|
||||
break;
|
||||
prevbit = bit;
|
||||
bit = get_bits1(gb);
|
||||
bit = bitstream_read_bit(bc);
|
||||
if (bit && !prevbit)
|
||||
bits += series[i];
|
||||
}
|
||||
@ -127,7 +127,7 @@ static int lag_decode_prob(GetBitContext *gb, uint32_t *value)
|
||||
return 0;
|
||||
}
|
||||
|
||||
val = get_bits_long(gb, bits);
|
||||
val = bitstream_read(bc, bits);
|
||||
val |= 1 << bits;
|
||||
|
||||
*value = val - 1;
|
||||
@ -135,7 +135,7 @@ static int lag_decode_prob(GetBitContext *gb, uint32_t *value)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lag_read_prob_header(lag_rac *rac, GetBitContext *gb)
|
||||
static int lag_read_prob_header(lag_rac *rac, BitstreamContext *bc)
|
||||
{
|
||||
int i, j, scale_factor;
|
||||
unsigned prob, cumulative_target;
|
||||
@ -146,7 +146,7 @@ static int lag_read_prob_header(lag_rac *rac, GetBitContext *gb)
|
||||
rac->prob[257] = UINT_MAX;
|
||||
/* Read probabilities from bitstream */
|
||||
for (i = 1; i < 257; i++) {
|
||||
if (lag_decode_prob(gb, &rac->prob[i]) < 0) {
|
||||
if (lag_decode_prob(bc, &rac->prob[i]) < 0) {
|
||||
av_log(rac->avctx, AV_LOG_ERROR, "Invalid probability encountered.\n");
|
||||
return -1;
|
||||
}
|
||||
@ -156,7 +156,7 @@ static int lag_read_prob_header(lag_rac *rac, GetBitContext *gb)
|
||||
}
|
||||
cumul_prob += rac->prob[i];
|
||||
if (!rac->prob[i]) {
|
||||
if (lag_decode_prob(gb, &prob)) {
|
||||
if (lag_decode_prob(bc, &prob)) {
|
||||
av_log(rac->avctx, AV_LOG_ERROR, "Invalid probability run encountered.\n");
|
||||
return -1;
|
||||
}
|
||||
@ -422,7 +422,7 @@ static int lag_decode_arith_plane(LagarithContext *l, uint8_t *dst,
|
||||
uint32_t length;
|
||||
uint32_t offset = 1;
|
||||
int esc_count = src[0];
|
||||
GetBitContext gb;
|
||||
BitstreamContext bc;
|
||||
lag_rac rac;
|
||||
const uint8_t *src_end = src + src_size;
|
||||
|
||||
@ -436,12 +436,12 @@ static int lag_decode_arith_plane(LagarithContext *l, uint8_t *dst,
|
||||
offset += 4;
|
||||
}
|
||||
|
||||
init_get_bits(&gb, src + offset, src_size * 8);
|
||||
bitstream_init(&bc, src + offset, src_size * 8);
|
||||
|
||||
if (lag_read_prob_header(&rac, &gb) < 0)
|
||||
if (lag_read_prob_header(&rac, &bc) < 0)
|
||||
return -1;
|
||||
|
||||
ff_lag_rac_init(&rac, &gb, length - stride);
|
||||
ff_lag_rac_init(&rac, &bc, length - stride);
|
||||
|
||||
for (i = 0; i < height; i++)
|
||||
read += lag_decode_line(l, &rac, dst + (i * stride), width,
|
||||
|
@ -27,20 +27,20 @@
|
||||
* @author David Conrad
|
||||
*/
|
||||
|
||||
#include "get_bits.h"
|
||||
#include "bitstream.h"
|
||||
#include "lagarithrac.h"
|
||||
|
||||
void ff_lag_rac_init(lag_rac *l, GetBitContext *gb, int length)
|
||||
void ff_lag_rac_init(lag_rac *l, BitstreamContext *bc, int length)
|
||||
{
|
||||
int i, j, left;
|
||||
|
||||
/* According to reference decoder "1st byte is garbage",
|
||||
* however, it gets skipped by the call to align_get_bits()
|
||||
* however, it gets skipped by the call to bitstream_align()
|
||||
*/
|
||||
align_get_bits(gb);
|
||||
left = get_bits_left(gb) >> 3;
|
||||
bitstream_align(bc);
|
||||
left = bitstream_bits_left(bc) >> 3;
|
||||
l->bytestream_start =
|
||||
l->bytestream = gb->buffer + get_bits_count(gb) / 8;
|
||||
l->bytestream = bc->buffer + bitstream_tell(bc) / 8;
|
||||
l->bytestream_end = l->bytestream_start + FFMIN(length, left);
|
||||
|
||||
l->range = 0x80;
|
||||
|
@ -31,10 +31,12 @@
|
||||
#define AVCODEC_LAGARITHRAC_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "get_bits.h"
|
||||
#include "bitstream.h"
|
||||
|
||||
typedef struct lag_rac {
|
||||
AVCodecContext *avctx;
|
||||
@ -51,7 +53,7 @@ typedef struct lag_rac {
|
||||
uint8_t range_hash[256]; /**< Hash table mapping upper byte to approximate symbol. */
|
||||
} lag_rac;
|
||||
|
||||
void ff_lag_rac_init(lag_rac *l, GetBitContext *gb, int length);
|
||||
void ff_lag_rac_init(lag_rac *l, BitstreamContext *bc, int length);
|
||||
|
||||
/* TODO: Optimize */
|
||||
static inline void lag_rac_refill(lag_rac *l)
|
||||
|
Loading…
Reference in New Issue
Block a user