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)
145 if (!
ctx->frames[
i].f)
160 if (avctx == avctx_from)
168 if (
i !=
src->next_cur_index &&
src->frames[
i].f->data[0]) {
183 { -7, 7, -6, 6, -5, 5, -4, 4, },
184 { -15, 15, -14, 14, -13, 13, -12, 12,
185 -11, 11, -10, 10, -9, 9, -8, 8, },
186 { -31, 31, -30, 30, -29, 29, -28, 28,
187 -27, 27, -26, 26, -25, 25, -24, 24,
188 -23, 23, -22, 22, -21, 21, -20, 20,
189 -19, 19, -18, 18, -17, 17, -16, 16, },
190 { -63, 63, -62, 62, -61, 61, -60, 60,
191 -59, 59, -58, 58, -57, 57, -56, 56,
192 -55, 55, -54, 54, -53, 53, -52, 52,
193 -51, 51, -50, 50, -49, 49, -48, 48,
194 -47, 47, -46, 46, -45, 45, -44, 44,
195 -43, 43, -42, 42, -41, 41, -40, 40,
196 -39, 39, -38, 38, -37, 37, -36, 36,
197 -35, 35, -34, 34, -33, 33, -32, 32, },
198 { -127, 127, -126, 126, -125, 125, -124, 124,
199 -123, 123, -122, 122, -121, 121, -120, 120,
200 -119, 119, -118, 118, -117, 117, -116, 116,
201 -115, 115, -114, 114, -113, 113, -112, 112,
202 -111, 111, -110, 110, -109, 109, -108, 108,
203 -107, 107, -106, 106, -105, 105, -104, 104,
204 -103, 103, -102, 102, -101, 101, -100, 100,
205 -99, 99, -98, 98, -97, 97, -96, 96, },
206 { -95, 95, -94, 94, -93, 93, -92, 92,
207 -91, 91, -90, 90, -89, 89, -88, 88,
208 -87, 87, -86, 86, -85, 85, -84, 84,
209 -83, 83, -82, 82, -81, 81, -80, 80,
210 -79, 79, -78, 78, -77, 77, -76, 76,
211 -75, 75, -74, 74, -73, 73, -72, 72,
212 -71, 71, -70, 70, -69, 69, -68, 68,
213 -67, 67, -66, 66, -65, 65, -64, 64, },
226 uint32_t vlc, num_bits;
263 int ret, y, x, plane, cur_row = 0;
265 for (plane = 0; plane < 3; plane++) {
266 const int is_chroma = !!plane;
267 const int qscale =
av_clip(10000 -
quality, is_chroma ? 1000 : 2000,
269 const int stride =
ctx->frames[
ctx->cur_index ].f->linesize[plane];
270 uint8_t *dst =
ctx->frames[
ctx->cur_index ].f->data[plane];
272 const uint8_t *
src = is_iframe ? dst :
ctx->frames[
ctx->prev_index].f->data[plane];
274 for (y = 0; y <
ctx->num_vblocks[plane]; y++) {
275 for (x = 0; x <
ctx->num_hblocks[plane]; x++) {
294 int index = (
ctx->cur_index + backref) & 15;
295 uint8_t *p =
ctx->frames[
index].f->data[0];
301 ctx->frames[
ctx->prev_index].f->data[plane];
302 ctx->hdsp.put_pixels_tab[1][0](dst, p,
stride, 8);
305 "No such backreference! Buggy sample.\n");
317 dst += (
stride -
ctx->num_hblocks[plane]) << 3;
334 uint8_t *data_1 =
f->data[1];
335 f->data[0] =
f->data[0] + (
f->height - 1) *
f->linesize[0];
336 f->data[1] =
f->data[2] + ((
f->height >> 1) - 1) *
f->linesize[2];
337 f->data[2] = data_1 + ((
f->height >> 1) - 1) *
f->linesize[1];
339 f->linesize[
i] *= -1;
345 const uint8_t *buf = avpkt->
data;
346 int buf_size = avpkt->
size;
362 quality = bytestream2_get_le16u(&gb);
363 width = bytestream2_get_le16u(&gb);
364 height = bytestream2_get_le16u(&gb);
366 is_pframe = bytestream2_get_le32u(&gb);
367 num_coeffs = bytestream2_get_byteu(&gb);
385 for (
i = 0;
i < 3;
i++) {
394 if (is_pframe && !
ctx->frames[
ctx->prev_index].f->data[0]) {
406 ctx->next_prev_index =
ctx->cur_index;
407 ctx->next_cur_index = (
ctx->cur_index - 1) & 15;
415 ctx->bbdsp.bswap_buf(
ctx->swap_buf,
434 ctx->prev_index =
ctx->next_prev_index;
435 ctx->cur_index =
ctx->next_cur_index;