46 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
49 1, 1, 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, -2,
58 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
61 -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0,
65 0, 1, 1, 1, 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, -2, -2, -2,
80 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1,
84 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
85 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
86 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
87 3, 3, 3, 3, 3, 3, 3, 3, 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, -4, -4, -4, -4, -4, -4, -4,
96 -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3,
97 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
98 -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
99 -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0,
103 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
104 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
105 4, 4, 4, 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, -5, -5,
116 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4,
117 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
118 -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1,
122 0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49,
123 59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39,
124 40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52,
125 53, 74, 55, 57, 58, 58, 74, 60, 101, 61, 62, 84, 66, 66, 68, 69,
126 87, 82, 71, 97, 73, 73, 82, 75, 111, 77, 94, 78, 87, 81, 83, 97,
127 85, 83, 94, 86, 99, 89, 90, 99, 111, 92, 93, 134, 95, 98, 105, 98,
128 105, 110, 102, 108, 102, 118, 103, 106, 106, 113, 109, 112, 114, 112, 116, 125,
129 115, 116, 117, 117, 126, 119, 125, 121, 121, 123, 145, 124, 126, 131, 127, 129,
130 165, 130, 132, 138, 133, 135, 145, 136, 137, 139, 146, 141, 143, 142, 144, 148,
131 147, 155, 151, 149, 151, 150, 152, 157, 153, 154, 156, 168, 158, 162, 161, 160,
132 172, 163, 169, 164, 166, 184, 167, 170, 177, 174, 171, 173, 182, 176, 180, 178,
133 175, 189, 179, 181, 186, 183, 192, 185, 200, 187, 191, 188, 190, 197, 193, 196,
134 197, 194, 195, 196, 198, 202, 199, 201, 210, 203, 207, 204, 205, 206, 208, 214,
135 209, 211, 221, 212, 213, 215, 224, 216, 217, 218, 219, 220, 222, 228, 223, 225,
136 226, 224, 227, 229, 240, 230, 231, 232, 233, 234, 235, 236, 238, 239, 237, 242,
137 241, 243, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 255,
141 const uint8_t one_state[256])
146 for (
i = 1;
i < 256;
i++)
147 l2tab[
i] = -
log2(
i / 256.0) * ((1
U << 31) / 8);
149 for (
i = 0;
i < 256;
i++) {
150 uint64_t best_len[256];
152 for (j = 0; j < 256; j++)
153 best_len[j] = UINT64_MAX;
155 for (j =
FFMAX(
i - 10, 1); j <
FFMIN(
i + 11, 256); j++) {
156 uint32_t occ[256] = { 0 };
163 for (k = 0; k < 256; k++) {
164 uint32_t newocc[256] = { 0 };
165 for (m = 1; m < 256; m++)
167 len += (occ[m]*((
i *(uint64_t)l2tab[ m]
168 + (256-
i)*(uint64_t)l2tab[256-m])>>8)) >> 8;
170 if (
len < best_len[k]) {
172 best_state[
i][k] = j;
174 for (m = 1; m < 256; m++)
176 newocc[ one_state[ m]] += occ[m] * (uint64_t)
i >> 8;
177 newocc[256 - one_state[256 - m]] += occ[m] * (uint64_t)(256 -
i) >> 8;
179 memcpy(occ, newocc,
sizeof(occ));
186 uint8_t *
state,
int v,
188 uint64_t rc_stat[256][2],
189 uint64_t rc_stat2[32][2])
193 #define put_rac(C, S, B) \
196 rc_stat[*(S)][B]++; \
197 rc_stat2[(S) - state][B]++; \
203 const unsigned a = is_signed ?
FFABS(v) : v;
207 for (
i = 0;
i < e;
i++)
211 for (
i = e - 1;
i >= 0;
i--)
217 for (
i = 0;
i < e;
i++)
221 for (
i = e - 1;
i >= 0;
i--)
234 int v,
int is_signed)
248 while (i < state->error_sum) {
257 ff_dlog(
NULL,
"v:%d/%d bias:%d error:%d drift:%d count:%d k:%d\n", v,
code,
265 #define RENAME(name) name
271 #define RENAME(name) name ## 32
275 const uint8_t *
src,
int w,
int h,
276 int stride,
int plane_index,
int remap_index,
int pixel_stride,
int ac)
280 const int ring_size =
f->context_model ? 3 : 2;
286 for (y = 0; y <
h; y++) {
293 if (
f->bits_per_raw_sample <= 8) {
294 for (x = 0; x <
w; x++)
297 for (x = 0; x <
w; x++)
303 if (
f->packed_at_lsb) {
304 for (x = 0; x <
w; x++) {
308 for (x = 0; x <
w; x++) {
309 sample[0][x] = ((uint16_t*)(
src +
stride*y))[x * pixel_stride] >> (16 -
f->bits_per_raw_sample);
313 for (x = 0; x <
w; x++)
324 const uint8_t *
src,
int w,
int h,
325 int stride,
int remap_index,
int pixel_stride)
329 memset(sc->
fltmap[remap_index], 0, 65536 *
sizeof(*sc->
fltmap[remap_index]));
331 for (y = 0; y <
h; y++) {
332 if (
f->bits_per_raw_sample <= 8) {
333 for (x = 0; x <
w; x++)
336 if (
f->packed_at_lsb) {
337 for (x = 0; x <
w; x++)
338 sc->
fltmap[remap_index][ ((uint16_t*)(
src +
stride*y))[x * pixel_stride] ] = 1;
340 for (x = 0; x <
w; x++)
341 sc->
fltmap[remap_index][ ((uint16_t*)(
src +
stride*y))[x * pixel_stride] >> (16 -
f->bits_per_raw_sample) ] = 1;
366 for (
i = 0;
i < 5;
i++)
375 for (
int i = 0;
i < nb_contexts;
i++)
377 if (initial_state[
i][j] != 128)
390 if (
f->version < 2) {
394 for (
i = 1;
i < 256;
i++)
396 f->state_transition[
i] -
c->one_state[
i], 1);
407 }
else if (
f->version < 3) {
409 for (
i = 0;
i <
f->slice_count;
i++) {
412 (
fs->slice_x + 1) *
f->num_h_slices /
f->width, 0);
414 (
fs->slice_y + 1) *
f->num_v_slices /
f->height, 0);
416 (
fs->slice_width + 1) *
f->num_h_slices /
f->width - 1,
419 (
fs->slice_height + 1) *
f->num_v_slices /
f->height - 1,
421 for (j = 0; j <
f->plane_count; j++) {
423 av_assert0(
fs->plane[j].quant_table_index ==
f->context_model);
431 f->combined_version =
f->version << 16;
432 if (
f->version > 2) {
433 if (
f->version == 3) {
434 f->micro_version = 4;
435 }
else if (
f->version == 4) {
436 f->micro_version = 8;
440 f->combined_version +=
f->micro_version;
455 memset(state2, 128,
sizeof(state2));
458 f->avctx->extradata_size = 10000 + 4 +
459 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
461 if (!
f->avctx->extradata)
472 for (
i = 1;
i < 256;
i++)
485 for (
i = 0;
i <
f->quant_table_count;
i++)
488 for (
i = 0;
i <
f->quant_table_count;
i++) {
491 for (j = 0; j <
f->context_count[
i]; j++)
493 int pred = j ?
f->initial_states[
i][j - 1][k] : 128;
495 (int8_t)(
f->initial_states[
i][j][k] -
pred), 1);
502 if (
f->version > 2) {
509 AV_WL32(
f->avctx->extradata +
f->avctx->extradata_size, v);
510 f->avctx->extradata_size += 4;
517 int i, i2, changed,
print = 0;
521 for (
i = 12;
i < 244;
i++) {
522 for (i2 =
i + 1; i2 < 245 && i2 <
i + 4; i2++) {
524 #define COST(old, new) \
525 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
526 s->rc_stat[old][1] * -log2((new) / 256.0)
528 #define COST2(old, new) \
529 COST(old, new) + COST(256 - (old), 256 - (new))
533 if (size0 - sizeX > size0*(1e-14) &&
i != 128 && i2 != 128) {
536 FFSWAP(
int,
s->rc_stat[
i][0],
s->rc_stat[i2][0]);
537 FFSWAP(
int,
s->rc_stat[
i][1],
s->rc_stat[i2][1]);
539 FFSWAP(
int, stt[256 -
i], stt[256 - i2]);
540 FFSWAP(
int,
s->rc_stat[256 -
i][0],
s->rc_stat[256 - i2][0]);
541 FFSWAP(
int,
s->rc_stat[256 -
i][1],
s->rc_stat[256 - i2][1]);
543 for (j = 1; j < 256; j++) {
546 else if (stt[j] == i2)
549 if (stt[256 - j] == 256 -
i)
550 stt[256 - j] = 256 - i2;
551 else if (stt[256 - j] == 256 - i2)
552 stt[256 - j] = 256 -
i;
567 int plane_count = 1 + 2*
s->chroma_planes +
s->transparency;
570 s->num_v_slices = (avctx->
width > 352 || avctx->
height > 288 || !avctx->
slices) ? 2 : 1;
571 s->num_v_slices =
FFMIN(
s->num_v_slices, max_v_slices);
572 for (;
s->num_v_slices <= 32;
s->num_v_slices++) {
573 for (
s->num_h_slices =
s->num_v_slices;
s->num_h_slices <= 2*
s->num_v_slices;
s->num_h_slices++) {
574 int maxw = (avctx->
width +
s->num_h_slices - 1) /
s->num_h_slices;
575 int maxh = (avctx->
height +
s->num_v_slices - 1) /
s->num_v_slices;
576 if (
s->num_h_slices > max_h_slices ||
s->num_v_slices > max_v_slices)
578 if (maxw * maxh * (
int64_t)(
s->bits_per_raw_sample+1) * plane_count > 8<<24)
586 if (maxw*maxh > 360*288)
593 "Unsupported number %d of slices requested, please specify a "
594 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
606 s->version =
FFMAX(
s->version, 2);
615 s->version =
FFMAX(
s->version, 2);
617 if (avctx->
level <= 0 &&
s->version == 2) {
621 if (avctx->
level <
s->version) {
622 av_log(avctx,
AV_LOG_ERROR,
"Version %d needed for requested features but %d requested\n",
s->version, avctx->
level);
625 s->version = avctx->
level;
626 }
else if (
s->version < 3)
630 if (
s->version >= 4) {
632 s->crcref = 0x7a8c4079;
633 }
else if (
s->version >= 3) {
641 s->version =
FFMAX(
s->version, 3);
643 s->version =
FFMAX(
s->version, 4);
646 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");
651 for (
i = 1;
i < 256;
i++)
656 for (
i = 1;
i < 256;
i++)
657 s->state_transition[
i] =
c.one_state[
i];
660 for (
i = 0;
i < 256;
i++) {
661 s->quant_table_count = 2;
662 if ((
s->qtable == -1 &&
s->bits_per_raw_sample <= 8) ||
s->qtable == 1) {
668 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
669 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
670 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
671 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
672 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
682 s->context_count[0] = (9 * 9 * 9 + 1) / 2;
683 s->context_count[1] = (9 * 9 * 5 * 5 * 5 + 1) / 2;
690 if (!
s->transparency)
692 if (!
s->chroma_planes &&
s->version > 3)
695 s->picture_number = 0;
698 for (
i = 0;
i <
s->quant_table_count;
i++) {
700 sizeof(*
s->rc_stat2[
i]));
716 for (j = 0; j < 256; j++)
717 for (
i = 0;
i < 2;
i++) {
718 s->rc_stat[j][
i] = strtol(p, &next, 0);
721 "2Pass file invalid at %d %d [%s]\n", j,
i, p);
727 for (
i = 0;
i <
s->quant_table_count;
i++)
728 for (j = 0; j <
s->context_count[
i]; j++) {
729 for (k = 0; k < 32; k++)
730 for (m = 0; m < 2; m++) {
731 s->rc_stat2[
i][j][k][m] = strtol(p, &next, 0);
734 "2Pass file invalid at %d %d %d %d [%s]\n",
742 gob_count = strtol(p, &next, 0);
743 if (next == p || gob_count <= 0) {
749 while (*p ==
'\n' || *p ==
' ')
759 for (
i = 0;
i <
s->quant_table_count;
i++) {
760 for (k = 0; k < 32; k++) {
763 for (j = 0; j <
s->context_count[
i]; j++) {
765 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
767 p = 256.0 *
b / (
a +
b);
768 s->initial_states[
i][jp][k] =
770 for(jp++; jp<j; jp++)
771 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
774 a +=
s->rc_stat2[
i][j][k][0];
775 b +=
s->rc_stat2[
i][j][k][1];
777 p = 256.0 *
b / (
a +
b);
779 s->initial_states[
i][j][k] =
787 if (
s->version <= 1) {
814 s->bits_per_raw_sample = 9;
824 s->bits_per_raw_sample = 10;
833 s->bits_per_raw_sample = 12;
839 s->bits_per_raw_sample = 14;
840 s->packed_at_lsb = 1;
854 s->bits_per_raw_sample = 16;
855 }
else if (!
s->bits_per_raw_sample) {
858 if (
s->bits_per_raw_sample <= 8) {
862 s->version =
FFMAX(
s->version, 1);
877 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
881 s->bits_per_raw_sample = 8;
882 else if (!
s->bits_per_raw_sample)
883 s->bits_per_raw_sample = 8;
888 s->chroma_planes = 1;
889 s->bits_per_raw_sample = 8;
894 s->chroma_planes = 1;
895 s->bits_per_raw_sample = 16;
897 s->version =
FFMAX(
s->version, 1);
901 s->chroma_planes = 1;
902 s->bits_per_raw_sample = 16;
904 s->version =
FFMAX(
s->version, 1);
908 s->chroma_planes = 1;
909 s->bits_per_raw_sample = 8;
913 s->bits_per_raw_sample = 9;
917 s->bits_per_raw_sample = 10;
921 s->bits_per_raw_sample = 12;
925 s->bits_per_raw_sample = 14;
931 s->bits_per_raw_sample = 16;
935 s->bits_per_raw_sample = 32;
936 else if (!
s->bits_per_raw_sample)
940 s->chroma_planes = 1;
941 if (
s->bits_per_raw_sample >= 16) {
944 s->version =
FFMAX(
s->version, 1);
952 if (
s->flt ||
s->remap_mode > 0)
953 s->version =
FFMAX(
s->version, 4);
956 if (
s->remap_mode < 0)
957 s->remap_mode =
s->flt ? 2 : 0;
958 if (
s->remap_mode == 0 &&
s->bits_per_raw_sample == 32) {
962 if (
s->remap_mode == 2 &&
963 !((
s->bits_per_raw_sample == 16 ||
s->bits_per_raw_sample == 32 ||
s->bits_per_raw_sample == 64) &&
s->flt)) {
988 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8) && !
s->remap_mode) {
991 "high bits_per_raw_sample, forcing range coder\n");
1001 if (
s->version > 1) {
1011 s->slice_count =
s->max_slice_count;
1013 for (
int j = 0; j <
s->slice_count; j++) {
1016 for (
int i = 0;
i <
s->plane_count;
i++) {
1023 if (
s->remap_mode) {
1024 for (
int p = 0; p < 1 + 2*
s->chroma_planes +
s->transparency ; p++) {
1025 if (
s->bits_per_raw_sample == 32) {
1042 s->slices[j].remap =
s->remap_mode;
1048 #define STATS_OUT_SIZE 1024 * 1024 * 6
1053 for (
int i = 0;
i <
s->quant_table_count;
i++)
1054 for (
int j = 0; j <
s->max_slice_count; j++) {
1078 for (j=0; j<
f->plane_count; j++) {
1088 if (
f->version > 3) {
1102 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1104 #define NB_Y_COEFF 15
1105 static const int rct_y_coeff[15][2] = {
1125 int x, y,
i, p, best;
1127 int lbd =
f->bits_per_raw_sample <= 8;
1128 int packed = !
src[1];
1129 int transparency =
f->transparency;
1130 int packed_size = (3 + transparency)*2;
1132 for (y = 0; y <
h; y++) {
1133 int lastr=0, lastg=0, lastb=0;
1134 for (p = 0; p < 3; p++)
1137 for (x = 0; x <
w; x++) {
1141 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1143 g = (v >> 8) & 0xFF;
1144 r = (v >> 16) & 0xFF;
1145 }
else if (packed) {
1146 const uint16_t *p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1150 }
else if (
f->use32bit || transparency) {
1151 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1152 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1153 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1155 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1156 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1157 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1164 int bg = ag -
sample[0][x];
1165 int bb = ab -
sample[1][x];
1166 int br = ar -
sample[2][x];
1172 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1188 if (stat[
i] < stat[best])
1198 int len = 1 <<
f->bits_per_raw_sample;
1201 for (
int p= 0; p < 1 + 2*
f->chroma_planes +
f->transparency; p++) {
1204 uint8_t
state[2][32];
1210 for (
int i= 0;
i<
len;
i++) {
1211 int ri =
i ^ ((
i&0x8000) ? 0 :
flip);
1232 const uint8_t *
src[4],
1236 int transparency =
f->transparency;
1239 for (y = 0; y <
h; y++) {
1240 for (x = 0; x <
w; x++) {
1243 g = *((
const uint32_t *)(
src[0] + x*4 +
stride[0]*y));
1244 b = *((
const uint32_t *)(
src[1] + x*4 +
stride[1]*y));
1245 r = *((
const uint32_t *)(
src[2] + x*4 +
stride[2]*y));
1247 a = *((
const uint32_t *)(
src[3] + x*4 +
stride[3]*y));
1249 if (sc->
remap == 2) {
1250 #define FLIP(f) (((f)&0x80000000) ? (f) : (f)^0x7FFFFFFF);
1275 #define CMP(A,B) ((A)->val - (int64_t)(B)->val)
1284 int p,
int mul_count,
int *mul_tab,
int update,
int final)
1287 uint8_t
state[2][3][32];
1293 int compact_index = -1;
1295 int current_mul_index = -1;
1298 int run1start_last_val;
1299 int run1start_mul_index;
1301 memcpy(mul, mul_tab,
sizeof(*mul_tab)*(mul_count+1));
1306 for (;
i < pixel_num+1;
i++) {
1307 int current_mul = current_mul_index < 0 ? 1 :
FFABS(mul[current_mul_index]);
1309 if (
i == pixel_num) {
1310 if (last_val == 0xFFFFFFFF) {
1313 val = last_val + ((1LL<<32) - last_val + current_mul - 1) / current_mul * current_mul;
1315 val += lu * current_mul;
1320 if (last_val !=
val) {
1333 run1start_i =
i - 1;
1334 run1start_last_val = last_val;
1335 run1start_mul_index= current_mul_index;
1349 last_val += current_mul;
1353 last_val = run1start_last_val;
1354 current_mul_index = run1start_mul_index;
1366 if (current_mul > 1)
1374 current_mul_index = ((last_val + 1) * mul_count) >> 32;
1375 if (!
run || run1final) {
1377 if (mul[ current_mul_index ] < 0) {
1379 mul[ current_mul_index ] *= -1;
1386 if (!
run || run1final)
1387 if (
final &&
i < pixel_num)
1399 const uint8_t *
src[4])
1402 const int max_log2_mul_count = ((
int[]){ 1, 1, 1, 9, 9, 10})[
f->remap_optimizer];
1403 const int log2_mul_count_step = ((
int[]){ 1, 1, 1, 9, 9, 1})[
f->remap_optimizer];
1404 const int max_log2_mul = ((
int[]){ 1, 8, 8, 9, 22, 22})[
f->remap_optimizer];
1405 const int log2_mul_step = ((
int[]){ 1, 8, 1, 1, 1, 1})[
f->remap_optimizer];
1406 const int bruteforce_count = ((
int[]){ 0, 0, 0, 1, 1, 1})[
f->remap_optimizer];
1407 const int stair_mode = ((
int[]){ 0, 0, 0, 1, 0, 0})[
f->remap_optimizer];
1408 const int magic_log2 = ((
int[]){ 1, 1, 1, 1, 0, 0})[
f->remap_optimizer];
1410 for (
int p= 0; p < 1 + 2*
f->chroma_planes +
f->transparency; p++) {
1411 int best_log2_mul_count = 0;
1412 float score_sum[11] = {0};
1413 int mul_all[11][1025];
1415 for (
int log2_mul_count= 0; log2_mul_count <= max_log2_mul_count; log2_mul_count += log2_mul_count_step) {
1416 float score_tab_all[1025][23] = {0};
1418 int *mul_tab = mul_all[log2_mul_count];
1419 int last_mul_index = -1;
1420 int mul_count = 1 << log2_mul_count;
1422 score_sum[log2_mul_count] = 2 * log2_mul_count;
1424 score_sum[log2_mul_count] =
av_float2int((
float)mul_count * mul_count);
1425 for (
int i= 0;
i<pixel_num;
i++) {
1427 int mul_index = (
val + 1LL)*mul_count >> 32;
1428 if (
val != last_val) {
1429 float *score_tab = score_tab_all[(last_val + 1LL)*mul_count >> 32];
1431 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1438 }
else if (stair_mode && mul_count == 512 && si == max_log2_mul ) {
1439 if (mul_index >= 0x378/8 && mul_index <= 23 + 0x378/8) {
1440 mul = (0x800080 >> (mul_index - 0x378/8));
1444 mul = (0x10001LL)<<si >> 16;
1456 if (mul_index != last_mul_index)
1461 score_tab[si] +=
log2f(score);
1465 last_mul_index = mul_index;
1467 for(
int i= 0;
i<mul_count;
i++) {
1469 float *score_tab = score_tab_all[
i];
1470 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1471 if (score_tab[si] < score_tab[ best_index ])
1474 if (stair_mode && mul_count == 512 && best_index == max_log2_mul ) {
1475 if (
i >= 0x378/8 &&
i <= 23 + 0x378/8) {
1476 mul_tab[
i] = -(0x800080 >> (
i - 0x378/8));
1480 mul_tab[
i] = -((0x10001LL)<<best_index >> 16);
1481 score_sum[log2_mul_count] += score_tab[ best_index ];
1483 mul_tab[mul_count] = 1;
1485 if (bruteforce_count)
1488 if (score_sum[log2_mul_count] < score_sum[best_log2_mul_count])
1489 best_log2_mul_count = log2_mul_count;
1497 const uint8_t *
src[4],
1498 int w,
int h,
const int stride[4],
int ac)
1501 const int ring_size =
f->context_model ? 3 : 2;
1505 int transparency =
f->transparency;
1514 for (y = 0; y <
h; y++) {
1519 for (x = 0; x <
w; x++) {
1540 for (p = 0; p < 3 + transparency; p++) {
1544 ret = encode_line32(
f, sc,
f->avctx,
w,
sample[p], (p + 1) / 2,
1545 bits[p], ac, pass1);
1562 const AVFrame *
const p =
f->cur_enc_frame;
1575 if (
f->version > 3 &&
f->colorspace == 1) {
1585 if (
f->version > 2) {
1593 if (
f->bits_per_raw_sample != 32) {
1595 const int cx = x >>
f->chroma_h_shift;
1596 const int cy = y >>
f->chroma_v_shift;
1603 if (
f->chroma_planes) {
1607 if (
f->transparency)
1612 }
else if (
f->use32bit) {
1632 const int cx = x >>
f->chroma_h_shift;
1633 const int cy = y >>
f->chroma_v_shift;
1637 if (
f->chroma_planes) {
1641 if (
f->transparency)
1646 }
else if (
f->bits_per_raw_sample == 32) {
1648 }
else if (
f->use32bit) {
1663 if (
f->version < 4) {
1681 size_t maxsize = avctx->
width*avctx->
height * (1 +
f->transparency);
1682 if (
f->chroma_planes)
1684 maxsize +=
f->slice_count * 800;
1685 if (
f->version > 3) {
1686 maxsize *=
f->bits_per_raw_sample + 1;
1688 maxsize +=
f->slice_count * 70000 * (1 + 2*
f->chroma_planes +
f->transparency);
1690 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1691 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1700 const AVFrame *pict,
int *got_packet)
1704 uint8_t keystate = 128;
1715 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1716 for (
i = 0;
i <
f->quant_table_count;
i++)
1717 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1720 for (j = 0; j <
f->slice_count; j++) {
1722 for (
i = 0;
i < 256;
i++) {
1726 for (
i = 0;
i <
f->quant_table_count;
i++) {
1727 for (k = 0; k <
f->context_count[
i]; k++)
1728 for (m = 0; m < 32; m++) {
1729 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1730 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1735 for (j = 0; j < 256; j++) {
1736 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1737 f->rc_stat[j][0],
f->rc_stat[j][1]);
1742 for (
i = 0;
i <
f->quant_table_count;
i++) {
1743 for (j = 0; j <
f->context_count[
i]; j++)
1744 for (m = 0; m < 32; m++) {
1745 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1746 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1750 snprintf(p, end - p,
"%d\n",
f->gob_count);
1760 if (!
f->maxsize_warned) {
1761 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1762 f->maxsize_warned++;
1773 f->cur_enc_frame = pict;
1787 for (
i = 1;
i < 256;
i++) {
1788 c->one_state[
i] =
f->state_transition[
i];
1789 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1793 for (
i = 0;
i <
f->slice_count;
i++) {
1806 f->slice_count,
sizeof(*
f->slices));
1809 for (
i = 0;
i <
f->slice_count;
i++) {
1812 if (
i > 0 ||
f->version > 2) {
1816 AV_WB24(buf_p + bytes, bytes);
1832 f->picture_number++;
1844 for (
int j = 0; j <
s->max_slice_count; j++) {
1847 for(
int p = 0; p<4; p++) {
1859 #define OFFSET(x) offsetof(FFV1Context, x)
1860 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1864 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
1871 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1872 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
1874 { .i64 = 0 }, 0, 1,
VE },
1876 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
1880 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },
1883 {
"remap_mode",
"Remap Mode",
OFFSET(remap_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2,
VE, .unit =
"remap_mode" },
1885 { .i64 = -1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1887 { .i64 = 0 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1889 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1891 { .i64 = 2 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1892 {
"remap_optimizer",
"Remap Optimizer",
OFFSET(remap_optimizer),
AV_OPT_TYPE_INT, { .i64 = 3 }, 0, 5,
VE, .unit =
"remap_optimizer" },