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)
237 dst[scan[idx]] =
val;
238 }
while (idx < num_coeffs - 1);
242 for (
mb = 0;
mb < slice_width;
mb++) {
243 for (idx = 0; idx < num_coeffs; idx++) {
247 dst[scan[idx]] =
val;
256 int16_t **
base, int16_t **ext)
260 for (
i = 0;
i < 4;
i++) {
261 for (j = 0; j < 4; j++)
262 dst[scan[
i * 8 + j]] = (*
base)[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++)
284 dst[scan[
i * 8 + j]] = (*
base)[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;
401 if (buf_size < off) {
416 ctx->num_x_slices *
ctx->mb_height * 2);
418 for (y = 0; y <
ctx->mb_height; y++) {
419 for (x = 0; x <
ctx->mb_width; x +=
ctx->slice_width) {
420 slice_size = bytestream2_get_le16(&gb) * 4;
421 if (slice_size + off > buf_size || !slice_size) {
423 "Incorrect slice size %d at %d.%d\n", slice_size, x, y);
430 "Error decoding slice at %d.%d\n", x, y);
454 for (
i = 0;
i < 64;
i++)
460 ctx->num_x_slices = (
ctx->mb_width + 15) >> 4;
461 ctx->slice_width = 16;
462 for (
i = 1;
i <
ctx->mb_width;
i++) {
463 if (!(
ctx->mb_width %
i) && (
ctx->mb_width /
i <= 32)) {
464 ctx->slice_width =
ctx->mb_width /
i;
465 ctx->num_x_slices =
i;
471 *
sizeof(*
ctx->slice_data));
472 if (!
ctx->slice_data) {
479 ctx->data_ptr[
i] =
ctx->slice_data +
ctx->slice_width