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,
111 ctx->swap_buf_size = 0;
114 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 uint8_t *dst =
ctx->frames[
ctx->cur_index ].f->data[plane];
273 const uint8_t *
src = is_iframe ? dst :
ctx->frames[
ctx->prev_index].f->data[plane];
275 for (y = 0; y <
ctx->num_vblocks[plane]; y++) {
276 for (x = 0; x <
ctx->num_hblocks[plane]; x++) {
295 int index = (
ctx->cur_index + backref) & 15;
296 uint8_t *p =
ctx->frames[
index].f->data[0];
302 ctx->frames[
ctx->prev_index].f->data[plane];
303 ctx->hdsp.put_pixels_tab[1][0](dst, p,
stride, 8);
306 "No such backreference! Buggy sample.\n");
318 dst += (
stride -
ctx->num_hblocks[plane]) << 3;
335 uint8_t *data_1 =
f->data[1];
336 f->data[0] =
f->data[0] + (
f->height - 1) *
f->linesize[0];
337 f->data[1] =
f->data[2] + ((
f->height >> 1) - 1) *
f->linesize[2];
338 f->data[2] = data_1 + ((
f->height >> 1) - 1) *
f->linesize[1];
340 f->linesize[
i] *= -1;
346 const uint8_t *buf = avpkt->
data;
347 int buf_size = avpkt->
size;
363 quality = bytestream2_get_le16u(&gb);
364 width = bytestream2_get_le16u(&gb);
365 height = bytestream2_get_le16u(&gb);
367 is_pframe = bytestream2_get_le32u(&gb);
368 num_coeffs = bytestream2_get_byteu(&gb);
386 for (
i = 0;
i < 3;
i++) {
395 if (is_pframe && !
ctx->frames[
ctx->prev_index].f->data[0]) {
407 ctx->next_prev_index =
ctx->cur_index;
408 ctx->next_cur_index = (
ctx->cur_index - 1) & 15;
416 ctx->bbdsp.bswap_buf(
ctx->swap_buf,
435 ctx->prev_index =
ctx->next_prev_index;
436 ctx->cur_index =
ctx->next_cur_index;