31 #define AIC_HDR_SIZE 24
32 #define AIC_BAND_COEFFS (64 + 32 + 192 + 96)
47 8, 16, 19, 22, 22, 26, 26, 27,
48 16, 16, 22, 22, 26, 27, 27, 29,
49 19, 22, 26, 26, 27, 29, 29, 35,
50 22, 24, 27, 27, 29, 32, 34, 38,
51 26, 27, 29, 29, 32, 35, 38, 46,
52 27, 29, 34, 34, 35, 40, 46, 56,
53 29, 34, 34, 37, 40, 48, 56, 69,
54 34, 37, 38, 40, 48, 58, 69, 83,
58 0, 4, 1, 2, 5, 8, 12, 9,
59 6, 3, 7, 10, 13, 14, 11, 15,
60 47, 43, 46, 45, 42, 39, 35, 38,
61 41, 44, 40, 37, 34, 33, 36, 32,
62 16, 20, 17, 18, 21, 24, 28, 25,
63 22, 19, 23, 26, 29, 30, 27, 31,
64 63, 59, 62, 61, 58, 55, 51, 54,
65 57, 60, 56, 53, 50, 49, 52, 48,
69 64, 72, 65, 66, 73, 80, 88, 81,
70 74, 67, 75, 82, 89, 90, 83, 91,
71 0, 4, 1, 2, 5, 8, 12, 9,
72 6, 3, 7, 10, 13, 14, 11, 15,
73 16, 20, 17, 18, 21, 24, 28, 25,
74 22, 19, 23, 26, 29, 30, 27, 31,
75 155, 147, 154, 153, 146, 139, 131, 138,
76 145, 152, 144, 137, 130, 129, 136, 128,
77 47, 43, 46, 45, 42, 39, 35, 38,
78 41, 44, 40, 37, 34, 33, 36, 32,
79 63, 59, 62, 61, 58, 55, 51, 54,
80 57, 60, 56, 53, 50, 49, 52, 48,
81 96, 104, 97, 98, 105, 112, 120, 113,
82 106, 99, 107, 114, 121, 122, 115, 123,
83 68, 76, 69, 70, 77, 84, 92, 85,
84 78, 71, 79, 86, 93, 94, 87, 95,
85 100, 108, 101, 102, 109, 116, 124, 117,
86 110, 103, 111, 118, 125, 126, 119, 127,
87 187, 179, 186, 185, 178, 171, 163, 170,
88 177, 184, 176, 169, 162, 161, 168, 160,
89 159, 151, 158, 157, 150, 143, 135, 142,
90 149, 156, 148, 141, 134, 133, 140, 132,
91 191, 183, 190, 189, 182, 175, 167, 174,
92 181, 188, 180, 173, 166, 165, 172, 164,
96 0, 4, 1, 2, 5, 8, 12, 9,
97 6, 3, 7, 10, 13, 14, 11, 15,
98 31, 27, 30, 29, 26, 23, 19, 22,
99 25, 28, 24, 21, 18, 17, 20, 16,
100 32, 36, 33, 34, 37, 40, 44, 41,
101 38, 35, 39, 42, 45, 46, 43, 47,
102 63, 59, 62, 61, 58, 55, 51, 54,
103 57, 60, 56, 53, 50, 49, 52, 48,
107 16, 24, 17, 18, 25, 32, 40, 33,
108 26, 19, 27, 34, 41, 42, 35, 43,
109 0, 4, 1, 2, 5, 8, 12, 9,
110 6, 3, 7, 10, 13, 14, 11, 15,
111 20, 28, 21, 22, 29, 36, 44, 37,
112 30, 23, 31, 38, 45, 46, 39, 47,
113 95, 87, 94, 93, 86, 79, 71, 78,
114 85, 92, 84, 77, 70, 69, 76, 68,
115 63, 59, 62, 61, 58, 55, 51, 54,
116 57, 60, 56, 53, 50, 49, 52, 48,
117 91, 83, 90, 89, 82, 75, 67, 74,
118 81, 88, 80, 73, 66, 65, 72, 64,
119 112, 120, 113, 114, 121, 128, 136, 129,
120 122, 115, 123, 130, 137, 138, 131, 139,
121 96, 100, 97, 98, 101, 104, 108, 105,
122 102, 99, 103, 106, 109, 110, 107, 111,
123 116, 124, 117, 118, 125, 132, 140, 133,
124 126, 119, 127, 134, 141, 142, 135, 143,
125 191, 183, 190, 189, 182, 175, 167, 174,
126 181, 188, 180, 173, 166, 165, 172, 164,
127 159, 155, 158, 157, 154, 151, 147, 150,
128 153, 156, 152, 149, 146, 145, 148, 144,
129 187, 179, 186, 185, 178, 171, 163, 170,
130 177, 184, 176, 169, 162, 161, 168, 160,
171 if (frame_size > size) {
178 "Picture dimension changed: old: %d x %d, new: %d x %d\n",
182 ctx->
quant = src[15];
188 #define GET_CODE(val, type, add_bits) \
191 val = get_ue_golomb(gb); \
193 val = get_unary(gb, 1, 31); \
195 val = (val << add_bits) + get_bits(gb, add_bits); \
199 int band,
int slice_width,
int force_chroma)
201 int has_skips, coeff_type, coeff_bits, skip_type,
skip_bits;
215 for (mb = 0; mb < slice_width; mb++) {
218 GET_CODE(val, skip_type, skip_bits);
222 if (idx >= num_coeffs)
224 GET_CODE(val, coeff_type, coeff_bits);
228 dst[scan[idx]] =
val;
229 }
while (idx < num_coeffs - 1);
233 for (mb = 0; mb < slice_width; mb++) {
234 for (idx = 0; idx < num_coeffs; idx++) {
235 GET_CODE(val, coeff_type, coeff_bits);
238 dst[scan[idx]] =
val;
247 int16_t **base, int16_t **ext)
251 for (i = 0; i < 4; i++) {
252 for (j = 0; j < 4; j++)
253 dst[scan[i * 8 + j]] = (*base)[j];
254 for (j = 0; j < 4; j++)
255 dst[scan[i * 8 + j + 4]] = (*ext)[j];
260 for (j = 0; j < 8; j++)
261 dst[scan[i * 8 + j]] = (*ext)[j];
267 int16_t **base, int16_t **ext,
273 for (i = 0; i < 8; i++) {
274 for (j = 0; j < 4; j++)
275 dst[scan[i * 8 + j]] = (*base)[j];
276 for (j = 0; j < 4; j++)
277 dst[scan[i * 8 + j + 4]] = (*ext)[j];
282 for (i = 0; i < 64; i++)
283 dst[scan[i]] = (*ext)[i];
292 for (i = 0; i < 64; i++) {
293 int val = (uint16_t)block[i];
315 Y = ctx->
frame->
data[0] + mb_x * 16 + mb_y * 16 * ystride;
316 for (i = 0; i < 2; i++)
317 C[i] = ctx->
frame->
data[i + 1] + mb_x * 8
329 for (mb = 0; mb < slice_width; mb++) {
330 for (blk = 0; blk < 4; blk++) {
336 &base_y, &ext_y, blk);
341 dst = Y + (blk >> 1) * 8 * ystride + (blk & 1) * 8;
345 dst = Y + (blk & 1) * 8 + (blk >> 1) * ystride;
352 for (blk = 0; blk < 2; blk++) {
371 int buf_size = avpkt->
size;
383 if (buf_size < off) {
399 slice_size = bytestream2_get_le16(&gb) * 4;
400 if (slice_size + off > buf_size || !slice_size) {
406 buf + off, slice_size)) < 0)
430 for (i = 0; i < 64; i++)
439 for (i = 1; i < 32; i++) {
static const int aic_num_band_coeffs[NUM_BANDS]
int16_t * data_ptr[NUM_BANDS]
const char const char void * val
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
void(* put_signed_pixels_clamped)(const int16_t *block, uint8_t *pixels, int line_size)
This structure describes decoded (raw) audio or video data.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold int init(AVCodecContext *avctx)
#define DECLARE_ALIGNED(n, t, v)
void av_log(void *avcl, int level, const char *fmt,...) av_printf_format(3
Send the specified message to the log if the level is less than or equal to the current av_log_level...
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
void av_freep(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
static const uint8_t aic_c_scan[64]
const char * name
Name of the codec implementation.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
bitstream reader API header.
uint8_t idct_permutation[64]
idct input permutation.
static const uint8_t * aic_scan[NUM_BANDS]
static void unquant_block(int16_t *block, int q)
static const uint8_t frame_size[4]
static av_cold int aic_decode_init(AVCodecContext *avctx)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int aic_decode_header(AICContext *ctx, const uint8_t *src, int size)
static const uint8_t aic_y_scan[64]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static av_cold int aic_decode_close(AVCodecContext *avctx)
static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst, int band, int slice_width, int force_chroma)
Libavcodec external API header.
void(* idct)(int16_t *block)
static const uint8_t aic_c_ext_scan[192]
enum AVPictureType pict_type
Picture type of the frame.
int width
picture width / height.
void * av_malloc(size_t size) av_malloc_attrib 1(1)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static const uint8_t aic_quant_matrix[64]
static const int aic_band_off[NUM_BANDS]
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y, const uint8_t *src, int src_size)
main external API structure.
static void close(AVCodecParserContext *s)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
static unsigned int get_bits1(GetBitContext *s)
BYTE int const BYTE int int int height
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
static void recombine_block(int16_t *dst, const uint8_t *scan, int16_t **base, int16_t **ext)
common internal api header.
static void recombine_block_il(int16_t *dst, const uint8_t *scan, int16_t **base, int16_t **ext, int block_no)
#define GET_CODE(val, type, add_bits)
#define AVERROR_INVALIDDATA
static int aic_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
int key_frame
1 -> keyframe, 0-> not
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static const uint8_t aic_y_ext_scan[192]
This structure stores compressed data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.