66 #define OFFSET(x) offsetof(AVCodecContext,x)
67 #define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
69 #define V AV_OPT_FLAG_VIDEO_PARAM
70 #define A AV_OPT_FLAG_AUDIO_PARAM
71 #define S AV_OPT_FLAG_SUBTITLE_PARAM
72 #define E AV_OPT_FLAG_ENCODING_PARAM
73 #define D AV_OPT_FLAG_DECODING_PARAM
75 #define AV_CODEC_DEFAULT_BITRATE 200*1000
83 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
84 {
"obmc",
"use overlapped block motion compensation (h263+)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_OBMC }, INT_MIN, INT_MAX,
V|
E,
"flags"},
90 {
"mv0",
"always try a mb with mv=<0,0>", 0,
AV_OPT_TYPE_CONST, {.dbl =
CODEC_FLAG_MV0 }, INT_MIN, INT_MAX,
V|
E,
"flags"},
91 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
92 {
"part",
"use data partitioning", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PART }, INT_MIN, INT_MAX,
V|
E,
"flags"},
97 #if FF_API_MJPEG_GLOBAL_OPTS
98 {
"extern_huff",
"use external huffman table (for mjpeg)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_EXTERN_HUFF }, INT_MIN, INT_MAX, 0,
"flags"},
107 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
108 {
"alt",
"enable alternate scantable (mpeg2/mpeg4)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_ALT_SCAN }, INT_MIN, INT_MAX,
V|
E,
"flags"},
113 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
114 {
"umv",
"use unlimited motion vectors", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_H263P_UMV }, INT_MIN, INT_MAX,
V|
E,
"flags"},
118 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
119 {
"aiv",
"h263 alternative inter vlc", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_H263P_AIV }, INT_MIN, INT_MAX,
V|
E,
"flags"},
120 {
"slice",
NULL, 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_H263P_SLICE_STRUCT }, INT_MIN, INT_MAX,
V|
E,
"flags"},
123 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
124 {
"scan_offset",
"will reserve space for svcd scan offset user data", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_SVCD_SCAN_OFFSET }, INT_MIN, INT_MAX,
V|
E,
"flags"},
136 {
"esa",
"esa motion estimation (alias for full)", 0,
AV_OPT_TYPE_CONST, {.dbl =
ME_FULL }, INT_MIN, INT_MAX,
V|
E,
"me_method" },
138 {
"dia",
"dia motion estimation (alias for epzs)", 0,
AV_OPT_TYPE_CONST, {.dbl =
ME_EPZS }, INT_MIN, INT_MAX,
V|
E,
"me_method" },
147 {
"g",
"set the group of picture size",
OFFSET(gop_size),
AV_OPT_TYPE_INT, {.dbl = 12 }, INT_MIN, INT_MAX,
V|
E},
154 {
"qcomp",
"video quantizer scale compression (VBR)",
OFFSET(qcompress),
AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -FLT_MAX, FLT_MAX,
V|
E},
158 {
"qdiff",
"max difference between the quantizer scale (VBR)",
OFFSET(max_qdiff),
AV_OPT_TYPE_INT, {.dbl = 3 }, INT_MIN, INT_MAX,
V|
E},
160 {
"b_qfactor",
"qp factor between p and b frames",
OFFSET(b_quant_factor),
AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX,
V|
E},
162 {
"b_strategy",
"strategy to choose between I/P/B-frames",
OFFSET(b_frame_strategy),
AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX,
V|
E},
163 #if FF_API_X264_GLOBAL_OPTS
164 {
"wpredp",
"weighted prediction analysis method",
OFFSET(weighted_p_pred),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
V|
E},
192 {
"ms",
"workaround various bugs in microsofts broken decoders", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_BUG_MS }, INT_MIN, INT_MAX,
V|
D,
"bug"},
194 {
"lelim",
"single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",
OFFSET(luma_elim_threshold),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
E},
195 {
"celim",
"single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",
OFFSET(chroma_elim_threshold),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
E},
202 {
"b_qoffset",
"qp offset between P and B frames",
OFFSET(b_quant_offset),
AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX,
V|
E},
209 {
"explode",
"abort decoding on error recognition", 0,
AV_OPT_TYPE_CONST, {.dbl = FF_ER_EXPLODE }, INT_MIN, INT_MAX,
V|
D,
"er"},
218 #if FF_API_PARSE_FRAME
224 {
"qsquish",
"how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)",
OFFSET(rc_qsquish),
AV_OPT_TYPE_FLOAT, {.dbl =
DEFAULT }, 0, 99,
V|
E},
232 {
"rc_buf_aggressivity",
"currently useless",
OFFSET(rc_buffer_aggressivity),
AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX,
V|
E},
233 {
"i_qfactor",
"qp factor between P and I frames",
OFFSET(i_quant_factor),
AV_OPT_TYPE_FLOAT, {.dbl = -0.8 }, -FLT_MAX, FLT_MAX,
V|
E},
234 {
"i_qoffset",
"qp offset between P and I frames",
OFFSET(i_quant_offset),
AV_OPT_TYPE_FLOAT, {.dbl = 0.0 }, -FLT_MAX, FLT_MAX,
V|
E},
244 {
"lumi_mask",
"compresses bright areas stronger than medium ones",
OFFSET(lumi_masking),
AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX,
V|
E},
245 {
"tcplx_mask",
"temporal complexity masking",
OFFSET(temporal_cplx_masking),
AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX,
V|
E},
246 {
"scplx_mask",
"spatial complexity masking",
OFFSET(spatial_cplx_masking),
AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX,
V|
E},
248 {
"dark_mask",
"compresses dark areas stronger than medium ones",
OFFSET(dark_masking),
AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX,
V|
E},
294 {
"vis_qp",
"visualize quantization parameter (QP), lower QP are tinted greener", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_DEBUG_VIS_QP }, INT_MIN, INT_MAX,
V|
D,
"debug"},
307 {
"last_pred",
"amount of motion predictors from the previous frame",
OFFSET(last_predictor_count),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
E},
310 {
"sad",
"sum of absolute differences, fast (default)", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_CMP_SAD }, INT_MIN, INT_MAX,
V|
E,
"cmp_func"},
314 {
"psnr",
"sum of squared quantization errors (avoid, low quality)", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_CMP_PSNR }, INT_MIN, INT_MAX,
V|
E,
"cmp_func"},
316 {
"rd",
"rate distortion optimal, slow", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_CMP_RD }, INT_MIN, INT_MAX,
V|
E,
"cmp_func"},
321 #if CONFIG_SNOW_ENCODER
322 {
"w53",
"5/3 wavelet, only used in snow", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_CMP_W53 }, INT_MIN, INT_MAX,
V|
E,
"cmp_func"},
323 {
"w97",
"9/7 wavelet, only used in snow", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_CMP_W97 }, INT_MIN, INT_MAX,
V|
E,
"cmp_func"},
327 {
"pre_dia_size",
"diamond type & size for motion estimation pre-pass",
OFFSET(pre_dia_size),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
E},
328 {
"subq",
"sub pel motion estimation quality",
OFFSET(me_subpel_quality),
AV_OPT_TYPE_INT, {.dbl = 8 }, INT_MIN, INT_MAX,
V|
E},
344 {
"mbd",
"macroblock decision algorithm (high quality mode)",
OFFSET(mb_decision),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
E,
"mbd"},
353 {
"rc_init_occupancy",
"number of bits which should be loaded into the rc buffer before decoding starts",
OFFSET(rc_initial_buffer_occupancy),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
E},
355 #if FF_API_X264_GLOBAL_OPTS
356 #define X264_DEFAULTS CODEC_FLAG2_FASTPSKIP|CODEC_FLAG2_PSY|CODEC_FLAG2_MBTREE
358 #define X264_DEFAULTS 0
360 #if FF_API_LAME_GLOBAL_OPTS
361 #define LAME_DEFAULTS CODEC_FLAG2_BIT_RESERVOIR
363 #define LAME_DEFAULTS 0
367 #if FF_API_ANTIALIAS_ALGO
376 {
"auto",
"detect a good number of threads", 0,
AV_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX,
V|
E|
D,
"threads"},
381 {
"skip_top",
"number of macroblock rows at the top which are skipped",
OFFSET(skip_top),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
D},
382 {
"skip_bottom",
"number of macroblock rows at the bottom which are skipped",
OFFSET(skip_bottom),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
D},
396 {
"lowres",
"decode at 1= 1/2, 2=1/4, 3=1/8 resolutions",
OFFSET(
lowres),
AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX,
V|
A|
D},
401 {
"border_mask",
"increases the quantizer for macroblocks close to borders",
OFFSET(border_masking),
AV_OPT_TYPE_FLOAT, {.dbl =
DEFAULT }, -FLT_MAX, FLT_MAX,
V|
E},
404 {
"mepc",
"motion estimation bitrate penalty compensation (1.0 = 256)",
OFFSET(me_penalty_compensation),
AV_OPT_TYPE_INT, {.dbl = 256 }, INT_MIN, INT_MAX,
V|
E},
416 #if FF_API_X264_GLOBAL_OPTS
418 {
"cqp",
"constant quantization parameter rate control method",
OFFSET(cqp),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
V|
E},
420 {
"keyint_min",
"minimum interval between IDR-frames (x264)",
OFFSET(keyint_min),
AV_OPT_TYPE_INT, {.dbl = 25 }, INT_MIN, INT_MAX,
V|
E},
421 {
"refs",
"reference frames to consider for motion compensation (Snow)",
OFFSET(refs),
AV_OPT_TYPE_INT, {.dbl = 1 }, INT_MIN, INT_MAX,
V|
E},
423 #if FF_API_X264_GLOBAL_OPTS
427 #if FF_API_X264_GLOBAL_OPTS
428 {
"directpred",
"direct mv prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto)",
OFFSET(directpred),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
V|
E},
429 {
"bpyramid",
"allows B-frames to be used as references for predicting", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_BPYRAMID }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
430 {
"wpred",
"weighted biprediction for b-frames (H.264)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_WPRED }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
431 {
"mixed_refs",
"one reference per partition, as opposed to one reference per macroblock", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_MIXED_REFS }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
432 {
"dct8x8",
"high profile 8x8 transform (H.264)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_8X8DCT }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
433 {
"fastpskip",
"fast pskip (H.264)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_FASTPSKIP }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
434 {
"aud",
"access unit delimiters (H.264)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_AUD }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
437 #if FF_API_X264_GLOBAL_OPTS
438 {
"complexityblur",
"reduce fluctuations in qp (before curve compression)",
OFFSET(complexityblur),
AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX,
V|
E},
448 {
"sc_factor",
"multiplied by qscale for each frame and added to scene_change_score",
OFFSET(scenechange_factor),
AV_OPT_TYPE_INT, {.dbl = 6 }, 0, INT_MAX,
V|
E},
450 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
451 {
"ivlc",
"intra vlc table", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_INTRA_VLC }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
453 {
"b_sensitivity",
"adjusts sensitivity of b_frame_strategy 1",
OFFSET(b_sensitivity),
AV_OPT_TYPE_INT, {.dbl = 40 }, 1, INT_MAX,
V|
E},
457 #if FF_API_FLAC_GLOBAL_OPTS
458 {
"lpc_coeff_precision",
"deprecated, use flac-specific options",
OFFSET(lpc_coeff_precision),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, 0, INT_MAX,
A|
E},
459 {
"prediction_order_method",
"deprecated, use flac-specific options",
OFFSET(prediction_order_method),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
A|
E},
460 {
"min_partition_order",
"deprecated, use flac-specific options",
OFFSET(min_partition_order),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
A|
E},
461 {
"max_partition_order",
"deprecated, use flac-specific options",
OFFSET(max_partition_order),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
A|
E},
463 {
"timecode_frame_start",
"GOP timecode frame start number, in non drop frame format",
OFFSET(timecode_frame_start),
AV_OPT_TYPE_INT64, {.dbl = 0 }, 0,
INT64_MAX,
V|
E},
464 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
465 {
"drop_frame_timecode",
NULL, 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_DROP_FRAME_TIMECODE }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
466 {
"non_linear_q",
"use non linear quantizer", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_NON_LINEAR_QUANT }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
468 #if FF_API_REQUEST_CHANNELS
472 {
"drc_scale",
"percentage of dynamic range compression to apply",
OFFSET(drc_scale),
AV_OPT_TYPE_FLOAT, {.dbl = 0.0 }, 0.0, 1.0,
A|
D},
474 #if FF_API_LAME_GLOBAL_OPTS
475 {
"reservoir",
"use bit reservoir", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_BIT_RESERVOIR }, INT_MIN, INT_MAX,
A|
E,
"flags2"},
477 #if FF_API_X264_GLOBAL_OPTS
478 {
"mbtree",
"use macroblock tree ratecontrol (x264 only)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_MBTREE }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
491 #if FF_API_X264_GLOBAL_OPTS
492 {
"psy",
"use psycho visual optimization", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_PSY }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
494 {
"psy_trellis",
"specify psycho visual trellis",
OFFSET(psy_trellis),
AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX,
V|
E},
497 {
"rc_lookahead",
"specify number of frames to look ahead for frametype",
OFFSET(rc_lookahead),
AV_OPT_TYPE_INT, {.dbl = -1 }, -1, INT_MAX,
V|
E},
498 {
"ssim",
"ssim will be calculated during encoding", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_SSIM }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
499 {
"intra_refresh",
"use periodic insertion of intra blocks instead of keyframes", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_INTRA_REFRESH }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
502 {
"log_level_offset",
"set the log level offset",
OFFSET(log_level_offset),
AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX },
503 #if FF_API_FLAC_GLOBAL_OPTS
504 {
"lpc_type",
"deprecated, use flac-specific options",
OFFSET(lpc_type),
AV_OPT_TYPE_INT, {.dbl = AV_LPC_TYPE_DEFAULT }, AV_LPC_TYPE_DEFAULT, AV_LPC_TYPE_NB-1,
A|
E},
509 {
"lpc_passes",
"deprecated, use flac-specific options",
OFFSET(lpc_passes),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
A|
E},
511 {
"slices",
"number of slices, used in parallelized encoding",
OFFSET(slices),
AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX,
V|
E},
546 .log_level_offset_offset =
OFFSET(log_level_offset),
551 #if FF_API_ALLOC_CONTEXT
616 #if FF_API_ALLOC_CONTEXT
622 avcodec_get_context_defaults2(avctx, codec_type);
640 "Tried to copy AVCodecContext %p into already-initialized %p\n",
644 memcpy(dest, src,
sizeof(*dest));
666 #define alloc_and_copy_or_fail(obj, size, pad) \
667 if (src->obj && size > 0) { \
668 dest->obj = av_malloc(size + pad); \
671 memcpy(dest->obj, src->obj, size); \
673 memset(((uint8_t *) dest->obj) + size, 0, pad); \
680 #undef alloc_and_copy_or_fail