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