FFmpeg
Data Structures | Macros | Typedefs | Functions | Variables
qsvenc.h File Reference
#include <stdint.h>
#include <sys/types.h>
#include <mfx/mfxvideo.h>
#include "libavutil/avutil.h"
#include "libavutil/fifo.h"
#include "avcodec.h"
#include "hwconfig.h"
#include "qsv_internal.h"

Go to the source code of this file.

Data Structures

struct  QSVEncContext
 

Macros

#define QSV_HAVE_EXT_VP9_TILES   QSV_VERSION_ATLEAST(1, 29)
 
#define QSV_HAVE_AVBR   0
 
#define QSV_HAVE_VCM   0
 
#define QSV_HAVE_MF   1
 
#define QSV_COMMON_OPTS
 
#define QSV_OPTION_RDO   { "rdo", "Enable rate distortion optimization", OFFSET(qsv.rdo), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
 
#define QSV_OPTION_MAX_FRAME_SIZE
 
#define QSV_OPTION_MAX_SLICE_SIZE   { "max_slice_size", "Maximum encoded slice size in bytes", OFFSET(qsv.max_slice_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
 
#define QSV_OPTION_BITRATE_LIMIT   { "bitrate_limit", "Toggle bitrate limitations", OFFSET(qsv.bitrate_limit), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
 
#define QSV_OPTION_MBBRC   { "mbbrc", "MB level bitrate control", OFFSET(qsv.mbbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
 
#define QSV_OPTION_EXTBRC   { "extbrc", "Extended bitrate control", OFFSET(qsv.extbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
 
#define QSV_OPTION_ADAPTIVE_I   { "adaptive_i", "Adaptive I-frame placement", OFFSET(qsv.adaptive_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
 
#define QSV_OPTION_ADAPTIVE_B   { "adaptive_b", "Adaptive B-frame placement", OFFSET(qsv.adaptive_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
 
#define QSV_OPTION_P_STRATEGY   { "p_strategy", "Enable P-pyramid: 0-default 1-simple 2-pyramid(bf need to be set to 0).", OFFSET(qsv.p_strategy), AV_OPT_TYPE_INT, { .i64 = 0}, 0, 2, VE },
 
#define QSV_OPTION_B_STRATEGY   { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(qsv.b_strategy), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
 
#define QSV_OPTION_DBLK_IDC   { "dblk_idc", "This option disable deblocking. It has value in range 0~2.", OFFSET(qsv.dblk_idc), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, VE},
 
#define QSV_OPTION_LOW_DELAY_BRC   { "low_delay_brc", "Allow to strictly obey avg frame size", OFFSET(qsv.low_delay_brc), AV_OPT_TYPE_BOOL,{ .i64 = -1 }, -1, 1, VE },
 

Typedefs

typedef int SetEncodeCtrlCB(AVCodecContext *avctx, const AVFrame *frame, mfxEncodeCtrl *enc_ctrl)
 

Functions

int ff_qsv_enc_init (AVCodecContext *avctx, QSVEncContext *q)
 
int ff_qsv_encode (AVCodecContext *avctx, QSVEncContext *q, AVPacket *pkt, const AVFrame *frame, int *got_packet)
 
int ff_qsv_enc_close (AVCodecContext *avctx, QSVEncContext *q)
 

Variables

const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs []
 

Macro Definition Documentation

◆ QSV_HAVE_EXT_VP9_TILES

#define QSV_HAVE_EXT_VP9_TILES   QSV_VERSION_ATLEAST(1, 29)

Definition at line 38 of file qsvenc.h.

◆ QSV_HAVE_AVBR

#define QSV_HAVE_AVBR   0

Definition at line 45 of file qsvenc.h.

◆ QSV_HAVE_VCM

#define QSV_HAVE_VCM   0

Definition at line 46 of file qsvenc.h.

◆ QSV_HAVE_MF

#define QSV_HAVE_MF   1

Definition at line 47 of file qsvenc.h.

◆ QSV_COMMON_OPTS

#define QSV_COMMON_OPTS
Value:
{ "async_depth", "Maximum processing parallelism", OFFSET(qsv.async_depth), AV_OPT_TYPE_INT, { .i64 = ASYNC_DEPTH_DEFAULT }, 1, INT_MAX, VE }, \
{ "avbr_accuracy", "Accuracy of the AVBR ratecontrol (unit of tenth of percent)", OFFSET(qsv.avbr_accuracy), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, UINT16_MAX, VE }, \
{ "avbr_convergence", "Convergence of the AVBR ratecontrol (unit of 100 frames)", OFFSET(qsv.avbr_convergence), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, UINT16_MAX, VE }, \
{ "preset", NULL, OFFSET(qsv.preset), AV_OPT_TYPE_INT, { .i64 = MFX_TARGETUSAGE_BALANCED }, MFX_TARGETUSAGE_BEST_QUALITY, MFX_TARGETUSAGE_BEST_SPEED, VE, "preset" }, \
{ "veryfast", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BEST_SPEED }, INT_MIN, INT_MAX, VE, "preset" }, \
{ "faster", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_6 }, INT_MIN, INT_MAX, VE, "preset" }, \
{ "fast", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_5 }, INT_MIN, INT_MAX, VE, "preset" }, \
{ "medium", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BALANCED }, INT_MIN, INT_MAX, VE, "preset" }, \
{ "slow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_3 }, INT_MIN, INT_MAX, VE, "preset" }, \
{ "slower", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_2 }, INT_MIN, INT_MAX, VE, "preset" }, \
{ "veryslow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BEST_QUALITY }, INT_MIN, INT_MAX, VE, "preset" }, \
{ "forced_idr", "Forcing I frames as IDR frames", OFFSET(qsv.forced_idr), AV_OPT_TYPE_BOOL,{ .i64 = 0 }, 0, 1, VE }, \
{ "low_power", "enable low power mode(experimental: many limitations by mfx version, BRC modes, etc.)", OFFSET(qsv.low_power), AV_OPT_TYPE_BOOL, { .i64 = -1}, -1, 1, VE},

Definition at line 50 of file qsvenc.h.

◆ QSV_OPTION_RDO

#define QSV_OPTION_RDO   { "rdo", "Enable rate distortion optimization", OFFSET(qsv.rdo), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },

Definition at line 65 of file qsvenc.h.

◆ QSV_OPTION_MAX_FRAME_SIZE

#define QSV_OPTION_MAX_FRAME_SIZE
Value:
{ "max_frame_size", "Maximum encoded frame size in bytes", OFFSET(qsv.max_frame_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE }, \
{ "max_frame_size_i", "Maximum encoded I frame size in bytes",OFFSET(qsv.max_frame_size_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE }, \
{ "max_frame_size_p", "Maximum encoded P frame size in bytes",OFFSET(qsv.max_frame_size_p), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },

Definition at line 68 of file qsvenc.h.

◆ QSV_OPTION_MAX_SLICE_SIZE

#define QSV_OPTION_MAX_SLICE_SIZE   { "max_slice_size", "Maximum encoded slice size in bytes", OFFSET(qsv.max_slice_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },

Definition at line 73 of file qsvenc.h.

◆ QSV_OPTION_BITRATE_LIMIT

#define QSV_OPTION_BITRATE_LIMIT   { "bitrate_limit", "Toggle bitrate limitations", OFFSET(qsv.bitrate_limit), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },

Definition at line 76 of file qsvenc.h.

◆ QSV_OPTION_MBBRC

#define QSV_OPTION_MBBRC   { "mbbrc", "MB level bitrate control", OFFSET(qsv.mbbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },

Definition at line 79 of file qsvenc.h.

◆ QSV_OPTION_EXTBRC

#define QSV_OPTION_EXTBRC   { "extbrc", "Extended bitrate control", OFFSET(qsv.extbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },

Definition at line 82 of file qsvenc.h.

◆ QSV_OPTION_ADAPTIVE_I

#define QSV_OPTION_ADAPTIVE_I   { "adaptive_i", "Adaptive I-frame placement", OFFSET(qsv.adaptive_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },

Definition at line 85 of file qsvenc.h.

◆ QSV_OPTION_ADAPTIVE_B

#define QSV_OPTION_ADAPTIVE_B   { "adaptive_b", "Adaptive B-frame placement", OFFSET(qsv.adaptive_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },

Definition at line 88 of file qsvenc.h.

◆ QSV_OPTION_P_STRATEGY

#define QSV_OPTION_P_STRATEGY   { "p_strategy", "Enable P-pyramid: 0-default 1-simple 2-pyramid(bf need to be set to 0).", OFFSET(qsv.p_strategy), AV_OPT_TYPE_INT, { .i64 = 0}, 0, 2, VE },

Definition at line 91 of file qsvenc.h.

◆ QSV_OPTION_B_STRATEGY

#define QSV_OPTION_B_STRATEGY   { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(qsv.b_strategy), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },

Definition at line 94 of file qsvenc.h.

◆ QSV_OPTION_DBLK_IDC

#define QSV_OPTION_DBLK_IDC   { "dblk_idc", "This option disable deblocking. It has value in range 0~2.", OFFSET(qsv.dblk_idc), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, VE},

Definition at line 97 of file qsvenc.h.

◆ QSV_OPTION_LOW_DELAY_BRC

#define QSV_OPTION_LOW_DELAY_BRC   { "low_delay_brc", "Allow to strictly obey avg frame size", OFFSET(qsv.low_delay_brc), AV_OPT_TYPE_BOOL,{ .i64 = -1 }, -1, 1, VE },

Definition at line 100 of file qsvenc.h.

Typedef Documentation

◆ SetEncodeCtrlCB

typedef int SetEncodeCtrlCB(AVCodecContext *avctx, const AVFrame *frame, mfxEncodeCtrl *enc_ctrl)

Definition at line 105 of file qsvenc.h.

Function Documentation

◆ ff_qsv_enc_init()

int ff_qsv_enc_init ( AVCodecContext avctx,
QSVEncContext q 
)

Definition at line 1229 of file qsvenc.c.

Referenced by qsv_enc_init().

◆ ff_qsv_encode()

int ff_qsv_encode ( AVCodecContext avctx,
QSVEncContext q,
AVPacket pkt,
const AVFrame frame,
int got_packet 
)

Definition at line 1628 of file qsvenc.c.

Referenced by qsv_enc_frame().

◆ ff_qsv_enc_close()

int ff_qsv_enc_close ( AVCodecContext avctx,
QSVEncContext q 
)

Definition at line 1690 of file qsvenc.c.

Referenced by qsv_enc_close(), and qsv_enc_init().

Variable Documentation

◆ ff_qsv_enc_hw_configs

const AVCodecHWConfigInternal* const ff_qsv_enc_hw_configs[]

Definition at line 1736 of file qsvenc.c.

ASYNC_DEPTH_DEFAULT
#define ASYNC_DEPTH_DEFAULT
Definition: qsv_internal.h:51
NULL
#define NULL
Definition: coverity.c:32
VE
#define VE
Definition: amfenc_h264.c:27
OFFSET
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option keep it simple and lowercase description are in without and describe what they for example set the foo of the bar offset is the offset of the field in your see the OFFSET() macro
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:225
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:244
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:234