1 /*
2 * FFV1 encoder
3 *
4 * Copyright (c) 2003-2012 Michael Niedermayer <michaelni@gmx.at>
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 /**
24 * @file
25 * FF Video Codec 1 (a lossless codec) encoder
26 */
27
42
44 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
45 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
46 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
47 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
48 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
49 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
50 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
51 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
52 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
53 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
54 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
55 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
56 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1,
57 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
58 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
59 -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0,
60 };
61
63 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
64 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
65 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
66 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
67 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
68 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
69 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
70 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
71 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
72 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
73 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
74 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
75 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
76 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
77 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
78 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1,
79 };
80
82 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
83 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
84 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
85 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
86 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
87 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
88 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
89 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
90 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
91 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
92 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
93 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
94 -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3,
95 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
96 -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
97 -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0,
98 };
99
101 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
102 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
103 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
104 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
105 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
106 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
107 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
108 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
109 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
110 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
111 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
112 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
113 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
114 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4,
115 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
116 -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1,
117 };
118
120 0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49,
121 59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39,
122 40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52,
123 53, 74, 55, 57, 58, 58, 74, 60, 101, 61, 62, 84, 66, 66, 68, 69,
124 87, 82, 71, 97, 73, 73, 82, 75, 111, 77, 94, 78, 87, 81, 83, 97,
125 85, 83, 94, 86, 99, 89, 90, 99, 111, 92, 93, 134, 95, 98, 105, 98,
126 105, 110, 102, 108, 102, 118, 103, 106, 106, 113, 109, 112, 114, 112, 116, 125,
127 115, 116, 117, 117, 126, 119, 125, 121, 121, 123, 145, 124, 126, 131, 127, 129,
128 165, 130, 132, 138, 133, 135, 145, 136, 137, 139, 146, 141, 143, 142, 144, 148,
129 147, 155, 151, 149, 151, 150, 152, 157, 153, 154, 156, 168, 158, 162, 161, 160,
130 172, 163, 169, 164, 166, 184, 167, 170, 177, 174, 171, 173, 182, 176, 180, 178,
131 175, 189, 179, 181, 186, 183, 192, 185, 200, 187, 191, 188, 190, 197, 193, 196,
132 197, 194, 195, 196, 198, 202, 199, 201, 210, 203, 207, 204, 205, 206, 208, 214,
133 209, 211, 221, 212, 213, 215, 224, 216, 217, 218, 219, 220, 222, 228, 223, 225,
134 226, 224, 227, 229, 240, 230, 231, 232, 233, 234, 235, 236, 238, 239, 237, 242,
135 241, 243, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 255,
136 };
137
140 {
142 double l2tab[256];
143
144 for (i = 1; i < 256; i++)
145 l2tab[i] =
log2(i / 256.0);
146
147 for (i = 0; i < 256; i++) {
148 double best_len[256];
149 double p = i / 256.0;
150
151 for (j = 0; j < 256; j++)
152 best_len[j] = 1 << 30;
153
154 for (j =
FFMAX(i - 10, 1); j <
FFMIN(i + 11, 256); j++) {
155 double occ[256] = { 0 };
157 occ[j] = 1.0;
158 for (k = 0; k < 256; k++) {
159 double newocc[256] = { 0 };
160 for (m = 1; m < 256; m++)
161 if (occ[m]) {
162 len -=occ[
m]*( p *l2tab[
m]
163 + (1-p)*l2tab[256-m]);
164 }
165 if (len < best_len[k]) {
167 best_state[i][k] = j;
168 }
169 for (m = 0; m < 256; m++)
170 if (occ[m]) {
171 newocc[ one_state[
m]] += occ[
m] * p;
172 newocc[256 - one_state[256 -
m]] += occ[
m] * (1 - p);
173 }
174 memcpy(occ, newocc, sizeof(occ));
175 }
176 }
177 }
178 }
179
182 int is_signed,
185 {
186 int i;
187
188 #define put_rac(C, S, B) \
189 do { \
190 if (rc_stat) { \
191 rc_stat[*(S)][B]++; \
192 rc_stat2[(S) - state][B]++; \
193 } \
194 put_rac(C, S, B); \
195 } while (0)
196
197 if (v) {
201 if (e <= 9) {
202 for (i = 0; i < e; i++)
203 put_rac(c, state + 1 + i, 1);
// 1..10
205
206 for (i = e - 1; i >= 0; i--)
207 put_rac(c, state + 22 + i, (a >> i) & 1);
// 22..31
208
209 if (is_signed)
210 put_rac(c, state + 11 + e, v < 0);
// 11..21
211 } else {
212 for (i = 0; i < e; i++)
215
216 for (i = e - 1; i >= 0; i--)
217 put_rac(c, state + 22 +
FFMIN(i, 9), (a >> i) & 1);
// 22..31
218
219 if (is_signed)
220 put_rac(c, state + 11 + 10, v < 0);
// 11..21
221 }
222 } else {
224 }
225 #undef put_rac
226 }
227
229 int v,
int is_signed)
230 {
232 }
233
234
237 {
238 int i, k, code;
240
242 k = 0;
243 while (i < state->error_sum) { // FIXME: optimize
244 k++;
245 i += i;
246 }
247
249
250 #if 0 // JPEG LS
251 if (k == 0 && 2 * state->
drift <= -state->
count)
252 code = v ^ (-1);
253 else
255 #else
256 code = v ^ ((2 * state->
drift + state->
count) >> 31);
257 #endif
258
259 av_dlog(NULL,
"v:%d/%d bias:%d error:%d drift:%d count:%d k:%d\n", v, code,
262
264 }
265
268 int plane_index,
int bits)
269 {
272 int x;
274 int run_count = 0;
275 int run_mode = 0;
276
281 }
282 } else {
286 }
287 }
288
289 for (x = 0; x < w; x++) {
291
292 context =
get_context(p, sample[0] + x, sample[1] + x, sample[2] + x);
293 diff = sample[0][x] -
predict(sample[0] + x, sample[1] + x);
294
295 if (context < 0) {
296 context = -context;
298 }
299
300 diff =
fold(diff, bits);
301
306 } else {
308 }
309 } else {
310 if (context == 0)
311 run_mode = 1;
312
313 if (run_mode) {
314 if (diff) {
317 run_index++;
319 }
320
322 if (run_index)
323 run_index--;
324 run_count = 0;
325 run_mode = 0;
326 if (diff > 0)
327 diff--;
328 } else {
329 run_count++;
330 }
331 }
332
333 av_dlog(s->
avctx,
"count:%d index:%d, mode:%d, x:%d pos:%d\n",
334 run_count, run_index, run_mode, x,
336
337 if (run_mode == 0)
339 }
340 }
341 if (run_mode) {
344 run_index++;
346 }
347
348 if (run_count)
350 }
352
353 return 0;
354 }
355
357 int stride,
int plane_index)
358 {
363
365
366 for (y = 0; y < h; y++) {
367 for (i = 0; i < ring_size; i++)
368 sample[i] = s->
sample_buffer + (w + 6) * ((h + i -
y) % ring_size) + 3;
369
370 sample[0][-1]= sample[1][0 ];
371 sample[1][ w]= sample[1][w-1];
372 // { START_TIMER
374 for (x = 0; x < w; x++)
375 sample[0][x] = src[x + stride * y];
377 } else {
379 for (x = 0; x < w; x++) {
380 sample[0][x] = ((uint16_t*)(src + stride*y))[x];
381 }
382 } else {
383 for (x = 0; x < w; x++) {
385 }
386 }
388 }
389 // STOP_TIMER("encode line") }
390 }
391 }
392
394 {
401
403
406
407 for (y = 0; y < h; y++) {
408 for (i = 0; i < ring_size; i++)
410 sample[p][i]= s->
sample_buffer + p*ring_size*(w+6) + ((h+i-
y)%ring_size)*(w+6) + 3;
411
412 for (x = 0; x < w; x++) {
414 if (lbd) {
415 unsigned v = *((uint32_t*)(src[0] + x*4 + stride[0]*y));
416 b = v & 0xFF;
417 g = (v >> 8) & 0xFF;
418 r = (v >> 16) & 0xFF;
420 } else {
421 b = *((uint16_t*)(src[0] + x*2 + stride[0]*y));
422 g = *((uint16_t*)(src[1] + x*2 + stride[1]*y));
423 r = *((uint16_t*)(src[2] + x*2 + stride[2]*y));
424 }
425
431
436 }
438 sample[p][0][-1] = sample[p][1][0 ];
439 sample[p][1][ w] = sample[p][1][w-1];
440 if (lbd)
442 else
443 encode_line(s, w, sample[p], (p + 1) / 2, bits + 1);
444 }
445 }
446 }
447
449 {
450 int last = 0;
451 int i;
453 memset(state, 128, sizeof(state));
454
455 for (i = 1; i < 128; i++)
456 if (quant_table[i] != quant_table[i - 1]) {
458 last = i;
459 }
461 }
462
465 {
466 int i;
467 for (i = 0; i < 5; i++)
469 }
470
472 {
474 int i, j;
476
477 memset(state, 128, sizeof(state));
478
483 for (i = 1; i < 256; i++)
486 }
494
506 0);
509 0);
513 }
514 }
515 }
516 }
517
519 {
522 int i, j, k;
525
526 memset(state2, 128, sizeof(state2));
527 memset(state, 128, sizeof(state));
528
530 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
534
540 }
541
544 for (i = 1; i < 256; i++)
546
555
559
563 break;
571 }
572 } else {
574 }
575 }
576
580 }
581
586
587 return 0;
588 }
589
591 {
592 int i, i2, changed, print = 0;
593
594 do {
595 changed = 0;
596 for (i = 12; i < 244; i++) {
597 for (i2 = i + 1; i2 < 245 && i2 < i + 4; i2++) {
598
599 #define COST(old, new) \
600 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
601 s->rc_stat[old][1] * -log2((new) / 256.0)
602
603 #define COST2(old, new) \
604 COST(old, new) + COST(256 - (old), 256 - (new))
605
608 if (size0 - sizeX > size0*(1e-14) && i != 128 && i2 != 128) {
609 int j;
610 FFSWAP(
int, stt[i], stt[i2]);
613 if (i != 256 - i2) {
614 FFSWAP(
int, stt[256 - i], stt[256 - i2]);
617 }
618 for (j = 1; j < 256; j++) {
619 if (stt[j] == i)
620 stt[j] = i2;
621 else if (stt[j] == i2)
622 stt[j] = i;
623 if (i != 256 - i2) {
624 if (stt[256 - j] == 256 - i)
625 stt[256 - j] = 256 - i2;
626 else if (stt[256 - j] == 256 - i2)
627 stt[256 - j] = 256 - i;
628 }
629 }
630 print = changed = 1;
631 }
632 }
633 }
634 } while (changed);
635 return print;
636 }
637
639 {
643
646
648
651
654 }
655
658 }
659
661 av_log(avctx,
AV_LOG_ERROR,
"Version 2 needed for requested features but version 2 is experimental and not enabled\n");
663 }
664
666
688 }
692 }
696 }
698 av_log(avctx,
AV_LOG_ERROR,
"bits_per_raw_sample of more than 8 needs -coder 1 currently\n");
700 }
711 break;
718 break;
722 break;
725 break;
743 break;
744 default:
747 }
749 av_log(avctx,
AV_LOG_WARNING,
"Storing alpha plane, this will require a recent FFV1 decoder to playback!\n");
750 }
754 }
755
757 for (i = 1; i < 256; i++)
759
760 for (i = 0; i < 256; i++) {
771 } else {
780 }
781 }
786
789
793 }
794
797
802
809 }
810 }
815 char *next;
816
818
819 for (;;) {
820 for (j = 0; j < 256; j++)
821 for (i = 0; i < 2; i++) {
822 s->
rc_stat[j][i] = strtol(p, &next, 0);
823 if (next == p) {
825 "2Pass file invalid at %d %d [%s]\n", j, i, p);
827 }
828 p = next;
829 }
832 for (k = 0; k < 32; k++)
833 for (m = 0; m < 2; m++) {
834 s->
rc_stat2[i][j][k][
m] = strtol(p, &next, 0);
835 if (next == p) {
837 "2Pass file invalid at %d %d %d %d [%s]\n",
838 i, j, k, m, p);
840 }
841 p = next;
842 }
843 }
844 gob_count = strtol(p, &next, 0);
845 if (next == p || gob_count <= 0) {
848 }
849 p = next;
850 while (*p == '\n' || *p == ' ')
851 p++;
852 if (p[0] == 0)
853 break;
854 }
856
858
860 for (k = 0; k < 32; k++) {
862 int jp = 0;
864 double p = 128;
867 p = 256.0 *
b / (a +
b);
869 best_state[av_clip(
round(p), 1, 255)][av_clip((a +
b) / gob_count, 0, 255)];
870 for(jp++; jp<j; jp++)
873 }
877 p = 256.0 *
b / (a +
b);
878 }
880 best_state[av_clip(
round(p), 1, 255)][av_clip((a +
b) / gob_count, 0, 255)];
881 }
882 }
883 }
884 }
885
891 goto slices_ok;
892 }
893 }
895 "Unsupported number %d of slices requested, please specify a "
896 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
899 slices_ok:
901 }
902
907
908 #define STATS_OUT_SIZE 1024 * 1024 * 6
921 }
922 }
923
924 return 0;
925 }
926
928 {
931 int j;
932 memset(state, 128, sizeof(state));
933
941 }
944 else
948 }
949
951 {
960
965 }
973 }
974
975 if (f->colorspace == 0) {
978 const int cx = x >> f->chroma_h_shift;
979 const int cy =
y >> f->chroma_v_shift;
980
982
983 if (f->chroma_planes) {
984 encode_plane(fs, p->data[1] + ps*cx+cy*p->linesize[1], chroma_width, chroma_height, p->linesize[1], 1);
985 encode_plane(fs, p->data[2] + ps*cx+cy*p->linesize[2], chroma_width, chroma_height, p->linesize[2], 1);
986 }
987 if (fs->transparency)
989 } else {
990 uint8_t *planes[3] = {p->data[0] + ps*x +
y*p->linesize[0],
991 p->data[1] + ps*x +
y*p->linesize[1],
992 p->data[2] + ps*x +
y*p->linesize[2]};
994 }
996
997 return 0;
998 }
999
1001 const AVFrame *pict,
int *got_packet)
1002 {
1006 int used_count = 0;
1010
1014
1017
1022
1028 } else {
1031 }
1032
1034 int i;
1035 for (i = 1; i < 256; i++) {
1038 }
1039 }
1040
1046 }
1049
1053 int bytes;
1054
1059 } else {
1062 }
1063 if (i > 0 || f->
version > 2) {
1067 AV_WB24(buf_p + bytes, bytes);
1068 bytes += 3;
1069 }
1072 buf_p[bytes++] = 0;
1075 bytes += 4;
1076 }
1077 buf_p += bytes;
1078 }
1079
1084
1088
1091 for (i = 0; i < 256; i++) {
1094 }
1097 for (m = 0; m < 32; m++) {
1100 }
1101 }
1102 }
1103
1104 for (j = 0; j < 256; j++) {
1105 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1107 p += strlen(p);
1108 }
1110
1113 for (m = 0; m < 32; m++) {
1114 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1116 p += strlen(p);
1117 }
1118 }
1122
1126 *got_packet = 1;
1127
1128 return 0;
1129 }
1130
1131 #define OFFSET(x) offsetof(FFV1Context, x)
1132 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1135 { NULL }
1136 };
1137
1143 };
1144
1146 { "coder", "-1" },
1147 { NULL },
1148 };
1149
1168
1169 },
1173 };