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,
110 ctx->swap_buf_size = 0;
149 if (avctx == avctx_from)
152 dst->cur_index =
src->next_cur_index;
153 dst->prev_index =
src->next_prev_index;
157 if (
i !=
src->next_cur_index &&
src->frames[
i].f)
169 { -7, 7, -6, 6, -5, 5, -4, 4, },
170 { -15, 15, -14, 14, -13, 13, -12, 12,
171 -11, 11, -10, 10, -9, 9, -8, 8, },
172 { -31, 31, -30, 30, -29, 29, -28, 28,
173 -27, 27, -26, 26, -25, 25, -24, 24,
174 -23, 23, -22, 22, -21, 21, -20, 20,
175 -19, 19, -18, 18, -17, 17, -16, 16, },
176 { -63, 63, -62, 62, -61, 61, -60, 60,
177 -59, 59, -58, 58, -57, 57, -56, 56,
178 -55, 55, -54, 54, -53, 53, -52, 52,
179 -51, 51, -50, 50, -49, 49, -48, 48,
180 -47, 47, -46, 46, -45, 45, -44, 44,
181 -43, 43, -42, 42, -41, 41, -40, 40,
182 -39, 39, -38, 38, -37, 37, -36, 36,
183 -35, 35, -34, 34, -33, 33, -32, 32, },
184 { -127, 127, -126, 126, -125, 125, -124, 124,
185 -123, 123, -122, 122, -121, 121, -120, 120,
186 -119, 119, -118, 118, -117, 117, -116, 116,
187 -115, 115, -114, 114, -113, 113, -112, 112,
188 -111, 111, -110, 110, -109, 109, -108, 108,
189 -107, 107, -106, 106, -105, 105, -104, 104,
190 -103, 103, -102, 102, -101, 101, -100, 100,
191 -99, 99, -98, 98, -97, 97, -96, 96, },
192 { -95, 95, -94, 94, -93, 93, -92, 92,
193 -91, 91, -90, 90, -89, 89, -88, 88,
194 -87, 87, -86, 86, -85, 85, -84, 84,
195 -83, 83, -82, 82, -81, 81, -80, 80,
196 -79, 79, -78, 78, -77, 77, -76, 76,
197 -75, 75, -74, 74, -73, 73, -72, 72,
198 -71, 71, -70, 70, -69, 69, -68, 68,
199 -67, 67, -66, 66, -65, 65, -64, 64, },
212 uint32_t vlc, num_bits;
249 int ret, y, x, plane, cur_row = 0;
251 for (plane = 0; plane < 3; plane++) {
252 const int is_chroma = !!plane;
253 const int qscale =
av_clip(10000 -
quality, is_chroma ? 1000 : 2000,
255 const int stride =
ctx->frames[
ctx->cur_index ].f->linesize[plane];
256 uint8_t *
dst =
ctx->frames[
ctx->cur_index ].f->data[plane];
258 const uint8_t *
src = is_iframe ?
dst :
ctx->frames[
ctx->prev_index].f->data[plane];
260 for (y = 0; y <
ctx->num_vblocks[plane]; y++) {
261 for (x = 0; x <
ctx->num_hblocks[plane]; x++) {
280 int index = (
ctx->cur_index + backref) & 15;
283 const uint8_t *p =
ctx->frames[
index].f->data[0];
286 ctx->frames[
ctx->prev_index].f->data[plane];
290 "No such backreference! Buggy sample.\n");
317 uint8_t *data_1 =
f->data[1];
318 f->data[0] =
f->data[0] + (
f->height - 1) *
f->linesize[0];
319 f->data[1] =
f->data[2] + ((
f->height >> 1) - 1) *
f->linesize[2];
320 f->data[2] = data_1 + ((
f->height >> 1) - 1) *
f->linesize[1];
322 f->linesize[
i] *= -1;
328 const uint8_t *buf = avpkt->
data;
329 int buf_size = avpkt->
size;
345 quality = bytestream2_get_le16u(&gb);
346 width = bytestream2_get_le16u(&gb);
347 height = bytestream2_get_le16u(&gb);
349 is_pframe = bytestream2_get_le32u(&gb);
350 num_coeffs = bytestream2_get_byteu(&gb);
368 for (
i = 0;
i < 3;
i++) {
377 if (is_pframe && !
ctx->frames[
ctx->prev_index].f) {
390 ctx->next_prev_index =
ctx->cur_index;
391 ctx->next_cur_index = (
ctx->cur_index - 1) & 15;
399 ctx->bbdsp.bswap_buf(
ctx->swap_buf,
418 ctx->prev_index =
ctx->next_prev_index;
419 ctx->cur_index =
ctx->next_cur_index;