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
222 {
"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},
230 {
"rc_buf_aggressivity",
"currently useless",
OFFSET(rc_buffer_aggressivity),
AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX,
V|
E},
231 {
"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},
232 {
"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},
242 {
"lumi_mask",
"compresses bright areas stronger than medium ones",
OFFSET(lumi_masking),
AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX,
V|
E},
243 {
"tcplx_mask",
"temporal complexity masking",
OFFSET(temporal_cplx_masking),
AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX,
V|
E},
244 {
"scplx_mask",
"spatial complexity masking",
OFFSET(spatial_cplx_masking),
AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX,
V|
E},
246 {
"dark_mask",
"compresses dark areas stronger than medium ones",
OFFSET(dark_masking),
AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX,
V|
E},
292 {
"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"},
305 {
"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},
308 {
"sad",
"sum of absolute differences, fast (default)", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_CMP_SAD }, INT_MIN, INT_MAX,
V|
E,
"cmp_func"},
312 {
"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"},
314 {
"rd",
"rate distortion optimal, slow", 0,
AV_OPT_TYPE_CONST, {.dbl =
FF_CMP_RD }, INT_MIN, INT_MAX,
V|
E,
"cmp_func"},
319 #if CONFIG_SNOW_ENCODER
320 {
"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"},
321 {
"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"},
325 {
"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},
326 {
"subq",
"sub pel motion estimation quality",
OFFSET(me_subpel_quality),
AV_OPT_TYPE_INT, {.dbl = 8 }, INT_MIN, INT_MAX,
V|
E},
342 {
"mbd",
"macroblock decision algorithm (high quality mode)",
OFFSET(mb_decision),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, INT_MIN, INT_MAX,
V|
E,
"mbd"},
351 {
"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},
353 #if FF_API_X264_GLOBAL_OPTS
354 #define X264_DEFAULTS CODEC_FLAG2_FASTPSKIP|CODEC_FLAG2_PSY|CODEC_FLAG2_MBTREE
356 #define X264_DEFAULTS 0
358 #if FF_API_LAME_GLOBAL_OPTS
359 #define LAME_DEFAULTS CODEC_FLAG2_BIT_RESERVOIR
361 #define LAME_DEFAULTS 0
365 #if FF_API_ANTIALIAS_ALGO
374 {
"auto",
"detect a good number of threads", 0,
AV_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX,
V|
E|
D,
"threads"},
379 {
"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},
380 {
"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},
394 {
"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},
399 {
"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},
402 {
"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},
414 #if FF_API_X264_GLOBAL_OPTS
416 {
"cqp",
"constant quantization parameter rate control method",
OFFSET(cqp),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
V|
E},
418 {
"keyint_min",
"minimum interval between IDR-frames (x264)",
OFFSET(keyint_min),
AV_OPT_TYPE_INT, {.dbl = 25 }, INT_MIN, INT_MAX,
V|
E},
419 {
"refs",
"reference frames to consider for motion compensation (Snow)",
OFFSET(refs),
AV_OPT_TYPE_INT, {.dbl = 1 }, INT_MIN, INT_MAX,
V|
E},
421 #if FF_API_X264_GLOBAL_OPTS
425 #if FF_API_X264_GLOBAL_OPTS
426 {
"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},
427 {
"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"},
428 {
"wpred",
"weighted biprediction for b-frames (H.264)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_WPRED }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
429 {
"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"},
430 {
"dct8x8",
"high profile 8x8 transform (H.264)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_8X8DCT }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
431 {
"fastpskip",
"fast pskip (H.264)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_FASTPSKIP }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
432 {
"aud",
"access unit delimiters (H.264)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_AUD }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
435 #if FF_API_X264_GLOBAL_OPTS
436 {
"complexityblur",
"reduce fluctuations in qp (before curve compression)",
OFFSET(complexityblur),
AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX,
V|
E},
446 {
"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},
448 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
449 {
"ivlc",
"intra vlc table", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_INTRA_VLC }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
451 {
"b_sensitivity",
"adjusts sensitivity of b_frame_strategy 1",
OFFSET(b_sensitivity),
AV_OPT_TYPE_INT, {.dbl = 40 }, 1, INT_MAX,
V|
E},
455 #if FF_API_FLAC_GLOBAL_OPTS
456 {
"lpc_coeff_precision",
"deprecated, use flac-specific options",
OFFSET(lpc_coeff_precision),
AV_OPT_TYPE_INT, {.dbl =
DEFAULT }, 0, INT_MAX,
A|
E},
457 {
"prediction_order_method",
"deprecated, use flac-specific options",
OFFSET(prediction_order_method),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
A|
E},
458 {
"min_partition_order",
"deprecated, use flac-specific options",
OFFSET(min_partition_order),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
A|
E},
459 {
"max_partition_order",
"deprecated, use flac-specific options",
OFFSET(max_partition_order),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
A|
E},
461 {
"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},
462 #if FF_API_MPEGVIDEO_GLOBAL_OPTS
463 {
"drop_frame_timecode",
NULL, 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_DROP_FRAME_TIMECODE }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
464 {
"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"},
466 #if FF_API_REQUEST_CHANNELS
470 {
"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},
472 #if FF_API_LAME_GLOBAL_OPTS
473 {
"reservoir",
"use bit reservoir", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_BIT_RESERVOIR }, INT_MIN, INT_MAX,
A|
E,
"flags2"},
475 #if FF_API_X264_GLOBAL_OPTS
476 {
"mbtree",
"use macroblock tree ratecontrol (x264 only)", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_MBTREE }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
489 #if FF_API_X264_GLOBAL_OPTS
490 {
"psy",
"use psycho visual optimization", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_PSY }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
492 {
"psy_trellis",
"specify psycho visual trellis",
OFFSET(psy_trellis),
AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX,
V|
E},
495 {
"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},
496 {
"ssim",
"ssim will be calculated during encoding", 0,
AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_SSIM }, INT_MIN, INT_MAX,
V|
E,
"flags2"},
497 {
"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"},
500 {
"log_level_offset",
"set the log level offset",
OFFSET(log_level_offset),
AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX },
501 #if FF_API_FLAC_GLOBAL_OPTS
502 {
"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},
507 {
"lpc_passes",
"deprecated, use flac-specific options",
OFFSET(lpc_passes),
AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX,
A|
E},
509 {
"slices",
"number of slices, used in parallelized encoding",
OFFSET(slices),
AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX,
V|
E},
544 .log_level_offset_offset =
OFFSET(log_level_offset),
549 #if FF_API_ALLOC_CONTEXT
614 #if FF_API_ALLOC_CONTEXT
620 avcodec_get_context_defaults2(avctx, codec_type);
638 "Tried to copy AVCodecContext %p into already-initialized %p\n",
642 memcpy(dest, src,
sizeof(*dest));
664 #define alloc_and_copy_or_fail(obj, size, pad) \
665 if (src->obj && size > 0) { \
666 dest->obj = av_malloc(size + pad); \
669 memcpy(dest->obj, src->obj, size); \
671 memset(((uint8_t *) dest->obj) + size, 0, pad); \
678 #undef alloc_and_copy_or_fail