39 #define MIMIC_HEADER_SIZE 20
40 #define MIMIC_VLC_BITS 11
73 0x10, 0x20, 0x30, 0x00, 0x11, 0x40, 0x50, 0x12, 0x13, 0x21, 0x31, 0x60,
74 0x14, 0x15, 0x16, 0x22, 0x41, 0x17, 0x18, 0x23, 0x24, 0x25, 0x32, 0x42,
75 0x51, 0x61, 0x70, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x26, 0x27,
76 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x33, 0x34, 0x35, 0x36, 0x37,
77 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x43, 0x44, 0x45, 0x46, 0x47,
78 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x52, 0x53, 0x54, 0x55, 0x56,
79 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x62, 0x63, 0x64, 0x65,
80 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x71, 0x72, 0x73,
81 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
85 2, 2, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8,
86 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12,
87 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17,
88 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21,
89 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26,
90 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30,
94 0, 8, 1, 2, 9, 16, 24, 17,
95 10, 3, 4, 11, 18, 25, 32, 40,
96 33, 26, 19, 12, 5, 6, 13, 20,
97 27, 34, 41, 48, 56, 49, 42, 35,
98 28, 21, 14, 7, 15, 22, 29, 36,
99 43, 50, 57, 58, 51, 44, 37, 30,
100 23, 31, 38, 45, 52, 59, 39, 46,
101 53, 60, 61, 54, 47, 55, 62, 63,
110 ctx->swap_buf_size = 0;
113 if (
ctx->frames[
i].f)
144 if (!
ctx->frames[
i].f)
159 if (avctx == avctx_from)
167 if (
i !=
src->next_cur_index &&
src->frames[
i].f->data[0]) {
182 { -7, 7, -6, 6, -5, 5, -4, 4, },
183 { -15, 15, -14, 14, -13, 13, -12, 12,
184 -11, 11, -10, 10, -9, 9, -8, 8, },
185 { -31, 31, -30, 30, -29, 29, -28, 28,
186 -27, 27, -26, 26, -25, 25, -24, 24,
187 -23, 23, -22, 22, -21, 21, -20, 20,
188 -19, 19, -18, 18, -17, 17, -16, 16, },
189 { -63, 63, -62, 62, -61, 61, -60, 60,
190 -59, 59, -58, 58, -57, 57, -56, 56,
191 -55, 55, -54, 54, -53, 53, -52, 52,
192 -51, 51, -50, 50, -49, 49, -48, 48,
193 -47, 47, -46, 46, -45, 45, -44, 44,
194 -43, 43, -42, 42, -41, 41, -40, 40,
195 -39, 39, -38, 38, -37, 37, -36, 36,
196 -35, 35, -34, 34, -33, 33, -32, 32, },
197 { -127, 127, -126, 126, -125, 125, -124, 124,
198 -123, 123, -122, 122, -121, 121, -120, 120,
199 -119, 119, -118, 118, -117, 117, -116, 116,
200 -115, 115, -114, 114, -113, 113, -112, 112,
201 -111, 111, -110, 110, -109, 109, -108, 108,
202 -107, 107, -106, 106, -105, 105, -104, 104,
203 -103, 103, -102, 102, -101, 101, -100, 100,
204 -99, 99, -98, 98, -97, 97, -96, 96, },
205 { -95, 95, -94, 94, -93, 93, -92, 92,
206 -91, 91, -90, 90, -89, 89, -88, 88,
207 -87, 87, -86, 86, -85, 85, -84, 84,
208 -83, 83, -82, 82, -81, 81, -80, 80,
209 -79, 79, -78, 78, -77, 77, -76, 76,
210 -75, 75, -74, 74, -73, 73, -72, 72,
211 -71, 71, -70, 70, -69, 69, -68, 68,
212 -67, 67, -66, 66, -65, 65, -64, 64, },
225 uint32_t vlc, num_bits;
262 int ret, y, x, plane, cur_row = 0;
264 for (plane = 0; plane < 3; plane++) {
265 const int is_chroma = !!plane;
266 const int qscale =
av_clip(10000 -
quality, is_chroma ? 1000 : 2000,
268 const int stride =
ctx->frames[
ctx->cur_index ].f->linesize[plane];
269 const uint8_t *
src =
ctx->frames[
ctx->prev_index].f->data[plane];
270 uint8_t *dst =
ctx->frames[
ctx->cur_index ].f->data[plane];
272 for (y = 0; y <
ctx->num_vblocks[plane]; y++) {
273 for (x = 0; x <
ctx->num_hblocks[plane]; x++) {
292 int index = (
ctx->cur_index + backref) & 15;
293 uint8_t *p =
ctx->frames[
index].f->data[0];
299 ctx->frames[
ctx->prev_index].f->data[plane];
300 ctx->hdsp.put_pixels_tab[1][0](dst, p,
stride, 8);
303 "No such backreference! Buggy sample.\n");
315 dst += (
stride -
ctx->num_hblocks[plane]) << 3;
332 uint8_t *data_1 =
f->data[1];
333 f->data[0] =
f->data[0] + (
f->height - 1) *
f->linesize[0];
334 f->data[1] =
f->data[2] + ((
f->height >> 1) - 1) *
f->linesize[2];
335 f->data[2] = data_1 + ((
f->height >> 1) - 1) *
f->linesize[1];
337 f->linesize[
i] *= -1;
343 const uint8_t *buf = avpkt->
data;
344 int buf_size = avpkt->
size;
360 quality = bytestream2_get_le16u(&gb);
361 width = bytestream2_get_le16u(&gb);
362 height = bytestream2_get_le16u(&gb);
364 is_pframe = bytestream2_get_le32u(&gb);
365 num_coeffs = bytestream2_get_byteu(&gb);
383 for (
i = 0;
i < 3;
i++) {
392 if (is_pframe && !
ctx->frames[
ctx->prev_index].f->data[0]) {
404 ctx->next_prev_index =
ctx->cur_index;
405 ctx->next_cur_index = (
ctx->cur_index - 1) & 15;
413 ctx->bbdsp.bswap_buf(
ctx->swap_buf,
432 ctx->prev_index =
ctx->next_prev_index;
433 ctx->cur_index =
ctx->next_cur_index;