26 #define OFFSET(x) offsetof(NvencContext, x)
27 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
29 #ifdef NVENC_HAVE_NEW_PRESETS
46 #ifdef NVENC_HAVE_NEW_PRESETS
47 {
"p1",
"fastest (lowest quality)", 0,
AV_OPT_TYPE_CONST, { .i64 = PRESET_P1 }, 0, 0,
VE,
"preset" },
48 {
"p2",
"faster (lower quality)", 0,
AV_OPT_TYPE_CONST, { .i64 = PRESET_P2 }, 0, 0,
VE,
"preset" },
49 {
"p3",
"fast (low quality)", 0,
AV_OPT_TYPE_CONST, { .i64 = PRESET_P3 }, 0, 0,
VE,
"preset" },
50 {
"p4",
"medium (default)", 0,
AV_OPT_TYPE_CONST, { .i64 = PRESET_P4 }, 0, 0,
VE,
"preset" },
51 {
"p5",
"slow (good quality)", 0,
AV_OPT_TYPE_CONST, { .i64 = PRESET_P5 }, 0, 0,
VE,
"preset" },
52 {
"p6",
"slower (better quality)", 0,
AV_OPT_TYPE_CONST, { .i64 = PRESET_P6 }, 0, 0,
VE,
"preset" },
53 {
"p7",
"slowest (best quality)", 0,
AV_OPT_TYPE_CONST, { .i64 = PRESET_P7 }, 0, 0,
VE,
"preset" },
54 {
"tune",
"Set the encoding tuning info",
OFFSET(tuning_info),
AV_OPT_TYPE_INT, { .i64 = NV_ENC_TUNING_INFO_HIGH_QUALITY }, NV_ENC_TUNING_INFO_HIGH_QUALITY, NV_ENC_TUNING_INFO_LOSSLESS,
VE,
"tune" },
55 {
"hq",
"High quality", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_HIGH_QUALITY }, 0, 0,
VE,
"tune" },
56 {
"ll",
"Low latency", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_LOW_LATENCY }, 0, 0,
VE,
"tune" },
57 {
"ull",
"Ultra low latency", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_ULTRA_LOW_LATENCY }, 0, 0,
VE,
"tune" },
58 {
"lossless",
"Lossless", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TUNING_INFO_LOSSLESS }, 0, 0,
VE,
"tune" },
64 {
"level",
"Set the encoding level restriction",
OFFSET(
level),
AV_OPT_TYPE_INT, { .i64 = NV_ENC_LEVEL_AUTOSELECT }, NV_ENC_LEVEL_AUTOSELECT, NV_ENC_LEVEL_HEVC_62,
VE,
"level" },
65 {
"auto",
"", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_LEVEL_AUTOSELECT }, 0, 0,
VE,
"level" },
85 {
"tier",
"Set the encoding tier",
OFFSET(tier),
AV_OPT_TYPE_INT, { .i64 = NV_ENC_TIER_HEVC_MAIN }, NV_ENC_TIER_HEVC_MAIN, NV_ENC_TIER_HEVC_HIGH,
VE,
"tier"},
88 {
"rc",
"Override the preset rate-control",
OFFSET(rc),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX,
VE,
"rc" },
89 {
"constqp",
"Constant QP mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CONSTQP }, 0, 0,
VE,
"rc" },
90 {
"vbr",
"Variable bitrate mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_VBR }, 0, 0,
VE,
"rc" },
91 {
"cbr",
"Constant bitrate mode", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_PARAMS_RC_CBR }, 0, 0,
VE,
"rc" },
92 {
"vbr_minqp",
"Variable bitrate mode with MinQP (deprecated)", 0,
AV_OPT_TYPE_CONST, { .i64 =
RCD(NV_ENC_PARAMS_RC_VBR_MINQP) }, 0, 0,
VE,
"rc" },
93 {
"ll_2pass_quality",
"Multi-pass optimized for image quality (deprecated)",
95 {
"ll_2pass_size",
"Multi-pass optimized for constant frame size (deprecated)",
97 {
"vbr_2pass",
"Multi-pass variable bitrate mode (deprecated)", 0,
AV_OPT_TYPE_CONST, { .i64 =
RCD(NV_ENC_PARAMS_RC_2_PASS_VBR) }, 0, 0,
VE,
"rc" },
98 {
"cbr_ld_hq",
"Constant bitrate low delay high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 =
RCD(NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ) }, 0, 0,
VE,
"rc" },
99 {
"cbr_hq",
"Constant bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 =
RCD(NV_ENC_PARAMS_RC_CBR_HQ) }, 0, 0,
VE,
"rc" },
100 {
"vbr_hq",
"Variable bitrate high quality mode", 0,
AV_OPT_TYPE_CONST, { .i64 =
RCD(NV_ENC_PARAMS_RC_VBR_HQ) }, 0, 0,
VE,
"rc" },
101 {
"rc-lookahead",
"Number of frames to look ahead for rate-control",
106 {
"gpu",
"Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on.",
110 {
"delay",
"Delay frame output by the given amount of frames",
112 {
"no-scenecut",
"When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts",
114 {
"forced-idr",
"If forcing keyframes, force them as IDR frames.",
120 {
"zerolatency",
"Set 1 to indicate zero latency operation (no reordering delay)",
122 {
"nonref_p",
"Set this to 1 to enable automatic insertion of non-reference P-frames",
124 {
"strict_gop",
"Set 1 to minimize GOP-to-GOP rate fluctuations",
126 {
"aq-strength",
"When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive)",
128 {
"cq",
"Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control",
131 {
"bluray-compat",
"Bluray compatibility workarounds",
OFFSET(bluray_compat),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
VE },
135 {
"qp",
"Constant quantization parameter rate control method",
137 {
"weighted_pred",
"Set 1 to enable weighted prediction",
139 #ifdef NVENC_HAVE_HEVC_BFRAME_REF_MODE
140 {
"b_ref_mode",
"Use B frames as references",
OFFSET(b_ref_mode),
AV_OPT_TYPE_INT, { .i64 = NV_ENC_BFRAME_REF_MODE_DISABLED }, NV_ENC_BFRAME_REF_MODE_DISABLED, NV_ENC_BFRAME_REF_MODE_MIDDLE,
VE,
"b_ref_mode" },
141 {
"disabled",
"B frames will not be used for reference", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_DISABLED }, 0, 0,
VE,
"b_ref_mode" },
142 {
"each",
"Each B frame will be used for reference", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_EACH }, 0, 0,
VE,
"b_ref_mode" },
143 {
"middle",
"Only (number of B frames)/2 will be used for reference", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_BFRAME_REF_MODE_MIDDLE }, 0, 0,
VE,
"b_ref_mode" },
145 {
"b_ref_mode",
"(not supported)",
OFFSET(b_ref_mode),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
VE,
"b_ref_mode" },
152 {
"dpb_size",
"Specifies the DPB size used for encoding (0 means automatic)",
154 #ifdef NVENC_HAVE_MULTIPASS
155 {
"multipass",
"Set the multipass encoding",
OFFSET(multipass),
AV_OPT_TYPE_INT, { .i64 = NV_ENC_MULTI_PASS_DISABLED }, NV_ENC_MULTI_PASS_DISABLED, NV_ENC_TWO_PASS_FULL_RESOLUTION,
VE,
"multipass" },
156 {
"disabled",
"Single Pass", 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_MULTI_PASS_DISABLED }, 0, 0,
VE,
"multipass" },
157 {
"qres",
"Two Pass encoding is enabled where first Pass is quarter resolution",
158 0,
AV_OPT_TYPE_CONST, { .i64 = NV_ENC_TWO_PASS_QUARTER_RESOLUTION }, 0, 0,
VE,
"multipass" },
159 {
"fullres",
"Two Pass encoding is enabled where first Pass is full resolution",
162 #ifdef NVENC_HAVE_LDKFS
163 {
"ldkfs",
"Low delay key frame scale; Specifies the Scene Change frame size increase allowed in case of single frame VBV and CBR",
182 #if FF_API_NVENC_OLD_NAME
198 .
name =
"nvenc_hevc",
213 .wrapper_name =
"nvenc",
227 .
name =
"hevc_nvenc",
242 .wrapper_name =
"nvenc",
Libavcodec external API header.
#define FF_PROFILE_HEVC_REXT
static int FUNC() aud(CodedBitstreamContext *ctx, RWContext *rw, H264RawAUD *current)
#define AV_CODEC_CAP_ENCODER_FLUSH
This encoder can be flushed using avcodec_flush_buffers().
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AV_CODEC_CAP_HARDWARE
Codec is backed by a hardware implementation.
#define AV_LOG_WARNING
Something somehow does not look correct.
const char * av_default_item_name(void *ptr)
Return the context name.
#define LIBAVUTIL_VERSION_INT
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static enum AVPixelFormat pix_fmts[]
av_cold int ff_nvenc_encode_init(AVCodecContext *avctx)
int ff_nvenc_receive_packet(AVCodecContext *avctx, AVPacket *pkt)
const AVCodecHWConfigInternal *const ff_nvenc_hw_configs[]
enum AVPixelFormat ff_nvenc_pix_fmts[]
av_cold int ff_nvenc_encode_close(AVCodecContext *avctx)
av_cold void ff_nvenc_encode_flush(AVCodecContext *avctx)
@ NV_ENC_HEVC_PROFILE_REXT
@ NV_ENC_HEVC_PROFILE_MAIN
@ NV_ENC_HEVC_PROFILE_MAIN_10
@ PRESET_LOW_LATENCY_DEFAULT
@ PRESET_LOSSLESS_DEFAULT
#define MAX_REGISTERED_FRAMES
static const AVCodecDefault defaults[]
AVCodec ff_nvenc_hevc_encoder
static const AVOption options[]
static const AVClass hevc_nvenc_class
static av_cold int nvenc_old_init(AVCodecContext *avctx)
static const AVClass nvenc_hevc_class
AVCodec ff_hevc_nvenc_encoder
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
main external API structure.
const char * name
Name of the codec implementation.