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,
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,
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,
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,
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,
140 const uint8_t one_state[256])
145 for (
i = 1;
i < 256;
i++)
146 l2tab[
i] = -
log2(
i / 256.0) * ((1
U << 31) / 8);
148 for (
i = 0;
i < 256;
i++) {
149 uint64_t best_len[256];
151 for (j = 0; j < 256; j++)
152 best_len[j] = UINT64_MAX;
154 for (j =
FFMAX(
i - 10, 1); j <
FFMIN(
i + 11, 256); j++) {
155 uint32_t occ[256] = { 0 };
162 for (k = 0; k < 256; k++) {
163 uint32_t newocc[256] = { 0 };
164 for (m = 1; m < 256; m++)
166 len += (occ[m]*((
i *(uint64_t)l2tab[ m]
167 + (256-
i)*(uint64_t)l2tab[256-m])>>8)) >> 8;
169 if (
len < best_len[k]) {
171 best_state[
i][k] = j;
173 for (m = 1; m < 256; 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;
178 memcpy(occ, newocc,
sizeof(occ));
185 uint8_t *
state,
int v,
187 uint64_t rc_stat[256][2],
188 uint64_t rc_stat2[32][2])
192 #define put_rac(C, S, B) \
195 rc_stat[*(S)][B]++; \
196 rc_stat2[(S) - state][B]++; \
202 const unsigned a = is_signed ?
FFABS(v) : v;
206 for (
i = 0;
i < e;
i++)
210 for (
i = e - 1;
i >= 0;
i--)
216 for (
i = 0;
i < e;
i++)
220 for (
i = e - 1;
i >= 0;
i--)
233 int v,
int is_signed)
247 while (i < state->error_sum) {
256 ff_dlog(
NULL,
"v:%d/%d bias:%d error:%d drift:%d count:%d k:%d\n", v,
code,
264 #define RENAME(name) name
270 #define RENAME(name) name ## 32
274 const uint8_t *
src,
int w,
int h,
275 int stride,
int plane_index,
int pixel_stride,
int ac)
279 const int ring_size =
f->context_model ? 3 : 2;
285 for (y = 0; y <
h; y++) {
291 if (
f->bits_per_raw_sample <= 8) {
292 for (x = 0; x <
w; x++)
297 if (
f->packed_at_lsb) {
298 for (x = 0; x <
w; x++) {
302 for (x = 0; x <
w; x++) {
303 sample[0][x] = ((uint16_t*)(
src +
stride*y))[x] >> (16 -
f->bits_per_raw_sample);
332 for (
i = 0;
i < 5;
i++)
341 for (
int i = 0;
i < nb_contexts;
i++)
343 if (initial_state[
i][j] != 128)
356 if (
f->version < 2) {
360 for (
i = 1;
i < 256;
i++)
362 f->state_transition[
i] -
c->one_state[
i], 1);
373 }
else if (
f->version < 3) {
375 for (
i = 0;
i <
f->slice_count;
i++) {
378 (
fs->slice_x + 1) *
f->num_h_slices /
f->width, 0);
380 (
fs->slice_y + 1) *
f->num_v_slices /
f->height, 0);
382 (
fs->slice_width + 1) *
f->num_h_slices /
f->width - 1,
385 (
fs->slice_height + 1) *
f->num_v_slices /
f->height - 1,
387 for (j = 0; j <
f->plane_count; j++) {
389 av_assert0(
fs->plane[j].quant_table_index ==
f->context_model);
405 memset(state2, 128,
sizeof(state2));
408 f->avctx->extradata_size = 10000 + 4 +
409 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
411 if (!
f->avctx->extradata)
417 f->combined_version =
f->version << 16;
418 if (
f->version > 2) {
419 if (
f->version == 3) {
420 f->micro_version = 4;
421 }
else if (
f->version == 4)
422 f->micro_version = 3;
423 f->combined_version +=
f->micro_version;
429 for (
i = 1;
i < 256;
i++)
442 for (
i = 0;
i <
f->quant_table_count;
i++)
445 for (
i = 0;
i <
f->quant_table_count;
i++) {
448 for (j = 0; j <
f->context_count[
i]; j++)
450 int pred = j ?
f->initial_states[
i][j - 1][k] : 128;
452 (int8_t)(
f->initial_states[
i][j][k] -
pred), 1);
459 if (
f->version > 2) {
466 AV_WL32(
f->avctx->extradata +
f->avctx->extradata_size, v);
467 f->avctx->extradata_size += 4;
474 int i, i2, changed,
print = 0;
478 for (
i = 12;
i < 244;
i++) {
479 for (i2 =
i + 1; i2 < 245 && i2 <
i + 4; i2++) {
481 #define COST(old, new) \
482 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
483 s->rc_stat[old][1] * -log2((new) / 256.0)
485 #define COST2(old, new) \
486 COST(old, new) + COST(256 - (old), 256 - (new))
490 if (size0 - sizeX > size0*(1e-14) &&
i != 128 && i2 != 128) {
493 FFSWAP(
int,
s->rc_stat[
i][0],
s->rc_stat[i2][0]);
494 FFSWAP(
int,
s->rc_stat[
i][1],
s->rc_stat[i2][1]);
496 FFSWAP(
int, stt[256 -
i], stt[256 - i2]);
497 FFSWAP(
int,
s->rc_stat[256 -
i][0],
s->rc_stat[256 - i2][0]);
498 FFSWAP(
int,
s->rc_stat[256 -
i][1],
s->rc_stat[256 - i2][1]);
500 for (j = 1; j < 256; j++) {
503 else if (stt[j] == i2)
506 if (stt[256 - j] == 256 -
i)
507 stt[256 - j] = 256 - i2;
508 else if (stt[256 - j] == 256 - i2)
509 stt[256 - j] = 256 -
i;
524 int plane_count = 1 + 2*
s->chroma_planes +
s->transparency;
527 s->num_v_slices = (avctx->
width > 352 || avctx->
height > 288 || !avctx->
slices) ? 2 : 1;
528 s->num_v_slices =
FFMIN(
s->num_v_slices, max_v_slices);
529 for (;
s->num_v_slices < 32;
s->num_v_slices++) {
530 for (
s->num_h_slices =
s->num_v_slices;
s->num_h_slices < 2*
s->num_v_slices;
s->num_h_slices++) {
531 int maxw = (avctx->
width +
s->num_h_slices - 1) /
s->num_h_slices;
532 int maxh = (avctx->
height +
s->num_v_slices - 1) /
s->num_v_slices;
533 if (
s->num_h_slices > max_h_slices ||
s->num_v_slices > max_v_slices)
535 if (maxw * maxh * (
int64_t)(
s->bits_per_raw_sample+1) * plane_count > 8<<24)
546 "Unsupported number %d of slices requested, please specify a "
547 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
559 s->version =
FFMAX(
s->version, 2);
568 s->version =
FFMAX(
s->version, 2);
570 if (avctx->
level <= 0 &&
s->version == 2) {
574 if (avctx->
level <
s->version) {
575 av_log(avctx,
AV_LOG_ERROR,
"Version %d needed for requested features but %d requested\n",
s->version, avctx->
level);
578 s->version = avctx->
level;
582 if (
s->version >= 4) {
584 s->crcref = 0x7a8c4079;
585 }
else if (
s->version >= 3) {
593 s->version =
FFMAX(
s->version, 3);
595 s->version =
FFMAX(
s->version, 4);
598 av_log(avctx,
AV_LOG_ERROR,
"Version 2 or 4 needed for requested features but version 2 or 4 is experimental and not enabled\n");
603 for (
i = 1;
i < 256;
i++)
608 for (
i = 1;
i < 256;
i++)
609 s->state_transition[
i] =
c.one_state[
i];
612 for (
i = 0;
i < 256;
i++) {
613 s->quant_table_count = 2;
614 if ((
s->qtable == -1 &&
s->bits_per_raw_sample <= 8) ||
s->qtable == 1) {
620 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
621 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
622 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
623 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
624 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
634 s->context_count[0] = (9 * 9 * 9 + 1) / 2;
635 s->context_count[1] = (9 * 9 * 5 * 5 * 5 + 1) / 2;
642 if (!
s->transparency)
644 if (!
s->chroma_planes &&
s->version > 3)
647 s->picture_number = 0;
650 for (
i = 0;
i <
s->quant_table_count;
i++) {
652 sizeof(*
s->rc_stat2[
i]));
668 for (j = 0; j < 256; j++)
669 for (
i = 0;
i < 2;
i++) {
670 s->rc_stat[j][
i] = strtol(p, &next, 0);
673 "2Pass file invalid at %d %d [%s]\n", j,
i, p);
679 for (
i = 0;
i <
s->quant_table_count;
i++)
680 for (j = 0; j <
s->context_count[
i]; j++) {
681 for (k = 0; k < 32; k++)
682 for (m = 0; m < 2; m++) {
683 s->rc_stat2[
i][j][k][m] = strtol(p, &next, 0);
686 "2Pass file invalid at %d %d %d %d [%s]\n",
694 gob_count = strtol(p, &next, 0);
695 if (next == p || gob_count <= 0) {
701 while (*p ==
'\n' || *p ==
' ')
711 for (
i = 0;
i <
s->quant_table_count;
i++) {
712 for (k = 0; k < 32; k++) {
715 for (j = 0; j <
s->context_count[
i]; j++) {
717 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
719 p = 256.0 *
b / (
a +
b);
720 s->initial_states[
i][jp][k] =
722 for(jp++; jp<j; jp++)
723 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
726 a +=
s->rc_stat2[
i][j][k][0];
727 b +=
s->rc_stat2[
i][j][k][1];
729 p = 256.0 *
b / (
a +
b);
731 s->initial_states[
i][j][k] =
739 if (
s->version <= 1) {
764 s->bits_per_raw_sample = 9;
774 s->bits_per_raw_sample = 10;
783 s->bits_per_raw_sample = 12;
789 s->bits_per_raw_sample = 14;
790 s->packed_at_lsb = 1;
799 s->bits_per_raw_sample = 16;
800 }
else if (!
s->bits_per_raw_sample) {
803 if (
s->bits_per_raw_sample <= 8) {
807 s->version =
FFMAX(
s->version, 1);
819 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
823 s->bits_per_raw_sample = 8;
824 else if (!
s->bits_per_raw_sample)
825 s->bits_per_raw_sample = 8;
830 s->chroma_planes = 1;
831 s->bits_per_raw_sample = 8;
836 s->chroma_planes = 1;
837 s->bits_per_raw_sample = 16;
839 s->version =
FFMAX(
s->version, 1);
843 s->chroma_planes = 1;
844 s->bits_per_raw_sample = 16;
846 s->version =
FFMAX(
s->version, 1);
850 s->chroma_planes = 1;
851 s->bits_per_raw_sample = 8;
855 s->bits_per_raw_sample = 9;
859 s->bits_per_raw_sample = 10;
863 s->bits_per_raw_sample = 12;
867 s->bits_per_raw_sample = 14;
871 s->bits_per_raw_sample = 16;
872 else if (!
s->bits_per_raw_sample)
876 s->chroma_planes = 1;
877 if (
s->bits_per_raw_sample >= 16) {
880 s->version =
FFMAX(
s->version, 1);
909 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8)) {
912 "high bits_per_raw_sample, forcing range coder\n");
922 if (
s->version > 1) {
932 s->slice_count =
s->max_slice_count;
934 for (
int j = 0; j <
s->slice_count; j++) {
935 for (
int i = 0;
i <
s->plane_count;
i++) {
948 #define STATS_OUT_SIZE 1024 * 1024 * 6
953 for (
int i = 0;
i <
s->quant_table_count;
i++)
954 for (
int j = 0; j <
s->max_slice_count; j++) {
978 for (j=0; j<
f->plane_count; j++) {
988 if (
f->version > 3) {
1001 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1003 #define NB_Y_COEFF 15
1004 static const int rct_y_coeff[15][2] = {
1024 int x, y,
i, p, best;
1026 int lbd =
f->bits_per_raw_sample <= 8;
1027 int packed = !
src[1];
1028 int transparency =
f->transparency;
1029 int packed_size = (3 + transparency)*2;
1031 for (y = 0; y <
h; y++) {
1032 int lastr=0, lastg=0, lastb=0;
1033 for (p = 0; p < 3; p++)
1036 for (x = 0; x <
w; x++) {
1040 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1042 g = (v >> 8) & 0xFF;
1043 r = (v >> 16) & 0xFF;
1044 }
else if (packed) {
1045 const uint16_t *p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1049 }
else if (
f->use32bit || transparency) {
1050 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1051 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1052 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1054 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1055 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1056 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1063 int bg = ag -
sample[0][x];
1064 int bb = ab -
sample[1][x];
1065 int br = ar -
sample[2][x];
1071 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1087 if (stat[
i] < stat[best])
1103 const AVFrame *
const p =
f->cur_enc_frame;
1114 if (
f->version > 3 &&
f->colorspace == 1) {
1124 if (
f->version > 2) {
1137 const int cx = x >>
f->chroma_h_shift;
1138 const int cy = y >>
f->chroma_v_shift;
1142 if (
f->chroma_planes) {
1146 if (
f->transparency)
1151 }
else if (
f->use32bit) {
1166 if (
f->version < 4) {
1184 size_t maxsize = avctx->
width*avctx->
height * (1 +
f->transparency);
1185 if (
f->chroma_planes)
1187 maxsize +=
f->slice_count * 800;
1188 if (
f->version > 3) {
1189 maxsize *=
f->bits_per_raw_sample + 1;
1191 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1192 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1201 const AVFrame *pict,
int *got_packet)
1205 uint8_t keystate = 128;
1216 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1217 for (
i = 0;
i <
f->quant_table_count;
i++)
1218 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1221 for (j = 0; j <
f->slice_count; j++) {
1223 for (
i = 0;
i < 256;
i++) {
1227 for (
i = 0;
i <
f->quant_table_count;
i++) {
1228 for (k = 0; k <
f->context_count[
i]; k++)
1229 for (m = 0; m < 32; m++) {
1230 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1231 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1236 for (j = 0; j < 256; j++) {
1237 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1238 f->rc_stat[j][0],
f->rc_stat[j][1]);
1243 for (
i = 0;
i <
f->quant_table_count;
i++) {
1244 for (j = 0; j <
f->context_count[
i]; j++)
1245 for (m = 0; m < 32; m++) {
1246 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1247 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1251 snprintf(p, end - p,
"%d\n",
f->gob_count);
1260 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1270 f->cur_enc_frame = pict;
1284 for (
i = 1;
i < 256;
i++) {
1285 c->one_state[
i] =
f->state_transition[
i];
1286 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1290 for (
i = 0;
i <
f->slice_count;
i++) {
1303 f->slice_count,
sizeof(*
f->slices));
1306 for (
i = 0;
i <
f->slice_count;
i++) {
1309 if (
i > 0 ||
f->version > 2) {
1313 AV_WB24(buf_p + bytes, bytes);
1329 f->picture_number++;
1347 #define OFFSET(x) offsetof(FFV1Context, x)
1348 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1352 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
1359 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1360 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
1362 { .i64 = 0 }, 0, 1,
VE },
1364 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
1368 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },