37 #define AIC_HDR_SIZE 24
38 #define AIC_BAND_COEFFS (64 + 32 + 192 + 96)
53 8, 16, 19, 22, 22, 26, 26, 27,
54 16, 16, 22, 22, 26, 27, 27, 29,
55 19, 22, 26, 26, 27, 29, 29, 35,
56 22, 24, 27, 27, 29, 32, 34, 38,
57 26, 27, 29, 29, 32, 35, 38, 46,
58 27, 29, 34, 34, 35, 40, 46, 56,
59 29, 34, 34, 37, 40, 48, 56, 69,
60 34, 37, 38, 40, 48, 58, 69, 83,
64 0, 4, 1, 2, 5, 8, 12, 9,
65 6, 3, 7, 10, 13, 14, 11, 15,
66 47, 43, 46, 45, 42, 39, 35, 38,
67 41, 44, 40, 37, 34, 33, 36, 32,
68 16, 20, 17, 18, 21, 24, 28, 25,
69 22, 19, 23, 26, 29, 30, 27, 31,
70 63, 59, 62, 61, 58, 55, 51, 54,
71 57, 60, 56, 53, 50, 49, 52, 48,
75 64, 72, 65, 66, 73, 80, 88, 81,
76 74, 67, 75, 82, 89, 90, 83, 91,
77 0, 4, 1, 2, 5, 8, 12, 9,
78 6, 3, 7, 10, 13, 14, 11, 15,
79 16, 20, 17, 18, 21, 24, 28, 25,
80 22, 19, 23, 26, 29, 30, 27, 31,
81 155, 147, 154, 153, 146, 139, 131, 138,
82 145, 152, 144, 137, 130, 129, 136, 128,
83 47, 43, 46, 45, 42, 39, 35, 38,
84 41, 44, 40, 37, 34, 33, 36, 32,
85 63, 59, 62, 61, 58, 55, 51, 54,
86 57, 60, 56, 53, 50, 49, 52, 48,
87 96, 104, 97, 98, 105, 112, 120, 113,
88 106, 99, 107, 114, 121, 122, 115, 123,
89 68, 76, 69, 70, 77, 84, 92, 85,
90 78, 71, 79, 86, 93, 94, 87, 95,
91 100, 108, 101, 102, 109, 116, 124, 117,
92 110, 103, 111, 118, 125, 126, 119, 127,
93 187, 179, 186, 185, 178, 171, 163, 170,
94 177, 184, 176, 169, 162, 161, 168, 160,
95 159, 151, 158, 157, 150, 143, 135, 142,
96 149, 156, 148, 141, 134, 133, 140, 132,
97 191, 183, 190, 189, 182, 175, 167, 174,
98 181, 188, 180, 173, 166, 165, 172, 164,
102 0, 4, 1, 2, 5, 8, 12, 9,
103 6, 3, 7, 10, 13, 14, 11, 15,
104 31, 27, 30, 29, 26, 23, 19, 22,
105 25, 28, 24, 21, 18, 17, 20, 16,
106 32, 36, 33, 34, 37, 40, 44, 41,
107 38, 35, 39, 42, 45, 46, 43, 47,
108 63, 59, 62, 61, 58, 55, 51, 54,
109 57, 60, 56, 53, 50, 49, 52, 48,
113 16, 24, 17, 18, 25, 32, 40, 33,
114 26, 19, 27, 34, 41, 42, 35, 43,
115 0, 4, 1, 2, 5, 8, 12, 9,
116 6, 3, 7, 10, 13, 14, 11, 15,
117 20, 28, 21, 22, 29, 36, 44, 37,
118 30, 23, 31, 38, 45, 46, 39, 47,
119 95, 87, 94, 93, 86, 79, 71, 78,
120 85, 92, 84, 77, 70, 69, 76, 68,
121 63, 59, 62, 61, 58, 55, 51, 54,
122 57, 60, 56, 53, 50, 49, 52, 48,
123 91, 83, 90, 89, 82, 75, 67, 74,
124 81, 88, 80, 73, 66, 65, 72, 64,
125 112, 120, 113, 114, 121, 128, 136, 129,
126 122, 115, 123, 130, 137, 138, 131, 139,
127 96, 100, 97, 98, 101, 104, 108, 105,
128 102, 99, 103, 106, 109, 110, 107, 111,
129 116, 124, 117, 118, 125, 132, 140, 133,
130 126, 119, 127, 134, 141, 142, 135, 143,
131 191, 183, 190, 189, 182, 175, 167, 174,
132 181, 188, 180, 173, 166, 165, 172, 164,
133 159, 155, 158, 157, 154, 151, 147, 150,
134 153, 156, 152, 149, 146, 145, 148, 144,
135 187, 179, 186, 185, 178, 171, 163, 170,
136 177, 184, 176, 169, 162, 161, 168, 160,
184 "Picture dimension changed: old: %d x %d, new: %d x %d\n",
189 ctx->interlaced = ((
src[16] >> 4) == 3);
194 #define GET_CODE(val, type, add_bits) \
197 val = get_ue_golomb(gb); \
199 val = get_unary(gb, 1, 31); \
201 val = (val << add_bits) + get_bits(gb, add_bits); \
205 int band,
int slice_width,
int force_chroma)
207 int has_skips, coeff_type, coeff_bits, skip_type,
skip_bits;
209 const uint8_t *scan =
aic_scan[band | force_chroma];
224 for (
mb = 0;
mb < slice_width;
mb++) {
231 if (idx >= num_coeffs)
238 }
while (idx < num_coeffs - 1);
242 for (
mb = 0;
mb < slice_width;
mb++) {
243 for (idx = 0; idx < num_coeffs; idx++) {
256 int16_t **
base, int16_t **ext)
260 for (
i = 0;
i < 4;
i++) {
261 for (j = 0; j < 4; j++)
263 for (j = 0; j < 4; j++)
264 dst[scan[
i * 8 + j + 4]] = (*ext)[j];
269 for (j = 0; j < 8; j++)
270 dst[scan[
i * 8 + j]] = (*ext)[j];
276 int16_t **
base, int16_t **ext,
282 for (
i = 0;
i < 8;
i++) {
283 for (j = 0; j < 4; j++)
285 for (j = 0; j < 4; j++)
286 dst[scan[
i * 8 + j + 4]] = (*ext)[j];
291 for (
i = 0;
i < 64;
i++)
292 dst[scan[
i]] = (*ext)[
i];
301 for (
i = 0;
i < 64;
i++) {
305 block[
i] = (((
val >> 1) ^ -sign) * q * quant_matrix[
i] >> 4)
311 const uint8_t *
src,
int src_size)
315 int slice_width =
FFMIN(
ctx->slice_width,
ctx->mb_width - mb_x);
316 int last_row = mb_y && mb_y ==
ctx->mb_height - 1;
324 const int ystride =
ctx->frame->linesize[0];
327 y_pos = (
ctx->avctx->height - 16);
328 c_pos = ((
ctx->avctx->height+1)/2 - 8);
334 Y =
ctx->frame->data[0] + mb_x * 16 + y_pos * ystride;
335 for (
i = 0;
i < 2;
i++)
336 C[
i] =
ctx->frame->data[
i + 1] + mb_x * 8
337 + c_pos *
ctx->frame->linesize[
i + 1];
340 memset(
ctx->slice_data, 0,
345 !
ctx->interlaced)) < 0)
348 for (
mb = 0;
mb < slice_width;
mb++) {
350 if (!
ctx->interlaced)
355 &base_y, &ext_y,
blk);
357 ctx->idsp.idct(
ctx->block);
359 if (!
ctx->interlaced) {
360 dst =
Y + (
blk >> 1) * 8 * ystride + (
blk & 1) * 8;
361 ctx->idsp.put_signed_pixels_clamped(
ctx->block,
dst, ystride);
363 dst =
Y + (
blk & 1) * 8 + (
blk >> 1) * ystride;
364 ctx->idsp.put_signed_pixels_clamped(
ctx->block,
dst,
374 ctx->idsp.idct(
ctx->block);
375 ctx->idsp.put_signed_pixels_clamped(
ctx->block,
C[
blk],
376 ctx->frame->linesize[
blk + 1]);
388 const uint8_t *buf = avpkt->
data;
389 int buf_size = avpkt->
size;
399 if (buf_size < off) {
414 ctx->num_x_slices *
ctx->mb_height * 2);
416 for (y = 0; y <
ctx->mb_height; y++) {
417 for (x = 0; x <
ctx->mb_width; x +=
ctx->slice_width) {
418 slice_size = bytestream2_get_le16(&gb) * 4;
419 if (slice_size + off > buf_size || !slice_size) {
421 "Incorrect slice size %d at %d.%d\n", slice_size, x, y);
428 "Error decoding slice at %d.%d\n", x, y);
452 for (
i = 0;
i < 64;
i++)
458 ctx->num_x_slices = (
ctx->mb_width + 15) >> 4;
459 ctx->slice_width = 16;
460 for (
i = 1;
i <
ctx->mb_width;
i++) {
461 if (!(
ctx->mb_width %
i) && (
ctx->mb_width /
i <= 32)) {
462 ctx->slice_width =
ctx->mb_width /
i;
463 ctx->num_x_slices =
i;
469 if (!
ctx->slice_data) {
476 ctx->data_ptr[
i] =
ctx->slice_data +
ctx->slice_width