1 /*
2 * Microsoft Screen 4 (aka Microsoft Expression Encoder Screen) decoder
3 * Copyright (c) 2012 Konstantin Shishkov
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * Microsoft Screen 4 (aka Microsoft Titanium Screen 2,
25 * aka Microsoft Expression Encoder Screen) decoder
26 */
27
34
36
41 };
42
47 };
48
53 };
54
56 { 0, 1, 5, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0 },
57 { 0, 3, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0 }
58 };
59
61 { 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125 },
62 { 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119 }
63 };
64
66 { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
67 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
68 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08,
69 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0,
70 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16,
71 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28,
72 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
73 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
74 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
75 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
76 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
77 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
78 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
79 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
80 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
81 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5,
82 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4,
83 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2,
84 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA,
85 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
86 0xF9, 0xFA },
87 { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
88 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
89 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
90 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0,
91 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34,
92 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26,
93 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38,
94 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
95 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
96 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
97 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
98 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
99 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96,
100 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5,
101 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4,
102 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3,
103 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2,
104 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
105 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
106 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
107 0xF9, 0xFA }
108 };
109
111 { 4, 2, 3, 1 },
112 { 4, 1, 2, 3 }
113 };
114
116 { 0, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
117 { 0, 1, 5, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
118 };
119
121 { 0, 7, 6, 5, 8, 4, 3, 1, 2 },
122 { 0, 2, 3, 4, 5, 6, 7, 1, 8 }
123 };
124
125 #define MAX_ENTRIES 162
126
129
134
137
141
144
146 const uint8_t *syms,
int num_syms)
147 {
150 int i, j;
151 int prefix = 0, max_bits = 0, idx = 0;
152
153 for (i = 0; i < 16; i++) {
154 for (j = 0; j < lens[i]; j++) {
155 bits[idx] = i + 1;
156 codes[idx] = prefix++;
157 max_bits = i + 1;
158 idx++;
159 }
160 prefix <<= 1;
161 }
162
164 codes, 2, 2, syms, 1, 1, 0);
165 }
166
168 {
170
171 for (i = 0; i < 2; i++) {
173 if (ret)
177 if (ret)
181 if (ret)
183 }
184 return 0;
185 }
186
188 {
189 int i;
190
191 for (i = 0; i < 2; i++) {
195 }
196 }
197
198 /* This function returns values in the range
199 * (-range + 1; -range/2] U [range/2; range - 1)
200 * i.e.
201 * nbits = 0 -> 0
202 * nbits = 1 -> -1, 1
203 * nbits = 2 -> -3, -2, 2, 3
204 */
206 {
208
209 if (!nbits)
210 return 0;
211
213 if (val < (1 << (nbits - 1)))
214 val -= (1 << nbits) - 1;
215
217 }
218
220 {
222
224 }
225
227 int *
block,
int *dc_cache,
228 int bx, int by, uint16_t *quant_mat)
229 {
230 int skip,
val, pos = 1, zz_pos,
dc;
231
232 memset(block, 0, sizeof(*block) * 64);
233
235 // DC prediction is the same as in MSS3
236 if (by) {
237 if (bx) {
238 int l, tl, t;
239
243
245 dc += l;
246 else
247 dc += t;
248 } else {
250 }
251 } else if (bx) {
252 dc += dc_cache[
LEFT];
253 }
255 block[0] = dc * quant_mat[0];
256
257 while (pos < 64) {
259 if (!val)
260 return 0;
261 if (val == -1)
262 return -1;
263 if (val == 0xF0) {
264 pos += 16;
265 continue;
266 }
267 skip = val >> 4;
269 pos += skip;
270 if (pos >= 64)
271 return -1;
272
274 block[zz_pos] = val * quant_mat[zz_pos];
275 pos++;
276 }
277
278 return pos == 64 ? 0 : -1;
279 }
280
282 uint8_t *dst[3],
int mb_x,
int mb_y)
283 {
286
287 for (j = 0; j < 2; j++) {
288 for (i = 0; i < 2; i++) {
289 int xpos = mb_x * 2 + i;
295 if (ret)
298
301 }
303 }
304
305 for (i = 1; i < 3; i++) {
311 if (ret)
314
316 out = dst[i] + mb_x * 16;
317 // Since the DCT block is coded as YUV420 and the whole frame as YUV444,
318 // we need to scale chroma.
319 for (j = 0; j < 16; j++) {
320 for (k = 0; k < 8; k++)
323 }
324 }
325
326 return 0;
327 }
328
330 int *sel_len, int *prev)
331 {
332 int i, y_flag = 0;
333
334 for (i = 2; i >= 0; i--) {
335 if (!sel_flag[i]) {
336 vec_pos[i] = 0;
337 continue;
338 }
340 if (sel_len[i] > 0) {
341 int pval = prev[i];
342 vec_pos[i] =
get_bits(gb, sel_len[i]);
343 if (vec_pos[i] >= pval)
344 vec_pos[i]++;
345 } else {
346 vec_pos[i] = !prev[i];
347 }
348 y_flag = 1;
349 } else {
350 vec_pos[i] = prev[i];
351 }
352 }
353 }
354
356 int vec_size,
int component,
int shift,
int *prev)
357 {
358 if (vec_pos < vec_size)
359 return vec[vec_pos];
361 return prev[component];
363 return prev[component];
364 }
365
366 #define MKVAL(vals) ((vals)[0] | ((vals)[1] << 3) | ((vals)[2] << 6))
367
368 /* Image mode - the hardest to comprehend MSS4 coding mode.
369 *
370 * In this mode all three 16x16 blocks are coded together with a method
371 * remotely similar to the methods employed in MSS1-MSS3.
372 * The idea is that every component has a vector of 1-4 most common symbols
373 * and an escape mode for reading new value from the bitstream. Decoding
374 * consists of retrieving pixel values from the vector or reading new ones
375 * from the bitstream; depending on flags read from the bitstream, these vector
376 * positions can be updated or reused from the state of the previous line
377 * or previous pixel.
378 */
380 uint8_t *picdst[3],
int mb_x,
int mb_y)
381 {
383 int vec_len[3];
384 int sel_len[3], sel_flag[3];
386 int prev_vec1 = 0, prev_split = 0;
387 int vals[3] = { 0 };
388 int prev_pix[3] = { 0 };
389 int prev_mode[16] = { 0 };
391
392 const int val_shift = ctx->
quality == 100 ? 0 : 2;
393
394 for (i = 0; i < 3; i++)
396
397 for (i = 0; i < 3; i++) {
399 for (j = 0; j < vec_len[i]; j++) {
403 }
404 sel_flag[i] = vec_len[i] > 1;
405 sel_len[i] = vec_len[i] > 2 ? vec_len[i] - 2 : 0;
406 }
407
408 for (j = 0; j < 16; j++) {
410 split = 0;
412 prev_mode[0] = 0;
413 vals[0] = vals[1] = vals[2] = 0;
414 mode = 2;
415 } else {
417 if (mode)
419 }
420 for (i = 0; i < 16; i++) {
421 if (mode <= 1) {
422 vals[0] = prev_mode[i] & 7;
423 vals[1] = (prev_mode[i] >> 3) & 7;
424 vals[2] = prev_mode[i] >> 6;
425 if (mode == 1 && i == split) {
427 }
428 } else if (mode == 2) {
431 }
432 for (k = 0; k < 3; k++)
434 vec_len[k], k,
435 val_shift, prev_pix);
436 prev_mode[i] =
MKVAL(vals);
437 }
438 } else {
441 if (split >= prev_split)
442 split++;
444 } else {
445 split = prev_split;
446 }
447 if (split) {
448 vals[0] = prev_mode[0] & 7;
449 vals[1] = (prev_mode[0] >> 3) & 7;
450 vals[2] = prev_mode[0] >> 6;
451 for (i = 0; i < 3; i++) {
452 for (k = 0; k <
split; k++) {
454 vec_len[i], i, val_shift,
455 prev_pix);
456 prev_mode[k] =
MKVAL(vals);
457 }
458 }
459 }
460
461 if (split != 16) {
462 vals[0] = prev_vec1 & 7;
463 vals[1] = (prev_vec1 >> 3) & 7;
464 vals[2] = prev_vec1 >> 6;
467 prev_vec1 =
MKVAL(vals);
468 }
469 for (i = 0; i < 3; i++) {
470 for (k = 0; k < 16 -
split; k++) {
472 vec_len[i], i, val_shift,
473 prev_pix);
474 prev_mode[split + k] =
MKVAL(vals);
475 }
476 }
477 }
478 }
479 }
480
481 for (i = 0; i < 3; i++)
482 for (j = 0; j < 16; j++)
483 memcpy(picdst[i] + mb_x * 16 + j * ctx->
pic->
linesize[i],
484 ctx->
imgbuf[i] + j * 16, 16);
485
486 return 0;
487 }
488
490 {
491 int i;
492
497
498 for (i = 0; i < 2; i++)
499 c->
prev_dc[0][mb_x * 2 + i] = 0;
500
501 for (i = 1; i < 3; i++) {
505 }
506 }
507
510 {
512 int buf_size = avpkt->
size;
518 int x,
y, i, mb_width, mb_height, blk_type;
520
523 "Frame should have at least %d bytes, got %d instead\n",
526 }
527
529 width = bytestream2_get_be16(&bc);
530 height = bytestream2_get_be16(&bc);
532 quality = bytestream2_get_byte(&bc);
533 frame_type = bytestream2_get_byte(&bc);
534
535 if (width > avctx->
width ||
536 height != avctx->
height) {
538 width, height);
540 }
541 if (quality < 1 || quality > 100) {
544 }
545 if ((frame_type & ~3) || frame_type == 3) {
548 }
549
552 "Empty frame found but it is not a skip frame.\n");
554 }
555
562 *got_frame = 1;
565
566 return buf_size;
567 }
568
571 for (i = 0; i < 2; i++)
573 }
574
576
577 mb_width =
FFALIGN(width, 16) >> 4;
578 mb_height =
FFALIGN(height, 16) >> 4;
582
584 for (y = 0; y < mb_height; y++) {
586 for (x = 0; x < mb_width; x++) {
588 switch (blk_type) {
592 "Error decoding DCT block %d,%d\n",
593 x, y);
595 }
596 break;
600 "Error decoding VQ block %d,%d\n",
601 x, y);
603 }
604 break;
609 }
610 break;
611 }
614 }
618 }
619
622
623 *got_frame = 1;
624
625 return buf_size;
626 }
627
629 {
631 int i;
632
634 for (i = 0; i < 3; i++)
637
638 return 0;
639 }
640
642 {
644 int i;
645
650 }
651 for (i = 0; i < 3; i++) {
658 }
659 }
660
665 }
666
668
669 return 0;
670 }
671
682 };