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 uint8_t *dst =
ctx->frames[
ctx->cur_index ].f->data[plane];
271 const uint8_t *
src = is_iframe ? dst :
ctx->frames[
ctx->prev_index].f->data[plane];
273 for (y = 0; y <
ctx->num_vblocks[plane]; y++) {
274 for (x = 0; x <
ctx->num_hblocks[plane]; x++) {
293 int index = (
ctx->cur_index + backref) & 15;
294 uint8_t *p =
ctx->frames[
index].f->data[0];
300 ctx->frames[
ctx->prev_index].f->data[plane];
301 ctx->hdsp.put_pixels_tab[1][0](dst, p,
stride, 8);
304 "No such backreference! Buggy sample.\n");
316 dst += (
stride -
ctx->num_hblocks[plane]) << 3;
333 uint8_t *data_1 =
f->data[1];
334 f->data[0] =
f->data[0] + (
f->height - 1) *
f->linesize[0];
335 f->data[1] =
f->data[2] + ((
f->height >> 1) - 1) *
f->linesize[2];
336 f->data[2] = data_1 + ((
f->height >> 1) - 1) *
f->linesize[1];
338 f->linesize[
i] *= -1;
344 const uint8_t *buf = avpkt->
data;
345 int buf_size = avpkt->
size;
361 quality = bytestream2_get_le16u(&gb);
362 width = bytestream2_get_le16u(&gb);
363 height = bytestream2_get_le16u(&gb);
365 is_pframe = bytestream2_get_le32u(&gb);
366 num_coeffs = bytestream2_get_byteu(&gb);
384 for (
i = 0;
i < 3;
i++) {
393 if (is_pframe && !
ctx->frames[
ctx->prev_index].f->data[0]) {
405 ctx->next_prev_index =
ctx->cur_index;
406 ctx->next_cur_index = (
ctx->cur_index - 1) & 15;
414 ctx->bbdsp.bswap_buf(
ctx->swap_buf,
433 ctx->prev_index =
ctx->next_prev_index;
434 ctx->cur_index =
ctx->next_cur_index;