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 = 10;
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++)
483 if (
f->colorspace == 2)
489 for (
i = 0;
i <
f->quant_table_count;
i++)
492 for (
i = 0;
i <
f->quant_table_count;
i++) {
495 for (j = 0; j <
f->context_count[
i]; j++)
497 int pred = j ?
f->initial_states[
i][j - 1][k] : 128;
499 (int8_t)(
f->initial_states[
i][j][k] -
pred), 1);
506 if (
f->version > 2) {
509 if (
f->combined_version >= 0x40004)
515 AV_WL32(
f->avctx->extradata +
f->avctx->extradata_size, v);
516 f->avctx->extradata_size += 4;
523 int i, i2, changed,
print = 0;
527 for (
i = 12;
i < 244;
i++) {
528 for (i2 =
i + 1; i2 < 245 && i2 <
i + 4; i2++) {
530 #define COST(old, new) \
531 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
532 s->rc_stat[old][1] * -log2((new) / 256.0)
534 #define COST2(old, new) \
535 COST(old, new) + COST(256 - (old), 256 - (new))
539 if (size0 - sizeX > size0*(1e-14) &&
i != 128 && i2 != 128) {
542 FFSWAP(
int,
s->rc_stat[
i][0],
s->rc_stat[i2][0]);
543 FFSWAP(
int,
s->rc_stat[
i][1],
s->rc_stat[i2][1]);
545 FFSWAP(
int, stt[256 -
i], stt[256 - i2]);
546 FFSWAP(
int,
s->rc_stat[256 -
i][0],
s->rc_stat[256 - i2][0]);
547 FFSWAP(
int,
s->rc_stat[256 -
i][1],
s->rc_stat[256 - i2][1]);
549 for (j = 1; j < 256; j++) {
552 else if (stt[j] == i2)
555 if (stt[256 - j] == 256 -
i)
556 stt[256 - j] = 256 - i2;
557 else if (stt[256 - j] == 256 - i2)
558 stt[256 - j] = 256 -
i;
573 int plane_count = 1 + 2*
s->chroma_planes +
s->bayer +
s->transparency;
576 s->num_v_slices = (avctx->
width > 352 || avctx->
height > 288 || !avctx->
slices) ? 2 : 1;
577 s->num_v_slices =
FFMIN(
s->num_v_slices, max_v_slices);
578 for (;
s->num_v_slices <= 32;
s->num_v_slices++) {
579 for (
s->num_h_slices =
s->num_v_slices;
s->num_h_slices <= 2*
s->num_v_slices;
s->num_h_slices++) {
580 int maxw = (avctx->
width +
s->num_h_slices - 1) /
s->num_h_slices;
581 int maxh = (avctx->
height +
s->num_v_slices - 1) /
s->num_v_slices;
582 if (
s->num_h_slices > max_h_slices ||
s->num_v_slices > max_v_slices)
584 if (maxw * maxh * (
int64_t)(
s->bits_per_raw_sample+1) * plane_count > 8<<24)
592 if (maxw*maxh > 360*288)
599 "Unsupported number %d of slices requested, please specify a "
600 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
612 s->version =
FFMAX(
s->version, 2);
621 s->version =
FFMAX(
s->version, 2);
623 if (avctx->
level <= 0 &&
s->version == 2) {
627 if (avctx->
level <
s->version) {
628 av_log(avctx,
AV_LOG_ERROR,
"Version %d needed for requested features but %d requested\n",
s->version, avctx->
level);
631 s->version = avctx->
level;
632 }
else if (
s->version < 3)
636 if (
s->version >= 4) {
638 }
else if (
s->version >= 3) {
646 s->version =
FFMAX(
s->version, 3);
648 s->version =
FFMAX(
s->version, 4);
649 s->crcref = 0x7a8c4079;
653 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");
658 for (
i = 1;
i < 256;
i++)
663 for (
i = 1;
i < 256;
i++)
664 s->state_transition[
i] =
c.one_state[
i];
667 for (
i = 0;
i < 256;
i++) {
668 s->quant_table_count = 2;
669 if ((
s->qtable == -1 &&
s->bits_per_raw_sample <= 8) ||
s->qtable == 1) {
675 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
676 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
677 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
678 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
679 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
689 s->context_count[0] = (9 * 9 * 9 + 1) / 2;
690 s->context_count[1] = (9 * 9 * 5 * 5 * 5 + 1) / 2;
697 if (!
s->transparency)
699 if (!
s->chroma_planes &&
s->version > 3)
704 s->picture_number = 0;
707 for (
i = 0;
i <
s->quant_table_count;
i++) {
709 sizeof(*
s->rc_stat2[
i]));
725 for (j = 0; j < 256; j++)
726 for (
i = 0;
i < 2;
i++) {
727 s->rc_stat[j][
i] = strtol(
p, &next, 0);
730 "2Pass file invalid at %d %d [%s]\n", j,
i,
p);
736 for (
i = 0;
i <
s->quant_table_count;
i++)
737 for (j = 0; j <
s->context_count[
i]; j++) {
738 for (k = 0; k < 32; k++)
739 for (m = 0; m < 2; m++) {
740 s->rc_stat2[
i][j][k][m] = strtol(
p, &next, 0);
743 "2Pass file invalid at %d %d %d %d [%s]\n",
751 gob_count = strtol(
p, &next, 0);
752 if (next ==
p || gob_count <= 0) {
758 while (*
p ==
'\n' || *
p ==
' ')
768 for (
i = 0;
i <
s->quant_table_count;
i++) {
769 for (k = 0; k < 32; k++) {
772 for (j = 0; j <
s->context_count[
i]; j++) {
774 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
776 p = 256.0 *
b / (
a +
b);
777 s->initial_states[
i][jp][k] =
779 for(jp++; jp<j; jp++)
780 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
783 a +=
s->rc_stat2[
i][j][k][0];
784 b +=
s->rc_stat2[
i][j][k][1];
786 p = 256.0 *
b / (
a +
b);
788 s->initial_states[
i][j][k] =
796 if (
s->version <= 1) {
824 s->bits_per_raw_sample = 9;
835 s->bits_per_raw_sample = 10;
845 s->bits_per_raw_sample = 12;
852 s->bits_per_raw_sample = 14;
853 s->packed_at_lsb = 1;
868 s->bits_per_raw_sample = 16;
869 }
else if (!
s->bits_per_raw_sample) {
872 if (
s->bits_per_raw_sample <= 8) {
876 s->version =
FFMAX(
s->version, 1);
892 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
896 s->bits_per_raw_sample = 8;
897 else if (!
s->bits_per_raw_sample)
898 s->bits_per_raw_sample = 8;
903 s->chroma_planes = 1;
904 s->bits_per_raw_sample = 8;
909 s->chroma_planes = 1;
910 s->bits_per_raw_sample = 16;
912 s->version =
FFMAX(
s->version, 1);
916 s->chroma_planes = 1;
917 s->bits_per_raw_sample = 16;
919 s->version =
FFMAX(
s->version, 1);
923 s->chroma_planes = 1;
924 s->bits_per_raw_sample = 16;
926 s->version =
FFMAX(
s->version, 4);
932 s->chroma_planes = 1;
933 s->bits_per_raw_sample = 8;
937 s->bits_per_raw_sample = 9;
944 s->bits_per_raw_sample = 10;
949 s->bits_per_raw_sample = 12;
954 s->bits_per_raw_sample = 14;
961 s->bits_per_raw_sample = 16;
966 s->bits_per_raw_sample = 32;
967 else if (!
s->bits_per_raw_sample)
971 s->chroma_planes = 1;
972 if (
s->bits_per_raw_sample >= 16) {
975 s->version =
FFMAX(
s->version, 1);
983 if (
s->flt ||
s->remap_mode > 0)
984 s->version =
FFMAX(
s->version, 4);
987 if (
s->remap_mode < 0)
988 s->remap_mode =
s->flt ? 2 : 0;
989 if (
s->remap_mode == 0 &&
s->bits_per_raw_sample == 32) {
993 if (
s->remap_mode == 2 &&
994 !((
s->bits_per_raw_sample == 16 ||
s->bits_per_raw_sample == 32 ||
s->bits_per_raw_sample == 64) &&
s->flt)) {
1019 if (
s->bayer && (avctx->
width & 1 || avctx->
height & 1)) {
1024 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8) && !
s->remap_mode) {
1027 "high bits_per_raw_sample, forcing range coder\n");
1037 if (
s->version > 1) {
1047 s->slice_count =
s->max_slice_count;
1049 for (
int j = 0; j <
s->slice_count; j++) {
1052 for (
int i = 0;
i <
s->plane_count;
i++) {
1055 p->quant_table_index =
s->context_model;
1056 p->context_count =
s->context_count[
p->quant_table_index];
1059 if (
s->remap_mode) {
1060 for (
int p = 0;
p < 1 + 2*
s->chroma_planes +
s->transparency ;
p++) {
1061 if (
s->bits_per_raw_sample == 32) {
1078 s->slices[j].remap =
s->remap_mode;
1084 #define STATS_OUT_SIZE 1024 * 1024 * 6
1089 for (
int i = 0;
i <
s->quant_table_count;
i++)
1090 for (
int j = 0; j <
s->max_slice_count; j++) {
1114 for (j=0; j<
f->plane_count; j++) {
1124 if (
f->version > 3) {
1138 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1140 #define NB_Y_COEFF 15
1141 static const int rct_y_coeff[15][2] = {
1161 int x, y,
i,
p, best;
1163 int lbd =
f->bits_per_raw_sample <= 8;
1164 int packed = !
src[1];
1165 int transparency =
f->transparency;
1166 int packed_size = (3 + transparency)*2;
1168 for (y = 0; y <
h; y++) {
1169 int lastr=0, lastg=0, lastb=0;
1170 for (
p = 0;
p < 3;
p++)
1173 for (x = 0; x <
w; x++) {
1177 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1179 g = (v >> 8) & 0xFF;
1180 r = (v >> 16) & 0xFF;
1181 }
else if (packed) {
1182 const uint16_t *
p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1186 }
else if (
f->use32bit || transparency) {
1187 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1188 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1189 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1191 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1192 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1193 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1200 int bg = ag -
sample[0][x];
1201 int bb = ab -
sample[1][x];
1202 int br = ar -
sample[2][x];
1208 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1224 if (stat[
i] < stat[best])
1233 const uint8_t *
src[4],
const int stride[4],
1236 static const int rct_y_coeff[
NB_Y_COEFF][2] = {
1237 { 0, 0 }, { 1, 1 }, { 2, 2 }, { 0, 2 }, { 2, 0 }, { 4, 0 }, { 0, 4 }, { 0, 3 },
1238 { 3, 0 }, { 3, 1 }, { 1, 3 }, { 1, 2 }, { 2, 1 }, { 0, 1 }, { 1, 0 },
1246 for (
i = 0;
i < 3;
i++)
1249 for (
int y = 0; y <
h; y += 2) {
1250 int last_gm = 0, last_b = 0, last_r = 0;
1251 for (
int x = 0; x <
w; x++) {
1252 const uint16_t *l1 = (
const uint16_t *)(
src[0] +
stride[0]*(y + 0) + x*2*2);
1253 const uint16_t *l2 = (
const uint16_t *)(
src[0] +
stride[0]*(y + 1) + x*2*2);
1259 int gm = gb + (gd >> 1);
1261 int agm = gm - last_gm;
1262 int ab =
b - last_b;
1263 int ar =
r - last_r;
1266 int bgm = agm -
sample[0][x];
1267 int bb = ab -
sample[1][x];
1268 int br = ar -
sample[2][x];
1274 stat[
i] +=
FFABS(bgm + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1]) >> 2));
1288 if (stat[
i] < stat[best])
1297 int len = 1 <<
f->bits_per_raw_sample;
1300 for (
int p= 0;
p < 1 + 2*
f->chroma_planes +
f->transparency;
p++) {
1303 uint8_t
state[2][32];
1309 for (
int i= 0;
i<
len;
i++) {
1310 int ri =
i ^ ((
i&0x8000) ? 0 :
flip);
1331 const uint8_t *
src[4],
1335 int transparency =
f->transparency;
1338 for (y = 0; y <
h; y++) {
1339 for (x = 0; x <
w; x++) {
1342 g = *((
const uint32_t *)(
src[0] + x*4 +
stride[0]*y));
1343 b = *((
const uint32_t *)(
src[1] + x*4 +
stride[1]*y));
1344 r = *((
const uint32_t *)(
src[2] + x*4 +
stride[2]*y));
1346 a = *((
const uint32_t *)(
src[3] + x*4 +
stride[3]*y));
1348 if (sc->
remap == 2) {
1349 #define FLIP(f) (((f)&0x80000000) ? (f) : (f)^0x7FFFFFFF);
1374 #define CMP(A,B) ((A)->val - (int64_t)(B)->val)
1383 int p,
int mul_count,
int *mul_tab,
int update,
int final)
1386 uint8_t
state[2][3][32];
1392 int compact_index = -1;
1394 int current_mul_index = -1;
1397 int run1start_last_val;
1398 int run1start_mul_index;
1400 memcpy(mul, mul_tab,
sizeof(*mul_tab)*(mul_count+1));
1405 for (;
i < pixel_num+1;
i++) {
1406 int current_mul = current_mul_index < 0 ? 1 :
FFABS(mul[current_mul_index]);
1408 if (
i == pixel_num) {
1409 if (last_val == 0xFFFFFFFF && (!
run || run1final)) {
1412 val = last_val + ((1LL<<32) - last_val + current_mul - 1) / current_mul * current_mul;
1414 val += lu * current_mul;
1419 if (last_val !=
val) {
1432 run1start_i =
i - 1;
1433 run1start_last_val = last_val;
1434 run1start_mul_index= current_mul_index;
1448 last_val += current_mul;
1452 last_val = run1start_last_val;
1453 current_mul_index = run1start_mul_index;
1465 if (current_mul > 1)
1473 current_mul_index = ((last_val + 1) * mul_count) >> 32;
1474 if (!
run || run1final) {
1476 if (mul[ current_mul_index ] < 0) {
1478 mul[ current_mul_index ] *= -1;
1485 if (!
run || run1final)
1486 if (
final &&
i < pixel_num)
1498 const uint8_t *
src[4])
1501 const int max_log2_mul_count = ((
int[]){ 1, 1, 1, 9, 9, 10})[
f->remap_optimizer];
1502 const int log2_mul_count_step = ((
int[]){ 1, 1, 1, 9, 9, 1})[
f->remap_optimizer];
1503 const int max_log2_mul = ((
int[]){ 1, 8, 8, 9, 22, 22})[
f->remap_optimizer];
1504 const int log2_mul_step = ((
int[]){ 1, 8, 1, 1, 1, 1})[
f->remap_optimizer];
1505 const int bruteforce_count = ((
int[]){ 0, 0, 0, 1, 1, 1})[
f->remap_optimizer];
1506 const int stair_mode = ((
int[]){ 0, 0, 0, 1, 0, 0})[
f->remap_optimizer];
1507 const int magic_log2 = ((
int[]){ 1, 1, 1, 1, 0, 0})[
f->remap_optimizer];
1509 for (
int p= 0;
p < 1 + 2*
f->chroma_planes +
f->transparency;
p++) {
1510 int best_log2_mul_count = 0;
1511 float score_sum[11] = {0};
1512 int mul_all[11][1025];
1514 for (
int log2_mul_count= 0; log2_mul_count <= max_log2_mul_count; log2_mul_count += log2_mul_count_step) {
1515 float score_tab_all[1025][23] = {0};
1517 int *mul_tab = mul_all[log2_mul_count];
1518 int last_mul_index = -1;
1519 int mul_count = 1 << log2_mul_count;
1521 score_sum[log2_mul_count] = 2 * log2_mul_count;
1523 score_sum[log2_mul_count] =
av_float2int((
float)mul_count * mul_count);
1524 for (
int i= 0;
i<pixel_num;
i++) {
1526 int mul_index = (
val + 1LL)*mul_count >> 32;
1527 if (
val != last_val) {
1528 float *score_tab = score_tab_all[(last_val + 1LL)*mul_count >> 32];
1530 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1537 }
else if (stair_mode && mul_count == 512 && si == max_log2_mul ) {
1538 if (mul_index >= 0x378/8 && mul_index <= 23 + 0x378/8) {
1539 mul = (0x800080 >> (mul_index - 0x378/8));
1543 mul = (0x10001LL)<<si >> 16;
1555 if (mul_index != last_mul_index)
1560 score_tab[si] +=
log2f(score);
1564 last_mul_index = mul_index;
1566 for(
int i= 0;
i<mul_count;
i++) {
1568 float *score_tab = score_tab_all[
i];
1569 for(
int si= 0; si <= max_log2_mul; si += log2_mul_step) {
1570 if (score_tab[si] < score_tab[ best_index ])
1573 if (stair_mode && mul_count == 512 && best_index == max_log2_mul ) {
1574 if (
i >= 0x378/8 &&
i <= 23 + 0x378/8) {
1575 mul_tab[
i] = -(0x800080 >> (
i - 0x378/8));
1579 mul_tab[
i] = -((0x10001LL)<<best_index >> 16);
1580 score_sum[log2_mul_count] += score_tab[ best_index ];
1582 mul_tab[mul_count] = 1;
1584 if (bruteforce_count)
1587 if (score_sum[log2_mul_count] < score_sum[best_log2_mul_count])
1588 best_log2_mul_count = log2_mul_count;
1596 const uint8_t *
src[4],
1597 int w,
int h,
const int stride[4],
int ac)
1600 const int ring_size =
f->context_model ? 3 : 2;
1604 int transparency =
f->transparency;
1616 for (y = 0; y <
h; y++) {
1621 for (x = 0; x <
w; x++) {
1642 for (
p = 0;
p < 3 + transparency;
p++) {
1647 bits[
p], ac, pass1);
1656 const uint8_t *
src[4],
1657 int w,
int h,
const int stride[4],
int ac)
1660 const int ring_size =
f->context_model ? 3 : 2;
1676 for (
int y = 0; y <
h; y += 2) {
1682 for (
int x = 0; x <
w; x++) {
1683 const uint16_t *l1 = ((
const uint16_t*)(
src[0] +
stride[0]*(y + 0) + x*2*2));
1684 const uint16_t *l2 = ((
const uint16_t*)(
src[0] +
stride[0]*(y + 1) + x*2*2));
1699 int gm = gb + (gd >> 1);
1718 for (
int p = 0;
p < 4;
p++) {
1726 p == 1 ? 2 : (
p > 1),
1727 bits[
p], ac, pass1);
1744 const AVFrame *
const p =
f->cur_enc_frame;
1750 const uint8_t *
planes[4] = {
p->data[0] + ps*x + y*
p->linesize[0],
1751 p->data[1] ?
p->data[1] + ps*x + y*
p->linesize[1] :
NULL,
1752 p->data[2] ?
p->data[2] + ps*x + y*
p->linesize[2] :
NULL,
1753 p->data[3] ?
p->data[3] + ps*x + y*
p->linesize[3] :
NULL};
1757 if (
f->version > 3 &&
f->colorspace == 1) {
1759 }
else if (
f->bayer) {
1769 if (
f->version > 2) {
1777 if (
f->bits_per_raw_sample != 32) {
1779 const int cx = x >>
f->chroma_h_shift;
1780 const int cy = y >>
f->chroma_v_shift;
1787 if (
f->chroma_planes) {
1788 load_plane(
f, sc,
p->data[1] + ps*cx+cy*
p->linesize[1], chroma_width, chroma_height,
p->linesize[1], 1, 1);
1789 load_plane(
f, sc,
p->data[2] + ps*cx+cy*
p->linesize[2], chroma_width, chroma_height,
p->linesize[2], 2, 1);
1791 if (
f->transparency)
1796 }
else if (
f->use32bit) {
1816 const int cx = x >>
f->chroma_h_shift;
1817 const int cy = y >>
f->chroma_v_shift;
1821 if (
f->chroma_planes) {
1822 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);
1823 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);
1825 if (
f->transparency)
1830 }
else if (
f->bits_per_raw_sample == 32) {
1832 }
else if (
f->bayer) {
1834 }
else if (
f->use32bit) {
1849 if (
f->version < 4) {
1867 int w = avctx->
width +
f->num_h_slices;
1868 int h = avctx->
height +
f->num_v_slices;
1869 size_t maxsize =
w*
h * (1 +
f->transparency);
1870 if (
f->chroma_planes)
1872 maxsize +=
f->slice_count * 800;
1873 if (
f->version > 3) {
1874 maxsize *=
f->bits_per_raw_sample + 1;
1876 maxsize +=
f->slice_count * 70000 * (1 + 2*
f->chroma_planes +
f->bayer +
f->transparency);
1878 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1879 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1888 const AVFrame *pict,
int *got_packet)
1892 uint8_t keystate = 128;
1903 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1904 for (
i = 0;
i <
f->quant_table_count;
i++)
1905 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1908 for (j = 0; j <
f->slice_count; j++) {
1910 for (
i = 0;
i < 256;
i++) {
1914 for (
i = 0;
i <
f->quant_table_count;
i++) {
1915 for (k = 0; k <
f->context_count[
i]; k++)
1916 for (m = 0; m < 32; m++) {
1917 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1918 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1923 for (j = 0; j < 256; j++) {
1924 snprintf(
p, end -
p,
"%" PRIu64
" %" PRIu64
" ",
1925 f->rc_stat[j][0],
f->rc_stat[j][1]);
1930 for (
i = 0;
i <
f->quant_table_count;
i++) {
1931 for (j = 0; j <
f->context_count[
i]; j++)
1932 for (m = 0; m < 32; m++) {
1933 snprintf(
p, end -
p,
"%" PRIu64
" %" PRIu64
" ",
1934 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1948 if (!
f->maxsize_warned) {
1949 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1950 f->maxsize_warned++;
1961 f->cur_enc_frame = pict;
1975 for (
i = 1;
i < 256;
i++) {
1976 c->one_state[
i] =
f->state_transition[
i];
1977 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1981 for (
i = 0;
i <
f->slice_count;
i++) {
1994 f->slice_count,
sizeof(*
f->slices));
1997 for (
i = 0;
i <
f->slice_count;
i++) {
2000 if (
i > 0 ||
f->version > 2) {
2004 AV_WB24(buf_p + bytes, bytes);
2020 f->picture_number++;
2032 for (
int j = 0; j <
s->max_slice_count; j++) {
2035 for(
int p = 0;
p<4;
p++) {
2047 #define OFFSET(x) offsetof(FFV1Context, x)
2048 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
2052 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
2059 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
2060 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
2062 { .i64 = 0 }, 0, 1,
VE },
2064 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
2068 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },
2071 {
"remap_mode",
"Remap Mode",
OFFSET(remap_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2,
VE, .unit =
"remap_mode" },
2073 { .i64 = -1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
2075 { .i64 = 0 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
2077 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
2079 { .i64 = 2 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
2080 {
"remap_optimizer",
"Remap Optimizer",
OFFSET(remap_optimizer),
AV_OPT_TYPE_INT, { .i64 = 3 }, 0, 5,
VE, .unit =
"remap_optimizer" },