1
/*****************************************************************
2
* gmerlin-encoders - encoder plugins for gmerlin
4
* Copyright (c) 2001 - 2011 Members of the Gmerlin project
5
* gmerlin-general@lists.sourceforge.net
6
* http://gmerlin.sourceforge.net
8
* This program is free software: you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation, either version 2 of the License, or
11
* (at your option) any later version.
13
* This program 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
16
* GNU General Public License for more details.
18
* You should have received a copy of the GNU General Public License
19
* along with this program. If not, see <http://www.gnu.org/licenses/>.
20
* *****************************************************************/
23
* IMPORTANT: To keep the mess at a reasonable level,
24
* *all* parameters *must* appear in the same order as in
25
* the AVCocecContext structure, except the flags, which come at the very end
30
#define PARAM_BITRATE_AUDIO \
32
.name = "ff_bit_rate_audio", \
33
.long_name = TRS("Bit rate (kbps)"), \
34
.type = BG_PARAMETER_INT, \
35
.val_default = { .val_i = 128 }, \
39
#define PARAM_BITRATE_VIDEO \
41
.name = "ff_bit_rate_video", \
42
.long_name = TRS("Bit rate (kbps)"), \
43
.type = BG_PARAMETER_INT, \
44
.val_default = { .val_i = 800 }, \
48
#define PARAM_BITRATE_TOLERANCE \
50
.name = "ff_bit_rate_tolerance", \
51
.long_name = TRS("Bitrate tolerance (kbps)"), \
52
.type = BG_PARAMETER_INT, \
53
.val_default = { .val_i = 8000 }, \
54
.help_string = TRS("Number of bits the bitstream is allowed to diverge from the reference.\
55
Unused for constant quantizer encoding") \
58
/** Motion estimation */
59
#define PARAM_ME_METHOD \
61
.name = "ff_me_method",\
62
.long_name = TRS("Motion estimation method"),\
63
.type = BG_PARAMETER_STRINGLIST,\
64
.val_default = {val_str: "Zero"},\
65
.multi_names = (char const *[]){"Zero", "Phods", "Log", "X1", "Epzs", "Full", (char *)0}, \
66
.multi_labels = (char const *[]){TRS("Zero"), TRS("Phods"), TRS("Log"), \
67
TRS("X1"), TRS("Epzs"), TRS("Full"), (char *)0} \
71
#define PARAM_GOP_SIZE \
74
.long_name = TRS("GOP size (0 = intra only)"), \
75
.type = BG_PARAMETER_SLIDER_INT, \
76
.val_default = { .val_i = 250 }, \
77
.val_min = { .val_i = 0 }, \
78
.val_max = { .val_i = 300 }, \
82
#define PARAM_QCOMPRESS \
84
.name = "ff_qcompress", \
85
.long_name = TRS("Quantizer compression"),\
86
.type = BG_PARAMETER_SLIDER_FLOAT, \
87
.val_default = { .val_f = 0.5 }, \
88
.val_min = { .val_f = 0.0 }, \
89
.val_max = { .val_f = 1.0 }, \
91
.help_string = TRS("Amount of qscale change between easy & hard scenes") \
98
.long_name = TRS("Quantizer blur"), \
99
.type = BG_PARAMETER_SLIDER_FLOAT, \
100
.val_default = { .val_f = 0.0 }, \
101
.val_min = { .val_f = 0.0 }, \
102
.val_max = { .val_f = 1.0 }, \
104
.help_string = TRS("Amount of qscale smoothing over time"), \
111
.long_name = TRS("Minimum quantizer scale"), \
112
.type = BG_PARAMETER_SLIDER_INT, \
113
.val_default = { .val_i = 2 }, \
114
.val_min = { .val_i = 0 }, \
115
.val_max = { .val_i = 31 }, \
122
.long_name = TRS("Maximum quantizer scale"), \
123
.type = BG_PARAMETER_SLIDER_INT, \
124
.val_default = { .val_i = 31 }, \
125
.val_min = { .val_i = 0 }, \
126
.val_max = { .val_i = 31 }, \
130
#define PARAM_MAX_QDIFF \
132
.name = "ff_max_qdiff", \
133
.long_name = TRS("Maximum quantizer difference"), \
134
.type = BG_PARAMETER_SLIDER_INT, \
135
.val_default = { .val_i = 3 }, \
136
.val_min = { .val_i = 0 }, \
137
.val_max = { .val_i = 31 }, \
138
.help_string = TRS("Maximum quantizer difference between frames") \
142
#define PARAM_MAX_B_FRAMES \
144
.name = "ff_max_b_frames", \
145
.long_name = TRS("Max B-Frames"), \
146
.type = BG_PARAMETER_SLIDER_INT, \
147
.val_default = { .val_i = 0 }, \
148
.val_min = { .val_i = 0 }, \
149
.val_max = { .val_i = FF_MAX_B_FRAMES }, \
150
.help_string = TRS("Maximum number of B-frames between non B-frames") \
154
#define PARAM_B_QUANT_FACTOR \
156
.name = "ff_b_quant_factor", \
157
.long_name = TRS("B quantizer factor"), \
158
.type = BG_PARAMETER_SLIDER_FLOAT, \
159
.val_default = { .val_f = 1.25 }, \
160
.val_min = { .val_f = -31.0 }, \
161
.val_max = { .val_f = 31.0 }, \
163
.help_string = TRS("Quantizer factor between B-frames and non-B-frames"), \
167
#define PARAM_B_FRAME_STRATEGY \
169
.name = "ff_b_frame_strategy", \
170
.long_name = TRS("Avoid B-frames in high motion scenes"), \
171
.type = BG_PARAMETER_CHECKBUTTON, \
172
.val_default = { .val_i = 0 }, \
175
#define PARAM_LUMA_ELIM_THRESHOLD \
177
.name = "ff_luma_elim_threshold", \
178
.long_name = TRS("Luma elimination threshold"), \
179
.type = BG_PARAMETER_SLIDER_INT, \
180
.val_default = { .val_i = 0 }, \
181
.val_min = { .val_i = -99 }, \
182
.val_max = { .val_i = 99 }, \
183
.help_string = TRS("Single coefficient elimination threshold for " \
184
"luminance. Negative values also consider dc coefficient. -4 is " \
185
"JVT recommendation") \
188
#define PARAM_CHROMA_ELIM_THRESHOLD \
190
.name = "ff_chroma_elim_threshold", \
191
.long_name = TRS("Chroma elimination threshold"), \
192
.type = BG_PARAMETER_SLIDER_INT, \
193
.val_default = { .val_i = 0 }, \
194
.val_min = { .val_i = -99 }, \
195
.val_max = { .val_i = 99 }, \
196
.help_string = TRS("Single coefficient elimination threshold for " \
197
"chrominamce. Negative values also consider dc coefficient. 7 is " \
198
"JVT recommendation") \
201
#define PARAM_STRICT_STANDARD_COMPLIANCE \
203
.name = "ff_strict_std_compliance", \
204
.long_name = TRS("Standards compliance"), \
205
.type = BG_PARAMETER_SLIDER_INT, \
206
.val_default = { .val_i = 0 }, \
207
.val_min = { .val_i = -2 }, \
208
.val_max = { .val_i = 2 }, \
209
.help_string = TRS("2: Strictly conform to a older more strict version\
210
of the spec or reference software\n\
211
1: Strictly conform to all the things in the spec no matter what \
214
-1: Allow inofficial extensions\n\
215
-2: Allow non standarized experimental things") \
219
#define PARAM_B_QUANT_OFFSET \
221
.name = "ff_b_quant_offset", \
222
.long_name = TRS("B quantizer offset"), \
223
.type = BG_PARAMETER_SLIDER_FLOAT, \
224
.val_default = { .val_f = 1.25 }, \
225
.val_min = { .val_f = 0.0 }, \
226
.val_max = { .val_f = 31.0 }, \
228
.help_string = TRS("Quantizer offset between B-frames and non-B-frames\n"\
229
"if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)\n"\
230
"if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)")\
234
#define PARAM_RC_MIN_RATE \
236
.name = "ff_rc_min_rate",\
237
.long_name = TRS("Minimum bitrate (kbps)"),\
238
.type = BG_PARAMETER_INT,\
239
.val_default = { .val_i = 0 }, \
240
.help_string = TRS("Minimum bitrate (0 means arbitrary)"), \
244
#define PARAM_RC_MAX_RATE \
246
.name = "ff_rc_max_rate",\
247
.long_name = TRS("Maximum bitrate (kbps)"),\
248
.type = BG_PARAMETER_INT,\
249
.val_default = { .val_i = 0 }, \
250
.help_string = TRS("Maximum bitrate (0 means arbitrary)"), \
254
#define PARAM_RC_BUFFER_SIZE \
256
.name = "ff_rc_buffer_size", \
257
.long_name = TRS("RC buffer size"), \
258
.type = BG_PARAMETER_INT, \
259
.val_default = { .val_i = 0 }, \
260
.help_string = TRS("Decoder bitstream buffer size in kbits. When encoding " \
261
"with max and/or min bitrate, this must be specified.") \
265
#define PARAM_RC_BUFFER_AGGRESSIVITY \
267
.name = "ff_rc_buffer_aggressivity", \
268
.long_name = TRS("RC buffer aggressivity"), \
269
.type = BG_PARAMETER_SLIDER_FLOAT, \
270
.val_default = { .val_f = 1.0 }, \
271
.val_min = { .val_f = 0.01 }, \
272
.val_max = { .val_f = 99.0 }, \
277
#define PARAM_I_QUANT_FACTOR \
279
.name = "ff_i_quant_factor", \
280
.long_name = TRS("I quantizer factor"), \
281
.type = BG_PARAMETER_SLIDER_FLOAT, \
282
.val_default = { .val_f = -0.8 }, \
283
.val_min = { .val_f = -31.0 }, \
284
.val_max = { .val_f = 31.0 }, \
286
.help_string = TRS("Quantizer factor between P-frames and I-frames.\n"\
287
"If > 0 then the last P frame quantizer will be used (q= lastp_q*factor+offset).\n"\
288
"If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)"), \
292
#define PARAM_I_QUANT_OFFSET \
294
.name = "ff_i_quant_offset", \
295
.long_name = TRS("I quantizer offset"), \
296
.type = BG_PARAMETER_SLIDER_FLOAT, \
297
.val_default = { .val_f = 0.0 }, \
298
.val_min = { .val_f = 0.0 }, \
299
.val_max = { .val_f = 31.0 }, \
301
.help_string = TRS("Quantizer offset between P-frames and I-frames"), \
305
#define PARAM_RC_INITIAL_COMPLEX \
307
.name = "ff_rc_initial_cplx", \
308
.long_name = TRS("Initial RC complexity"), \
309
.type = BG_PARAMETER_SLIDER_FLOAT,\
310
.val_default = { .val_f = 0.0 }, \
311
.val_min = { .val_f = 0.0 }, \
312
.val_max = { .val_f = 99.0 }, \
317
#define PARAM_LUMI_MASKING \
319
.name = "ff_lumi_masking", \
320
.long_name = TRS("Luminance masking"), \
321
.type = BG_PARAMETER_SLIDER_FLOAT, \
322
.val_default = { .val_f = 0.0 }, \
323
.val_min = { .val_f = 0.0 }, \
324
.val_max = { .val_f = 1.0 }, \
326
.help_string = TRS("Encode very bright image parts with reduced quality."\
327
" 0 means disabled, 0-0.3 is a sane range."), \
331
#define PARAM_TEMPORAL_CPLX_MASKING \
333
.name = "ff_temporal_cplx_masking", \
334
.long_name = TRS("Temporary complexity masking"), \
335
.type = BG_PARAMETER_SLIDER_FLOAT, \
336
.val_default = { .val_f = 0.0 }, \
337
.val_min = { .val_f = 0.0 }, \
338
.val_max = { .val_f = 1.0 }, \
340
.help_string = TRS("Encode very fast moving image parts with reduced quality."\
341
" 0 means disabled."), \
345
#define PARAM_SPATIAL_CPLX_MASKING \
347
.name = "ff_spatial_cplx_masking", \
348
.long_name = TRS("Spatial complexity masking"), \
349
.type = BG_PARAMETER_SLIDER_FLOAT, \
350
.val_default = { .val_f = 0.0 }, \
351
.val_min = { .val_f = 0.0 }, \
352
.val_max = { .val_f = 1.0 }, \
354
.help_string = TRS("Encode very complex image parts with reduced quality."\
355
" 0 means disabled, 0-0.5 is a sane range."), \
359
#define PARAM_P_MASKING \
361
.name = "ff_p_masking", \
362
.long_name = TRS("Inter block masking"), \
363
.type = BG_PARAMETER_SLIDER_FLOAT, \
364
.val_default = { .val_f = 0.0 }, \
365
.val_min = { .val_f = 0.0 }, \
366
.val_max = { .val_f = 1.0 }, \
368
.help_string = TRS("Encode inter blocks with reduced quality (increases the quality of intra blocks). "\
369
" 0 means disabled, 1 will double the bits allocated for intra blocks."), \
373
#define PARAM_DARK_MASKING \
375
.name = "ff_dark_masking", \
376
.long_name = TRS("Darkness masking"), \
377
.type = BG_PARAMETER_SLIDER_FLOAT, \
378
.val_default = { .val_f = 0.0 }, \
379
.val_min = { .val_f = 0.0 }, \
380
.val_max = { .val_f = 1.0 }, \
382
.help_string = TRS("Encode very dark image parts with reduced quality. " \
383
"0 means disabled, 0-0.3 is a sane range."), \
386
#define PARAM_PREDICTION_METHOD \
388
.name = "ff_prediction_method", \
389
.long_name = TRS("Precition method"), \
390
.type = BG_PARAMETER_STRINGLIST, \
391
.val_default = { .val_str = "Left" },\
392
multi_names: (char const *[]){ "Left", "Plane", "Median", (char*)0 }, \
393
multi_labels: (char const *[]){ TRS("Left"), TRS("Plane"), TRS("Median"), (char*)0 }, \
397
#define PARAM_MB_QMIN \
399
.name = "ff_mb_qmin", \
400
.long_name = TRS("Minimum MB quantizer"), \
401
.type = BG_PARAMETER_SLIDER_INT, \
402
.val_default = { .val_i = 2 },\
403
.val_min = { .val_i = 0 },\
404
.val_max = { .val_i = 31 },\
408
#define PARAM_MB_QMAX \
410
.name = "ff_mb_qmax", \
411
.long_name = TRS("Maximum MB quantizer"), \
412
.type = BG_PARAMETER_SLIDER_INT, \
413
.val_default = { .val_i = 31 },\
414
.val_min = { .val_i = 0 },\
415
.val_max = { .val_i = 31 },\
418
#define COMPARE_FUNCS (char const *[]){ "SAD", "SSE", "SATD", "DCT", "PSNR", \
419
"BIT", "RD", "ZERO", "VSAD", "VSSE", "NSSE", (char*)0 }
421
#define COMPARE_FUNCS_HELP TRS("SAD: Sum of absolute differences\n"\
422
"SSE: Sum of squared errors\n"\
423
"SATD: Sum of absolute Hadamard transformed differences\n"\
424
"DCT: Sum of absolute DCT transformed differences\n"\
425
"PSNR: Sum of squared quantization errors (low quality)\n"\
426
"BIT: Number of bits needed for the block\n"\
427
"RD: Rate distortion optimal (slow)\n"\
429
"VSAD: Sum of absolute vertical differences\n"\
430
"VSSE: Sum of squared vertical differences\n"\
431
"NSSE: Noise preserving sum of squared differences")
433
/** Motion estimation */
434
#define PARAM_ME_CMP \
436
.name = "ff_me_cmp", \
437
.long_name = "ME compare function", \
438
.type = BG_PARAMETER_STRINGLIST, \
439
.val_default = { .val_str = "SAD" }, \
440
.multi_names = COMPARE_FUNCS, \
441
.help_string = TRS("Motion estimation compare function.") COMPARE_FUNCS_HELP \
444
/** Motion estimation */
445
#define PARAM_ME_CMP_CHROMA \
447
.name = "ff_me_cmp_chroma", \
448
.long_name = TRS("Enable chroma ME compare"), \
449
.type = BG_PARAMETER_CHECKBUTTON, \
450
.val_default = { .val_i = 0 }, \
453
/** Motion estimation */
454
#define PARAM_ME_SUB_CMP \
456
.name = "ff_me_sub_cmp", \
457
.long_name = TRS("Subpixel ME compare function"), \
458
.type = BG_PARAMETER_STRINGLIST, \
459
.val_default = { .val_str = "SAD" }, \
460
.multi_names = COMPARE_FUNCS, \
461
.help_string = TRS("Subpixel motion estimation compare function.\n")COMPARE_FUNCS_HELP \
464
/** Motion estimation */
465
#define PARAM_ME_SUB_CMP_CHROMA \
467
.name = "ff_me_sub_cmp_chroma", \
468
.long_name = TRS("Enable chroma subpixel ME compare"), \
469
.type = BG_PARAMETER_CHECKBUTTON, \
470
.val_default = { .val_i = 0 }, \
474
#define PARAM_MB_CMP \
476
.name = "ff_mb_cmp", \
477
.long_name = TRS("MB compare function"), \
478
.type = BG_PARAMETER_STRINGLIST, \
479
.val_default = { .val_str = "SAD" }, \
480
.multi_names = COMPARE_FUNCS, \
481
.help_string = TRS("Macroblock compare function.\n")COMPARE_FUNCS_HELP \
484
#define PARAM_MB_CMP_CHROMA \
486
.name = "ff_mb_cmp_chroma", \
487
.long_name = TRS("Enable chroma macroblock ME compare"), \
488
.type = BG_PARAMETER_CHECKBUTTON, \
489
.val_default = { .val_i = 0 }, \
493
#define PARAM_ILDCT_CMP \
495
.name = "ff_ildct_cmp", \
496
.long_name = TRS("ILDCT compare function"), \
497
.type = BG_PARAMETER_STRINGLIST, \
498
.val_default = { .val_str = "SAD" }, \
499
.multi_names = COMPARE_FUNCS, \
500
.help_string = TRS("Interlaced dct compare function.\n")COMPARE_FUNCS_HELP \
503
#define PARAM_ICDCT_CMP_CHROMA \
505
.name = "ff_ildct_cmp_chroma", \
506
.long_name = TRS("Enable chroma ILDCT ME compare"), \
507
.type = BG_PARAMETER_CHECKBUTTON, \
508
.val_default = { .val_i = 0 }, \
511
/** Motion estimation */
512
#define PARAM_DIA_SIZE \
514
.name = "ff_dia_size", \
515
.long_name = TRS("ME diamond size & shape"),\
516
.type = BG_PARAMETER_SLIDER_INT, \
517
.val_default = { .val_i = 0 }, \
518
.val_min = { .val_i = -9 }, \
519
.val_max = { .val_i = 9 }, \
520
.help_string = TRS("Motion estimation diamond size. Negative means shape adaptive.") \
523
#define PARAM_LAST_PREDICTOR_COUNT \
525
.name = "ff_last_predictor_count", \
526
.long_name = TRS("Last predictor count"),\
527
.type = BG_PARAMETER_SLIDER_INT, \
528
.val_default = { .val_i = 0 }, \
529
.val_min = { .val_i = 0 }, \
530
.val_max = { .val_i = 99 }, \
531
.help_string = TRS("Amount of motion predictors from the previous frame.\n"\
533
"a Will use 2a+1 x 2a+1 macroblock square of motion vector predictors " \
534
"from the previous frame.")\
537
/** Motion estimation */
538
#define PARAM_PRE_ME \
540
.name = "ff_pre_me", \
541
.long_name = TRS("ME pre-pass"), \
542
.type = BG_PARAMETER_SLIDER_INT, \
543
.val_default = { .val_i = 0 }, \
544
.val_min = { .val_i = 0 }, \
545
.val_max = { .val_i = 2 }, \
546
.help_string = TRS("Motion estimation pre-pass\n"\
548
"1: only after I-frames\n"\
552
/** Motion estimation */
553
#define PARAM_ME_PRE_CMP \
555
.name = "ff_me_pre_cmp", \
556
.long_name = TRS("ME pre-pass compare function"), \
557
.type = BG_PARAMETER_STRINGLIST, \
558
.val_default = { .val_str = "SAD" }, \
559
.multi_names = COMPARE_FUNCS, \
560
.help_string = TRS("Motion estimation pre-pass compare function.\n")COMPARE_FUNCS_HELP\
563
/** Motion estimation */
564
#define PARAM_ME_PRE_CMP_CHROMA \
566
.name = "ff_me_pre_cmp_chroma", \
567
.long_name = TRS("Enable chroma ME pre-pass compare"), \
568
.type = BG_PARAMETER_CHECKBUTTON, \
569
.val_default = { .val_i = 0 }, \
570
.val_min = { .val_i = 0 }, \
571
.val_max = { .val_i = 1 }, \
574
/** Motion estimation */
575
#define PARAM_PRE_DIA_SIZE \
577
.name = "ff_pre_dia_size", \
578
.long_name = TRS("ME pre-pass diamond size & shape"), \
579
.type = BG_PARAMETER_SLIDER_INT, \
580
.val_default = { .val_i = 0 }, \
581
.val_min = { .val_i = -9 }, \
582
.val_max = { .val_i = 9 }, \
583
.help_string = TRS("Motion estimation pre-pass diamond size. Negative means shape adaptive.") \
586
/** Motion estimation */
587
#define PARAM_ME_SUBPEL_QUALITY \
589
.name = "ff_me_subpel_quality", \
590
.long_name = TRS("Subpel ME quality"), \
591
.type = BG_PARAMETER_SLIDER_INT, \
592
.val_default = { .val_i = 8 }, \
593
.val_min = { .val_i = 1 }, \
594
.val_max = { .val_i = 8 }, \
595
.help_string = TRS("Subpel motion estimation refinement quality (for qpel). Higher values "\
596
"mean higher quality but slower encoding.") \
599
/** Motion estimation */
600
#define PARAM_ME_RANGE \
602
.name = "ff_me_range", \
603
.long_name = TRS("Motion estimation range"), \
604
.type = BG_PARAMETER_SLIDER_INT, \
605
.val_default = { .val_i = 0 }, \
606
.val_min = { .val_i = 0 }, \
607
.val_max = { .val_i = 1000 }, \
608
.help_string = TRS("Motion estimation search range (0 means unlimited)"), \
611
/** Motion estimation */
612
#define PARAM_MB_DECISION \
614
.name = "ff_mb_decision", \
615
.long_name = TRS("MB decision mode"), \
616
.type = BG_PARAMETER_STRINGLIST, \
617
.val_default = { .val_str = "Use compare function" }, \
618
.multi_names = (char const *[]){ "Use compare function", \
619
"Fewest bits", "Rate distoration", (char*)0 },\
620
.multi_labels = (char const *[]){ TRS("Use compare function"), \
621
TRS("Fewest bits"), TRS("Rate distoration"), (char*)0 },\
625
#define PARAM_SCENE_CHANGE_THRESHOLD \
627
.name = "ff_scenechange_threshold", \
628
.long_name = TRS("Scenechange threshold"), \
629
.type = BG_PARAMETER_INT, \
630
.val_default = { .val_i = 0 }, \
631
.val_min = { .val_i = -1000000000 }, \
632
.val_max = { .val_i = 1000000000 }, \
633
.help_string = TRS("Threshold for scene change detection.\n\
634
Negative values mean more sensitivity (more keyframes)") \
641
.long_name = TRS("Minimum lagrange multiplier"), \
642
.type = BG_PARAMETER_SLIDER_FLOAT, \
643
.val_default = { .val_f = 2.0 }, \
644
.val_min = { .val_f = 1.0 }, \
645
.val_min = { .val_f = 31.0 }, \
647
.help_string = TRS("Minimum Lagrange multiplier for ratecontrol. "\
648
"Should possibly be the same as minimum quantizer scale.")\
655
.long_name = TRS("Maximum lagrange multipler"), \
656
.type = BG_PARAMETER_SLIDER_FLOAT, \
657
.val_default = { .val_f = 31.0 }, \
658
.val_min = { .val_f = 1.0 }, \
659
.val_min = { .val_f = 31.0 }, \
661
.help_string = TRS("Maximum Lagrange multiplier for ratecontrol. "\
662
"Should possibly be the same as maximum quantizer scale.")\
665
#define PARAM_NOISE_REDUCTION \
667
.name = "ff_noise_reduction", \
668
.long_name = TRS("Noise reduction"), \
669
.type = BG_PARAMETER_SLIDER_INT, \
670
.val_default = { .val_i = 0 }, \
671
.val_min = { .val_i = 0 }, \
672
.val_max = { .val_i = 2000 }, \
676
#define PARAM_RC_INITIAL_BUFFER_OCCUPANCY \
678
.name = "ff_rc_initial_buffer_occupancy", \
679
.long_name = TRS("Initial RC buffer occupancy"), \
680
.type = BG_PARAMETER_INT, \
681
.val_default = { .val_i = 0 }, \
682
.help_string = TRS("Number of kilobits which should be loaded into \
683
the rc buffer before encoding starts. Must not be larger than \
690
#define PARAM_INTER_THRESHOLD \
692
.name = "ff_inter_threshold", \
693
.long_name = TRS("Inter threshold"), \
694
.type = BG_PARAMETER_INT, \
695
.val_default = { .val_i = 0 }, \
699
#define PARAM_QUANTIZER_NOISE_SHAPING \
701
.name = "ff_quantizer_noise_shaping", \
702
.long_name = TRS("Quantizer noise shaping"),\
703
.type = BG_PARAMETER_SLIDER_INT, \
704
.val_default = { .val_i = 0 },\
705
.val_min = { .val_i = 0 },\
706
.val_max = { .val_i = 3 },\
707
.help_string = TRS("Choose quantization such that noise will be masked by "\
708
"similar-frequency content in the image") \
711
/** Motion estimation */
712
#define PARAM_ME_THRESHOLD \
714
.name = "ff_me_threshold", \
715
.long_name = TRS("ME Theshold"), \
716
.type = BG_PARAMETER_INT, \
717
.val_default = { .val_i = 0 },\
718
.val_min = { .val_i = 0 },\
719
.val_max = { .val_i = 4000000 },\
720
.help_string = TRS("Motion estimation threshold. under which no motion estimation is performed, but instead the user specified motion vectors are used") \
723
#define PARAM_MB_THRESHOLD \
725
.name = "ff_mb_threshold", \
726
.long_name = TRS("MB Theshold"),\
727
.type = BG_PARAMETER_INT, \
728
.val_default = { .val_i = 0 },\
729
.val_min = { .val_i = 0 },\
730
.val_max = { .val_i = 4000000 },\
731
.help_string = TRS("Macroblock threshold. under which the user specified macroblock types will be used") \
734
#define PARAM_NSSE_WEIGHT \
736
.name = "ff_nsse_weight", \
737
.long_name = TRS("NSSE weight"), \
738
.type = BG_PARAMETER_INT, \
739
.val_default = { .val_i = 8 },\
740
.help_string = TRS("Noise vs. SSE weight for the NSSE comparsion function. "\
741
"0 is identical to SSE")\
745
#define PARAM_BORDER_MASKING \
747
.name = "ff_border_masking", \
748
.long_name = TRS("Border masking"), \
749
.type = BG_PARAMETER_SLIDER_FLOAT, \
750
.val_default = { .val_f = 0.0 }, \
751
.val_min = { .val_f = 0.0 }, \
752
.val_max = { .val_f = 1.0 }, \
754
.help_string = TRS("Encode image parts near the border with reduced quality."\
755
" 0 means disabled")\
758
#define PARAM_MB_LMIN \
760
.name = "ff_mb_lmin", \
761
.long_name = TRS("Minimum MB lagrange multipler"), \
762
.type = BG_PARAMETER_SLIDER_FLOAT, \
763
.val_default = { .val_f = 2.0 }, \
764
.val_min = { .val_f = 1.0 }, \
765
.val_min = { .val_f = 31.0 }, \
767
.help_string = TRS("Minimum macroblock Lagrange multiplier.") \
770
#define PARAM_MB_LMAX \
772
.name = "ff_mb_lmax", \
773
.long_name = TRS("Maximum MB lagrange multipler"), \
774
.type = BG_PARAMETER_SLIDER_FLOAT, \
775
.val_default = { .val_f = 31.0 }, \
776
.val_min = { .val_f = 1.0 }, \
777
.val_min = { .val_f = 31.0 }, \
779
.help_string = TRS("Maximum macroblock Lagrange multiplier.") \
782
/** Motion estimation */
783
#define PARAM_ME_PENALTY_COMPENSATION \
785
.name = "ff_me_penalty_compensation", \
786
.long_name = TRS("ME penalty compensation"), \
787
.type = BG_PARAMETER_INT, \
788
.val_default = { .val_i = 256 }, \
791
#define PARAM_BIDIR_REFINE \
793
.name = "ff_bidir_refine", \
794
.long_name = TRS("Bidir refine"), \
795
.type = BG_PARAMETER_SLIDER_INT, \
796
.val_default = { .val_i = 0 }, \
797
.val_min = { .val_i = 0 }, \
798
.val_max = { .val_i = 4 }, \
801
#define PARAM_BRD_SCALE \
803
.name = "ff_brd_scale", \
804
.long_name = TRS("BRD scale"), \
805
.type = BG_PARAMETER_SLIDER_INT, \
806
.val_default = { .val_i = 0 }, \
807
.val_min = { .val_i = 0 }, \
808
.val_max = { .val_i = 10 }, \
813
#define PARAM_SCENECHANGE_FACTOR \
815
.name = "ff_scenechange_factor", \
816
.long_name = TRS("Scenechange factor"), \
817
.type = BG_PARAMETER_INT, \
818
.val_default = { .val_i = 0 }, \
819
.help_string = TRS("Multiplied by qscale for each frame and added to scene_change_score") \
823
#define PARAM_QSCALE \
825
.name = "ff_qscale", \
826
.long_name = "Fixed quantizer", \
827
.type = BG_PARAMETER_SLIDER_INT, \
828
.val_default = { .val_i = 10 }, \
829
.val_min = { .val_i = 1 }, \
830
.val_max = { .val_i = 31 }, \
831
.help_string = TRS("Quantizer for fixed quality encoding. Lower means better, 1 is not recommended")\
837
#define PARAM_FLAG_QSCALE \
839
.name = "ff_flag_qscale", \
840
.long_name = TRS("Use fixed quantizer"), \
841
.type = BG_PARAMETER_CHECKBUTTON, \
842
.val_default = { .val_i = 0 }, \
843
.help_string = TRS("Use fixed quality encoding"),\
846
/** Motion estimation */
847
#define PARAM_FLAG_4MV \
849
.name = "ff_flag_4mv", \
850
.long_name = TRS("4 MV per MB allowed"), \
851
.type = BG_PARAMETER_CHECKBUTTON, \
852
.val_default = { .val_i = 0 }, \
853
.help_string = TRS("Allow 4 motion vectors per macroblock (slightly better quality). Works better if MB decision mode is \"Fewest bits\" or \"Rate distoration\".") \
856
/** Motion estimation */
857
#define PARAM_FLAG_QPEL \
859
.name = "ff_flag_qpel", \
860
.long_name = TRS("Use qpel MC"), \
861
.type = BG_PARAMETER_CHECKBUTTON, \
862
.val_default = { .val_i = 0 }, \
863
.help_string = TRS("Use 1/4 pixel motion compensation. Warning: QPEL is not supported by all decoders.") \
866
/** Motion estimation */
867
#define PARAM_FLAG_GMC \
869
.name = "ff_flag_gmc", \
870
.long_name = TRS("Use global motion compensation"), \
871
.type = BG_PARAMETER_CHECKBUTTON, \
872
.val_default = { .val_i = 0 }, \
873
.help_string = TRS("Warning: GMC is not supported by all decoders") \
876
/** Motion estimation */
877
#define PARAM_FLAG_MV0 \
879
.name = "ff_flag_mv0", \
880
.long_name = TRS("Always try a MB with MV=<0,0>"), \
881
.type = BG_PARAMETER_CHECKBUTTON, \
882
.val_default = { .val_i = 0 }, \
885
#define PARAM_FLAG_PART \
887
.name = "ff_flag_part", \
888
.long_name = TRS("Use data partitioning"), \
889
.type = BG_PARAMETER_CHECKBUTTON, \
890
.val_default = { .val_i = 0 }, \
891
.help_string = TRS("Use data partitioning for more robustness if the video is "\
892
"for transmitting over unreliable channels") \
896
#define PARAM_FLAG_GRAY \
898
.name = "ff_flag_gray", \
899
.long_name = TRS("Grayscale mode"), \
900
.type = BG_PARAMETER_CHECKBUTTON, \
901
.val_default = { .val_i = 0 }, \
904
#define PARAM_FLAG_EMU_EGDE \
906
.name = "ff_flag_emu_edge", \
907
.long_name = TRS("Don't draw edges"), \
908
.type = BG_PARAMETER_CHECKBUTTON, \
909
.val_default = { .val_i = 0 }, \
913
#define PARAM_FLAG_NORMALIZE_AQP \
915
.name = "ff_flag_normalize_aqp", \
916
.long_name = TRS("Normalize adaptive quantization"), \
917
.type = BG_PARAMETER_CHECKBUTTON, \
918
.val_default = { .val_i = 0 }, \
919
.help_string = TRS("When using masking, try to adjust the per "\
920
"macroblock quantizers to maintain the desired average") \
923
#define PARAM_FLAG_ALT_SCAN \
925
.name = "ff_flag_alt_scan", \
926
.long_name = TRS("Use alternative scantable"), \
927
.type = BG_PARAMETER_CHECKBUTTON, \
928
.val_default = { .val_i = 0 }, \
932
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
933
#define PARAM_TRELLIS \
935
.name = "ff_flag_trellis_quant", \
936
.long_name = TRS("Use trellis quantization"), \
937
.type = BG_PARAMETER_CHECKBUTTON, \
938
.val_default = { .val_i = 0 }, \
939
.help_string = TRS("Use trellis quantization (improves quality)") \
942
#define PARAM_TRELLIS \
944
.name = "ff_trellis", \
945
.long_name = TRS("Use trellis quantization"), \
946
.type = BG_PARAMETER_CHECKBUTTON, \
947
.val_default = { .val_i = 0 }, \
948
.help_string = TRS("Use trellis quantization (improves quality)") \
952
#define PARAM_FLAG_BITEXACT \
954
.name = "ff_flag_bitexact", \
955
.long_name = TRS("Use only bitexact stuff"), \
956
.type = BG_PARAMETER_CHECKBUTTON, \
957
.val_default = { .val_i = 0 }, \
958
.help_string = TRS("Use only bitexact stuff (except (i)dct)") \
961
#define PARAM_FLAG_AC_PRED_H263 \
963
.name = "ff_flag_ac_pred", \
964
.long_name = TRS("Advanced intra coding"), \
965
.type = BG_PARAMETER_CHECKBUTTON, \
966
.val_default = { .val_i = 0 }, \
969
#define PARAM_FLAG_AC_PRED_MPEG4 \
971
.name = "ff_flag_ac_pred", \
972
.long_name = TRS("MPEG-4 AC prediction"), \
973
.type = BG_PARAMETER_CHECKBUTTON, \
974
.val_default = { .val_i = 0 }, \
977
#define PARAM_FLAG_H263P_UMV \
979
.name = "ff_flag_h263p_umv", \
980
.long_name = TRS("Unlimited motion vector"), \
981
.type = BG_PARAMETER_CHECKBUTTON, \
982
.val_default = { .val_i = 0 }, \
985
#define PARAM_FLAG_CBP_RD \
987
.name = "ff_flag_cbp_rd", \
988
.long_name = TRS("CBP RD"), \
989
.type = BG_PARAMETER_CHECKBUTTON, \
990
.val_default = { .val_i = 0 }, \
991
.help_string = TRS("Use rate distortion optimization for cbp"),\
994
#define PARAM_FLAG_QP_RD \
996
.name = "ff_flag_qp_rd", \
997
.long_name = TRS("QP RD"), \
998
.type = BG_PARAMETER_CHECKBUTTON, \
999
.val_default = { .val_i = 0 }, \
1000
.help_string = TRS("Use rate distortion optimization for qp selection"),\
1003
#define PARAM_FLAG_H263P_AIV \
1005
.name = "ff_flag_h263p_aiv", \
1006
.long_name = TRS("Alternative inter vlc"), \
1007
.type = BG_PARAMETER_CHECKBUTTON, \
1008
.val_default = { .val_i = 0 }, \
1012
#define PARAM_FLAG_OBMC \
1014
.name = "ff_flag_obmc", \
1015
.long_name = TRS("OBMC"), \
1016
.type = BG_PARAMETER_CHECKBUTTON, \
1017
.val_default = { .val_i = 0 }, \
1018
.help_string = TRS("Overlapped block motion compensation (only supported with with simple MB decision)") \
1021
#define PARAM_FLAG_LOOP_FILTER \
1023
.name = "ff_flag_loop_filter", \
1024
.long_name = TRS("Loop filter"), \
1025
.type = BG_PARAMETER_CHECKBUTTON, \
1026
.val_default = { .val_i = 0 }, \
1029
#define PARAM_FLAG_H263P_SLICE_STRUCT \
1031
.name = "ff_flag_h263p_slice_struct", \
1032
.long_name = TRS("H263P slice struct"), \
1033
.type = BG_PARAMETER_CHECKBUTTON, \
1034
.val_default = { .val_i = 0 }, \
1038
#define PARAM_FLAG_CLOSED_GOP \
1040
.name = "ff_flag_closed_gop", \
1041
.long_name = TRS("Close all GOPs"), \
1042
.type = BG_PARAMETER_CHECKBUTTON, \
1043
.val_default = { .val_i = 0 }, \
1046
#define PARAM_FLAG2_FAST \
1048
.name = "ff_flag2_fast", \
1049
.long_name = TRS("Allow fast encoding"), \
1050
.type = BG_PARAMETER_CHECKBUTTON, \
1051
.val_default = { .val_i = 0 }, \
1052
.help_string = TRS("Allow non spec compliant speedup tricks") \
1056
#define PARAM_FLAG2_STRICT_GOP \
1058
.name = "ff_flag2_strict_gop", \
1059
.long_name = TRS("Strictly enforce GOP size"), \
1060
.type = BG_PARAMETER_CHECKBUTTON, \
1061
.val_default = { .val_i = 0 }, \