36 #define AIC_HDR_SIZE 24
37 #define AIC_BAND_COEFFS (64 + 32 + 192 + 96)
52 8, 16, 19, 22, 22, 26, 26, 27,
53 16, 16, 22, 22, 26, 27, 27, 29,
54 19, 22, 26, 26, 27, 29, 29, 35,
55 22, 24, 27, 27, 29, 32, 34, 38,
56 26, 27, 29, 29, 32, 35, 38, 46,
57 27, 29, 34, 34, 35, 40, 46, 56,
58 29, 34, 34, 37, 40, 48, 56, 69,
59 34, 37, 38, 40, 48, 58, 69, 83,
63 0, 4, 1, 2, 5, 8, 12, 9,
64 6, 3, 7, 10, 13, 14, 11, 15,
65 47, 43, 46, 45, 42, 39, 35, 38,
66 41, 44, 40, 37, 34, 33, 36, 32,
67 16, 20, 17, 18, 21, 24, 28, 25,
68 22, 19, 23, 26, 29, 30, 27, 31,
69 63, 59, 62, 61, 58, 55, 51, 54,
70 57, 60, 56, 53, 50, 49, 52, 48,
74 64, 72, 65, 66, 73, 80, 88, 81,
75 74, 67, 75, 82, 89, 90, 83, 91,
76 0, 4, 1, 2, 5, 8, 12, 9,
77 6, 3, 7, 10, 13, 14, 11, 15,
78 16, 20, 17, 18, 21, 24, 28, 25,
79 22, 19, 23, 26, 29, 30, 27, 31,
80 155, 147, 154, 153, 146, 139, 131, 138,
81 145, 152, 144, 137, 130, 129, 136, 128,
82 47, 43, 46, 45, 42, 39, 35, 38,
83 41, 44, 40, 37, 34, 33, 36, 32,
84 63, 59, 62, 61, 58, 55, 51, 54,
85 57, 60, 56, 53, 50, 49, 52, 48,
86 96, 104, 97, 98, 105, 112, 120, 113,
87 106, 99, 107, 114, 121, 122, 115, 123,
88 68, 76, 69, 70, 77, 84, 92, 85,
89 78, 71, 79, 86, 93, 94, 87, 95,
90 100, 108, 101, 102, 109, 116, 124, 117,
91 110, 103, 111, 118, 125, 126, 119, 127,
92 187, 179, 186, 185, 178, 171, 163, 170,
93 177, 184, 176, 169, 162, 161, 168, 160,
94 159, 151, 158, 157, 150, 143, 135, 142,
95 149, 156, 148, 141, 134, 133, 140, 132,
96 191, 183, 190, 189, 182, 175, 167, 174,
97 181, 188, 180, 173, 166, 165, 172, 164,
101 0, 4, 1, 2, 5, 8, 12, 9,
102 6, 3, 7, 10, 13, 14, 11, 15,
103 31, 27, 30, 29, 26, 23, 19, 22,
104 25, 28, 24, 21, 18, 17, 20, 16,
105 32, 36, 33, 34, 37, 40, 44, 41,
106 38, 35, 39, 42, 45, 46, 43, 47,
107 63, 59, 62, 61, 58, 55, 51, 54,
108 57, 60, 56, 53, 50, 49, 52, 48,
112 16, 24, 17, 18, 25, 32, 40, 33,
113 26, 19, 27, 34, 41, 42, 35, 43,
114 0, 4, 1, 2, 5, 8, 12, 9,
115 6, 3, 7, 10, 13, 14, 11, 15,
116 20, 28, 21, 22, 29, 36, 44, 37,
117 30, 23, 31, 38, 45, 46, 39, 47,
118 95, 87, 94, 93, 86, 79, 71, 78,
119 85, 92, 84, 77, 70, 69, 76, 68,
120 63, 59, 62, 61, 58, 55, 51, 54,
121 57, 60, 56, 53, 50, 49, 52, 48,
122 91, 83, 90, 89, 82, 75, 67, 74,
123 81, 88, 80, 73, 66, 65, 72, 64,
124 112, 120, 113, 114, 121, 128, 136, 129,
125 122, 115, 123, 130, 137, 138, 131, 139,
126 96, 100, 97, 98, 101, 104, 108, 105,
127 102, 99, 103, 106, 109, 110, 107, 111,
128 116, 124, 117, 118, 125, 132, 140, 133,
129 126, 119, 127, 134, 141, 142, 135, 143,
130 191, 183, 190, 189, 182, 175, 167, 174,
131 181, 188, 180, 173, 166, 165, 172, 164,
132 159, 155, 158, 157, 154, 151, 147, 150,
133 153, 156, 152, 149, 146, 145, 148, 144,
134 187, 179, 186, 185, 178, 171, 163, 170,
135 177, 184, 176, 169, 162, 161, 168, 160,
183 "Picture dimension changed: old: %d x %d, new: %d x %d\n",
188 ctx->interlaced = ((
src[16] >> 4) == 3);
193 #define GET_CODE(val, type, add_bits) \
196 val = get_ue_golomb(gb); \
198 val = get_unary(gb, 1, 31); \
200 val = (val << add_bits) + get_bits(gb, add_bits); \
204 int band,
int slice_width,
int force_chroma)
206 int has_skips, coeff_type, coeff_bits, skip_type,
skip_bits;
208 const uint8_t *scan =
aic_scan[band | force_chroma];
223 for (
mb = 0;
mb < slice_width;
mb++) {
230 if (idx >= num_coeffs)
236 dst[scan[idx]] =
val;
237 }
while (idx < num_coeffs - 1);
241 for (
mb = 0;
mb < slice_width;
mb++) {
242 for (idx = 0; idx < num_coeffs; idx++) {
246 dst[scan[idx]] =
val;
255 int16_t **
base, int16_t **ext)
259 for (
i = 0;
i < 4;
i++) {
260 for (j = 0; j < 4; j++)
261 dst[scan[
i * 8 + j]] = (*
base)[j];
262 for (j = 0; j < 4; j++)
263 dst[scan[
i * 8 + j + 4]] = (*ext)[j];
268 for (j = 0; j < 8; j++)
269 dst[scan[
i * 8 + j]] = (*ext)[j];
275 int16_t **
base, int16_t **ext,
281 for (
i = 0;
i < 8;
i++) {
282 for (j = 0; j < 4; j++)
283 dst[scan[
i * 8 + j]] = (*
base)[j];
284 for (j = 0; j < 4; j++)
285 dst[scan[
i * 8 + j + 4]] = (*ext)[j];
290 for (
i = 0;
i < 64;
i++)
291 dst[scan[
i]] = (*ext)[
i];
300 for (
i = 0;
i < 64;
i++) {
304 block[
i] = (((
val >> 1) ^ -sign) * q * quant_matrix[
i] >> 4)
310 const uint8_t *
src,
int src_size)
314 int slice_width =
FFMIN(
ctx->slice_width,
ctx->mb_width - mb_x);
315 int last_row = mb_y && mb_y ==
ctx->mb_height - 1;
323 const int ystride =
ctx->frame->linesize[0];
326 y_pos = (
ctx->avctx->height - 16);
327 c_pos = ((
ctx->avctx->height+1)/2 - 8);
333 Y =
ctx->frame->data[0] + mb_x * 16 + y_pos * ystride;
334 for (
i = 0;
i < 2;
i++)
335 C[
i] =
ctx->frame->data[
i + 1] + mb_x * 8
336 + c_pos *
ctx->frame->linesize[
i + 1];
339 memset(
ctx->slice_data, 0,
344 !
ctx->interlaced)) < 0)
347 for (
mb = 0;
mb < slice_width;
mb++) {
349 if (!
ctx->interlaced)
354 &base_y, &ext_y,
blk);
356 ctx->idsp.idct(
ctx->block);
358 if (!
ctx->interlaced) {
359 dst =
Y + (
blk >> 1) * 8 * ystride + (
blk & 1) * 8;
360 ctx->idsp.put_signed_pixels_clamped(
ctx->block, dst, ystride);
362 dst =
Y + (
blk & 1) * 8 + (
blk >> 1) * ystride;
363 ctx->idsp.put_signed_pixels_clamped(
ctx->block, dst,
373 ctx->idsp.idct(
ctx->block);
374 ctx->idsp.put_signed_pixels_clamped(
ctx->block,
C[
blk],
375 ctx->frame->linesize[
blk + 1]);
387 const uint8_t *buf = avpkt->
data;
388 int buf_size = avpkt->
size;
400 if (buf_size < off) {
415 ctx->num_x_slices *
ctx->mb_height * 2);
417 for (y = 0; y <
ctx->mb_height; y++) {
418 for (x = 0; x <
ctx->mb_width; x +=
ctx->slice_width) {
419 slice_size = bytestream2_get_le16(&gb) * 4;
420 if (slice_size + off > buf_size || !slice_size) {
422 "Incorrect slice size %d at %d.%d\n", slice_size, x, y);
429 "Error decoding slice at %d.%d\n", x, y);
453 for (
i = 0;
i < 64;
i++)
459 ctx->num_x_slices = (
ctx->mb_width + 15) >> 4;
460 ctx->slice_width = 16;
461 for (
i = 1;
i <
ctx->mb_width;
i++) {
462 if (!(
ctx->mb_width %
i) && (
ctx->mb_width /
i <= 32)) {
463 ctx->slice_width =
ctx->mb_width /
i;
464 ctx->num_x_slices =
i;
470 *
sizeof(*
ctx->slice_data));
471 if (!
ctx->slice_data) {
478 ctx->data_ptr[
i] =
ctx->slice_data +
ctx->slice_width