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);
397 f->combined_version =
f->version << 16;
398 if (
f->version > 2) {
399 if (
f->version == 3) {
400 f->micro_version = 4;
401 }
else if (
f->version == 4) {
402 f->micro_version = 5;
406 f->combined_version +=
f->micro_version;
421 memset(state2, 128,
sizeof(state2));
424 f->avctx->extradata_size = 10000 + 4 +
425 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
427 if (!
f->avctx->extradata)
438 for (
i = 1;
i < 256;
i++)
451 for (
i = 0;
i <
f->quant_table_count;
i++)
454 for (
i = 0;
i <
f->quant_table_count;
i++) {
457 for (j = 0; j <
f->context_count[
i]; j++)
459 int pred = j ?
f->initial_states[
i][j - 1][k] : 128;
461 (int8_t)(
f->initial_states[
i][j][k] -
pred), 1);
468 if (
f->version > 2) {
475 AV_WL32(
f->avctx->extradata +
f->avctx->extradata_size, v);
476 f->avctx->extradata_size += 4;
483 int i, i2, changed,
print = 0;
487 for (
i = 12;
i < 244;
i++) {
488 for (i2 =
i + 1; i2 < 245 && i2 <
i + 4; i2++) {
490 #define COST(old, new) \
491 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
492 s->rc_stat[old][1] * -log2((new) / 256.0)
494 #define COST2(old, new) \
495 COST(old, new) + COST(256 - (old), 256 - (new))
499 if (size0 - sizeX > size0*(1e-14) &&
i != 128 && i2 != 128) {
502 FFSWAP(
int,
s->rc_stat[
i][0],
s->rc_stat[i2][0]);
503 FFSWAP(
int,
s->rc_stat[
i][1],
s->rc_stat[i2][1]);
505 FFSWAP(
int, stt[256 -
i], stt[256 - i2]);
506 FFSWAP(
int,
s->rc_stat[256 -
i][0],
s->rc_stat[256 - i2][0]);
507 FFSWAP(
int,
s->rc_stat[256 -
i][1],
s->rc_stat[256 - i2][1]);
509 for (j = 1; j < 256; j++) {
512 else if (stt[j] == i2)
515 if (stt[256 - j] == 256 -
i)
516 stt[256 - j] = 256 - i2;
517 else if (stt[256 - j] == 256 - i2)
518 stt[256 - j] = 256 -
i;
533 int plane_count = 1 + 2*
s->chroma_planes +
s->transparency;
536 s->num_v_slices = (avctx->
width > 352 || avctx->
height > 288 || !avctx->
slices) ? 2 : 1;
537 s->num_v_slices =
FFMIN(
s->num_v_slices, max_v_slices);
538 for (;
s->num_v_slices < 32;
s->num_v_slices++) {
539 for (
s->num_h_slices =
s->num_v_slices;
s->num_h_slices < 2*
s->num_v_slices;
s->num_h_slices++) {
540 int maxw = (avctx->
width +
s->num_h_slices - 1) /
s->num_h_slices;
541 int maxh = (avctx->
height +
s->num_v_slices - 1) /
s->num_v_slices;
542 if (
s->num_h_slices > max_h_slices ||
s->num_v_slices > max_v_slices)
544 if (maxw * maxh * (
int64_t)(
s->bits_per_raw_sample+1) * plane_count > 8<<24)
555 "Unsupported number %d of slices requested, please specify a "
556 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
568 s->version =
FFMAX(
s->version, 2);
577 s->version =
FFMAX(
s->version, 2);
579 if (avctx->
level <= 0 &&
s->version == 2) {
583 if (avctx->
level <
s->version) {
584 av_log(avctx,
AV_LOG_ERROR,
"Version %d needed for requested features but %d requested\n",
s->version, avctx->
level);
587 s->version = avctx->
level;
591 if (
s->version >= 4) {
593 s->crcref = 0x7a8c4079;
594 }
else if (
s->version >= 3) {
602 s->version =
FFMAX(
s->version, 3);
604 s->version =
FFMAX(
s->version, 4);
607 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");
612 for (
i = 1;
i < 256;
i++)
617 for (
i = 1;
i < 256;
i++)
618 s->state_transition[
i] =
c.one_state[
i];
621 for (
i = 0;
i < 256;
i++) {
622 s->quant_table_count = 2;
623 if ((
s->qtable == -1 &&
s->bits_per_raw_sample <= 8) ||
s->qtable == 1) {
629 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
630 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
631 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
632 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
633 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
643 s->context_count[0] = (9 * 9 * 9 + 1) / 2;
644 s->context_count[1] = (9 * 9 * 5 * 5 * 5 + 1) / 2;
651 if (!
s->transparency)
653 if (!
s->chroma_planes &&
s->version > 3)
656 s->picture_number = 0;
659 for (
i = 0;
i <
s->quant_table_count;
i++) {
661 sizeof(*
s->rc_stat2[
i]));
677 for (j = 0; j < 256; j++)
678 for (
i = 0;
i < 2;
i++) {
679 s->rc_stat[j][
i] = strtol(p, &next, 0);
682 "2Pass file invalid at %d %d [%s]\n", j,
i, p);
688 for (
i = 0;
i <
s->quant_table_count;
i++)
689 for (j = 0; j <
s->context_count[
i]; j++) {
690 for (k = 0; k < 32; k++)
691 for (m = 0; m < 2; m++) {
692 s->rc_stat2[
i][j][k][m] = strtol(p, &next, 0);
695 "2Pass file invalid at %d %d %d %d [%s]\n",
703 gob_count = strtol(p, &next, 0);
704 if (next == p || gob_count <= 0) {
710 while (*p ==
'\n' || *p ==
' ')
720 for (
i = 0;
i <
s->quant_table_count;
i++) {
721 for (k = 0; k < 32; k++) {
724 for (j = 0; j <
s->context_count[
i]; j++) {
726 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
728 p = 256.0 *
b / (
a +
b);
729 s->initial_states[
i][jp][k] =
731 for(jp++; jp<j; jp++)
732 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
735 a +=
s->rc_stat2[
i][j][k][0];
736 b +=
s->rc_stat2[
i][j][k][1];
738 p = 256.0 *
b / (
a +
b);
740 s->initial_states[
i][j][k] =
748 if (
s->version <= 1) {
775 s->bits_per_raw_sample = 9;
785 s->bits_per_raw_sample = 10;
794 s->bits_per_raw_sample = 12;
800 s->bits_per_raw_sample = 14;
801 s->packed_at_lsb = 1;
810 s->bits_per_raw_sample = 16;
811 }
else if (!
s->bits_per_raw_sample) {
814 if (
s->bits_per_raw_sample <= 8) {
818 s->version =
FFMAX(
s->version, 1);
830 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
834 s->bits_per_raw_sample = 8;
835 else if (!
s->bits_per_raw_sample)
836 s->bits_per_raw_sample = 8;
841 s->chroma_planes = 1;
842 s->bits_per_raw_sample = 8;
847 s->chroma_planes = 1;
848 s->bits_per_raw_sample = 16;
850 s->version =
FFMAX(
s->version, 1);
854 s->chroma_planes = 1;
855 s->bits_per_raw_sample = 16;
857 s->version =
FFMAX(
s->version, 1);
861 s->chroma_planes = 1;
862 s->bits_per_raw_sample = 8;
866 s->bits_per_raw_sample = 9;
870 s->bits_per_raw_sample = 10;
874 s->bits_per_raw_sample = 12;
878 s->bits_per_raw_sample = 14;
884 s->bits_per_raw_sample = 16;
885 else if (!
s->bits_per_raw_sample)
889 s->chroma_planes = 1;
890 if (
s->bits_per_raw_sample >= 16) {
894 s->version =
FFMAX(
s->version, 1);
897 s->version =
FFMAX(
s->version, 4);
906 if (
s->remap_mode < 0)
907 s->remap_mode =
s->flt ? 2 : 0;
929 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8)) {
932 "high bits_per_raw_sample, forcing range coder\n");
942 if (
s->version > 1) {
952 s->slice_count =
s->max_slice_count;
954 for (
int j = 0; j <
s->slice_count; j++) {
955 for (
int i = 0;
i <
s->plane_count;
i++) {
964 s->slices[j].remap =
s->remap_mode;
970 #define STATS_OUT_SIZE 1024 * 1024 * 6
975 for (
int i = 0;
i <
s->quant_table_count;
i++)
976 for (
int j = 0; j <
s->max_slice_count; j++) {
1000 for (j=0; j<
f->plane_count; j++) {
1010 if (
f->version > 3) {
1024 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1026 #define NB_Y_COEFF 15
1027 static const int rct_y_coeff[15][2] = {
1047 int x, y,
i, p, best;
1049 int lbd =
f->bits_per_raw_sample <= 8;
1050 int packed = !
src[1];
1051 int transparency =
f->transparency;
1052 int packed_size = (3 + transparency)*2;
1054 for (y = 0; y <
h; y++) {
1055 int lastr=0, lastg=0, lastb=0;
1056 for (p = 0; p < 3; p++)
1059 for (x = 0; x <
w; x++) {
1063 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1065 g = (v >> 8) & 0xFF;
1066 r = (v >> 16) & 0xFF;
1067 }
else if (packed) {
1068 const uint16_t *p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1072 }
else if (
f->use32bit || transparency) {
1073 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1074 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1075 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1077 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1078 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1079 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1086 int bg = ag -
sample[0][x];
1087 int bb = ab -
sample[1][x];
1088 int br = ar -
sample[2][x];
1094 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1110 if (stat[
i] < stat[best])
1120 int transparency =
f->transparency;
1123 for (
int p= 0; p<3 + transparency; p++) {
1126 uint8_t
state[2][32];
1129 for (
int i= 0;
i<65536;
i++) {
1130 int ri =
i ^ ((
i&0x8000) ? 0 :
flip);
1157 const AVFrame *
const p =
f->cur_enc_frame;
1168 if (
f->version > 3 &&
f->colorspace == 1) {
1178 if (
f->version > 2) {
1183 if (
f->colorspace == 0) {
1185 }
else if (
f->use32bit) {
1203 const int cx = x >>
f->chroma_h_shift;
1204 const int cy = y >>
f->chroma_v_shift;
1208 if (
f->chroma_planes) {
1212 if (
f->transparency)
1217 }
else if (
f->use32bit) {
1232 if (
f->version < 4) {
1250 size_t maxsize = avctx->
width*avctx->
height * (1 +
f->transparency);
1251 if (
f->chroma_planes)
1253 maxsize +=
f->slice_count * 800;
1254 if (
f->version > 3) {
1255 maxsize *=
f->bits_per_raw_sample + 1;
1257 maxsize +=
f->slice_count * 70000 * (1 + 2*
f->chroma_planes +
f->transparency);
1259 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1260 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1269 const AVFrame *pict,
int *got_packet)
1273 uint8_t keystate = 128;
1284 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1285 for (
i = 0;
i <
f->quant_table_count;
i++)
1286 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1289 for (j = 0; j <
f->slice_count; j++) {
1291 for (
i = 0;
i < 256;
i++) {
1295 for (
i = 0;
i <
f->quant_table_count;
i++) {
1296 for (k = 0; k <
f->context_count[
i]; k++)
1297 for (m = 0; m < 32; m++) {
1298 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1299 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1304 for (j = 0; j < 256; j++) {
1305 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1306 f->rc_stat[j][0],
f->rc_stat[j][1]);
1311 for (
i = 0;
i <
f->quant_table_count;
i++) {
1312 for (j = 0; j <
f->context_count[
i]; j++)
1313 for (m = 0; m < 32; m++) {
1314 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1315 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1319 snprintf(p, end - p,
"%d\n",
f->gob_count);
1328 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1338 f->cur_enc_frame = pict;
1352 for (
i = 1;
i < 256;
i++) {
1353 c->one_state[
i] =
f->state_transition[
i];
1354 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1358 for (
i = 0;
i <
f->slice_count;
i++) {
1371 f->slice_count,
sizeof(*
f->slices));
1374 for (
i = 0;
i <
f->slice_count;
i++) {
1377 if (
i > 0 ||
f->version > 2) {
1381 AV_WB24(buf_p + bytes, bytes);
1397 f->picture_number++;
1415 #define OFFSET(x) offsetof(FFV1Context, x)
1416 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1420 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
1427 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1428 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
1430 { .i64 = 0 }, 0, 1,
VE },
1432 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
1436 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },
1439 {
"remap_mode",
"Remap Mode",
OFFSET(remap_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2,
VE, .unit =
"remap_mode" },
1441 { .i64 = -1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1443 { .i64 = 0 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1445 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1447 { .i64 = 2 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },