43 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
44 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
45 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
46 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
47 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
48 2, 2, 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, -1,
56 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
57 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
58 -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0,
62 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
63 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
64 2, 2, 2, 2, 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, -1, -1, -1,
81 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
82 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
83 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
84 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
85 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
86 4, 4, 4, 4, 4, 4, 4, 4, 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, -3, -3, -3, -3, -3, -3, -3,
94 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
95 -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
96 -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0,
100 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
101 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
102 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
103 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
104 5, 5, 5, 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, -4, -4,
114 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
115 -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1,
119 0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49,
120 59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39,
121 40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52,
122 53, 74, 55, 57, 58, 58, 74, 60, 101, 61, 62, 84, 66, 66, 68, 69,
123 87, 82, 71, 97, 73, 73, 82, 75, 111, 77, 94, 78, 87, 81, 83, 97,
124 85, 83, 94, 86, 99, 89, 90, 99, 111, 92, 93, 134, 95, 98, 105, 98,
125 105, 110, 102, 108, 102, 118, 103, 106, 106, 113, 109, 112, 114, 112, 116, 125,
126 115, 116, 117, 117, 126, 119, 125, 121, 121, 123, 145, 124, 126, 131, 127, 129,
127 165, 130, 132, 138, 133, 135, 145, 136, 137, 139, 146, 141, 143, 142, 144, 148,
128 147, 155, 151, 149, 151, 150, 152, 157, 153, 154, 156, 168, 158, 162, 161, 160,
129 172, 163, 169, 164, 166, 184, 167, 170, 177, 174, 171, 173, 182, 176, 180, 178,
130 175, 189, 179, 181, 186, 183, 192, 185, 200, 187, 191, 188, 190, 197, 193, 196,
131 197, 194, 195, 196, 198, 202, 199, 201, 210, 203, 207, 204, 205, 206, 208, 214,
132 209, 211, 221, 212, 213, 215, 224, 216, 217, 218, 219, 220, 222, 228, 223, 225,
133 226, 224, 227, 229, 240, 230, 231, 232, 233, 234, 235, 236, 238, 239, 237, 242,
134 241, 243, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 255,
143 for (i = 1; i < 256; i++)
144 l2tab[i] =
log2(i / 256.0);
146 for (i = 0; i < 256; i++) {
147 double best_len[256];
148 double p = i / 256.0;
150 for (j = 0; j < 256; j++)
151 best_len[j] = 1 << 30;
153 for (j =
FFMAX(i - 10, 1); j <
FFMIN(i + 11, 256); j++) {
154 double occ[256] = { 0 };
157 for (k = 0; k < 256; k++) {
158 double newocc[256] = { 0 };
159 for (m = 1; m < 256; m++)
161 len -=occ[
m]*( p *l2tab[
m]
162 + (1-p)*l2tab[256-m]);
164 if (len < best_len[k]) {
166 best_state[i][k] = j;
168 for (m = 0; m < 256; m++)
170 newocc[ one_state[
m]] += occ[
m] * p;
171 newocc[256 - one_state[256 -
m]] += occ[
m] * (1 - p);
173 memcpy(occ, newocc,
sizeof(occ));
187 #define put_rac(C, S, B) \
190 rc_stat[*(S)][B]++; \
191 rc_stat2[(S) - state][B]++; \
201 for (i = 0; i < e; i++)
205 for (i = e - 1; i >= 0; i--)
206 put_rac(c, state + 22 + i, (a >> i) & 1);
209 put_rac(c, state + 11 + e, v < 0);
211 for (i = 0; i < e; i++)
215 for (i = e - 1; i >= 0; i--)
219 put_rac(c, state + 11 + 10, v < 0);
228 int v,
int is_signed)
242 while (i < state->error_sum) {
250 if (k == 0 && 2 * state->
drift <= -state->
count)
255 code = v ^ ((2 * state->
drift + state->
count) >> 31);
258 av_dlog(
NULL,
"v:%d/%d bias:%d error:%d drift:%d count:%d k:%d\n", v, code,
267 int plane_index,
int bits)
288 for (x = 0; x < w; x++) {
291 context =
get_context(p, sample[0] + x, sample[1] + x, sample[2] + x);
292 diff = sample[0][x] -
predict(sample[0] + x, sample[1] + x);
299 diff =
fold(diff, bits);
332 av_dlog(s->
avctx,
"count:%d index:%d, mode:%d, x:%d pos:%d\n",
333 run_count, run_index, run_mode, x,
356 int stride,
int plane_index)
365 for (y = 0; y < h; y++) {
366 for (i = 0; i < ring_size; i++)
367 sample[i] = s->
sample_buffer + (w + 6) * ((h + i -
y) % ring_size) + 3;
369 sample[0][-1]= sample[1][0 ];
370 sample[1][ w]= sample[1][w-1];
373 for (x = 0; x < w; x++)
374 sample[0][x] = src[x + stride * y];
378 for (x = 0; x < w; x++) {
379 sample[0][x] = ((uint16_t*)(src + stride*y))[x];
382 for (x = 0; x < w; x++) {
406 for (y = 0; y < h; y++) {
407 for (i = 0; i < ring_size; i++)
409 sample[p][i]= s->
sample_buffer + p*ring_size*(w+6) + ((h+i-
y)%ring_size)*(w+6) + 3;
411 for (x = 0; x < w; x++) {
414 unsigned v = *((uint32_t*)(src[0] + x*4 + stride[0]*y));
417 r = (v >> 16) & 0xFF;
420 b = *((uint16_t*)(src[0] + x*2 + stride[0]*y));
421 g = *((uint16_t*)(src[1] + x*2 + stride[1]*y));
422 r = *((uint16_t*)(src[2] + x*2 + stride[2]*y));
437 sample[p][0][-1] = sample[p][1][0 ];
438 sample[p][1][ w] = sample[p][1][w-1];
442 encode_line(s, w, sample[p], (p + 1) / 2, bits + 1);
452 memset(state, 128,
sizeof(state));
454 for (i = 1; i < 128; i++)
455 if (quant_table[i] != quant_table[i - 1]) {
466 for (i = 0; i < 5; i++)
476 memset(state, 128,
sizeof(state));
482 for (i = 1; i < 256; i++)
525 memset(state2, 128,
sizeof(state2));
526 memset(state, 128,
sizeof(state));
529 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
543 for (i = 1; i < 256; i++)
590 int i, i2, changed, print = 0;
594 for (i = 12; i < 244; i++) {
595 for (i2 = i + 1; i2 < 245 && i2 < i + 4; i2++) {
597 #define COST(old, new) \
598 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
599 s->rc_stat[old][1] * -log2((new) / 256.0)
601 #define COST2(old, new) \
602 COST(old, new) + COST(256 - (old), 256 - (new))
606 if (size0 - sizeX > size0*(1e-14) && i != 128 && i2 != 128) {
608 FFSWAP(
int, stt[i], stt[i2]);
612 FFSWAP(
int, stt[256 - i], stt[256 - i2]);
616 for (j = 1; j < 256; j++) {
619 else if (stt[j] == i2)
622 if (stt[256 - j] == 256 - i)
623 stt[256 - j] = 256 - i2;
624 else if (stt[256 - j] == 256 - i2)
625 stt[256 - j] = 256 - i;
649 if (avctx->
level == 3) {
658 av_log(avctx,
AV_LOG_ERROR,
"Version 2 needed for requested features but version 2 is experimental and not enabled\n");
695 av_log(avctx,
AV_LOG_ERROR,
"bits_per_raw_sample of more than 8 needs -coder 1 currently\n");
746 av_log(avctx,
AV_LOG_WARNING,
"Storing alpha plane, this will require a recent FFV1 decoder to playback!\n");
754 for (i = 1; i < 256; i++)
757 for (i = 0; i < 256; i++) {
818 for (j = 0; j < 256; j++)
819 for (i = 0; i < 2; i++) {
820 s->
rc_stat[j][i] = strtol(p, &next, 0);
823 "2Pass file invalid at %d %d [%s]\n", j, i, p);
830 for (k = 0; k < 32; k++)
831 for (m = 0; m < 2; m++) {
832 s->
rc_stat2[i][j][k][
m] = strtol(p, &next, 0);
835 "2Pass file invalid at %d %d %d %d [%s]\n",
842 gob_count = strtol(p, &next, 0);
843 if (next == p || gob_count <= 0) {
848 while (*p ==
'\n' || *p ==
' ')
858 for (k = 0; k < 32; k++) {
865 p = 256.0 *
b / (a +
b);
867 best_state[av_clip(
round(p), 1, 255)][av_clip((a +
b) / gob_count, 0, 255)];
868 for(jp++; jp<j; jp++)
875 p = 256.0 *
b / (a +
b);
878 best_state[av_clip(
round(p), 1, 255)][av_clip((a +
b) / gob_count, 0, 255)];
893 "Unsupported number %d of slices requested, please specify a "
894 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
906 #define STATS_OUT_SIZE 1024 * 1024 * 6
930 memset(state, 128,
sizeof(state));
973 if (f->colorspace == 0) {
974 const int chroma_width = -((-
width) >> f->chroma_h_shift);
975 const int chroma_height = -((-
height) >> f->chroma_v_shift);
976 const int cx = x >> f->chroma_h_shift;
977 const int cy =
y >> f->chroma_v_shift;
981 if (f->chroma_planes) {
982 encode_plane(fs, p->data[1] + ps*cx+cy*p->linesize[1], chroma_width, chroma_height, p->linesize[1], 1);
983 encode_plane(fs, p->data[2] + ps*cx+cy*p->linesize[2], chroma_width, chroma_height, p->linesize[2], 1);
985 if (fs->transparency)
988 uint8_t *planes[3] = {p->data[0] + ps*x +
y*p->linesize[0],
989 p->data[1] + ps*x +
y*p->linesize[1],
990 p->data[2] + ps*x +
y*p->linesize[2]};
999 const AVFrame *pict,
int *got_packet)
1031 for (i = 1; i < 256; i++) {
1059 if (i > 0 || f->
version > 2) {
1063 AV_WB24(buf_p + bytes, bytes);
1087 for (i = 0; i < 256; i++) {
1093 for (m = 0; m < 32; m++) {
1100 for (j = 0; j < 256; j++) {
1101 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1109 for (m = 0; m < 32; m++) {
1110 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1127 #define OFFSET(x) offsetof(FFV1Context, x)
1128 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1134 static const AVClass class = {
1168 .priv_class = &
class,