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;
288 for (y = 0; y <
h; y++) {
295 if (
f->bits_per_raw_sample <= 8) {
296 for (x = 0; x <
w; x++)
299 for (x = 0; x <
w; x++)
305 if (
f->packed_at_lsb) {
306 for (x = 0; x <
w; x++) {
310 for (x = 0; x <
w; x++) {
311 sample[0][x] = ((uint16_t*)(
src +
stride*y))[x * pixel_stride] >> (16 -
f->bits_per_raw_sample);
315 for (x = 0; x <
w; x++)
326 const uint8_t *
src,
int w,
int h,
327 int stride,
int remap_index,
int pixel_stride)
331 memset(sc->
fltmap[remap_index], 0, 65536 *
sizeof(*sc->
fltmap[remap_index]));
333 for (y = 0; y <
h; y++) {
334 if (
f->bits_per_raw_sample <= 8) {
335 for (x = 0; x <
w; x++)
338 if (
f->packed_at_lsb) {
339 for (x = 0; x <
w; x++)
340 sc->
fltmap[remap_index][ ((uint16_t*)(
src +
stride*y))[x * pixel_stride] ] = 1;
342 for (x = 0; x <
w; x++)
343 sc->
fltmap[remap_index][ ((uint16_t*)(
src +
stride*y))[x * pixel_stride] >> (16 -
f->bits_per_raw_sample) ] = 1;
368 for (
i = 0;
i < 5;
i++)
377 for (
int i = 0;
i < nb_contexts;
i++)
379 if (initial_state[
i][j] != 128)
392 if (
f->version < 2) {
396 for (
i = 1;
i < 256;
i++)
398 f->state_transition[
i] -
c->one_state[
i], 1);
409 }
else if (
f->version < 3) {
411 for (
i = 0;
i <
f->slice_count;
i++) {
414 (
fs->slice_x + 1) *
f->num_h_slices /
f->width, 0);
416 (
fs->slice_y + 1) *
f->num_v_slices /
f->height, 0);
418 (
fs->slice_width + 1) *
f->num_h_slices /
f->width - 1,
421 (
fs->slice_height + 1) *
f->num_v_slices /
f->height - 1,
423 for (j = 0; j <
f->plane_count; j++) {
425 av_assert0(
fs->plane[j].quant_table_index ==
f->context_model);
433 f->combined_version =
f->version << 16;
434 if (
f->version > 2) {
435 if (
f->version == 3) {
436 f->micro_version = 4;
437 }
else if (
f->version == 4) {
438 f->micro_version = 9;
442 f->combined_version +=
f->micro_version;
457 memset(state2, 128,
sizeof(state2));
460 f->avctx->extradata_size = 10000 + 4 +
461 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
463 if (!
f->avctx->extradata)
474 for (
i = 1;
i < 256;
i++)
487 for (
i = 0;
i <
f->quant_table_count;
i++)
490 for (
i = 0;
i <
f->quant_table_count;
i++) {
493 for (j = 0; j <
f->context_count[
i]; j++)
495 int pred = j ?
f->initial_states[
i][j - 1][k] : 128;
497 (int8_t)(
f->initial_states[
i][j][k] -
pred), 1);
504 if (
f->version > 2) {
511 AV_WL32(
f->avctx->extradata +
f->avctx->extradata_size, v);
512 f->avctx->extradata_size += 4;
519 int i, i2, changed,
print = 0;
523 for (
i = 12;
i < 244;
i++) {
524 for (i2 =
i + 1; i2 < 245 && i2 <
i + 4; i2++) {
526 #define COST(old, new) \
527 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
528 s->rc_stat[old][1] * -log2((new) / 256.0)
530 #define COST2(old, new) \
531 COST(old, new) + COST(256 - (old), 256 - (new))
535 if (size0 - sizeX > size0*(1e-14) &&
i != 128 && i2 != 128) {
538 FFSWAP(
int,
s->rc_stat[
i][0],
s->rc_stat[i2][0]);
539 FFSWAP(
int,
s->rc_stat[
i][1],
s->rc_stat[i2][1]);
541 FFSWAP(
int, stt[256 -
i], stt[256 - i2]);
542 FFSWAP(
int,
s->rc_stat[256 -
i][0],
s->rc_stat[256 - i2][0]);
543 FFSWAP(
int,
s->rc_stat[256 -
i][1],
s->rc_stat[256 - i2][1]);
545 for (j = 1; j < 256; j++) {
548 else if (stt[j] == i2)
551 if (stt[256 - j] == 256 -
i)
552 stt[256 - j] = 256 - i2;
553 else if (stt[256 - j] == 256 - i2)
554 stt[256 - j] = 256 -
i;
569 int plane_count = 1 + 2*
s->chroma_planes +
s->transparency;
572 s->num_v_slices = (avctx->
width > 352 || avctx->
height > 288 || !avctx->
slices) ? 2 : 1;
573 s->num_v_slices =
FFMIN(
s->num_v_slices, max_v_slices);
574 for (;
s->num_v_slices <= 32;
s->num_v_slices++) {
575 for (
s->num_h_slices =
s->num_v_slices;
s->num_h_slices <= 2*
s->num_v_slices;
s->num_h_slices++) {
576 int maxw = (avctx->
width +
s->num_h_slices - 1) /
s->num_h_slices;
577 int maxh = (avctx->
height +
s->num_v_slices - 1) /
s->num_v_slices;
578 if (
s->num_h_slices > max_h_slices ||
s->num_v_slices > max_v_slices)
580 if (maxw * maxh * (
int64_t)(
s->bits_per_raw_sample+1) * plane_count > 8<<24)
588 if (maxw*maxh > 360*288)
595 "Unsupported number %d of slices requested, please specify a "
596 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
608 s->version =
FFMAX(
s->version, 2);
617 s->version =
FFMAX(
s->version, 2);
619 if (avctx->
level <= 0 &&
s->version == 2) {
623 if (avctx->
level <
s->version) {
624 av_log(avctx,
AV_LOG_ERROR,
"Version %d needed for requested features but %d requested\n",
s->version, avctx->
level);
627 s->version = avctx->
level;
628 }
else if (
s->version < 3)
632 if (
s->version >= 4) {
634 }
else if (
s->version >= 3) {
642 s->version =
FFMAX(
s->version, 3);
644 s->version =
FFMAX(
s->version, 4);
645 s->crcref = 0x7a8c4079;
649 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");
654 for (
i = 1;
i < 256;
i++)
659 for (
i = 1;
i < 256;
i++)
660 s->state_transition[
i] =
c.one_state[
i];
663 for (
i = 0;
i < 256;
i++) {
664 s->quant_table_count = 2;
665 if ((
s->qtable == -1 &&
s->bits_per_raw_sample <= 8) ||
s->qtable == 1) {
671 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
672 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
673 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
674 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
675 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
685 s->context_count[0] = (9 * 9 * 9 + 1) / 2;
686 s->context_count[1] = (9 * 9 * 5 * 5 * 5 + 1) / 2;
693 if (!
s->transparency)
695 if (!
s->chroma_planes &&
s->version > 3)
698 s->picture_number = 0;
701 for (
i = 0;
i <
s->quant_table_count;
i++) {
703 sizeof(*
s->rc_stat2[
i]));
719 for (j = 0; j < 256; j++)
720 for (
i = 0;
i < 2;
i++) {
721 s->rc_stat[j][
i] = strtol(
p, &next, 0);
724 "2Pass file invalid at %d %d [%s]\n", j,
i,
p);
730 for (
i = 0;
i <
s->quant_table_count;
i++)
731 for (j = 0; j <
s->context_count[
i]; j++) {
732 for (k = 0; k < 32; k++)
733 for (m = 0; m < 2; m++) {
734 s->rc_stat2[
i][j][k][m] = strtol(
p, &next, 0);
737 "2Pass file invalid at %d %d %d %d [%s]\n",
745 gob_count = strtol(
p, &next, 0);
746 if (next ==
p || gob_count <= 0) {
752 while (*
p ==
'\n' || *
p ==
' ')
762 for (
i = 0;
i <
s->quant_table_count;
i++) {
763 for (k = 0; k < 32; k++) {
766 for (j = 0; j <
s->context_count[
i]; j++) {
768 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
770 p = 256.0 *
b / (
a +
b);
771 s->initial_states[
i][jp][k] =
773 for(jp++; jp<j; jp++)
774 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
777 a +=
s->rc_stat2[
i][j][k][0];
778 b +=
s->rc_stat2[
i][j][k][1];
780 p = 256.0 *
b / (
a +
b);
782 s->initial_states[
i][j][k] =
790 if (
s->version <= 1) {
817 s->bits_per_raw_sample = 9;
827 s->bits_per_raw_sample = 10;
836 s->bits_per_raw_sample = 12;
842 s->bits_per_raw_sample = 14;
843 s->packed_at_lsb = 1;
857 s->bits_per_raw_sample = 16;
858 }
else if (!
s->bits_per_raw_sample) {
861 if (
s->bits_per_raw_sample <= 8) {
865 s->version =
FFMAX(
s->version, 1);
880 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
884 s->bits_per_raw_sample = 8;
885 else if (!
s->bits_per_raw_sample)
886 s->bits_per_raw_sample = 8;
891 s->chroma_planes = 1;
892 s->bits_per_raw_sample = 8;
897 s->chroma_planes = 1;
898 s->bits_per_raw_sample = 16;
900 s->version =
FFMAX(
s->version, 1);
904 s->chroma_planes = 1;
905 s->bits_per_raw_sample = 16;
907 s->version =
FFMAX(
s->version, 1);
912 s->chroma_planes = 1;
913 s->bits_per_raw_sample = 8;
917 s->bits_per_raw_sample = 9;
923 s->bits_per_raw_sample = 10;
927 s->bits_per_raw_sample = 12;
931 s->bits_per_raw_sample = 14;
937 s->bits_per_raw_sample = 16;
941 s->bits_per_raw_sample = 32;
942 else if (!
s->bits_per_raw_sample)
946 s->chroma_planes = 1;
947 if (
s->bits_per_raw_sample >= 16) {
950 s->version =
FFMAX(
s->version, 1);
958 if (
s->flt ||
s->remap_mode > 0)
959 s->version =
FFMAX(
s->version, 4);
962 if (
s->remap_mode < 0)
963 s->remap_mode =
s->flt ? 2 : 0;
964 if (
s->remap_mode == 0 &&
s->bits_per_raw_sample == 32) {
968 if (
s->remap_mode == 2 &&
969 !((
s->bits_per_raw_sample == 16 ||
s->bits_per_raw_sample == 32 ||
s->bits_per_raw_sample == 64) &&
s->flt)) {
994 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8) && !
s->remap_mode) {
997 "high bits_per_raw_sample, forcing range coder\n");
1007 if (
s->version > 1) {
1017 s->slice_count =
s->max_slice_count;
1019 for (
int j = 0; j <
s->slice_count; j++) {
1022 for (
int i = 0;
i <
s->plane_count;
i++) {
1025 p->quant_table_index =
s->context_model;
1026 p->context_count =
s->context_count[
p->quant_table_index];
1029 if (
s->remap_mode) {
1030 for (
int p = 0;
p < 1 + 2*
s->chroma_planes +
s->transparency ;
p++) {
1031 if (
s->bits_per_raw_sample == 32) {
1048 s->slices[j].remap =
s->remap_mode;
1054 #define STATS_OUT_SIZE 1024 * 1024 * 6
1059 for (
int i = 0;
i <
s->quant_table_count;
i++)
1060 for (
int j = 0; j <
s->max_slice_count; j++) {
1084 for (j=0; j<
f->plane_count; j++) {
1094 if (
f->version > 3) {
1108 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1110 #define NB_Y_COEFF 15
1111 static const int rct_y_coeff[15][2] = {
1131 int x, y,
i,
p, best;
1133 int lbd =
f->bits_per_raw_sample <= 8;
1134 int packed = !
src[1];
1135 int transparency =
f->transparency;
1136 int packed_size = (3 + transparency)*2;
1138 for (y = 0; y <
h; y++) {
1139 int lastr=0, lastg=0, lastb=0;
1140 for (
p = 0;
p < 3;
p++)
1143 for (x = 0; x <
w; x++) {
1147 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1149 g = (v >> 8) & 0xFF;
1150 r = (v >> 16) & 0xFF;
1151 }
else if (packed) {
1152 const uint16_t *
p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1156 }
else if (
f->use32bit || transparency) {
1157 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1158 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1159 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1161 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1162 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1163 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1170 int bg = ag -
sample[0][x];
1171 int bb = ab -
sample[1][x];
1172 int br = ar -
sample[2][x];
1178 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1194 if (stat[
i] < stat[best])
1204 int len = 1 <<
f->bits_per_raw_sample;
1207 for (
int p= 0;
p < 1 + 2*
f->chroma_planes +
f->transparency;
p++) {
1210 uint8_t
state[2][32];
1216 for (
int i= 0;
i<
len;
i++) {
1217 int ri =
i ^ ((
i&0x8000) ? 0 :
flip);
1238 const uint8_t *
src[4],
1242 int transparency =
f->transparency;
1245 for (y = 0; y <
h; y++) {
1246 for (x = 0; x <
w; x++) {
1249 g = *((
const uint32_t *)(
src[0] + x*4 +
stride[0]*y));
1250 b = *((
const uint32_t *)(
src[1] + x*4 +
stride[1]*y));
1251 r = *((
const uint32_t *)(
src[2] + x*4 +
stride[2]*y));
1253 a = *((
const uint32_t *)(
src[3] + x*4 +
stride[3]*y));
1255 if (sc->
remap == 2) {
1256 #define FLIP(f) (((f)&0x80000000) ? (f) : (f)^0x7FFFFFFF);
1281 #define CMP(A,B) ((A)->val - (int64_t)(B)->val)
1290 int p,
int mul_count,
int *mul_tab,
int update,
int final)
1293 uint8_t
state[2][3][32];
1299 int compact_index = -1;
1301 int current_mul_index = -1;
1304 int run1start_last_val;
1305 int run1start_mul_index;
1307 memcpy(mul, mul_tab,
sizeof(*mul_tab)*(mul_count+1));
1312 for (;
i < pixel_num+1;
i++) {
1313 int current_mul = current_mul_index < 0 ? 1 :
FFABS(mul[current_mul_index]);
1315 if (
i == pixel_num) {
1316 if (last_val == 0xFFFFFFFF && (!
run || run1final)) {
1319 val = last_val + ((1LL<<32) - last_val + current_mul - 1) / current_mul * current_mul;
1321 val += lu * current_mul;
1326 if (last_val !=
val) {
1339 run1start_i =
i - 1;
1340 run1start_last_val = last_val;
1341 run1start_mul_index= current_mul_index;
1355 last_val += current_mul;
1359 last_val = run1start_last_val;
1360 current_mul_index = run1start_mul_index;
1372 if (current_mul > 1)
1380 current_mul_index = ((last_val + 1) * mul_count) >> 32;
1381 if (!
run || run1final) {
1383 if (mul[ current_mul_index ] < 0) {
1385 mul[ current_mul_index ] *= -1;
1392 if (!
run || run1final)
1393 if (
final &&
i < pixel_num)
1405 const uint8_t *
src[4])
1408 const int max_log2_mul_count = ((
int[]){ 1, 1, 1, 9, 9, 10})[
f->remap_optimizer];
1409 const int log2_mul_count_step = ((
int[]){ 1, 1, 1, 9, 9, 1})[
f->remap_optimizer];
1410 const int max_log2_mul = ((
int[]){ 1, 8, 8, 9, 22, 22})[
f->remap_optimizer];
1411 const int log2_mul_step = ((
int[]){ 1, 8, 1, 1, 1, 1})[
f->remap_optimizer];
1412 const int bruteforce_count = ((
int[]){ 0, 0, 0, 1, 1, 1})[
f->remap_optimizer];
1413 const int stair_mode = ((
int[]){ 0, 0, 0, 1, 0, 0})[
f->remap_optimizer];
1414 const int magic_log2 = ((
int[]){ 1, 1, 1, 1, 0, 0})[
f->remap_optimizer];
1416 for (
int p= 0;
p < 1 + 2*
f->chroma_planes +
f->transparency;
p++) {
1417 int best_log2_mul_count = 0;
1418 float score_sum[11] = {0};
1419 int mul_all[11][1025];
1421 for (
int log2_mul_count= 0; log2_mul_count <= max_log2_mul_count; log2_mul_count += log2_mul_count_step) {
1422 float score_tab_all[1025][23] = {0};
1424 int *mul_tab = mul_all[log2_mul_count];
1425 int last_mul_index = -1;
1426 int mul_count = 1 << log2_mul_count;
1428 score_sum[log2_mul_count] = 2 * log2_mul_count;
1430 score_sum[log2_mul_count] =
av_float2int((
float)mul_count * mul_count);
1431 for (
int i= 0;
i<pixel_num;
i++) {
1433 int mul_index = (
val + 1LL)*mul_count >> 32;
1434 if (
val != last_val) {
1435 float *score_tab = score_tab_all[(last_val + 1LL)*mul_count >> 32];
1437 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1444 }
else if (stair_mode && mul_count == 512 && si == max_log2_mul ) {
1445 if (mul_index >= 0x378/8 && mul_index <= 23 + 0x378/8) {
1446 mul = (0x800080 >> (mul_index - 0x378/8));
1450 mul = (0x10001LL)<<si >> 16;
1462 if (mul_index != last_mul_index)
1467 score_tab[si] +=
log2f(score);
1471 last_mul_index = mul_index;
1473 for(
int i= 0;
i<mul_count;
i++) {
1475 float *score_tab = score_tab_all[
i];
1476 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1477 if (score_tab[si] < score_tab[ best_index ])
1480 if (stair_mode && mul_count == 512 && best_index == max_log2_mul ) {
1481 if (
i >= 0x378/8 &&
i <= 23 + 0x378/8) {
1482 mul_tab[
i] = -(0x800080 >> (
i - 0x378/8));
1486 mul_tab[
i] = -((0x10001LL)<<best_index >> 16);
1487 score_sum[log2_mul_count] += score_tab[ best_index ];
1489 mul_tab[mul_count] = 1;
1491 if (bruteforce_count)
1494 if (score_sum[log2_mul_count] < score_sum[best_log2_mul_count])
1495 best_log2_mul_count = log2_mul_count;
1503 const uint8_t *
src[4],
1504 int w,
int h,
const int stride[4],
int ac)
1507 const int ring_size =
f->context_model ? 3 : 2;
1511 int transparency =
f->transparency;
1523 for (y = 0; y <
h; y++) {
1528 for (x = 0; x <
w; x++) {
1549 for (
p = 0;
p < 3 + transparency;
p++) {
1554 bits[
p], ac, pass1);
1571 const AVFrame *
const p =
f->cur_enc_frame;
1577 const uint8_t *
planes[4] = {
p->data[0] + ps*x + y*
p->linesize[0],
1578 p->data[1] ?
p->data[1] + ps*x + y*
p->linesize[1] :
NULL,
1579 p->data[2] ?
p->data[2] + ps*x + y*
p->linesize[2] :
NULL,
1580 p->data[3] ?
p->data[3] + ps*x + y*
p->linesize[3] :
NULL};
1584 if (
f->version > 3 &&
f->colorspace == 1) {
1594 if (
f->version > 2) {
1602 if (
f->bits_per_raw_sample != 32) {
1604 const int cx = x >>
f->chroma_h_shift;
1605 const int cy = y >>
f->chroma_v_shift;
1612 if (
f->chroma_planes) {
1613 load_plane(
f, sc,
p->data[1] + ps*cx+cy*
p->linesize[1], chroma_width, chroma_height,
p->linesize[1], 1, 1);
1614 load_plane(
f, sc,
p->data[2] + ps*cx+cy*
p->linesize[2], chroma_width, chroma_height,
p->linesize[2], 2, 1);
1616 if (
f->transparency)
1621 }
else if (
f->use32bit) {
1641 const int cx = x >>
f->chroma_h_shift;
1642 const int cy = y >>
f->chroma_v_shift;
1646 if (
f->chroma_planes) {
1647 ret |=
encode_plane(
f, sc,
p->data[1] + ps*cx+cy*
p->linesize[1], chroma_width, chroma_height,
p->linesize[1], 1, 1, 1, ac);
1648 ret |=
encode_plane(
f, sc,
p->data[2] + ps*cx+cy*
p->linesize[2], chroma_width, chroma_height,
p->linesize[2], 1, 2, 1, ac);
1650 if (
f->transparency)
1655 }
else if (
f->bits_per_raw_sample == 32) {
1657 }
else if (
f->use32bit) {
1672 if (
f->version < 4) {
1690 int w = avctx->
width +
f->num_h_slices;
1691 int h = avctx->
height +
f->num_v_slices;
1692 size_t maxsize =
w*
h * (1 +
f->transparency);
1693 if (
f->chroma_planes)
1695 maxsize +=
f->slice_count * 800;
1696 if (
f->version > 3) {
1697 maxsize *=
f->bits_per_raw_sample + 1;
1699 maxsize +=
f->slice_count * 70000 * (1 + 2*
f->chroma_planes +
f->transparency);
1701 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1702 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1711 const AVFrame *pict,
int *got_packet)
1715 uint8_t keystate = 128;
1726 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1727 for (
i = 0;
i <
f->quant_table_count;
i++)
1728 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1731 for (j = 0; j <
f->slice_count; j++) {
1733 for (
i = 0;
i < 256;
i++) {
1737 for (
i = 0;
i <
f->quant_table_count;
i++) {
1738 for (k = 0; k <
f->context_count[
i]; k++)
1739 for (m = 0; m < 32; m++) {
1740 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1741 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1746 for (j = 0; j < 256; j++) {
1747 snprintf(
p, end -
p,
"%" PRIu64
" %" PRIu64
" ",
1748 f->rc_stat[j][0],
f->rc_stat[j][1]);
1753 for (
i = 0;
i <
f->quant_table_count;
i++) {
1754 for (j = 0; j <
f->context_count[
i]; j++)
1755 for (m = 0; m < 32; m++) {
1756 snprintf(
p, end -
p,
"%" PRIu64
" %" PRIu64
" ",
1757 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1771 if (!
f->maxsize_warned) {
1772 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1773 f->maxsize_warned++;
1784 f->cur_enc_frame = pict;
1798 for (
i = 1;
i < 256;
i++) {
1799 c->one_state[
i] =
f->state_transition[
i];
1800 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1804 for (
i = 0;
i <
f->slice_count;
i++) {
1817 f->slice_count,
sizeof(*
f->slices));
1820 for (
i = 0;
i <
f->slice_count;
i++) {
1823 if (
i > 0 ||
f->version > 2) {
1827 AV_WB24(buf_p + bytes, bytes);
1843 f->picture_number++;
1855 for (
int j = 0; j <
s->max_slice_count; j++) {
1858 for(
int p = 0;
p<4;
p++) {
1870 #define OFFSET(x) offsetof(FFV1Context, x)
1871 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1875 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
1882 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1883 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
1885 { .i64 = 0 }, 0, 1,
VE },
1887 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
1891 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },
1894 {
"remap_mode",
"Remap Mode",
OFFSET(remap_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2,
VE, .unit =
"remap_mode" },
1896 { .i64 = -1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1898 { .i64 = 0 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1900 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1902 { .i64 = 2 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1903 {
"remap_optimizer",
"Remap Optimizer",
OFFSET(remap_optimizer),
AV_OPT_TYPE_INT, { .i64 = 3 }, 0, 5,
VE, .unit =
"remap_optimizer" },