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;
629 if (
s->version >= 4) {
631 s->crcref = 0x7a8c4079;
632 }
else if (
s->version >= 3) {
640 s->version =
FFMAX(
s->version, 3);
642 s->version =
FFMAX(
s->version, 4);
645 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");
650 for (
i = 1;
i < 256;
i++)
655 for (
i = 1;
i < 256;
i++)
656 s->state_transition[
i] =
c.one_state[
i];
659 for (
i = 0;
i < 256;
i++) {
660 s->quant_table_count = 2;
661 if ((
s->qtable == -1 &&
s->bits_per_raw_sample <= 8) ||
s->qtable == 1) {
667 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
668 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
669 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
670 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
671 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
681 s->context_count[0] = (9 * 9 * 9 + 1) / 2;
682 s->context_count[1] = (9 * 9 * 5 * 5 * 5 + 1) / 2;
689 if (!
s->transparency)
691 if (!
s->chroma_planes &&
s->version > 3)
694 s->picture_number = 0;
697 for (
i = 0;
i <
s->quant_table_count;
i++) {
699 sizeof(*
s->rc_stat2[
i]));
715 for (j = 0; j < 256; j++)
716 for (
i = 0;
i < 2;
i++) {
717 s->rc_stat[j][
i] = strtol(p, &next, 0);
720 "2Pass file invalid at %d %d [%s]\n", j,
i, p);
726 for (
i = 0;
i <
s->quant_table_count;
i++)
727 for (j = 0; j <
s->context_count[
i]; j++) {
728 for (k = 0; k < 32; k++)
729 for (m = 0; m < 2; m++) {
730 s->rc_stat2[
i][j][k][m] = strtol(p, &next, 0);
733 "2Pass file invalid at %d %d %d %d [%s]\n",
741 gob_count = strtol(p, &next, 0);
742 if (next == p || gob_count <= 0) {
748 while (*p ==
'\n' || *p ==
' ')
758 for (
i = 0;
i <
s->quant_table_count;
i++) {
759 for (k = 0; k < 32; k++) {
762 for (j = 0; j <
s->context_count[
i]; j++) {
764 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
766 p = 256.0 *
b / (
a +
b);
767 s->initial_states[
i][jp][k] =
769 for(jp++; jp<j; jp++)
770 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
773 a +=
s->rc_stat2[
i][j][k][0];
774 b +=
s->rc_stat2[
i][j][k][1];
776 p = 256.0 *
b / (
a +
b);
778 s->initial_states[
i][j][k] =
786 if (
s->version <= 1) {
813 s->bits_per_raw_sample = 9;
823 s->bits_per_raw_sample = 10;
832 s->bits_per_raw_sample = 12;
838 s->bits_per_raw_sample = 14;
839 s->packed_at_lsb = 1;
850 s->bits_per_raw_sample = 16;
851 }
else if (!
s->bits_per_raw_sample) {
854 if (
s->bits_per_raw_sample <= 8) {
858 s->version =
FFMAX(
s->version, 1);
870 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
874 s->bits_per_raw_sample = 8;
875 else if (!
s->bits_per_raw_sample)
876 s->bits_per_raw_sample = 8;
881 s->chroma_planes = 1;
882 s->bits_per_raw_sample = 8;
887 s->chroma_planes = 1;
888 s->bits_per_raw_sample = 16;
890 s->version =
FFMAX(
s->version, 1);
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 = 8;
906 s->bits_per_raw_sample = 9;
910 s->bits_per_raw_sample = 10;
914 s->bits_per_raw_sample = 12;
918 s->bits_per_raw_sample = 14;
924 s->bits_per_raw_sample = 16;
928 s->bits_per_raw_sample = 32;
929 else if (!
s->bits_per_raw_sample)
933 s->chroma_planes = 1;
934 if (
s->bits_per_raw_sample >= 16) {
937 s->version =
FFMAX(
s->version, 1);
945 if (
s->flt ||
s->remap_mode > 0)
946 s->version =
FFMAX(
s->version, 4);
949 if (
s->remap_mode < 0)
950 s->remap_mode =
s->flt ? 2 : 0;
951 if (
s->remap_mode == 0 &&
s->bits_per_raw_sample == 32) {
955 if (
s->remap_mode == 2 &&
956 !((
s->bits_per_raw_sample == 16 ||
s->bits_per_raw_sample == 32 ||
s->bits_per_raw_sample == 64) &&
s->flt)) {
981 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8) && !
s->remap_mode) {
984 "high bits_per_raw_sample, forcing range coder\n");
994 if (
s->version > 1) {
1004 s->slice_count =
s->max_slice_count;
1006 for (
int j = 0; j <
s->slice_count; j++) {
1009 for (
int i = 0;
i <
s->plane_count;
i++) {
1016 if (
s->remap_mode) {
1017 for (
int p = 0; p < 1 + 2*
s->chroma_planes +
s->transparency ; p++) {
1018 if (
s->bits_per_raw_sample == 32) {
1035 s->slices[j].remap =
s->remap_mode;
1041 #define STATS_OUT_SIZE 1024 * 1024 * 6
1046 for (
int i = 0;
i <
s->quant_table_count;
i++)
1047 for (
int j = 0; j <
s->max_slice_count; j++) {
1071 for (j=0; j<
f->plane_count; j++) {
1081 if (
f->version > 3) {
1095 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1097 #define NB_Y_COEFF 15
1098 static const int rct_y_coeff[15][2] = {
1118 int x, y,
i, p, best;
1120 int lbd =
f->bits_per_raw_sample <= 8;
1121 int packed = !
src[1];
1122 int transparency =
f->transparency;
1123 int packed_size = (3 + transparency)*2;
1125 for (y = 0; y <
h; y++) {
1126 int lastr=0, lastg=0, lastb=0;
1127 for (p = 0; p < 3; p++)
1130 for (x = 0; x <
w; x++) {
1134 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1136 g = (v >> 8) & 0xFF;
1137 r = (v >> 16) & 0xFF;
1138 }
else if (packed) {
1139 const uint16_t *p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1143 }
else if (
f->use32bit || transparency) {
1144 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1145 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1146 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1148 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1149 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1150 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1157 int bg = ag -
sample[0][x];
1158 int bb = ab -
sample[1][x];
1159 int br = ar -
sample[2][x];
1165 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1181 if (stat[
i] < stat[best])
1191 int len = 1 <<
f->bits_per_raw_sample;
1194 for (
int p= 0; p < 1 + 2*
f->chroma_planes +
f->transparency; p++) {
1197 uint8_t
state[2][32];
1203 for (
int i= 0;
i<
len;
i++) {
1204 int ri =
i ^ ((
i&0x8000) ? 0 :
flip);
1225 const uint8_t *
src[4],
1229 int transparency =
f->transparency;
1232 for (y = 0; y <
h; y++) {
1233 for (x = 0; x <
w; x++) {
1236 g = *((
const uint32_t *)(
src[0] + x*4 +
stride[0]*y));
1237 b = *((
const uint32_t *)(
src[1] + x*4 +
stride[1]*y));
1238 r = *((
const uint32_t *)(
src[2] + x*4 +
stride[2]*y));
1240 a = *((
const uint32_t *)(
src[3] + x*4 +
stride[3]*y));
1242 if (sc->
remap == 2) {
1243 #define FLIP(f) (((f)&0x80000000) ? (f) : (f)^0x7FFFFFFF);
1268 #define CMP(A,B) ((A)->val - (int64_t)(B)->val)
1277 int p,
int mul_count,
int *mul_tab,
int update,
int final)
1280 uint8_t
state[2][3][32];
1286 int compact_index = -1;
1288 int current_mul_index = -1;
1291 int run1start_last_val;
1292 int run1start_mul_index;
1294 memcpy(mul, mul_tab,
sizeof(*mul_tab)*(mul_count+1));
1299 for (;
i < pixel_num+1;
i++) {
1300 int current_mul = current_mul_index < 0 ? 1 :
FFABS(mul[current_mul_index]);
1302 if (
i == pixel_num) {
1303 if (last_val == 0xFFFFFFFF) {
1306 val = last_val + ((1LL<<32) - last_val + current_mul - 1) / current_mul * current_mul;
1308 val += lu * current_mul;
1313 if (last_val !=
val) {
1326 run1start_i =
i - 1;
1327 run1start_last_val = last_val;
1328 run1start_mul_index= current_mul_index;
1342 last_val += current_mul;
1346 last_val = run1start_last_val;
1347 current_mul_index = run1start_mul_index;
1359 if (current_mul > 1)
1367 current_mul_index = ((last_val + 1) * mul_count) >> 32;
1368 if (!
run || run1final) {
1370 if (mul[ current_mul_index ] < 0) {
1372 mul[ current_mul_index ] *= -1;
1379 if (!
run || run1final)
1380 if (
final &&
i < pixel_num)
1392 const uint8_t *
src[4])
1395 const int max_log2_mul_count = ((
int[]){ 1, 1, 1, 9, 9, 10})[
f->remap_optimizer];
1396 const int log2_mul_count_step = ((
int[]){ 1, 1, 1, 9, 9, 1})[
f->remap_optimizer];
1397 const int max_log2_mul = ((
int[]){ 1, 8, 8, 9, 22, 22})[
f->remap_optimizer];
1398 const int log2_mul_step = ((
int[]){ 1, 8, 1, 1, 1, 1})[
f->remap_optimizer];
1399 const int bruteforce_count = ((
int[]){ 0, 0, 0, 1, 1, 1})[
f->remap_optimizer];
1400 const int stair_mode = ((
int[]){ 0, 0, 0, 1, 0, 0})[
f->remap_optimizer];
1401 const int magic_log2 = ((
int[]){ 1, 1, 1, 1, 0, 0})[
f->remap_optimizer];
1403 for (
int p= 0; p < 1 + 2*
f->chroma_planes +
f->transparency; p++) {
1404 int best_log2_mul_count = 0;
1405 float score_sum[11] = {0};
1406 int mul_all[11][1025];
1408 for (
int log2_mul_count= 0; log2_mul_count <= max_log2_mul_count; log2_mul_count += log2_mul_count_step) {
1409 float score_tab_all[1025][23] = {0};
1411 int *mul_tab = mul_all[log2_mul_count];
1412 int last_mul_index = -1;
1413 int mul_count = 1 << log2_mul_count;
1415 score_sum[log2_mul_count] = 2 * log2_mul_count;
1417 score_sum[log2_mul_count] =
av_float2int((
float)mul_count * mul_count);
1418 for (
int i= 0;
i<pixel_num;
i++) {
1420 int mul_index = (
val + 1LL)*mul_count >> 32;
1421 if (
val != last_val) {
1422 float *score_tab = score_tab_all[(last_val + 1LL)*mul_count >> 32];
1424 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1431 }
else if (stair_mode && mul_count == 512 && si == max_log2_mul ) {
1432 if (mul_index >= 0x378/8 && mul_index <= 23 + 0x378/8) {
1433 mul = (0x800080 >> (mul_index - 0x378/8));
1437 mul = (0x10001LL)<<si >> 16;
1449 if (mul_index != last_mul_index)
1454 score_tab[si] +=
log2f(score);
1458 last_mul_index = mul_index;
1460 for(
int i= 0;
i<mul_count;
i++) {
1462 float *score_tab = score_tab_all[
i];
1463 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1464 if (score_tab[si] < score_tab[ best_index ])
1467 if (stair_mode && mul_count == 512 && best_index == max_log2_mul ) {
1468 if (
i >= 0x378/8 &&
i <= 23 + 0x378/8) {
1469 mul_tab[
i] = -(0x800080 >> (
i - 0x378/8));
1473 mul_tab[
i] = -((0x10001LL)<<best_index >> 16);
1474 score_sum[log2_mul_count] += score_tab[ best_index ];
1476 mul_tab[mul_count] = 1;
1478 if (bruteforce_count)
1481 if (score_sum[log2_mul_count] < score_sum[best_log2_mul_count])
1482 best_log2_mul_count = log2_mul_count;
1490 const uint8_t *
src[4],
1491 int w,
int h,
const int stride[4],
int ac)
1494 const int ring_size =
f->context_model ? 3 : 2;
1498 int transparency =
f->transparency;
1507 for (y = 0; y <
h; y++) {
1512 for (x = 0; x <
w; x++) {
1533 for (p = 0; p < 3 + transparency; p++) {
1537 ret = encode_line32(
f, sc,
f->avctx,
w,
sample[p], (p + 1) / 2,
1538 bits[p], ac, pass1);
1555 const AVFrame *
const p =
f->cur_enc_frame;
1568 if (
f->version > 3 &&
f->colorspace == 1) {
1578 if (
f->version > 2) {
1586 if (
f->bits_per_raw_sample != 32) {
1588 const int cx = x >>
f->chroma_h_shift;
1589 const int cy = y >>
f->chroma_v_shift;
1596 if (
f->chroma_planes) {
1600 if (
f->transparency)
1605 }
else if (
f->use32bit) {
1625 const int cx = x >>
f->chroma_h_shift;
1626 const int cy = y >>
f->chroma_v_shift;
1630 if (
f->chroma_planes) {
1634 if (
f->transparency)
1639 }
else if (
f->bits_per_raw_sample == 32) {
1641 }
else if (
f->use32bit) {
1656 if (
f->version < 4) {
1674 size_t maxsize = avctx->
width*avctx->
height * (1 +
f->transparency);
1675 if (
f->chroma_planes)
1677 maxsize +=
f->slice_count * 800;
1678 if (
f->version > 3) {
1679 maxsize *=
f->bits_per_raw_sample + 1;
1681 maxsize +=
f->slice_count * 70000 * (1 + 2*
f->chroma_planes +
f->transparency);
1683 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1684 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1693 const AVFrame *pict,
int *got_packet)
1697 uint8_t keystate = 128;
1708 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1709 for (
i = 0;
i <
f->quant_table_count;
i++)
1710 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1713 for (j = 0; j <
f->slice_count; j++) {
1715 for (
i = 0;
i < 256;
i++) {
1719 for (
i = 0;
i <
f->quant_table_count;
i++) {
1720 for (k = 0; k <
f->context_count[
i]; k++)
1721 for (m = 0; m < 32; m++) {
1722 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1723 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1728 for (j = 0; j < 256; j++) {
1729 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1730 f->rc_stat[j][0],
f->rc_stat[j][1]);
1735 for (
i = 0;
i <
f->quant_table_count;
i++) {
1736 for (j = 0; j <
f->context_count[
i]; j++)
1737 for (m = 0; m < 32; m++) {
1738 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1739 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1743 snprintf(p, end - p,
"%d\n",
f->gob_count);
1752 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1762 f->cur_enc_frame = pict;
1776 for (
i = 1;
i < 256;
i++) {
1777 c->one_state[
i] =
f->state_transition[
i];
1778 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1782 for (
i = 0;
i <
f->slice_count;
i++) {
1795 f->slice_count,
sizeof(*
f->slices));
1798 for (
i = 0;
i <
f->slice_count;
i++) {
1801 if (
i > 0 ||
f->version > 2) {
1805 AV_WB24(buf_p + bytes, bytes);
1821 f->picture_number++;
1833 for (
int j = 0; j <
s->max_slice_count; j++) {
1836 for(
int p = 0; p<4; p++) {
1848 #define OFFSET(x) offsetof(FFV1Context, x)
1849 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1853 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
1860 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1861 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
1863 { .i64 = 0 }, 0, 1,
VE },
1865 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
1869 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },
1872 {
"remap_mode",
"Remap Mode",
OFFSET(remap_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2,
VE, .unit =
"remap_mode" },
1874 { .i64 = -1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1876 { .i64 = 0 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1878 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1880 { .i64 = 2 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1881 {
"remap_optimizer",
"Remap Optimizer",
OFFSET(remap_optimizer),
AV_OPT_TYPE_INT, { .i64 = 3 }, 0, 5,
VE, .unit =
"remap_optimizer" },