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 }
else if (
s->version >= 3) {
640 s->version =
FFMAX(
s->version, 3);
642 s->version =
FFMAX(
s->version, 4);
643 s->crcref = 0x7a8c4079;
647 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");
652 for (
i = 1;
i < 256;
i++)
657 for (
i = 1;
i < 256;
i++)
658 s->state_transition[
i] =
c.one_state[
i];
661 for (
i = 0;
i < 256;
i++) {
662 s->quant_table_count = 2;
663 if ((
s->qtable == -1 &&
s->bits_per_raw_sample <= 8) ||
s->qtable == 1) {
669 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
670 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
671 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
672 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
673 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
683 s->context_count[0] = (9 * 9 * 9 + 1) / 2;
684 s->context_count[1] = (9 * 9 * 5 * 5 * 5 + 1) / 2;
691 if (!
s->transparency)
693 if (!
s->chroma_planes &&
s->version > 3)
696 s->picture_number = 0;
699 for (
i = 0;
i <
s->quant_table_count;
i++) {
701 sizeof(*
s->rc_stat2[
i]));
717 for (j = 0; j < 256; j++)
718 for (
i = 0;
i < 2;
i++) {
719 s->rc_stat[j][
i] = strtol(p, &next, 0);
722 "2Pass file invalid at %d %d [%s]\n", j,
i, p);
728 for (
i = 0;
i <
s->quant_table_count;
i++)
729 for (j = 0; j <
s->context_count[
i]; j++) {
730 for (k = 0; k < 32; k++)
731 for (m = 0; m < 2; m++) {
732 s->rc_stat2[
i][j][k][m] = strtol(p, &next, 0);
735 "2Pass file invalid at %d %d %d %d [%s]\n",
743 gob_count = strtol(p, &next, 0);
744 if (next == p || gob_count <= 0) {
750 while (*p ==
'\n' || *p ==
' ')
760 for (
i = 0;
i <
s->quant_table_count;
i++) {
761 for (k = 0; k < 32; k++) {
764 for (j = 0; j <
s->context_count[
i]; j++) {
766 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
768 p = 256.0 *
b / (
a +
b);
769 s->initial_states[
i][jp][k] =
771 for(jp++; jp<j; jp++)
772 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
775 a +=
s->rc_stat2[
i][j][k][0];
776 b +=
s->rc_stat2[
i][j][k][1];
778 p = 256.0 *
b / (
a +
b);
780 s->initial_states[
i][j][k] =
788 if (
s->version <= 1) {
815 s->bits_per_raw_sample = 9;
825 s->bits_per_raw_sample = 10;
834 s->bits_per_raw_sample = 12;
840 s->bits_per_raw_sample = 14;
841 s->packed_at_lsb = 1;
855 s->bits_per_raw_sample = 16;
856 }
else if (!
s->bits_per_raw_sample) {
859 if (
s->bits_per_raw_sample <= 8) {
863 s->version =
FFMAX(
s->version, 1);
878 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
882 s->bits_per_raw_sample = 8;
883 else if (!
s->bits_per_raw_sample)
884 s->bits_per_raw_sample = 8;
889 s->chroma_planes = 1;
890 s->bits_per_raw_sample = 8;
895 s->chroma_planes = 1;
896 s->bits_per_raw_sample = 16;
898 s->version =
FFMAX(
s->version, 1);
902 s->chroma_planes = 1;
903 s->bits_per_raw_sample = 16;
905 s->version =
FFMAX(
s->version, 1);
909 s->chroma_planes = 1;
910 s->bits_per_raw_sample = 8;
914 s->bits_per_raw_sample = 9;
918 s->bits_per_raw_sample = 10;
922 s->bits_per_raw_sample = 12;
926 s->bits_per_raw_sample = 14;
932 s->bits_per_raw_sample = 16;
936 s->bits_per_raw_sample = 32;
937 else if (!
s->bits_per_raw_sample)
941 s->chroma_planes = 1;
942 if (
s->bits_per_raw_sample >= 16) {
945 s->version =
FFMAX(
s->version, 1);
953 if (
s->flt ||
s->remap_mode > 0)
954 s->version =
FFMAX(
s->version, 4);
957 if (
s->remap_mode < 0)
958 s->remap_mode =
s->flt ? 2 : 0;
959 if (
s->remap_mode == 0 &&
s->bits_per_raw_sample == 32) {
963 if (
s->remap_mode == 2 &&
964 !((
s->bits_per_raw_sample == 16 ||
s->bits_per_raw_sample == 32 ||
s->bits_per_raw_sample == 64) &&
s->flt)) {
989 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8) && !
s->remap_mode) {
992 "high bits_per_raw_sample, forcing range coder\n");
1002 if (
s->version > 1) {
1012 s->slice_count =
s->max_slice_count;
1014 for (
int j = 0; j <
s->slice_count; j++) {
1017 for (
int i = 0;
i <
s->plane_count;
i++) {
1024 if (
s->remap_mode) {
1025 for (
int p = 0; p < 1 + 2*
s->chroma_planes +
s->transparency ; p++) {
1026 if (
s->bits_per_raw_sample == 32) {
1043 s->slices[j].remap =
s->remap_mode;
1049 #define STATS_OUT_SIZE 1024 * 1024 * 6
1054 for (
int i = 0;
i <
s->quant_table_count;
i++)
1055 for (
int j = 0; j <
s->max_slice_count; j++) {
1079 for (j=0; j<
f->plane_count; j++) {
1089 if (
f->version > 3) {
1103 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1105 #define NB_Y_COEFF 15
1106 static const int rct_y_coeff[15][2] = {
1126 int x, y,
i, p, best;
1128 int lbd =
f->bits_per_raw_sample <= 8;
1129 int packed = !
src[1];
1130 int transparency =
f->transparency;
1131 int packed_size = (3 + transparency)*2;
1133 for (y = 0; y <
h; y++) {
1134 int lastr=0, lastg=0, lastb=0;
1135 for (p = 0; p < 3; p++)
1138 for (x = 0; x <
w; x++) {
1142 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1144 g = (v >> 8) & 0xFF;
1145 r = (v >> 16) & 0xFF;
1146 }
else if (packed) {
1147 const uint16_t *p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1151 }
else if (
f->use32bit || transparency) {
1152 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1153 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1154 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1156 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1157 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1158 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1165 int bg = ag -
sample[0][x];
1166 int bb = ab -
sample[1][x];
1167 int br = ar -
sample[2][x];
1173 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1189 if (stat[
i] < stat[best])
1199 int len = 1 <<
f->bits_per_raw_sample;
1202 for (
int p= 0; p < 1 + 2*
f->chroma_planes +
f->transparency; p++) {
1205 uint8_t
state[2][32];
1211 for (
int i= 0;
i<
len;
i++) {
1212 int ri =
i ^ ((
i&0x8000) ? 0 :
flip);
1233 const uint8_t *
src[4],
1237 int transparency =
f->transparency;
1240 for (y = 0; y <
h; y++) {
1241 for (x = 0; x <
w; x++) {
1244 g = *((
const uint32_t *)(
src[0] + x*4 +
stride[0]*y));
1245 b = *((
const uint32_t *)(
src[1] + x*4 +
stride[1]*y));
1246 r = *((
const uint32_t *)(
src[2] + x*4 +
stride[2]*y));
1248 a = *((
const uint32_t *)(
src[3] + x*4 +
stride[3]*y));
1250 if (sc->
remap == 2) {
1251 #define FLIP(f) (((f)&0x80000000) ? (f) : (f)^0x7FFFFFFF);
1276 #define CMP(A,B) ((A)->val - (int64_t)(B)->val)
1285 int p,
int mul_count,
int *mul_tab,
int update,
int final)
1288 uint8_t
state[2][3][32];
1294 int compact_index = -1;
1296 int current_mul_index = -1;
1299 int run1start_last_val;
1300 int run1start_mul_index;
1302 memcpy(mul, mul_tab,
sizeof(*mul_tab)*(mul_count+1));
1307 for (;
i < pixel_num+1;
i++) {
1308 int current_mul = current_mul_index < 0 ? 1 :
FFABS(mul[current_mul_index]);
1310 if (
i == pixel_num) {
1311 if (last_val == 0xFFFFFFFF) {
1314 val = last_val + ((1LL<<32) - last_val + current_mul - 1) / current_mul * current_mul;
1316 val += lu * current_mul;
1321 if (last_val !=
val) {
1334 run1start_i =
i - 1;
1335 run1start_last_val = last_val;
1336 run1start_mul_index= current_mul_index;
1350 last_val += current_mul;
1354 last_val = run1start_last_val;
1355 current_mul_index = run1start_mul_index;
1367 if (current_mul > 1)
1375 current_mul_index = ((last_val + 1) * mul_count) >> 32;
1376 if (!
run || run1final) {
1378 if (mul[ current_mul_index ] < 0) {
1380 mul[ current_mul_index ] *= -1;
1387 if (!
run || run1final)
1388 if (
final &&
i < pixel_num)
1400 const uint8_t *
src[4])
1403 const int max_log2_mul_count = ((
int[]){ 1, 1, 1, 9, 9, 10})[
f->remap_optimizer];
1404 const int log2_mul_count_step = ((
int[]){ 1, 1, 1, 9, 9, 1})[
f->remap_optimizer];
1405 const int max_log2_mul = ((
int[]){ 1, 8, 8, 9, 22, 22})[
f->remap_optimizer];
1406 const int log2_mul_step = ((
int[]){ 1, 8, 1, 1, 1, 1})[
f->remap_optimizer];
1407 const int bruteforce_count = ((
int[]){ 0, 0, 0, 1, 1, 1})[
f->remap_optimizer];
1408 const int stair_mode = ((
int[]){ 0, 0, 0, 1, 0, 0})[
f->remap_optimizer];
1409 const int magic_log2 = ((
int[]){ 1, 1, 1, 1, 0, 0})[
f->remap_optimizer];
1411 for (
int p= 0; p < 1 + 2*
f->chroma_planes +
f->transparency; p++) {
1412 int best_log2_mul_count = 0;
1413 float score_sum[11] = {0};
1414 int mul_all[11][1025];
1416 for (
int log2_mul_count= 0; log2_mul_count <= max_log2_mul_count; log2_mul_count += log2_mul_count_step) {
1417 float score_tab_all[1025][23] = {0};
1419 int *mul_tab = mul_all[log2_mul_count];
1420 int last_mul_index = -1;
1421 int mul_count = 1 << log2_mul_count;
1423 score_sum[log2_mul_count] = 2 * log2_mul_count;
1425 score_sum[log2_mul_count] =
av_float2int((
float)mul_count * mul_count);
1426 for (
int i= 0;
i<pixel_num;
i++) {
1428 int mul_index = (
val + 1LL)*mul_count >> 32;
1429 if (
val != last_val) {
1430 float *score_tab = score_tab_all[(last_val + 1LL)*mul_count >> 32];
1432 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1439 }
else if (stair_mode && mul_count == 512 && si == max_log2_mul ) {
1440 if (mul_index >= 0x378/8 && mul_index <= 23 + 0x378/8) {
1441 mul = (0x800080 >> (mul_index - 0x378/8));
1445 mul = (0x10001LL)<<si >> 16;
1457 if (mul_index != last_mul_index)
1462 score_tab[si] +=
log2f(score);
1466 last_mul_index = mul_index;
1468 for(
int i= 0;
i<mul_count;
i++) {
1470 float *score_tab = score_tab_all[
i];
1471 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1472 if (score_tab[si] < score_tab[ best_index ])
1475 if (stair_mode && mul_count == 512 && best_index == max_log2_mul ) {
1476 if (
i >= 0x378/8 &&
i <= 23 + 0x378/8) {
1477 mul_tab[
i] = -(0x800080 >> (
i - 0x378/8));
1481 mul_tab[
i] = -((0x10001LL)<<best_index >> 16);
1482 score_sum[log2_mul_count] += score_tab[ best_index ];
1484 mul_tab[mul_count] = 1;
1486 if (bruteforce_count)
1489 if (score_sum[log2_mul_count] < score_sum[best_log2_mul_count])
1490 best_log2_mul_count = log2_mul_count;
1498 const uint8_t *
src[4],
1499 int w,
int h,
const int stride[4],
int ac)
1502 const int ring_size =
f->context_model ? 3 : 2;
1506 int transparency =
f->transparency;
1515 for (y = 0; y <
h; y++) {
1520 for (x = 0; x <
w; x++) {
1541 for (p = 0; p < 3 + transparency; p++) {
1545 ret = encode_line32(
f, sc,
f->avctx,
w,
sample[p], (p + 1) / 2,
1546 bits[p], ac, pass1);
1563 const AVFrame *
const p =
f->cur_enc_frame;
1576 if (
f->version > 3 &&
f->colorspace == 1) {
1586 if (
f->version > 2) {
1594 if (
f->bits_per_raw_sample != 32) {
1596 const int cx = x >>
f->chroma_h_shift;
1597 const int cy = y >>
f->chroma_v_shift;
1604 if (
f->chroma_planes) {
1608 if (
f->transparency)
1613 }
else if (
f->use32bit) {
1633 const int cx = x >>
f->chroma_h_shift;
1634 const int cy = y >>
f->chroma_v_shift;
1638 if (
f->chroma_planes) {
1642 if (
f->transparency)
1647 }
else if (
f->bits_per_raw_sample == 32) {
1649 }
else if (
f->use32bit) {
1664 if (
f->version < 4) {
1682 size_t maxsize = avctx->
width*avctx->
height * (1 +
f->transparency);
1683 if (
f->chroma_planes)
1685 maxsize +=
f->slice_count * 800;
1686 if (
f->version > 3) {
1687 maxsize *=
f->bits_per_raw_sample + 1;
1689 maxsize +=
f->slice_count * 70000 * (1 + 2*
f->chroma_planes +
f->transparency);
1691 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1692 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1701 const AVFrame *pict,
int *got_packet)
1705 uint8_t keystate = 128;
1716 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1717 for (
i = 0;
i <
f->quant_table_count;
i++)
1718 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1721 for (j = 0; j <
f->slice_count; j++) {
1723 for (
i = 0;
i < 256;
i++) {
1727 for (
i = 0;
i <
f->quant_table_count;
i++) {
1728 for (k = 0; k <
f->context_count[
i]; k++)
1729 for (m = 0; m < 32; m++) {
1730 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1731 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1736 for (j = 0; j < 256; j++) {
1737 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1738 f->rc_stat[j][0],
f->rc_stat[j][1]);
1743 for (
i = 0;
i <
f->quant_table_count;
i++) {
1744 for (j = 0; j <
f->context_count[
i]; j++)
1745 for (m = 0; m < 32; m++) {
1746 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1747 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1751 snprintf(p, end - p,
"%d\n",
f->gob_count);
1761 if (!
f->maxsize_warned) {
1762 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1763 f->maxsize_warned++;
1774 f->cur_enc_frame = pict;
1788 for (
i = 1;
i < 256;
i++) {
1789 c->one_state[
i] =
f->state_transition[
i];
1790 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1794 for (
i = 0;
i <
f->slice_count;
i++) {
1807 f->slice_count,
sizeof(*
f->slices));
1810 for (
i = 0;
i <
f->slice_count;
i++) {
1813 if (
i > 0 ||
f->version > 2) {
1817 AV_WB24(buf_p + bytes, bytes);
1833 f->picture_number++;
1845 for (
int j = 0; j <
s->max_slice_count; j++) {
1848 for(
int p = 0; p<4; p++) {
1860 #define OFFSET(x) offsetof(FFV1Context, x)
1861 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1865 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
1872 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1873 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
1875 { .i64 = 0 }, 0, 1,
VE },
1877 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
1881 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },
1884 {
"remap_mode",
"Remap Mode",
OFFSET(remap_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2,
VE, .unit =
"remap_mode" },
1886 { .i64 = -1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1888 { .i64 = 0 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1890 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1892 { .i64 = 2 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1893 {
"remap_optimizer",
"Remap Optimizer",
OFFSET(remap_optimizer),
AV_OPT_TYPE_INT, { .i64 = 3 }, 0, 5,
VE, .unit =
"remap_optimizer" },