40 #define MIMIC_HEADER_SIZE 20
41 #define MIMIC_VLC_BITS 11
74 0x10, 0x20, 0x30, 0x00, 0x11, 0x40, 0x50, 0x12, 0x13, 0x21, 0x31, 0x60,
75 0x14, 0x15, 0x16, 0x22, 0x41, 0x17, 0x18, 0x23, 0x24, 0x25, 0x32, 0x42,
76 0x51, 0x61, 0x70, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x26, 0x27,
77 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x33, 0x34, 0x35, 0x36, 0x37,
78 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x43, 0x44, 0x45, 0x46, 0x47,
79 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x52, 0x53, 0x54, 0x55, 0x56,
80 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x62, 0x63, 0x64, 0x65,
81 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x71, 0x72, 0x73,
82 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
86 2, 2, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8,
87 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12,
88 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17,
89 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21,
90 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26,
91 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30,
95 0, 8, 1, 2, 9, 16, 24, 17,
96 10, 3, 4, 11, 18, 25, 32, 40,
97 33, 26, 19, 12, 5, 6, 13, 20,
98 27, 34, 41, 48, 56, 49, 42, 35,
99 28, 21, 14, 7, 15, 22, 29, 36,
100 43, 50, 57, 58, 51, 44, 37, 30,
101 23, 31, 38, 45, 52, 59, 39, 46,
102 53, 60, 61, 54, 47, 55, 62, 63,
110 ctx->swap_buf_size = 0;
149 if (avctx == avctx_from)
157 if (
i !=
src->next_cur_index &&
src->frames[
i].f)
169 { -7, 7, -6, 6, -5, 5, -4, 4, },
170 { -15, 15, -14, 14, -13, 13, -12, 12,
171 -11, 11, -10, 10, -9, 9, -8, 8, },
172 { -31, 31, -30, 30, -29, 29, -28, 28,
173 -27, 27, -26, 26, -25, 25, -24, 24,
174 -23, 23, -22, 22, -21, 21, -20, 20,
175 -19, 19, -18, 18, -17, 17, -16, 16, },
176 { -63, 63, -62, 62, -61, 61, -60, 60,
177 -59, 59, -58, 58, -57, 57, -56, 56,
178 -55, 55, -54, 54, -53, 53, -52, 52,
179 -51, 51, -50, 50, -49, 49, -48, 48,
180 -47, 47, -46, 46, -45, 45, -44, 44,
181 -43, 43, -42, 42, -41, 41, -40, 40,
182 -39, 39, -38, 38, -37, 37, -36, 36,
183 -35, 35, -34, 34, -33, 33, -32, 32, },
184 { -127, 127, -126, 126, -125, 125, -124, 124,
185 -123, 123, -122, 122, -121, 121, -120, 120,
186 -119, 119, -118, 118, -117, 117, -116, 116,
187 -115, 115, -114, 114, -113, 113, -112, 112,
188 -111, 111, -110, 110, -109, 109, -108, 108,
189 -107, 107, -106, 106, -105, 105, -104, 104,
190 -103, 103, -102, 102, -101, 101, -100, 100,
191 -99, 99, -98, 98, -97, 97, -96, 96, },
192 { -95, 95, -94, 94, -93, 93, -92, 92,
193 -91, 91, -90, 90, -89, 89, -88, 88,
194 -87, 87, -86, 86, -85, 85, -84, 84,
195 -83, 83, -82, 82, -81, 81, -80, 80,
196 -79, 79, -78, 78, -77, 77, -76, 76,
197 -75, 75, -74, 74, -73, 73, -72, 72,
198 -71, 71, -70, 70, -69, 69, -68, 68,
199 -67, 67, -66, 66, -65, 65, -64, 64, },
212 uint32_t vlc, num_bits;
249 int ret, y, x, plane, cur_row = 0;
251 for (plane = 0; plane < 3; plane++) {
252 const int is_chroma = !!plane;
253 const int qscale =
av_clip(10000 -
quality, is_chroma ? 1000 : 2000,
255 const int stride =
ctx->frames[
ctx->cur_index ].f->linesize[plane];
256 uint8_t *dst =
ctx->frames[
ctx->cur_index ].f->data[plane];
258 const uint8_t *
src = is_iframe ? dst :
ctx->frames[
ctx->prev_index].f->data[plane];
260 for (y = 0; y <
ctx->num_vblocks[plane]; y++) {
261 for (x = 0; x <
ctx->num_hblocks[plane]; x++) {
280 int index = (
ctx->cur_index + backref) & 15;
283 const uint8_t *p =
ctx->frames[
index].f->data[0];
286 ctx->frames[
ctx->prev_index].f->data[plane];
287 ctx->hdsp.put_pixels_tab[1][0](dst, p,
stride, 8);
290 "No such backreference! Buggy sample.\n");
301 dst += (
stride -
ctx->num_hblocks[plane]) << 3;
317 uint8_t *data_1 =
f->data[1];
318 f->data[0] =
f->data[0] + (
f->height - 1) *
f->linesize[0];
319 f->data[1] =
f->data[2] + ((
f->height >> 1) - 1) *
f->linesize[2];
320 f->data[2] = data_1 + ((
f->height >> 1) - 1) *
f->linesize[1];
322 f->linesize[
i] *= -1;
328 const uint8_t *buf = avpkt->
data;
329 int buf_size = avpkt->
size;
345 quality = bytestream2_get_le16u(&gb);
346 width = bytestream2_get_le16u(&gb);
347 height = bytestream2_get_le16u(&gb);
349 is_pframe = bytestream2_get_le32u(&gb);
350 num_coeffs = bytestream2_get_byteu(&gb);
368 for (
i = 0;
i < 3;
i++) {
377 if (is_pframe && !
ctx->frames[
ctx->prev_index].f) {
390 ctx->next_prev_index =
ctx->cur_index;
391 ctx->next_cur_index = (
ctx->cur_index - 1) & 15;
399 ctx->bbdsp.bswap_buf(
ctx->swap_buf,
418 ctx->prev_index =
ctx->next_prev_index;
419 ctx->cur_index =
ctx->next_cur_index;