45 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
46 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
49 2, 2, 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, -1,
58 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0,
64 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
65 2, 2, 2, 2, 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, -1, -1, -1,
83 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
84 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
85 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
86 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
87 4, 4, 4, 4, 4, 4, 4, 4, 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, -3, -3, -3, -3, -3, -3, -3,
96 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
97 -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
98 -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0,
102 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
103 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
104 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
105 5, 5, 5, 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, -4, -4,
116 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
117 -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1,
121 0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49,
122 59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39,
123 40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52,
124 53, 74, 55, 57, 58, 58, 74, 60, 101, 61, 62, 84, 66, 66, 68, 69,
125 87, 82, 71, 97, 73, 73, 82, 75, 111, 77, 94, 78, 87, 81, 83, 97,
126 85, 83, 94, 86, 99, 89, 90, 99, 111, 92, 93, 134, 95, 98, 105, 98,
127 105, 110, 102, 108, 102, 118, 103, 106, 106, 113, 109, 112, 114, 112, 116, 125,
128 115, 116, 117, 117, 126, 119, 125, 121, 121, 123, 145, 124, 126, 131, 127, 129,
129 165, 130, 132, 138, 133, 135, 145, 136, 137, 139, 146, 141, 143, 142, 144, 148,
130 147, 155, 151, 149, 151, 150, 152, 157, 153, 154, 156, 168, 158, 162, 161, 160,
131 172, 163, 169, 164, 166, 184, 167, 170, 177, 174, 171, 173, 182, 176, 180, 178,
132 175, 189, 179, 181, 186, 183, 192, 185, 200, 187, 191, 188, 190, 197, 193, 196,
133 197, 194, 195, 196, 198, 202, 199, 201, 210, 203, 207, 204, 205, 206, 208, 214,
134 209, 211, 221, 212, 213, 215, 224, 216, 217, 218, 219, 220, 222, 228, 223, 225,
135 226, 224, 227, 229, 240, 230, 231, 232, 233, 234, 235, 236, 238, 239, 237, 242,
136 241, 243, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 255,
140 const uint8_t one_state[256])
145 for (
i = 1;
i < 256;
i++)
146 l2tab[
i] = -
log2(
i / 256.0) * ((1
U << 31) / 8);
148 for (
i = 0;
i < 256;
i++) {
149 uint64_t best_len[256];
151 for (j = 0; j < 256; j++)
152 best_len[j] = UINT64_MAX;
154 for (j =
FFMAX(
i - 10, 1); j <
FFMIN(
i + 11, 256); j++) {
155 uint32_t occ[256] = { 0 };
162 for (k = 0; k < 256; k++) {
163 uint32_t newocc[256] = { 0 };
164 for (m = 1; m < 256; m++)
166 len += (occ[m]*((
i *(uint64_t)l2tab[ m]
167 + (256-
i)*(uint64_t)l2tab[256-m])>>8)) >> 8;
169 if (
len < best_len[k]) {
171 best_state[
i][k] = j;
173 for (m = 1; m < 256; m++)
175 newocc[ one_state[ m]] += occ[m] * (uint64_t)
i >> 8;
176 newocc[256 - one_state[256 - m]] += occ[m] * (uint64_t)(256 -
i) >> 8;
178 memcpy(occ, newocc,
sizeof(occ));
185 uint8_t *
state,
int v,
187 uint64_t rc_stat[256][2],
188 uint64_t rc_stat2[32][2])
192 #define put_rac(C, S, B) \
195 rc_stat[*(S)][B]++; \
196 rc_stat2[(S) - state][B]++; \
202 const unsigned a = is_signed ?
FFABS(v) : v;
206 for (
i = 0;
i < e;
i++)
210 for (
i = e - 1;
i >= 0;
i--)
216 for (
i = 0;
i < e;
i++)
220 for (
i = e - 1;
i >= 0;
i--)
233 int v,
int is_signed)
247 while (i < state->error_sum) {
256 ff_dlog(
NULL,
"v:%d/%d bias:%d error:%d drift:%d count:%d k:%d\n", v,
code,
264 #define RENAME(name) name
270 #define RENAME(name) name ## 32
274 const uint8_t *
src,
int w,
int h,
275 int stride,
int plane_index,
int remap_index,
int pixel_stride,
int ac)
279 const int ring_size =
f->context_model ? 3 : 2;
285 for (y = 0; y <
h; y++) {
292 if (
f->bits_per_raw_sample <= 8) {
293 for (x = 0; x <
w; x++)
296 for (x = 0; x <
w; x++)
302 if (
f->packed_at_lsb) {
303 for (x = 0; x <
w; x++) {
307 for (x = 0; x <
w; x++) {
308 sample[0][x] = ((uint16_t*)(
src +
stride*y))[x * pixel_stride] >> (16 -
f->bits_per_raw_sample);
312 for (x = 0; x <
w; x++)
323 const uint8_t *
src,
int w,
int h,
324 int stride,
int remap_index,
int pixel_stride)
328 memset(sc->
fltmap[remap_index], 0,
sizeof(sc->
fltmap[remap_index]));
330 for (y = 0; y <
h; y++) {
331 if (
f->bits_per_raw_sample <= 8) {
332 for (x = 0; x <
w; x++)
335 if (
f->packed_at_lsb) {
336 for (x = 0; x <
w; x++)
337 sc->
fltmap[remap_index][ ((uint16_t*)(
src +
stride*y))[x * pixel_stride] ] = 1;
339 for (x = 0; x <
w; x++)
340 sc->
fltmap[remap_index][ ((uint16_t*)(
src +
stride*y))[x * pixel_stride] >> (16 -
f->bits_per_raw_sample) ] = 1;
365 for (
i = 0;
i < 5;
i++)
374 for (
int i = 0;
i < nb_contexts;
i++)
376 if (initial_state[
i][j] != 128)
389 if (
f->version < 2) {
393 for (
i = 1;
i < 256;
i++)
395 f->state_transition[
i] -
c->one_state[
i], 1);
406 }
else if (
f->version < 3) {
408 for (
i = 0;
i <
f->slice_count;
i++) {
411 (
fs->slice_x + 1) *
f->num_h_slices /
f->width, 0);
413 (
fs->slice_y + 1) *
f->num_v_slices /
f->height, 0);
415 (
fs->slice_width + 1) *
f->num_h_slices /
f->width - 1,
418 (
fs->slice_height + 1) *
f->num_v_slices /
f->height - 1,
420 for (j = 0; j <
f->plane_count; j++) {
422 av_assert0(
fs->plane[j].quant_table_index ==
f->context_model);
430 f->combined_version =
f->version << 16;
431 if (
f->version > 2) {
432 if (
f->version == 3) {
433 f->micro_version = 4;
434 }
else if (
f->version == 4) {
435 f->micro_version = 5;
439 f->combined_version +=
f->micro_version;
454 memset(state2, 128,
sizeof(state2));
457 f->avctx->extradata_size = 10000 + 4 +
458 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
460 if (!
f->avctx->extradata)
471 for (
i = 1;
i < 256;
i++)
484 for (
i = 0;
i <
f->quant_table_count;
i++)
487 for (
i = 0;
i <
f->quant_table_count;
i++) {
490 for (j = 0; j <
f->context_count[
i]; j++)
492 int pred = j ?
f->initial_states[
i][j - 1][k] : 128;
494 (int8_t)(
f->initial_states[
i][j][k] -
pred), 1);
501 if (
f->version > 2) {
508 AV_WL32(
f->avctx->extradata +
f->avctx->extradata_size, v);
509 f->avctx->extradata_size += 4;
516 int i, i2, changed,
print = 0;
520 for (
i = 12;
i < 244;
i++) {
521 for (i2 =
i + 1; i2 < 245 && i2 <
i + 4; i2++) {
523 #define COST(old, new) \
524 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
525 s->rc_stat[old][1] * -log2((new) / 256.0)
527 #define COST2(old, new) \
528 COST(old, new) + COST(256 - (old), 256 - (new))
532 if (size0 - sizeX > size0*(1e-14) &&
i != 128 && i2 != 128) {
535 FFSWAP(
int,
s->rc_stat[
i][0],
s->rc_stat[i2][0]);
536 FFSWAP(
int,
s->rc_stat[
i][1],
s->rc_stat[i2][1]);
538 FFSWAP(
int, stt[256 -
i], stt[256 - i2]);
539 FFSWAP(
int,
s->rc_stat[256 -
i][0],
s->rc_stat[256 - i2][0]);
540 FFSWAP(
int,
s->rc_stat[256 -
i][1],
s->rc_stat[256 - i2][1]);
542 for (j = 1; j < 256; j++) {
545 else if (stt[j] == i2)
548 if (stt[256 - j] == 256 -
i)
549 stt[256 - j] = 256 - i2;
550 else if (stt[256 - j] == 256 - i2)
551 stt[256 - j] = 256 -
i;
566 int plane_count = 1 + 2*
s->chroma_planes +
s->transparency;
569 s->num_v_slices = (avctx->
width > 352 || avctx->
height > 288 || !avctx->
slices) ? 2 : 1;
570 s->num_v_slices =
FFMIN(
s->num_v_slices, max_v_slices);
571 for (;
s->num_v_slices < 32;
s->num_v_slices++) {
572 for (
s->num_h_slices =
s->num_v_slices;
s->num_h_slices < 2*
s->num_v_slices;
s->num_h_slices++) {
573 int maxw = (avctx->
width +
s->num_h_slices - 1) /
s->num_h_slices;
574 int maxh = (avctx->
height +
s->num_v_slices - 1) /
s->num_v_slices;
575 if (
s->num_h_slices > max_h_slices ||
s->num_v_slices > max_v_slices)
577 if (maxw * maxh * (
int64_t)(
s->bits_per_raw_sample+1) * plane_count > 8<<24)
588 "Unsupported number %d of slices requested, please specify a "
589 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
601 s->version =
FFMAX(
s->version, 2);
610 s->version =
FFMAX(
s->version, 2);
612 if (avctx->
level <= 0 &&
s->version == 2) {
616 if (avctx->
level <
s->version) {
617 av_log(avctx,
AV_LOG_ERROR,
"Version %d needed for requested features but %d requested\n",
s->version, avctx->
level);
620 s->version = avctx->
level;
624 if (
s->version >= 4) {
626 s->crcref = 0x7a8c4079;
627 }
else if (
s->version >= 3) {
635 s->version =
FFMAX(
s->version, 3);
637 s->version =
FFMAX(
s->version, 4);
640 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");
645 for (
i = 1;
i < 256;
i++)
650 for (
i = 1;
i < 256;
i++)
651 s->state_transition[
i] =
c.one_state[
i];
654 for (
i = 0;
i < 256;
i++) {
655 s->quant_table_count = 2;
656 if ((
s->qtable == -1 &&
s->bits_per_raw_sample <= 8) ||
s->qtable == 1) {
662 s->quant_tables[1][2][
i]= 11*11*
quant5 [
i];
663 s->quant_tables[1][3][
i]= 5*11*11*
quant5 [
i];
664 s->quant_tables[1][4][
i]= 5*5*11*11*
quant5 [
i];
665 s->context_count[0] = (11 * 11 * 11 + 1) / 2;
666 s->context_count[1] = (11 * 11 * 5 * 5 * 5 + 1) / 2;
676 s->context_count[0] = (9 * 9 * 9 + 1) / 2;
677 s->context_count[1] = (9 * 9 * 5 * 5 * 5 + 1) / 2;
684 if (!
s->transparency)
686 if (!
s->chroma_planes &&
s->version > 3)
689 s->picture_number = 0;
692 for (
i = 0;
i <
s->quant_table_count;
i++) {
694 sizeof(*
s->rc_stat2[
i]));
710 for (j = 0; j < 256; j++)
711 for (
i = 0;
i < 2;
i++) {
712 s->rc_stat[j][
i] = strtol(p, &next, 0);
715 "2Pass file invalid at %d %d [%s]\n", j,
i, p);
721 for (
i = 0;
i <
s->quant_table_count;
i++)
722 for (j = 0; j <
s->context_count[
i]; j++) {
723 for (k = 0; k < 32; k++)
724 for (m = 0; m < 2; m++) {
725 s->rc_stat2[
i][j][k][m] = strtol(p, &next, 0);
728 "2Pass file invalid at %d %d %d %d [%s]\n",
736 gob_count = strtol(p, &next, 0);
737 if (next == p || gob_count <= 0) {
743 while (*p ==
'\n' || *p ==
' ')
753 for (
i = 0;
i <
s->quant_table_count;
i++) {
754 for (k = 0; k < 32; k++) {
757 for (j = 0; j <
s->context_count[
i]; j++) {
759 if (
s->rc_stat2[
i][j][k][0] +
s->rc_stat2[
i][j][k][1] > 200 && j ||
a+
b > 200) {
761 p = 256.0 *
b / (
a +
b);
762 s->initial_states[
i][jp][k] =
764 for(jp++; jp<j; jp++)
765 s->initial_states[
i][jp][k] =
s->initial_states[
i][jp-1][k];
768 a +=
s->rc_stat2[
i][j][k][0];
769 b +=
s->rc_stat2[
i][j][k][1];
771 p = 256.0 *
b / (
a +
b);
773 s->initial_states[
i][j][k] =
781 if (
s->version <= 1) {
808 s->bits_per_raw_sample = 9;
818 s->bits_per_raw_sample = 10;
827 s->bits_per_raw_sample = 12;
833 s->bits_per_raw_sample = 14;
834 s->packed_at_lsb = 1;
845 s->bits_per_raw_sample = 16;
846 }
else if (!
s->bits_per_raw_sample) {
849 if (
s->bits_per_raw_sample <= 8) {
853 s->version =
FFMAX(
s->version, 1);
865 s->chroma_planes =
desc->nb_components < 3 ? 0 : 1;
869 s->bits_per_raw_sample = 8;
870 else if (!
s->bits_per_raw_sample)
871 s->bits_per_raw_sample = 8;
876 s->chroma_planes = 1;
877 s->bits_per_raw_sample = 8;
882 s->chroma_planes = 1;
883 s->bits_per_raw_sample = 16;
885 s->version =
FFMAX(
s->version, 1);
889 s->chroma_planes = 1;
890 s->bits_per_raw_sample = 16;
892 s->version =
FFMAX(
s->version, 1);
896 s->chroma_planes = 1;
897 s->bits_per_raw_sample = 8;
901 s->bits_per_raw_sample = 9;
905 s->bits_per_raw_sample = 10;
909 s->bits_per_raw_sample = 12;
913 s->bits_per_raw_sample = 14;
919 s->bits_per_raw_sample = 16;
920 else if (!
s->bits_per_raw_sample)
924 s->chroma_planes = 1;
925 if (
s->bits_per_raw_sample >= 16) {
928 s->version =
FFMAX(
s->version, 1);
937 s->version =
FFMAX(
s->version, 4);
940 if (
s->remap_mode < 0)
941 s->remap_mode =
s->flt ? 2 : 0;
963 if (
s->bits_per_raw_sample > (
s->version > 3 ? 16 : 8)) {
966 "high bits_per_raw_sample, forcing range coder\n");
976 if (
s->version > 1) {
986 s->slice_count =
s->max_slice_count;
988 for (
int j = 0; j <
s->slice_count; j++) {
989 for (
int i = 0;
i <
s->plane_count;
i++) {
998 s->slices[j].remap =
s->remap_mode;
1004 #define STATS_OUT_SIZE 1024 * 1024 * 6
1009 for (
int i = 0;
i <
s->quant_table_count;
i++)
1010 for (
int j = 0; j <
s->max_slice_count; j++) {
1034 for (j=0; j<
f->plane_count; j++) {
1044 if (
f->version > 3) {
1058 const uint8_t *
src[3],
const int stride[3],
int w,
int h)
1060 #define NB_Y_COEFF 15
1061 static const int rct_y_coeff[15][2] = {
1081 int x, y,
i, p, best;
1083 int lbd =
f->bits_per_raw_sample <= 8;
1084 int packed = !
src[1];
1085 int transparency =
f->transparency;
1086 int packed_size = (3 + transparency)*2;
1088 for (y = 0; y <
h; y++) {
1089 int lastr=0, lastg=0, lastb=0;
1090 for (p = 0; p < 3; p++)
1093 for (x = 0; x <
w; x++) {
1097 unsigned v = *((
const uint32_t*)(
src[0] + x*4 +
stride[0]*y));
1099 g = (v >> 8) & 0xFF;
1100 r = (v >> 16) & 0xFF;
1101 }
else if (packed) {
1102 const uint16_t *p = ((
const uint16_t*)(
src[0] + x*packed_size +
stride[0]*y));
1106 }
else if (
f->use32bit || transparency) {
1107 g = *((
const uint16_t *)(
src[0] + x*2 +
stride[0]*y));
1108 b = *((
const uint16_t *)(
src[1] + x*2 +
stride[1]*y));
1109 r = *((
const uint16_t *)(
src[2] + x*2 +
stride[2]*y));
1111 b = *((
const uint16_t*)(
src[0] + x*2 +
stride[0]*y));
1112 g = *((
const uint16_t*)(
src[1] + x*2 +
stride[1]*y));
1113 r = *((
const uint16_t*)(
src[2] + x*2 +
stride[2]*y));
1120 int bg = ag -
sample[0][x];
1121 int bb = ab -
sample[1][x];
1122 int br = ar -
sample[2][x];
1128 stat[
i] +=
FFABS(bg + ((br*rct_y_coeff[
i][0] + bb*rct_y_coeff[
i][1])>>2));
1144 if (stat[
i] < stat[best])
1156 for (
int p= 0; p < 1 + 2*
f->chroma_planes +
f->transparency; p++) {
1159 uint8_t
state[2][32];
1162 for (
int i= 0;
i<65536;
i++) {
1163 int ri =
i ^ ((
i&0x8000) ? 0 :
flip);
1190 const AVFrame *
const p =
f->cur_enc_frame;
1203 if (
f->version > 3 &&
f->colorspace == 1) {
1213 if (
f->version > 2) {
1219 const int cx = x >>
f->chroma_h_shift;
1220 const int cy = y >>
f->chroma_v_shift;
1227 if (
f->chroma_planes) {
1231 if (
f->transparency)
1236 }
else if (
f->use32bit) {
1252 const int cx = x >>
f->chroma_h_shift;
1253 const int cy = y >>
f->chroma_v_shift;
1257 if (
f->chroma_planes) {
1261 if (
f->transparency)
1266 }
else if (
f->use32bit) {
1281 if (
f->version < 4) {
1299 size_t maxsize = avctx->
width*avctx->
height * (1 +
f->transparency);
1300 if (
f->chroma_planes)
1302 maxsize +=
f->slice_count * 800;
1303 if (
f->version > 3) {
1304 maxsize *=
f->bits_per_raw_sample + 1;
1306 maxsize +=
f->slice_count * 70000 * (1 + 2*
f->chroma_planes +
f->transparency);
1308 maxsize +=
f->slice_count * 2 * (avctx->
width + avctx->
height);
1309 maxsize *= 8*(2*
f->bits_per_raw_sample + 5);
1318 const AVFrame *pict,
int *got_packet)
1322 uint8_t keystate = 128;
1333 memset(
f->rc_stat, 0,
sizeof(
f->rc_stat));
1334 for (
i = 0;
i <
f->quant_table_count;
i++)
1335 memset(
f->rc_stat2[
i], 0,
f->context_count[
i] *
sizeof(*
f->rc_stat2[
i]));
1338 for (j = 0; j <
f->slice_count; j++) {
1340 for (
i = 0;
i < 256;
i++) {
1344 for (
i = 0;
i <
f->quant_table_count;
i++) {
1345 for (k = 0; k <
f->context_count[
i]; k++)
1346 for (m = 0; m < 32; m++) {
1347 f->rc_stat2[
i][k][m][0] += sc->
rc_stat2[
i][k][m][0];
1348 f->rc_stat2[
i][k][m][1] += sc->
rc_stat2[
i][k][m][1];
1353 for (j = 0; j < 256; j++) {
1354 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1355 f->rc_stat[j][0],
f->rc_stat[j][1]);
1360 for (
i = 0;
i <
f->quant_table_count;
i++) {
1361 for (j = 0; j <
f->context_count[
i]; j++)
1362 for (m = 0; m < 32; m++) {
1363 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1364 f->rc_stat2[
i][j][m][0],
f->rc_stat2[
i][j][m][1]);
1368 snprintf(p, end - p,
"%d\n",
f->gob_count);
1377 av_log(avctx,
AV_LOG_WARNING,
"Cannot allocate worst case packet size, the encoding could fail\n");
1387 f->cur_enc_frame = pict;
1401 for (
i = 1;
i < 256;
i++) {
1402 c->one_state[
i] =
f->state_transition[
i];
1403 c->zero_state[256 -
i] = 256 -
c->one_state[
i];
1407 for (
i = 0;
i <
f->slice_count;
i++) {
1420 f->slice_count,
sizeof(*
f->slices));
1423 for (
i = 0;
i <
f->slice_count;
i++) {
1426 if (
i > 0 ||
f->version > 2) {
1430 AV_WB24(buf_p + bytes, bytes);
1446 f->picture_number++;
1464 #define OFFSET(x) offsetof(FFV1Context, x)
1465 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1469 { .i64 = 0 }, -2, 2,
VE, .unit =
"coder" },
1476 {
"ac",
"Range with custom table (the ac option exists for compatibility and is deprecated)", 0,
AV_OPT_TYPE_CONST,
1477 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"coder" },
1479 { .i64 = 0 }, 0, 1,
VE },
1481 { .i64 = -1 }, -1, 2,
VE , .unit =
"qtable"},
1485 { .i64 =
QTABLE_8BIT }, INT_MIN, INT_MAX,
VE, .unit =
"qtable" },
1488 {
"remap_mode",
"Remap Mode",
OFFSET(remap_mode),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2,
VE, .unit =
"remap_mode" },
1490 { .i64 = -1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1492 { .i64 = 0 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1494 { .i64 = 1 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },
1496 { .i64 = 2 }, INT_MIN, INT_MAX,
VE, .unit =
"remap_mode" },