#include <inttypes.h>
#include "avcodec.h"
+#include "bitstream.h"
#include "bytestream.h"
-#include "internal.h"
-#include "get_bits.h"
#include "golomb.h"
+#include "internal.h"
#include "idctdsp.h"
#include "thread.h"
-#include "unary_legacy.h"
+#include "unary.h"
#define AIC_HDR_SIZE 24
#define AIC_BAND_COEFFS (64 + 32 + 192 + 96)
177, 184, 176, 169, 162, 161, 168, 160,
};
-static const uint8_t *aic_scan[NUM_BANDS] = {
+static const uint8_t * const aic_scan[NUM_BANDS] = {
aic_y_scan, aic_c_scan, aic_y_ext_scan, aic_c_ext_scan
};
#define GET_CODE(val, type, add_bits) \
do { \
if (type) \
- val = get_ue_golomb(gb); \
+ val = get_ue_golomb(bc); \
else \
- val = get_unary(gb, 1, 31); \
+ val = get_unary(bc, 1, 31); \
if (add_bits) \
- val = (val << add_bits) + get_bits(gb, add_bits); \
+ val = (val << add_bits) + bitstream_read(bc, add_bits); \
} while (0)
-static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst,
+static int aic_decode_coeffs(BitstreamContext *bc, int16_t *dst,
int band, int slice_width, int force_chroma)
{
int has_skips, coeff_type, coeff_bits, skip_type, skip_bits;
const uint8_t *scan = aic_scan[band | force_chroma];
int mb, idx, val;
- has_skips = get_bits1(gb);
- coeff_type = get_bits1(gb);
- coeff_bits = get_bits(gb, 3);
+ has_skips = bitstream_read_bit(bc);
+ coeff_type = bitstream_read_bit(bc);
+ coeff_bits = bitstream_read(bc, 3);
if (has_skips) {
- skip_type = get_bits1(gb);
- skip_bits = get_bits(gb, 3);
+ skip_type = bitstream_read_bit(bc);
+ skip_bits = bitstream_read(bc, 3);
for (mb = 0; mb < slice_width; mb++) {
idx = -1;
static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y,
const uint8_t *src, int src_size)
{
- GetBitContext gb;
+ BitstreamContext bc;
int ret, i, mb, blk;
int slice_width = FFMIN(ctx->slice_width, ctx->mb_width - mb_x);
uint8_t *Y, *C[2];
for (i = 0; i < 2; i++)
C[i] = ctx->frame->data[i + 1] + mb_x * 8
+ mb_y * 8 * ctx->frame->linesize[i + 1];
- init_get_bits(&gb, src, src_size * 8);
+ bitstream_init8(&bc, src, src_size);
memset(ctx->slice_data, 0,
sizeof(*ctx->slice_data) * slice_width * AIC_BAND_COEFFS);
for (i = 0; i < NUM_BANDS; i++)
- if ((ret = aic_decode_coeffs(&gb, ctx->data_ptr[i],
+ if ((ret = aic_decode_coeffs(&bc, ctx->data_ptr[i],
i, slice_width,
!ctx->interlaced)) < 0)
return ret;
.decode = aic_decode_frame,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS,
.init_thread_copy = ONLY_IF_THREADS_ENABLED(aic_decode_init),
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
};