1 /*
2 * FFV1 encoder
3 *
4 * Copyright (c) 2003-2013 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
34
43
45 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
48 1, 1, 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, -2,
57 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
60 -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0,
61 };
62
64 0, 1, 1, 1, 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, -2, -2, -2,
79 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1,
80 };
81
83 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
84 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
85 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
86 3, 3, 3, 3, 3, 3, 3, 3, 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, -4, -4, -4, -4, -4, -4, -4,
95 -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3,
96 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
97 -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
98 -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0,
99 };
100
102 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
103 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
104 4, 4, 4, 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, -5, -5,
115 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4,
116 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
117 -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1,
118 };
119
121 0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49,
122 59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39,
123 40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52,
124 53, 74, 55, 57, 58, 58, 74, 60, 101, 61, 62, 84, 66, 66, 68, 69,
125 87, 82, 71, 97, 73, 73, 82, 75, 111, 77, 94, 78, 87, 81, 83, 97,
126 85, 83, 94, 86, 99, 89, 90, 99, 111, 92, 93, 134, 95, 98, 105, 98,
127 105, 110, 102, 108, 102, 118, 103, 106, 106, 113, 109, 112, 114, 112, 116, 125,
128 115, 116, 117, 117, 126, 119, 125, 121, 121, 123, 145, 124, 126, 131, 127, 129,
129 165, 130, 132, 138, 133, 135, 145, 136, 137, 139, 146, 141, 143, 142, 144, 148,
130 147, 155, 151, 149, 151, 150, 152, 157, 153, 154, 156, 168, 158, 162, 161, 160,
131 172, 163, 169, 164, 166, 184, 167, 170, 177, 174, 171, 173, 182, 176, 180, 178,
132 175, 189, 179, 181, 186, 183, 192, 185, 200, 187, 191, 188, 190, 197, 193, 196,
133 197, 194, 195, 196, 198, 202, 199, 201, 210, 203, 207, 204, 205, 206, 208, 214,
134 209, 211, 221, 212, 213, 215, 224, 216, 217, 218, 219, 220, 222, 228, 223, 225,
135 226, 224, 227, 229, 240, 230, 231, 232, 233, 234, 235, 236, 238, 239, 237, 242,
136 241, 243, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 255,
137 };
138
140 const uint8_t one_state[256])
141 {
143 uint32_t l2tab[256];
144
145 for (
i = 1;
i < 256;
i++)
146 l2tab[
i] = -
log2(
i / 256.0) * ((1
U << 31) / 8);
147
148 for (
i = 0;
i < 256;
i++) {
149 uint64_t best_len[256];
150
151 for (j = 0; j < 256; j++)
152 best_len[j] = UINT64_MAX;
153
154 for (j =
FFMAX(
i - 10, 1); j <
FFMIN(
i + 11, 256); j++) {
155 uint32_t occ[256] = { 0 };
157 occ[j] = UINT32_MAX;
158
159 if (!one_state[j])
160 continue;
161
162 for (k = 0; k < 256; k++) {
163 uint32_t newocc[256] = { 0 };
164 for (m = 1; m < 256; m++)
165 if (occ[m]) {
166 len += (occ[m]*((
i *(uint64_t)l2tab[ m]
167 + (256-
i)*(uint64_t)l2tab[256-m])>>8)) >> 8;
168 }
169 if (
len < best_len[k]) {
171 best_state[
i][k] = j;
172 }
173 for (m = 1; m < 256; m++)
174 if (occ[m]) {
175 newocc[ one_state[ m]] += occ[m] * (uint64_t)
i >> 8;
176 newocc[256 - one_state[256 - m]] += occ[m] * (uint64_t)(256 -
i) >> 8;
177 }
178 memcpy(occ, newocc, sizeof(occ));
179 }
180 }
181 }
182 }
183
185 uint8_t *
state,
int v,
186 int is_signed,
189 {
191
192 #define put_rac(C, S, B) \
193 do { \
194 if (rc_stat) { \
195 rc_stat[*(S)][B]++; \
196 rc_stat2[(S) - state][B]++; \
197 } \
198 put_rac(C, S, B); \
199 } while (0)
200
201 if (v) {
205 if (e <= 9) {
206 for (
i = 0;
i < e;
i++)
209
210 for (
i = e - 1;
i >= 0;
i--)
212
213 if (is_signed)
215 } else {
216 for (
i = 0;
i < e;
i++)
219
220 for (
i = e - 1;
i >= 0;
i--)
222
223 if (is_signed)
225 }
226 } else {
228 }
229 #undef put_rac
230 }
231
233 int v, int is_signed)
234 {
236 }
237
238
241 {
244
246 k = 0;
247 while (i < state->error_sum) { // FIXME: optimize
248 k++;
250 }
251
253
255
256 ff_dlog(
NULL,
"v:%d/%d bias:%d error:%d drift:%d count:%d k:%d\n", v,
code,
259
261 }
262
263 #define TYPE int16_t
264 #define RENAME(name) name
266 #undef TYPE
267 #undef RENAME
268
270 #define RENAME(name) name ## 32
272
274 int stride,
int plane_index,
int pixel_stride)
275 {
277 const int ring_size =
s->context_model ? 3 : 2;
280
281 memset(
s->sample_buffer, 0,
ring_size * (
w + 6) *
sizeof(*
s->sample_buffer));
282
283 for (y = 0; y <
h; y++) {
286
289 if (
s->bits_per_raw_sample <= 8) {
290 for (x = 0; x <
w; x++)
294 } else {
295 if (
s->packed_at_lsb) {
296 for (x = 0; x <
w; x++) {
298 }
299 } else {
300 for (x = 0; x <
w; x++) {
301 sample[0][x] = ((uint16_t*)(
src +
stride*y))[x] >> (16 -
s->bits_per_raw_sample);
302 }
303 }
306 }
307 }
308 return 0;
309 }
310
312 {
313 int last = 0;
317
318 for (
i = 1;
i < 128;
i++)
322 }
324 }
325
328 {
330 for (
i = 0;
i < 5;
i++)
332 }
333
335 int nb_contexts)
336 {
337 if (!initial_state)
338 return 0;
339 for (
int i = 0;
i < nb_contexts;
i++)
341 if (initial_state[
i][j] != 128)
342 return 1;
343 return 0;
344 }
345
347 {
351
353
354 if (
f->version < 2) {
358 for (
i = 1;
i < 256;
i++)
360 f->state_transition[
i] -
c->one_state[
i], 1);
361 }
369
371 }
else if (
f->version < 3) {
373 for (
i = 0;
i <
f->slice_count;
i++) {
376 (
fs->slice_x + 1) *
f->num_h_slices /
f->width, 0);
378 (
fs->slice_y + 1) *
f->num_v_slices /
f->height, 0);
380 (
fs->slice_width + 1) *
f->num_h_slices /
f->width - 1,
381 0);
383 (
fs->slice_height + 1) *
f->num_v_slices /
f->height - 1,
384 0);
385 for (j = 0; j <
f->plane_count; j++) {
387 av_assert0(
f->plane[j].quant_table_index ==
f->context_model);
388 }
389 }
390 }
391 }
392
394 {
399 unsigned v;
400
401 memset(state2, 128, sizeof(state2));
403
404 f->avctx->extradata_size = 10000 + 4 +
405 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
407 if (!
f->avctx->extradata)
411
413 if (
f->version > 2) {
414 if (
f->version == 3) {
415 f->micro_version = 4;
416 }
else if (
f->version == 4)
417 f->micro_version = 2;
419 }
420
423 for (
i = 1;
i < 256;
i++)
425
434
436 for (
i = 0;
i <
f->quant_table_count;
i++)
438
439 for (
i = 0;
i <
f->quant_table_count;
i++) {
442 for (j = 0; j <
f->context_count[
i]; j++)
444 int pred = j ?
f->initial_states[
i][j - 1][k] : 128;
446 (int8_t)(
f->initial_states[
i][j][k] -
pred), 1);
447 }
448 } else {
450 }
451 }
452
453 if (
f->version > 2) {
456 }
457
460 AV_WL32(
f->avctx->extradata +
f->avctx->extradata_size, v);
461 f->avctx->extradata_size += 4;
462
463 return 0;
464 }
465
467 {
468 int i, i2, changed,
print = 0;
469
470 do {
471 changed = 0;
472 for (
i = 12;
i < 244;
i++) {
473 for (i2 =
i + 1; i2 < 245 && i2 <
i + 4; i2++) {
474
475 #define COST(old, new) \
476 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
477 s->rc_stat[old][1] * -log2((new) / 256.0)
478
479 #define COST2(old, new) \
480 COST(old, new) + COST(256 - (old), 256 - (new))
481
484 if (size0 - sizeX > size0*(1e-14) &&
i != 128 && i2 != 128) {
485 int j;
487 FFSWAP(
int,
s->rc_stat[
i][0],
s->rc_stat[i2][0]);
488 FFSWAP(
int,
s->rc_stat[
i][1],
s->rc_stat[i2][1]);
490 FFSWAP(
int, stt[256 -
i], stt[256 - i2]);
491 FFSWAP(
int,
s->rc_stat[256 -
i][0],
s->rc_stat[256 - i2][0]);
492 FFSWAP(
int,
s->rc_stat[256 -
i][1],
s->rc_stat[256 - i2][1]);
493 }
494 for (j = 1; j < 256; j++) {
496 stt[j] = i2;
497 else if (stt[j] == i2)
500 if (stt[256 - j] == 256 -
i)
501 stt[256 - j] = 256 - i2;
502 else if (stt[256 - j] == 256 - i2)
503 stt[256 - j] = 256 -
i;
504 }
505 }
507 }
508 }
509 }
510 } while (changed);
512 }
513
515 {
519
522
524
527 s->version =
FFMAX(
s->version, 2);
528
529 // Unspecified level & slices, we choose version 1.2+ to ensure multithreaded decodability
531 s->version =
FFMAX(
s->version, 2);
532
535 }
540 }
542 }
543
545 s->ec = (
s->version >= 3);
546 }
547
548 // CRC requires version 3+
550 s->version =
FFMAX(
s->version, 3);
551
553 av_log(
avctx,
AV_LOG_ERROR,
"Version 2 needed for requested features but version 2 is experimental and not enabled\n");
555 }
556
557 if (
s->ac == 1)
// Compatbility with common command line usage
561
572 s->bits_per_raw_sample = 9;
582 s->bits_per_raw_sample = 10;
589 s->bits_per_raw_sample = 12;
594 s->bits_per_raw_sample = 14;
595 s->packed_at_lsb = 1;
604 s->bits_per_raw_sample = 16;
605 }
else if (!
s->bits_per_raw_sample) {
607 }
608 if (
s->bits_per_raw_sample <= 8) {
611 }
612 s->version =
FFMAX(
s->version, 1);
624 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
628 s->bits_per_raw_sample = 8;
629 else if (!
s->bits_per_raw_sample)
630 s->bits_per_raw_sample = 8;
631 break;
635 s->chroma_planes = 1;
636 s->bits_per_raw_sample = 8;
637 break;
641 s->chroma_planes = 1;
642 s->bits_per_raw_sample = 16;
644 s->version =
FFMAX(
s->version, 1);
645 break;
648 s->chroma_planes = 1;
649 s->bits_per_raw_sample = 16;
651 s->version =
FFMAX(
s->version, 1);
652 break;
655 s->chroma_planes = 1;
656 s->bits_per_raw_sample = 8;
657 break;
660 s->bits_per_raw_sample = 9;
664 s->bits_per_raw_sample = 10;
668 s->bits_per_raw_sample = 12;
671 s->bits_per_raw_sample = 14;
675 s->bits_per_raw_sample = 16;
676 else if (!
s->bits_per_raw_sample)
680 s->chroma_planes = 1;
681 if (
s->bits_per_raw_sample >= 16) {
683 }
684 s->version =
FFMAX(
s->version, 1);
685 break;
686 default:
689 }
691
692 if (
s->bits_per_raw_sample > 8) {
695 "bits_per_raw_sample > 8, forcing range coder\n");
697 }
698 }
699
701 for (
i = 1;
i < 256;
i++)
703 } else {
706 for (
i = 1;
i < 256;
i++)
707 s->state_transition[
i] =
c.one_state[
i];
708 }
709
710 for (
i = 0;
i < 256;
i++) {
711 s->quant_table_count = 2;
712 if (
s->bits_per_raw_sample <= 8) {
718 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
719 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
720 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
721 } else {
730 }
731 }
732 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
733 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
734 memcpy(
s->quant_table,
s->quant_tables[
s->context_model],
735 sizeof(
s->quant_table));
736
737 for (
i = 0;
i <
s->plane_count;
i++) {
739
743 }
744
747
748 if (!
s->transparency)
750 if (!
s->chroma_planes &&
s->version > 3)
752
756
757 s->picture_number = 0;
758
760 for (
i = 0;
i <
s->quant_table_count;
i++) {
762 sizeof(*
s->rc_stat2[
i]));
765 }
766 }
771 char *next;
772 if (!best_state)
774
776
777 for (;;) {
778 for (j = 0; j < 256; j++)
779 for (
i = 0;
i < 2;
i++) {
780 s->rc_stat[j][
i] = strtol(p, &next, 0);
781 if (next == p) {
783 "2Pass file invalid at %d %d [%s]\n", j,
i, p);
786 }
787 p = next;
788 }
789 for (
i = 0;
i <
s->quant_table_count;
i++)
790 for (j = 0; j <
s->context_count[
i]; j++) {
791 for (k = 0; k < 32; k++)
792 for (m = 0; m < 2; m++) {
793 s->rc_stat2[
i][j][k][m] = strtol(p, &next, 0);
794 if (next == p) {
796 "2Pass file invalid at %d %d %d %d [%s]\n",
800 }
801 p = next;
802 }
803 }
809 }
810 p = next;
811 while (*p == '\n' || *p == ' ')
812 p++;
813 if (p[0] == 0)
814 break;
815 }
818
820
821 for (
i = 0;
i <
s->quant_table_count;
i++) {
822 for (k = 0; k < 32; k++) {
824 int jp = 0;
825 for (j = 0; j <
s->context_count[
i]; j++) {
826 double p = 128;
827 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
829 p = 256.0 *
b / (
a +
b);
830 s->initial_states[
i][jp][k] =
832 for(jp++; jp<j; jp++)
833 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
835 }
836 a +=
s->rc_stat2[
i][j][k][0];
837 b +=
s->rc_stat2[
i][j][k][1];
839 p = 256.0 *
b / (
a +
b);
840 }
841 s->initial_states[
i][j][k] =
843 }
844 }
845 }
847 }
848
849 if (
s->version > 1) {
854
855 s->num_v_slices =
FFMIN(
s->num_v_slices, max_v_slices);
856
857 for (;
s->num_v_slices < 32;
s->num_v_slices++) {
858 for (
s->num_h_slices =
s->num_v_slices;
s->num_h_slices < 2*
s->num_v_slices;
s->num_h_slices++) {
859 int maxw = (
avctx->
width +
s->num_h_slices - 1) /
s->num_h_slices;
860 int maxh = (
avctx->
height +
s->num_v_slices - 1) /
s->num_v_slices;
861 if (
s->num_h_slices > max_h_slices ||
s->num_v_slices > max_v_slices)
862 continue;
863 if (maxw * maxh * (int64_t)(
s->bits_per_raw_sample+1) *
plane_count > 8<<24)
864 continue;
866 goto slices_ok;
867 }
868 }
870 "Unsupported number %d of slices requested, please specify a "
871 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
874 slices_ok:
877 }
878
881 s->slice_count =
s->max_slice_count;
884
885 #define STATS_OUT_SIZE 1024 * 1024 * 6
890 for (
i = 0;
i <
s->quant_table_count;
i++)
891 for (j = 0; j <
s->max_slice_count; j++) {
898 }
899 }
900
901 return 0;
902 }
903
905 {
908 int j;
910
915 for (j=0; j<
f->plane_count; j++) {
917 av_assert0(
f->plane[j].quant_table_index ==
f->context_model);
918 }
919 if (!
f->cur_enc_frame->interlaced_frame)
921 else
925 if (
f->version > 3) {
927 if (
fs->slice_coding_mode == 1)
930 if (
fs->slice_coding_mode != 1) {
933 }
934 }
935 }
936
938 {
939 #define NB_Y_COEFF 15
940 static const int rct_y_coeff[15][2] = {
941 {0, 0}, // 4G
942 {1, 1}, // R + 2G + B
943 {2, 2}, // 2R + 2B
944 {0, 2}, // 2G + 2B
945 {2, 0}, // 2R + 2G
946 {4, 0}, // 4R
947 {0, 4}, // 4B
948
949 {0, 3}, // 1G + 3B
950 {3, 0}, // 3R + 1G
951 {3, 1}, // 3R + B
952 {1, 3}, // R + 3B
953 {1, 2}, // R + G + 2B
954 {2, 1}, // 2R + G + B
955 {0, 1}, // 3G + B
956 {1, 0}, // R + 3G
957 };
958
960 int x, y,
i, p, best;
962 int lbd =
fs->bits_per_raw_sample <= 8;
963
964 for (y = 0; y <
h; y++) {
965 int lastr=0, lastg=0, lastb=0;
966 for (p = 0; p < 3; p++)
968
969 for (x = 0; x <
w; x++) {
971 int ab, ag, ar;
972 if (lbd) {
973 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
976 r = (v >> 16) & 0xFF;
977 } else {
978 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
979 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
980 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
981 }
982
986 if (x && y) {
987 int bg = ag -
sample[0][x];
988 int bb = ab -
sample[1][x];
989 int br = ar -
sample[2][x];
990
991 br -= bg;
992 bb -= bg;
993
995 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
996 }
997
998 }
1002
1006 }
1007 }
1008
1009 best = 0;
1011 if (stat[
i] < stat[best])
1013 }
1014
1015 fs->slice_rct_by_coef = rct_y_coeff[best][1];
1016 fs->slice_rct_ry_coef = rct_y_coeff[best][0];
1017 }
1018
1020 {
1025 int x =
fs->slice_x;
1026 int y =
fs->slice_y;
1027 const AVFrame *
const p =
f->cur_enc_frame;
1035
1036 fs->slice_coding_mode = 0;
1037 if (
f->version > 3) {
1039 } else {
1040 fs->slice_rct_by_coef = 1;
1041 fs->slice_rct_ry_coef = 1;
1042 }
1043
1044 retry:
1047 if (
f->version > 2) {
1049 }
1053 fs->c.bytestream_start +
fs->ac_byte_count,
1054 fs->c.bytestream_end -
fs->c.bytestream_start -
fs->ac_byte_count);
1055 }
1056
1060 const int cx = x >>
f->chroma_h_shift;
1061 const int cy = y >>
f->chroma_v_shift;
1062
1064
1065 if (
f->chroma_planes) {
1068 }
1069 if (
fs->transparency)
1074 }
else if (
f->use32bit) {
1076 } else {
1078 }
1079
1082 if (
fs->version < 4 || !
fs->ac) {
1085 }
1087 fs->slice_coding_mode = 1;
1089 goto retry;
1090 }
1091
1092 return 0;
1093 }
1094
1096 const AVFrame *pict,
int *got_packet)
1097 {
1100 uint8_t keystate = 128;
1101 uint8_t *buf_p;
1105
1106 if(!pict) {
1108 int j, k, m;
1111
1112 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1113 for (
i = 0;
i <
f->quant_table_count;
i++)
1114 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1115
1117 for (j = 0; j <
f->slice_count; j++) {
1119 for (
i = 0;
i < 256;
i++) {
1120 f->rc_stat[
i][0] +=
fs->rc_stat[
i][0];
1121 f->rc_stat[
i][1] +=
fs->rc_stat[
i][1];
1122 }
1123 for (
i = 0;
i <
f->quant_table_count;
i++) {
1124 for (k = 0; k <
f->context_count[
i]; k++)
1125 for (m = 0; m < 32; m++) {
1126 f->rc_stat2[
i][k][m][0] +=
fs->rc_stat2[
i][k][m][0];
1127 f->rc_stat2[
i][k][m][1] +=
fs->rc_stat2[
i][k][m][1];
1128 }
1129 }
1130 }
1131
1132 for (j = 0; j < 256; j++) {
1133 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1134 f->rc_stat[j][0],
f->rc_stat[j][1]);
1135 p += strlen(p);
1136 }
1138
1139 for (
i = 0;
i <
f->quant_table_count;
i++) {
1140 for (j = 0; j <
f->context_count[
i]; j++)
1141 for (m = 0; m < 32; m++) {
1142 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1143 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1144 p += strlen(p);
1145 }
1146 }
1147 snprintf(p, end - p,
"%d\n",
f->gob_count);
1148 }
1149 return 0;
1150 }
1151
1154
1158 }
1159
1162
1165
1166 f->cur_enc_frame = pict;
1167
1173 } else {
1176 }
1177
1180 for (
i = 1;
i < 256;
i++) {
1181 c->one_state[
i] =
f->state_transition[
i];
1182 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1183 }
1184 }
1185
1186 for (
i = 0;
i <
f->slice_count;
i++) {
1192 } else {
1195 fs->c.bytestream_end =
fs->c.bytestream_start +
len;
1196 }
1197 }
1199 f->slice_count,
sizeof(
void *));
1200
1202 for (
i = 0;
i <
f->slice_count;
i++) {
1204 int bytes;
1205
1208 } else {
1211 }
1212 if (
i > 0 ||
f->version > 2) {
1214 memmove(buf_p,
fs->c.bytestream_start, bytes);
1216 AV_WB24(buf_p + bytes, bytes);
1217 bytes += 3;
1218 }
1220 unsigned v;
1221 buf_p[bytes++] = 0;
1224 bytes += 4;
1225 }
1226 buf_p += bytes;
1227 }
1228
1231
1232 f->picture_number++;
1235 *got_packet = 1;
1236
1237 return 0;
1238 }
1239
1240 #define OFFSET(x) offsetof(FFV1Context, x)
1241 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1245 { .i64 = 0 }, -2, 2,
VE,
"coder" },
1252 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1253 { .i64 = 1 }, INT_MIN, INT_MAX,
VE,
"coder" },
1255 { .i64 = 0 }, 0, 1,
VE },
1256
1258 };
1259
1265 };
1266
1300
1301 },
1304 };