1 /*
2 * FFV1 encoder
3 *
4 * Copyright (c) 2003-2013 Michael Niedermayer <michaelni@gmx.at>
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 /**
24 * @file
25 * FF Video Codec 1 (a lossless codec) encoder
26 */
27
42
44 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
47 1, 1, 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, -2,
56 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
59 -1, -1, -1, -1, -1, -1, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0,
60 };
61
63 0, 1, 1, 1, 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, -2, -2, -2,
78 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -1,
79 };
80
82 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
83 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
84 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
85 3, 3, 3, 3, 3, 3, 3, 3, 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, -4, -4, -4, -4, -4, -4, -4,
94 -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3,
95 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
96 -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
97 -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, -1, -1, -0, -0, -0, -0,
98 };
99
101 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
102 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
103 4, 4, 4, 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, -5, -5,
114 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -4,
115 -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
116 -4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -3, -3, -2, -2, -2, -1,
117 };
118
120 0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49,
121 59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39,
122 40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52,
123 53, 74, 55, 57, 58, 58, 74, 60, 101, 61, 62, 84, 66, 66, 68, 69,
124 87, 82, 71, 97, 73, 73, 82, 75, 111, 77, 94, 78, 87, 81, 83, 97,
125 85, 83, 94, 86, 99, 89, 90, 99, 111, 92, 93, 134, 95, 98, 105, 98,
126 105, 110, 102, 108, 102, 118, 103, 106, 106, 113, 109, 112, 114, 112, 116, 125,
127 115, 116, 117, 117, 126, 119, 125, 121, 121, 123, 145, 124, 126, 131, 127, 129,
128 165, 130, 132, 138, 133, 135, 145, 136, 137, 139, 146, 141, 143, 142, 144, 148,
129 147, 155, 151, 149, 151, 150, 152, 157, 153, 154, 156, 168, 158, 162, 161, 160,
130 172, 163, 169, 164, 166, 184, 167, 170, 177, 174, 171, 173, 182, 176, 180, 178,
131 175, 189, 179, 181, 186, 183, 192, 185, 200, 187, 191, 188, 190, 197, 193, 196,
132 197, 194, 195, 196, 198, 202, 199, 201, 210, 203, 207, 204, 205, 206, 208, 214,
133 209, 211, 221, 212, 213, 215, 224, 216, 217, 218, 219, 220, 222, 228, 223, 225,
134 226, 224, 227, 229, 240, 230, 231, 232, 233, 234, 235, 236, 238, 239, 237, 242,
135 241, 243, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 255,
136 };
137
140 {
142 double l2tab[256];
143
144 for (i = 1; i < 256; i++)
145 l2tab[i] =
log2(i / 256.0);
146
147 for (i = 0; i < 256; i++) {
148 double best_len[256];
149 double p = i / 256.0;
150
151 for (j = 0; j < 256; j++)
152 best_len[j] = 1 << 30;
153
154 for (j =
FFMAX(i - 10, 1); j <
FFMIN(i + 11, 256); j++) {
155 double occ[256] = { 0 };
157 occ[j] = 1.0;
158 for (k = 0; k < 256; k++) {
159 double newocc[256] = { 0 };
160 for (m = 1; m < 256; m++)
161 if (occ[m]) {
162 len -=occ[
m]*( p *l2tab[
m]
163 + (1-p)*l2tab[256-m]);
164 }
165 if (len < best_len[k]) {
167 best_state[i][k] = j;
168 }
169 for (m = 0; m < 256; m++)
170 if (occ[m]) {
171 newocc[ one_state[
m]] += occ[
m] * p;
172 newocc[256 - one_state[256 -
m]] += occ[
m] * (1 - p);
173 }
174 memcpy(occ, newocc, sizeof(occ));
175 }
176 }
177 }
178 }
179
182 int is_signed,
185 {
186 int i;
187
188 #define put_rac(C, S, B) \
189 do { \
190 if (rc_stat) { \
191 rc_stat[*(S)][B]++; \
192 rc_stat2[(S) - state][B]++; \
193 } \
194 put_rac(C, S, B); \
195 } while (0)
196
197 if (v) {
201 if (e <= 9) {
202 for (i = 0; i < e; i++)
203 put_rac(c, state + 1 + i, 1);
// 1..10
205
206 for (i = e - 1; i >= 0; i--)
207 put_rac(c, state + 22 + i, (a >> i) & 1);
// 22..31
208
209 if (is_signed)
210 put_rac(c, state + 11 + e, v < 0);
// 11..21
211 } else {
212 for (i = 0; i < e; i++)
215
216 for (i = e - 1; i >= 0; i--)
217 put_rac(c, state + 22 +
FFMIN(i, 9), (a >> i) & 1);
// 22..31
218
219 if (is_signed)
220 put_rac(c, state + 11 + 10, v < 0);
// 11..21
221 }
222 } else {
224 }
225 #undef put_rac
226 }
227
229 int v,
int is_signed)
230 {
232 }
233
234
237 {
238 int i, k, code;
240
242 k = 0;
243 while (i < state->error_sum) { // FIXME: optimize
244 k++;
245 i += i;
246 }
247
249
250 #if 0 // JPEG LS
251 if (k == 0 && 2 * state->
drift <= -state->
count)
252 code = v ^ (-1);
253 else
255 #else
256 code = v ^ ((2 * state->
drift + state->
count) >> 31);
257 #endif
258
259 av_dlog(NULL,
"v:%d/%d bias:%d error:%d drift:%d count:%d k:%d\n", v, code,
262
264 }
265
268 int plane_index,
int bits)
269 {
272 int x;
274 int run_count = 0;
275 int run_mode = 0;
276
281 }
282 } else {
286 }
287 }
288
290 for (x = 0; x < w; x++) {
291 int i;
292 int v = sample[0][x];
293 for (i = bits-1; i>=0; i--) {
295 put_rac(c, &state, (v>>i) & 1);
296 }
297 }
298 return 0;
299 }
300
301 for (x = 0; x < w; x++) {
302 int diff, context;
303
304 context =
get_context(p, sample[0] + x, sample[1] + x, sample[2] + x);
305 diff = sample[0][x] -
predict(sample[0] + x, sample[1] + x);
306
307 if (context < 0) {
308 context = -context;
309 diff = -diff;
310 }
311
312 diff =
fold(diff, bits);
313
318 } else {
320 }
321 } else {
322 if (context == 0)
323 run_mode = 1;
324
325 if (run_mode) {
326 if (diff) {
329 run_index++;
331 }
332
334 if (run_index)
335 run_index--;
336 run_count = 0;
337 run_mode = 0;
338 if (diff > 0)
339 diff--;
340 } else {
341 run_count++;
342 }
343 }
344
345 av_dlog(s->
avctx,
"count:%d index:%d, mode:%d, x:%d pos:%d\n",
346 run_count, run_index, run_mode, x,
348
349 if (run_mode == 0)
351 }
352 }
353 if (run_mode) {
356 run_index++;
358 }
359
360 if (run_count)
362 }
364
365 return 0;
366 }
367
369 int stride,
int plane_index)
370 {
375
377
378 for (y = 0; y < h; y++) {
379 for (i = 0; i < ring_size; i++)
380 sample[i] = s->
sample_buffer + (w + 6) * ((h + i -
y) % ring_size) + 3;
381
382 sample[0][-1]= sample[1][0 ];
383 sample[1][ w]= sample[1][w-1];
384 // { START_TIMER
386 for (x = 0; x < w; x++)
387 sample[0][x] = src[x + stride * y];
388 if((ret =
encode_line(s, w, sample, plane_index, 8)) < 0)
390 } else {
392 for (x = 0; x < w; x++) {
393 sample[0][x] = ((uint16_t*)(src + stride*y))[x];
394 }
395 } else {
396 for (x = 0; x < w; x++) {
398 }
399 }
402 }
403 // STOP_TIMER("encode line") }
404 }
405 return 0;
406 }
407
409 {
416
418
421
422 for (y = 0; y < h; y++) {
423 for (i = 0; i < ring_size; i++)
425 sample[p][i]= s->
sample_buffer + p*ring_size*(w+6) + ((h+i-
y)%ring_size)*(w+6) + 3;
426
427 for (x = 0; x < w; x++) {
429 if (lbd) {
430 unsigned v = *((uint32_t*)(src[0] + x*4 + stride[0]*y));
431 b = v & 0xFF;
432 g = (v >> 8) & 0xFF;
433 r = (v >> 16) & 0xFF;
435 } else {
436 b = *((uint16_t*)(src[0] + x*2 + stride[0]*y));
437 g = *((uint16_t*)(src[1] + x*2 + stride[1]*y));
438 r = *((uint16_t*)(src[2] + x*2 + stride[2]*y));
439 }
440
447 }
448
453 }
456 sample[p][0][-1] = sample[p][1][0 ];
457 sample[p][1][ w] = sample[p][1][w-1];
459 ret =
encode_line(s, w, sample[p], (p + 1) / 2, 9);
460 else
462 if (ret < 0)
464 }
465 }
466 return 0;
467 }
468
470 {
471 int last = 0;
472 int i;
474 memset(state, 128, sizeof(state));
475
476 for (i = 1; i < 128; i++)
477 if (quant_table[i] != quant_table[i - 1]) {
479 last = i;
480 }
482 }
483
486 {
487 int i;
488 for (i = 0; i < 5; i++)
490 }
491
493 {
495 int i, j;
497
498 memset(state, 128, sizeof(state));
499
504 for (i = 1; i < 256; i++)
507 }
515
527 0);
530 0);
534 }
535 }
536 }
537 }
538
540 {
543 int i, j, k;
546
547 memset(state2, 128, sizeof(state2));
548 memset(state, 128, sizeof(state));
549
551 (11 * 11 * 5 * 5 * 5 + 11 * 11 * 11) * 32;
557
563 }
564
567 for (i = 1; i < 256; i++)
569
578
582
586 break;
594 }
595 } else {
597 }
598 }
599
603 }
604
609
610 return 0;
611 }
612
614 {
615 int i, i2, changed, print = 0;
616
617 do {
618 changed = 0;
619 for (i = 12; i < 244; i++) {
620 for (i2 = i + 1; i2 < 245 && i2 < i + 4; i2++) {
621
622 #define COST(old, new) \
623 s->rc_stat[old][0] * -log2((256 - (new)) / 256.0) + \
624 s->rc_stat[old][1] * -log2((new) / 256.0)
625
626 #define COST2(old, new) \
627 COST(old, new) + COST(256 - (old), 256 - (new))
628
631 if (size0 - sizeX > size0*(1e-14) && i != 128 && i2 != 128) {
632 int j;
633 FFSWAP(
int, stt[i], stt[i2]);
636 if (i != 256 - i2) {
637 FFSWAP(
int, stt[256 - i], stt[256 - i2]);
640 }
641 for (j = 1; j < 256; j++) {
642 if (stt[j] == i)
643 stt[j] = i2;
644 else if (stt[j] == i2)
645 stt[j] = i;
646 if (i != 256 - i2) {
647 if (stt[256 - j] == 256 - i)
648 stt[256 - j] = 256 - i2;
649 else if (stt[256 - j] == 256 - i2)
650 stt[256 - j] = 256 - i;
651 }
652 }
653 print = changed = 1;
654 }
655 }
656 }
657 } while (changed);
658 return print;
659 }
660
662 {
666
669
671
674
677 }
678
681 }
682
684 av_log(avctx,
AV_LOG_ERROR,
"Version 2 needed for requested features but version 2 is experimental and not enabled\n");
686 }
687
689
720 }
724 }
728 }
730 av_log(avctx,
AV_LOG_ERROR,
"bits_per_raw_sample of more than 8 needs -coder 1 currently\n");
732 }
747 break;
752 break;
756 break;
775 av_log(avctx,
AV_LOG_ERROR,
"bits_per_raw_sample of more than 8 needs -coder 1 currently\n");
777 }
778 break;
779 default:
782 }
784 av_log(avctx,
AV_LOG_WARNING,
"Storing alpha plane, this will require a recent FFV1 decoder to playback!\n");
785 }
789 }
790
792 for (i = 1; i < 256; i++)
794
795 for (i = 0; i < 256; i++) {
806 } else {
815 }
816 }
821
824
828 }
829
832
836
838
843
846
853 }
854 }
859 char *next;
860
862
863 for (;;) {
864 for (j = 0; j < 256; j++)
865 for (i = 0; i < 2; i++) {
866 s->
rc_stat[j][i] = strtol(p, &next, 0);
867 if (next == p) {
869 "2Pass file invalid at %d %d [%s]\n", j, i, p);
871 }
872 p = next;
873 }
876 for (k = 0; k < 32; k++)
877 for (m = 0; m < 2; m++) {
878 s->
rc_stat2[i][j][k][
m] = strtol(p, &next, 0);
879 if (next == p) {
881 "2Pass file invalid at %d %d %d %d [%s]\n",
882 i, j, k, m, p);
884 }
885 p = next;
886 }
887 }
888 gob_count = strtol(p, &next, 0);
889 if (next == p || gob_count <= 0) {
892 }
893 p = next;
894 while (*p == '\n' || *p == ' ')
895 p++;
896 if (p[0] == 0)
897 break;
898 }
900
902
904 for (k = 0; k < 32; k++) {
906 int jp = 0;
908 double p = 128;
911 p = 256.0 *
b / (a +
b);
913 best_state[av_clip(
round(p), 1, 255)][av_clip((a +
b) / gob_count, 0, 255)];
914 for(jp++; jp<j; jp++)
917 }
921 p = 256.0 *
b / (a +
b);
922 }
924 best_state[av_clip(
round(p), 1, 255)][av_clip((a +
b) / gob_count, 0, 255)];
925 }
926 }
927 }
928 }
929
935 goto slices_ok;
936 }
937 }
939 "Unsupported number %d of slices requested, please specify a "
940 "supported number with -slices (ex:4,6,9,12,16, ...)\n",
943 slices_ok:
946 }
947
952
953 #define STATS_OUT_SIZE 1024 * 1024 * 6
966 }
967 }
968
969 return 0;
970 }
971
973 {
976 int j;
977 memset(state, 128, sizeof(state));
978
986 }
989 else
998 }
999 }
1000
1002 {
1013
1015
1016 retry:
1021 }
1029 }
1030
1031 if (f->colorspace == 0) {
1034 const int cx = x >> f->chroma_h_shift;
1035 const int cy =
y >> f->chroma_v_shift;
1036
1038
1039 if (f->chroma_planes) {
1040 ret |=
encode_plane(fs, p->data[1] + ps*cx+cy*p->linesize[1], chroma_width, chroma_height, p->linesize[1], 1);
1041 ret |=
encode_plane(fs, p->data[2] + ps*cx+cy*p->linesize[2], chroma_width, chroma_height, p->linesize[2], 1);
1042 }
1043 if (fs->transparency)
1045 } else {
1046 uint8_t *planes[3] = {p->data[0] + ps*x +
y*p->linesize[0],
1047 p->data[1] + ps*x +
y*p->linesize[1],
1048 p->data[2] + ps*x +
y*p->linesize[2]};
1050 }
1052
1055 if (fs->version < 4 || !fs->ac) {
1058 }
1060 fs->slice_coding_mode = 1;
1061 fs->c = c_bak;
1062 goto retry;
1063 }
1064
1065 return 0;
1066 }
1067
1069 const AVFrame *pict,
int *got_packet)
1070 {
1074 int used_count = 0;
1080
1083
1086
1089
1094
1100 } else {
1103 }
1104
1106 int i;
1107 for (i = 1; i < 256; i++) {
1110 }
1111 }
1112
1118 }
1121
1125 int bytes;
1126
1131 } else {
1134 }
1135 if (i > 0 || f->
version > 2) {
1139 AV_WB24(buf_p + bytes, bytes);
1140 bytes += 3;
1141 }
1144 buf_p[bytes++] = 0;
1147 bytes += 4;
1148 }
1149 buf_p += bytes;
1150 }
1151
1156
1160
1163 for (i = 0; i < 256; i++) {
1166 }
1169 for (m = 0; m < 32; m++) {
1172 }
1173 }
1174 }
1175
1176 for (j = 0; j < 256; j++) {
1177 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1179 p += strlen(p);
1180 }
1182
1185 for (m = 0; m < 32; m++) {
1186 snprintf(p, end - p,
"%" PRIu64
" %" PRIu64
" ",
1188 p += strlen(p);
1189 }
1190 }
1194
1198 *got_packet = 1;
1199
1200 return 0;
1201 }
1202
1204 {
1207 return 0;
1208 }
1209
1210 #define OFFSET(x) offsetof(FFV1Context, x)
1211 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1214 { NULL }
1215 };
1216
1222 };
1223
1225 { "coder", "-1" },
1226 { NULL },
1227 };
1228
1251
1252 },
1255 };