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 = 8;
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);
911 s->chroma_planes = 1;
912 s->bits_per_raw_sample = 8;
916 s->bits_per_raw_sample = 9;
922 s->bits_per_raw_sample = 10;
926 s->bits_per_raw_sample = 12;
930 s->bits_per_raw_sample = 14;
936 s->bits_per_raw_sample = 16;
940 s->bits_per_raw_sample = 32;
941 else if (!
s->bits_per_raw_sample)
945 s->chroma_planes = 1;
946 if (
s->bits_per_raw_sample >= 16) {
949 s->version =
FFMAX(
s->version, 1);
957 if (
s->flt ||
s->remap_mode > 0)
958 s->version =
FFMAX(
s->version, 4);
961 if (
s->remap_mode < 0)
962 s->remap_mode =
s->flt ? 2 : 0;
963 if (
s->remap_mode == 0 &&
s->bits_per_raw_sample == 32) {
967 if (
s->remap_mode == 2 &&
968 !((
s->bits_per_raw_sample == 16 ||
s->bits_per_raw_sample == 32 ||
s->bits_per_raw_sample == 64) &&
s->flt)) {
993 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8) && !
s->remap_mode) {
996 "high bits_per_raw_sample, forcing range coder\n");
1006 if (
s->version > 1) {
1016 s->slice_count =
s->max_slice_count;
1018 for (
int j = 0; j <
s->slice_count; j++) {
1021 for (
int i = 0;
i <
s->plane_count;
i++) {
1024 p->quant_table_index =
s->context_model;
1025 p->context_count =
s->context_count[
p->quant_table_index];
1028 if (
s->remap_mode) {
1029 for (
int p = 0;
p < 1 + 2*
s->chroma_planes +
s->transparency ;
p++) {
1030 if (
s->bits_per_raw_sample == 32) {
1047 s->slices[j].remap =
s->remap_mode;
1053 #define STATS_OUT_SIZE 1024 * 1024 * 6
1058 for (
int i = 0;
i <
s->quant_table_count;
i++)
1059 for (
int j = 0; j <
s->max_slice_count; j++) {
1083 for (j=0; j<
f->plane_count; j++) {
1093 if (
f->version > 3) {
1107 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1109 #define NB_Y_COEFF 15
1110 static const int rct_y_coeff[15][2] = {
1130 int x, y,
i,
p, best;
1132 int lbd =
f->bits_per_raw_sample <= 8;
1133 int packed = !
src[1];
1134 int transparency =
f->transparency;
1135 int packed_size = (3 + transparency)*2;
1137 for (y = 0; y <
h; y++) {
1138 int lastr=0, lastg=0, lastb=0;
1139 for (
p = 0;
p < 3;
p++)
1142 for (x = 0; x <
w; x++) {
1146 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1148 g = (v >> 8) & 0xFF;
1149 r = (v >> 16) & 0xFF;
1150 }
else if (packed) {
1151 const uint16_t *
p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1155 }
else if (
f->use32bit || transparency) {
1156 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1157 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1158 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1160 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1161 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1162 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1169 int bg = ag -
sample[0][x];
1170 int bb = ab -
sample[1][x];
1171 int br = ar -
sample[2][x];
1177 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1193 if (stat[
i] < stat[best])
1203 int len = 1 <<
f->bits_per_raw_sample;
1206 for (
int p= 0;
p < 1 + 2*
f->chroma_planes +
f->transparency;
p++) {
1209 uint8_t
state[2][32];
1215 for (
int i= 0;
i<
len;
i++) {
1216 int ri =
i ^ ((
i&0x8000) ? 0 :
flip);
1237 const uint8_t *
src[4],
1241 int transparency =
f->transparency;
1244 for (y = 0; y <
h; y++) {
1245 for (x = 0; x <
w; x++) {
1248 g = *((
const uint32_t *)(
src[0] + x*4 +
stride[0]*y));
1249 b = *((
const uint32_t *)(
src[1] + x*4 +
stride[1]*y));
1250 r = *((
const uint32_t *)(
src[2] + x*4 +
stride[2]*y));
1252 a = *((
const uint32_t *)(
src[3] + x*4 +
stride[3]*y));
1254 if (sc->
remap == 2) {
1255 #define FLIP(f) (((f)&0x80000000) ? (f) : (f)^0x7FFFFFFF);
1280 #define CMP(A,B) ((A)->val - (int64_t)(B)->val)
1289 int p,
int mul_count,
int *mul_tab,
int update,
int final)
1292 uint8_t
state[2][3][32];
1298 int compact_index = -1;
1300 int current_mul_index = -1;
1303 int run1start_last_val;
1304 int run1start_mul_index;
1306 memcpy(mul, mul_tab,
sizeof(*mul_tab)*(mul_count+1));
1311 for (;
i < pixel_num+1;
i++) {
1312 int current_mul = current_mul_index < 0 ? 1 :
FFABS(mul[current_mul_index]);
1314 if (
i == pixel_num) {
1315 if (last_val == 0xFFFFFFFF) {
1318 val = last_val + ((1LL<<32) - last_val + current_mul - 1) / current_mul * current_mul;
1320 val += lu * current_mul;
1325 if (last_val !=
val) {
1338 run1start_i =
i - 1;
1339 run1start_last_val = last_val;
1340 run1start_mul_index= current_mul_index;
1354 last_val += current_mul;
1358 last_val = run1start_last_val;
1359 current_mul_index = run1start_mul_index;
1371 if (current_mul > 1)
1379 current_mul_index = ((last_val + 1) * mul_count) >> 32;
1380 if (!
run || run1final) {
1382 if (mul[ current_mul_index ] < 0) {
1384 mul[ current_mul_index ] *= -1;
1391 if (!
run || run1final)
1392 if (
final &&
i < pixel_num)
1404 const uint8_t *
src[4])
1407 const int max_log2_mul_count = ((
int[]){ 1, 1, 1, 9, 9, 10})[
f->remap_optimizer];
1408 const int log2_mul_count_step = ((
int[]){ 1, 1, 1, 9, 9, 1})[
f->remap_optimizer];
1409 const int max_log2_mul = ((
int[]){ 1, 8, 8, 9, 22, 22})[
f->remap_optimizer];
1410 const int log2_mul_step = ((
int[]){ 1, 8, 1, 1, 1, 1})[
f->remap_optimizer];
1411 const int bruteforce_count = ((
int[]){ 0, 0, 0, 1, 1, 1})[
f->remap_optimizer];
1412 const int stair_mode = ((
int[]){ 0, 0, 0, 1, 0, 0})[
f->remap_optimizer];
1413 const int magic_log2 = ((
int[]){ 1, 1, 1, 1, 0, 0})[
f->remap_optimizer];
1415 for (
int p= 0;
p < 1 + 2*
f->chroma_planes +
f->transparency;
p++) {
1416 int best_log2_mul_count = 0;
1417 float score_sum[11] = {0};
1418 int mul_all[11][1025];
1420 for (
int log2_mul_count= 0; log2_mul_count <= max_log2_mul_count; log2_mul_count += log2_mul_count_step) {
1421 float score_tab_all[1025][23] = {0};
1423 int *mul_tab = mul_all[log2_mul_count];
1424 int last_mul_index = -1;
1425 int mul_count = 1 << log2_mul_count;
1427 score_sum[log2_mul_count] = 2 * log2_mul_count;
1429 score_sum[log2_mul_count] =
av_float2int((
float)mul_count * mul_count);
1430 for (
int i= 0;
i<pixel_num;
i++) {
1432 int mul_index = (
val + 1LL)*mul_count >> 32;
1433 if (
val != last_val) {
1434 float *score_tab = score_tab_all[(last_val + 1LL)*mul_count >> 32];
1436 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1443 }
else if (stair_mode && mul_count == 512 && si == max_log2_mul ) {
1444 if (mul_index >= 0x378/8 && mul_index <= 23 + 0x378/8) {
1445 mul = (0x800080 >> (mul_index - 0x378/8));
1449 mul = (0x10001LL)<<si >> 16;
1461 if (mul_index != last_mul_index)
1466 score_tab[si] +=
log2f(score);
1470 last_mul_index = mul_index;
1472 for(
int i= 0;
i<mul_count;
i++) {
1474 float *score_tab = score_tab_all[
i];
1475 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1476 if (score_tab[si] < score_tab[ best_index ])
1479 if (stair_mode && mul_count == 512 && best_index == max_log2_mul ) {
1480 if (
i >= 0x378/8 &&
i <= 23 + 0x378/8) {
1481 mul_tab[
i] = -(0x800080 >> (
i - 0x378/8));
1485 mul_tab[
i] = -((0x10001LL)<<best_index >> 16);
1486 score_sum[log2_mul_count] += score_tab[ best_index ];
1488 mul_tab[mul_count] = 1;
1490 if (bruteforce_count)
1493 if (score_sum[log2_mul_count] < score_sum[best_log2_mul_count])
1494 best_log2_mul_count = log2_mul_count;
1502 const uint8_t *
src[4],
1503 int w,
int h,
const int stride[4],
int ac)
1506 const int ring_size =
f->context_model ? 3 : 2;
1510 int transparency =
f->transparency;
1522 for (y = 0; y <
h; y++) {
1527 for (x = 0; x <
w; x++) {
1548 for (
p = 0;
p < 3 + transparency;
p++) {
1553 bits[
p], ac, pass1);
1570 const AVFrame *
const p =
f->cur_enc_frame;
1576 const uint8_t *
planes[4] = {
p->data[0] + ps*x + y*
p->linesize[0],
1577 p->data[1] ?
p->data[1] + ps*x + y*
p->linesize[1] :
NULL,
1578 p->data[2] ?
p->data[2] + ps*x + y*
p->linesize[2] :
NULL,
1579 p->data[3] ?
p->data[3] + ps*x + y*
p->linesize[3] :
NULL};
1583 if (
f->version > 3 &&
f->colorspace == 1) {
1593 if (
f->version > 2) {
1601 if (
f->bits_per_raw_sample != 32) {
1603 const int cx = x >>
f->chroma_h_shift;
1604 const int cy = y >>
f->chroma_v_shift;
1611 if (
f->chroma_planes) {
1612 load_plane(
f, sc,
p->data[1] + ps*cx+cy*
p->linesize[1], chroma_width, chroma_height,
p->linesize[1], 1, 1);
1613 load_plane(
f, sc,
p->data[2] + ps*cx+cy*
p->linesize[2], chroma_width, chroma_height,
p->linesize[2], 2, 1);
1615 if (
f->transparency)
1620 }
else if (
f->use32bit) {
1640 const int cx = x >>
f->chroma_h_shift;
1641 const int cy = y >>
f->chroma_v_shift;
1645 if (
f->chroma_planes) {
1646 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);
1647 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);
1649 if (
f->transparency)
1654 }
else if (
f->bits_per_raw_sample == 32) {
1656 }
else if (
f->use32bit) {
1671 if (
f->version < 4) {
1689 int w = avctx->
width +
f->num_h_slices;
1690 int h = avctx->
height +
f->num_v_slices;
1691 size_t maxsize =
w*
h * (1 +
f->transparency);
1692 if (
f->chroma_planes)
1694 maxsize +=
f->slice_count * 800;
1695 if (
f->version > 3) {
1696 maxsize *=
f->bits_per_raw_sample + 1;
1698 maxsize +=
f->slice_count * 70000 * (1 + 2*
f->chroma_planes +
f->transparency);
1700 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1701 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1710 const AVFrame *pict,
int *got_packet)
1714 uint8_t keystate = 128;
1725 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1726 for (
i = 0;
i <
f->quant_table_count;
i++)
1727 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1730 for (j = 0; j <
f->slice_count; j++) {
1732 for (
i = 0;
i < 256;
i++) {
1736 for (
i = 0;
i <
f->quant_table_count;
i++) {
1737 for (k = 0; k <
f->context_count[
i]; k++)
1738 for (m = 0; m < 32; m++) {
1739 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1740 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1745 for (j = 0; j < 256; j++) {
1746 snprintf(
p, end -
p,
"%" PRIu64
" %" PRIu64
" ",
1747 f->rc_stat[j][0],
f->rc_stat[j][1]);
1752 for (
i = 0;
i <
f->quant_table_count;
i++) {
1753 for (j = 0; j <
f->context_count[
i]; j++)
1754 for (m = 0; m < 32; m++) {
1755 snprintf(
p, end -
p,
"%" PRIu64
" %" PRIu64
" ",
1756 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1770 if (!
f->maxsize_warned) {
1771 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1772 f->maxsize_warned++;
1783 f->cur_enc_frame = pict;
1797 for (
i = 1;
i < 256;
i++) {
1798 c->one_state[
i] =
f->state_transition[
i];
1799 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1803 for (
i = 0;
i <
f->slice_count;
i++) {
1816 f->slice_count,
sizeof(*
f->slices));
1819 for (
i = 0;
i <
f->slice_count;
i++) {
1822 if (
i > 0 ||
f->version > 2) {
1826 AV_WB24(buf_p + bytes, bytes);
1842 f->picture_number++;
1854 for (
int j = 0; j <
s->max_slice_count; j++) {
1857 for(
int p = 0;
p<4;
p++) {
1869 #define OFFSET(x) offsetof(FFV1Context, x)
1870 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1874 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
1881 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1882 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
1884 { .i64 = 0 }, 0, 1,
VE },
1886 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
1890 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },
1893 {
"remap_mode",
"Remap Mode",
OFFSET(remap_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2,
VE, .unit =
"remap_mode" },
1895 { .i64 = -1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1897 { .i64 = 0 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1899 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1901 { .i64 = 2 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1902 {
"remap_optimizer",
"Remap Optimizer",
OFFSET(remap_optimizer),
AV_OPT_TYPE_INT, { .i64 = 3 }, 0, 5,
VE, .unit =
"remap_optimizer" },