FFmpeg
qsvenc.h
Go to the documentation of this file.
1 /*
2  * Intel MediaSDK QSV encoder utility functions
3  *
4  * copyright (c) 2013 Yukinori Yamazoe
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg 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 GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #ifndef AVCODEC_QSVENC_H
24 #define AVCODEC_QSVENC_H
25 
26 #include <stdint.h>
27 #include <sys/types.h>
28 
29 #include <mfxvideo.h>
30 
31 #include "libavutil/common.h"
32 #include "libavutil/hwcontext.h"
34 #include "libavutil/avutil.h"
35 #include "libavutil/fifo.h"
36 
37 #include "avcodec.h"
38 #include "hwconfig.h"
39 #include "qsv_internal.h"
40 
41 #define QSV_HAVE_EXT_VP9_TILES QSV_VERSION_ATLEAST(1, 29)
42 #define QSV_HAVE_EXT_AV1_PARAM QSV_VERSION_ATLEAST(2, 5)
43 
44 #if defined(_WIN32) || defined(__CYGWIN__)
45 #define QSV_HAVE_AVBR 1
46 #define QSV_HAVE_VCM 1
47 #define QSV_HAVE_MF 0
48 #define QSV_HAVE_HE QSV_VERSION_ATLEAST(2, 4)
49 #else
50 #define QSV_HAVE_AVBR 0
51 #define QSV_HAVE_VCM 0
52 #define QSV_HAVE_MF !QSV_ONEVPL
53 #define QSV_HAVE_HE 0
54 #endif
55 
56 #define QSV_COMMON_OPTS \
57 { "async_depth", "Maximum processing parallelism", OFFSET(qsv.async_depth), AV_OPT_TYPE_INT, { .i64 = ASYNC_DEPTH_DEFAULT }, 1, INT_MAX, VE }, \
58 { "preset", NULL, OFFSET(qsv.preset), AV_OPT_TYPE_INT, { .i64 = MFX_TARGETUSAGE_UNKNOWN }, MFX_TARGETUSAGE_UNKNOWN, MFX_TARGETUSAGE_BEST_SPEED, VE, .unit = "preset" }, \
59 { "veryfast", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BEST_SPEED }, INT_MIN, INT_MAX, VE, .unit = "preset" }, \
60 { "faster", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_6 }, INT_MIN, INT_MAX, VE, .unit = "preset" }, \
61 { "fast", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_5 }, INT_MIN, INT_MAX, VE, .unit = "preset" }, \
62 { "medium", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BALANCED }, INT_MIN, INT_MAX, VE, .unit = "preset" }, \
63 { "slow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_3 }, INT_MIN, INT_MAX, VE, .unit = "preset" }, \
64 { "slower", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_2 }, INT_MIN, INT_MAX, VE, .unit = "preset" }, \
65 { "veryslow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BEST_QUALITY }, INT_MIN, INT_MAX, VE, .unit = "preset" }, \
66 { "forced_idr", "Forcing I frames as IDR frames", OFFSET(qsv.forced_idr), AV_OPT_TYPE_BOOL,{ .i64 = 0 }, 0, 1, VE }, \
67 { "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},\
68 { "qsv_params", "Set QSV encoder parameters as key1=value1:key2=value2:...", OFFSET(qsv.qsv_params), AV_OPT_TYPE_DICT, { 0 }, 0, 0, VE },
69 
70 #if QSV_HAVE_HE
71 #define QSV_HE_OPTIONS \
72 { "dual_gfx", "Prefer processing on both iGfx and dGfx simultaneously", OFFSET(qsv.dual_gfx), AV_OPT_TYPE_INT, { .i64 = MFX_HYPERMODE_OFF }, MFX_HYPERMODE_OFF, MFX_HYPERMODE_ADAPTIVE, VE, .unit = "dual_gfx" }, \
73 { "off", "Disable HyperEncode mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_HYPERMODE_OFF }, INT_MIN, INT_MAX, VE, .unit = "dual_gfx" }, \
74 { "on", "Enable HyperEncode mode and return error if incompatible parameters during initialization", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_HYPERMODE_ON }, INT_MIN, INT_MAX, VE, .unit = "dual_gfx" }, \
75 { "adaptive", "Enable HyperEncode mode or fallback to single GPU if incompatible parameters during initialization", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_HYPERMODE_ADAPTIVE }, INT_MIN, INT_MAX, VE, .unit = "dual_gfx" },
76 #endif
77 
78 #define QSV_OPTION_RDO \
79 { "rdo", "Enable rate distortion optimization", OFFSET(qsv.rdo), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
80 
81 #define QSV_OPTION_MAX_FRAME_SIZE \
82 { "max_frame_size", "Maximum encoded frame size in bytes", OFFSET(qsv.max_frame_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE }, \
83 { "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 }, \
84 { "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 },
85 
86 #define QSV_OPTION_MAX_SLICE_SIZE \
87 { "max_slice_size", "Maximum encoded slice size in bytes", OFFSET(qsv.max_slice_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
88 
89 #define QSV_OPTION_BITRATE_LIMIT \
90 { "bitrate_limit", "Toggle bitrate limitations", OFFSET(qsv.bitrate_limit), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
91 
92 #define QSV_OPTION_MBBRC \
93 { "mbbrc", "MB level bitrate control", OFFSET(qsv.mbbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
94 
95 #define QSV_OPTION_EXTBRC \
96 { "extbrc", "Extended bitrate control", OFFSET(qsv.extbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
97 
98 #define QSV_OPTION_ADAPTIVE_I \
99 { "adaptive_i", "Adaptive I-frame placement", OFFSET(qsv.adaptive_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
100 
101 #define QSV_OPTION_ADAPTIVE_B \
102 { "adaptive_b", "Adaptive B-frame placement", OFFSET(qsv.adaptive_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
103 
104 #define QSV_OPTION_P_STRATEGY \
105 { "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 },
106 
107 #define QSV_OPTION_B_STRATEGY \
108 { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(qsv.b_strategy), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
109 
110 #define QSV_OPTION_DBLK_IDC \
111 { "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},
112 
113 #define QSV_OPTION_LOW_DELAY_BRC \
114 { "low_delay_brc", "Allow to strictly obey avg frame size", OFFSET(qsv.low_delay_brc), AV_OPT_TYPE_BOOL,{ .i64 = -1 }, -1, 1, VE },
115 
116 #define QSV_OPTION_MAX_MIN_QP \
117 { "max_qp_i", "Maximum video quantizer scale for I frame", OFFSET(qsv.max_qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
118 { "min_qp_i", "Minimum video quantizer scale for I frame", OFFSET(qsv.min_qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
119 { "max_qp_p", "Maximum video quantizer scale for P frame", OFFSET(qsv.max_qp_p), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
120 { "min_qp_p", "Minimum video quantizer scale for P frame", OFFSET(qsv.min_qp_p), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
121 { "max_qp_b", "Maximum video quantizer scale for B frame", OFFSET(qsv.max_qp_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
122 { "min_qp_b", "Minimum video quantizer scale for B frame", OFFSET(qsv.min_qp_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE},
123 
124 #define QSV_OPTION_SCENARIO \
125 { "scenario", "A hint to encoder about the scenario for the encoding session", OFFSET(qsv.scenario), AV_OPT_TYPE_INT, { .i64 = MFX_SCENARIO_UNKNOWN }, \
126  MFX_SCENARIO_UNKNOWN, MFX_SCENARIO_REMOTE_GAMING, VE, .unit = "scenario" }, \
127 { "unknown", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_UNKNOWN }, .flags = VE, .unit = "scenario" }, \
128 { "displayremoting", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_DISPLAY_REMOTING }, .flags = VE, .unit = "scenario" }, \
129 { "videoconference", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_VIDEO_CONFERENCE }, .flags = VE, .unit = "scenario" }, \
130 { "archive", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_ARCHIVE }, .flags = VE, .unit = "scenario" }, \
131 { "livestreaming", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_LIVE_STREAMING }, .flags = VE, .unit = "scenario" }, \
132 { "cameracapture", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_CAMERA_CAPTURE }, .flags = VE, .unit = "scenario" }, \
133 { "videosurveillance", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_VIDEO_SURVEILLANCE }, .flags = VE, .unit = "scenario" }, \
134 { "gamestreaming", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_GAME_STREAMING }, .flags = VE, .unit = "scenario" }, \
135 { "remotegaming", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_REMOTE_GAMING }, .flags = VE, .unit = "scenario" },
136 
137 #define QSV_OPTION_AVBR \
138 { "avbr_accuracy", "Accuracy of the AVBR ratecontrol (unit of tenth of percent)", OFFSET(qsv.avbr_accuracy), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, UINT16_MAX, VE }, \
139 { "avbr_convergence", "Convergence of the AVBR ratecontrol (unit of 100 frames)", OFFSET(qsv.avbr_convergence), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, UINT16_MAX, VE },
140 
141 #define QSV_OPTION_SKIP_FRAME \
142 { "skip_frame", "Allow frame skipping", OFFSET(qsv.skip_frame), AV_OPT_TYPE_INT, { .i64 = MFX_SKIPFRAME_NO_SKIP }, \
143  MFX_SKIPFRAME_NO_SKIP, MFX_SKIPFRAME_BRC_ONLY, VE, .unit = "skip_frame" }, \
144 { "no_skip", "Frame skipping is disabled", \
145  0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_NO_SKIP }, .flags = VE, .unit = "skip_frame" }, \
146 { "insert_dummy", "Encoder inserts into bitstream frame where all macroblocks are encoded as skipped", \
147  0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_INSERT_DUMMY }, .flags = VE, .unit = "skip_frame" }, \
148 { "insert_nothing", "Encoder inserts nothing into bitstream", \
149  0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_INSERT_NOTHING }, .flags = VE, .unit = "skip_frame" }, \
150 { "brc_only", "skip_frame metadata indicates the number of missed frames before the current frame", \
151  0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_BRC_ONLY }, .flags = VE, .unit = "skip_frame" },
152 
153 extern const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[];
154 
155 typedef int SetEncodeCtrlCB (AVCodecContext *avctx,
156  const AVFrame *frame, mfxEncodeCtrl* enc_ctrl);
157 typedef struct QSVEncContext {
159 
161 
162  mfxSession session;
164 
168 
169  mfxVideoParam param;
170  mfxFrameAllocRequest req;
171 
172  mfxExtCodingOption extco;
173  mfxExtCodingOption2 extco2;
174  mfxExtCodingOption3 extco3;
175 #if QSV_HAVE_MF
176  mfxExtMultiFrameParam extmfp;
177  mfxExtMultiFrameControl extmfc;
178 #endif
179  mfxExtHEVCTiles exthevctiles;
180  mfxExtVP9Param extvp9param;
181 #if QSV_HAVE_EXT_AV1_PARAM
182  mfxExtAV1TileParam extav1tileparam;
183  mfxExtAV1BitstreamParam extav1bsparam;
184 #endif
185 #if QSV_HAVE_HE
186  mfxExtHyperModeParam exthypermodeparam;
187 #endif
188 #if QSV_HAVE_OPAQUE
189  mfxExtOpaqueSurfaceAlloc opaque_alloc;
190  mfxFrameSurface1 **opaque_surfaces;
192 #endif
193 
194  mfxExtVideoSignalInfo extvsi;
195 
198 
199  mfxExtBuffer **extparam_str;
201 
202  mfxExtBuffer **extparam;
204 
206 
208 
209  mfxVersion ver;
210 
211  int hevc_vps;
212 
213  // options set by the caller
216  int profile;
217  int tier;
218  int preset;
225  int vcm;
226  int rdo;
231  int dblk_idc;
232  int scenario;
233 
236 
237  int aud;
238 
241 
243  int mbbrc;
244  int extbrc;
249  int cavlc;
250 
256 
259  int gpb;
261 
262  int a53_cc;
263 
264 #if QSV_HAVE_MF
265  int mfmode;
266 #endif
271 
272  int co2_idx;
273  int co3_idx;
276  int vp9_idx;
277 
278  int max_qp_i;
279  int min_qp_i;
280  int max_qp_p;
281  int min_qp_p;
282  int max_qp_b;
283  int min_qp_b;
284  // These are used for qp reset
290  // This is used for max_frame_size reset
292  // This is used for gop reset
294  // These are used for intra refresh reset
299  // These are used for max/min qp reset;
300  int old_qmax;
301  int old_qmin;
308  // This is used for low_delay_brc reset
310  // This is used for framerate reset
312  // These are used for bitrate control reset
317  // This is used for SEI Timing reset
320  // This is used for Hyper Encode
321  int dual_gfx;
322 
324 } QSVEncContext;
325 
327 
329  AVPacket *pkt, const AVFrame *frame, int *got_packet);
330 
332 
333 #endif /* AVCODEC_QSVENC_H */
hwconfig.h
QSVEncContext::look_ahead_depth
int look_ahead_depth
Definition: qsvenc.h:223
QSVEncContext::nb_extparam
int nb_extparam
Definition: qsvenc.h:203
QSVEncContext::old_max_qp_i
int old_max_qp_i
Definition: qsvenc.h:302
QSVEncContext::repeat_pps
int repeat_pps
Definition: qsvenc.h:257
QSVEncContext::max_qp_i
int max_qp_i
Definition: qsvenc.h:278
QSVEncContext::p_strategy
int p_strategy
Definition: qsvenc.h:248
QSVEncContext::old_rc_buffer_size
int old_rc_buffer_size
Definition: qsvenc.h:314
ff_qsv_encode
int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext *q, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: qsvenc.c:2640
QSVEncContext::avbr_accuracy
int avbr_accuracy
Definition: qsvenc.h:219
QSVEncContext::extco
mfxExtCodingOption extco
Definition: qsvenc.h:172
QSVEncContext::old_int_ref_type
int old_int_ref_type
Definition: qsvenc.h:295
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:374
QSVEncContext::adaptive_b
int adaptive_b
Definition: qsvenc.h:246
QSVEncContext::max_frame_size
int max_frame_size
Definition: qsvenc.h:227
QSVEncContext::tile_cols
int tile_cols
Definition: qsvenc.h:234
QSVEncContext::packet_size
int packet_size
Definition: qsvenc.h:165
QSVEncContext::adaptive_i
int adaptive_i
Definition: qsvenc.h:245
QSVEncContext::int_ref_qp_delta
int int_ref_qp_delta
Definition: qsvenc.h:253
QSVEncContext::extparam_str
mfxExtBuffer ** extparam_str
Definition: qsvenc.h:199
AVDictionary
Definition: dict.c:34
QSVEncContext::old_int_ref_cycle_size
int old_int_ref_cycle_size
Definition: qsvenc.h:296
QSVEncContext::frames_ctx
QSVFramesContext frames_ctx
Definition: qsvenc.h:207
QSVEncContext::old_gop_size
int old_gop_size
Definition: qsvenc.h:293
QSVEncContext::load_plugins
char * load_plugins
Definition: qsvenc.h:267
QSVEncContext::exthevctiles_idx
int exthevctiles_idx
Definition: qsvenc.h:274
QSVEncContext::extvsi
mfxExtVideoSignalInfo extvsi
Definition: qsvenc.h:194
QSVEncContext::recovery_point_sei
int recovery_point_sei
Definition: qsvenc.h:255
QSVEncContext::hevc_vps
int hevc_vps
Definition: qsvenc.h:211
fifo.h
QSVEncContext::param
mfxVideoParam param
Definition: qsvenc.h:169
QSVEncContext::height_align
int height_align
Definition: qsvenc.h:167
QSVEncContext::profile
int profile
Definition: qsvenc.h:216
QSVEncContext::old_global_quality
int old_global_quality
Definition: qsvenc.h:285
qsv_internal.h
QSVEncContext::extbrc
int extbrc
Definition: qsvenc.h:244
QSVEncContext::min_qp_i
int min_qp_i
Definition: qsvenc.h:279
pkt
AVPacket * pkt
Definition: movenc.c:60
QSVEncContext
Definition: qsvenc.h:157
QSVEncContext::old_pic_timing_sei
int old_pic_timing_sei
Definition: qsvenc.h:318
QSVEncContext::old_int_ref_qp_delta
int old_int_ref_qp_delta
Definition: qsvenc.h:297
QSVEncContext::skip_frame
int skip_frame
Definition: qsvenc.h:319
QSVEncContext::old_framerate
AVRational old_framerate
Definition: qsvenc.h:311
QSVEncContext::max_frame_size_p
int max_frame_size_p
Definition: qsvenc.h:229
QSVEncContext::nb_extparam_str
int nb_extparam_str
Definition: qsvenc.h:200
QSVEncContext::nb_extparam_internal
int nb_extparam_internal
Definition: qsvenc.h:197
QSVEncContext::pic_timing_sei
int pic_timing_sei
Definition: qsvenc.h:221
QSVEncContext::forced_idr
int forced_idr
Definition: qsvenc.h:269
QSVEncContext::exthevctiles
mfxExtHEVCTiles exthevctiles
Definition: qsvenc.h:179
QSVFrame
Definition: qsv_internal.h:79
QSVEncContext::int_ref_cycle_size
int int_ref_cycle_size
Definition: qsvenc.h:252
QSVEncContext::opaque_surfaces
mfxFrameSurface1 ** opaque_surfaces
Definition: qsvenc.h:190
QSVEncContext::dual_gfx
int dual_gfx
Definition: qsvenc.h:321
ff_qsv_enc_hw_configs
const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[]
Definition: qsvenc.c:2760
QSVEncContext::req
mfxFrameAllocRequest req
Definition: qsvenc.h:170
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
QSVEncContext::look_ahead_downsampling
int look_ahead_downsampling
Definition: qsvenc.h:224
QSVEncContext::max_dec_frame_buffering
int max_dec_frame_buffering
Definition: qsvenc.h:240
QSVEncContext::old_max_frame_size
int old_max_frame_size
Definition: qsvenc.h:291
QSVEncContext::mbbrc
int mbbrc
Definition: qsvenc.h:243
QSV_HAVE_MF
#define QSV_HAVE_MF
Definition: qsvenc.h:52
QSVEncContext::preset
int preset
Definition: qsvenc.h:218
QSVEncContext::min_qp_p
int min_qp_p
Definition: qsvenc.h:281
QSVEncContext::extmfp
mfxExtMultiFrameParam extmfp
Definition: qsvenc.h:176
AVFifo
Definition: fifo.c:35
QSVEncContext::avbr_convergence
int avbr_convergence
Definition: qsvenc.h:220
QSVEncContext::old_rc_initial_buffer_occupancy
int old_rc_initial_buffer_occupancy
Definition: qsvenc.h:315
QSVEncContext::opaque_alloc_buf
AVBufferRef * opaque_alloc_buf
Definition: qsvenc.h:191
QSVEncContext::min_qp_b
int min_qp_b
Definition: qsvenc.h:283
QSVEncContext::old_min_qp_b
int old_min_qp_b
Definition: qsvenc.h:307
QSVEncContext::extco2
mfxExtCodingOption2 extco2
Definition: qsvenc.h:173
QSVEncContext::max_qp_b
int max_qp_b
Definition: qsvenc.h:282
QSVEncContext::old_low_delay_brc
int old_low_delay_brc
Definition: qsvenc.h:309
QSVEncContext::co2_idx
int co2_idx
Definition: qsvenc.h:272
QSVEncContext::a53_cc
int a53_cc
Definition: qsvenc.h:262
AVCodecHWConfigInternal
Definition: hwconfig.h:25
QSVEncContext::qsv_params
AVDictionary * qsv_params
Definition: qsvenc.h:323
QSVEncContext::max_slice_size
int max_slice_size
Definition: qsvenc.h:230
QSVEncContext::max_frame_size_i
int max_frame_size_i
Definition: qsvenc.h:228
QSV_HAVE_EXT_AV1_PARAM
#define QSV_HAVE_EXT_AV1_PARAM
Definition: qsvenc.h:42
QSVEncContext::exthypermodeparam_idx
int exthypermodeparam_idx
Definition: qsvenc.h:275
QSVEncContext::mfmode
int mfmode
Definition: qsvenc.h:265
QSVEncContext::work_frames
QSVFrame * work_frames
Definition: qsvenc.h:160
QSVEncContext::old_i_quant_offset
float old_i_quant_offset
Definition: qsvenc.h:287
QSVEncContext::bitrate_limit
int bitrate_limit
Definition: qsvenc.h:242
QSVEncContext::rdo
int rdo
Definition: qsvenc.h:226
QSVEncContext::tier
int tier
Definition: qsvenc.h:217
QSVEncContext::opaque_alloc
mfxExtOpaqueSurfaceAlloc opaque_alloc
Definition: qsvenc.h:189
QSVEncContext::single_sei_nal_unit
int single_sei_nal_unit
Definition: qsvenc.h:239
QSVEncContext::dblk_idc
int dblk_idc
Definition: qsvenc.h:231
hwcontext_qsv.h
QSVEncContext::set_encode_ctrl_cb
SetEncodeCtrlCB * set_encode_ctrl_cb
Definition: qsvenc.h:268
QSVEncContext::internal_qs
QSVSession internal_qs
Definition: qsvenc.h:163
QSVEncContext::old_bit_rate
int old_bit_rate
Definition: qsvenc.h:313
common.h
QSVEncContext::extco3
mfxExtCodingOption3 extco3
Definition: qsvenc.h:174
QSVEncContext::extparam
mfxExtBuffer ** extparam
Definition: qsvenc.h:202
QSVEncContext::async_depth
int async_depth
Definition: qsvenc.h:214
QSV_HAVE_HE
#define QSV_HAVE_HE
Definition: qsvenc.h:53
QSVEncContext::cavlc
int cavlc
Definition: qsvenc.h:249
ff_qsv_enc_init
int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q)
Definition: qsvenc.c:1635
QSVEncContext::old_qmax
int old_qmax
Definition: qsvenc.h:300
QSVEncContext::aud
int aud
Definition: qsvenc.h:237
avcodec.h
QSVEncContext::int_ref_type
int int_ref_type
Definition: qsvenc.h:251
QSVEncContext::old_min_qp_i
int old_min_qp_i
Definition: qsvenc.h:303
QSVEncContext::max_qp_p
int max_qp_p
Definition: qsvenc.h:280
QSVEncContext::look_ahead
int look_ahead
Definition: qsvenc.h:222
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
QSVSession
Definition: qsv_internal.h:105
QSVEncContext::async_fifo
AVFifo * async_fifo
Definition: qsvenc.h:205
QSVEncContext::co3_idx
int co3_idx
Definition: qsvenc.h:273
QSVEncContext::extparam_internal
mfxExtBuffer * extparam_internal[5+(QSV_HAVE_MF *2)+(QSV_HAVE_EXT_AV1_PARAM *2)+QSV_HAVE_HE]
Definition: qsvenc.h:196
QSVEncContext::int_ref_cycle_dist
int int_ref_cycle_dist
Definition: qsvenc.h:254
AVCodecContext
main external API structure.
Definition: avcodec.h:445
QSVEncContext::old_b_quant_factor
float old_b_quant_factor
Definition: qsvenc.h:288
QSVEncContext::b_strategy
int b_strategy
Definition: qsvenc.h:247
QSVEncContext::gpb
int gpb
Definition: qsvenc.h:259
QSVEncContext::vcm
int vcm
Definition: qsvenc.h:225
ff_qsv_enc_close
int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q)
Definition: qsvenc.c:2708
QSVEncContext::idr_interval
int idr_interval
Definition: qsvenc.h:215
QSVEncContext::old_rc_max_rate
int old_rc_max_rate
Definition: qsvenc.h:316
QSVEncContext::ver
mfxVersion ver
Definition: qsvenc.h:209
QSVEncContext::session
mfxSession session
Definition: qsvenc.h:162
avutil.h
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
QSVEncContext::old_qmin
int old_qmin
Definition: qsvenc.h:301
QSVEncContext::old_min_qp_p
int old_min_qp_p
Definition: qsvenc.h:305
SetEncodeCtrlCB
int SetEncodeCtrlCB(AVCodecContext *avctx, const AVFrame *frame, mfxEncodeCtrl *enc_ctrl)
Definition: qsvenc.h:155
QSVFramesContext
Definition: qsv_internal.h:114
AVPacket
This structure stores compressed data.
Definition: packet.h:497
QSVEncContext::extvp9param
mfxExtVP9Param extvp9param
Definition: qsvenc.h:180
QSVEncContext::low_delay_brc
int low_delay_brc
Definition: qsvenc.h:270
QSVEncContext::transform_skip
int transform_skip
Definition: qsvenc.h:260
QSVEncContext::width_align
int width_align
Definition: qsvenc.h:166
QSVEncContext::scenario
int scenario
Definition: qsvenc.h:232
hwcontext.h
QSVEncContext::avctx
AVCodecContext * avctx
Definition: qsvenc.h:158
QSVEncContext::old_i_quant_factor
float old_i_quant_factor
Definition: qsvenc.h:286
QSVEncContext::tile_rows
int tile_rows
Definition: qsvenc.h:235
QSVEncContext::vp9_idx
int vp9_idx
Definition: qsvenc.h:276
QSVEncContext::extmfc
mfxExtMultiFrameControl extmfc
Definition: qsvenc.h:177
QSVEncContext::old_max_qp_b
int old_max_qp_b
Definition: qsvenc.h:306
QSVEncContext::old_b_quant_offset
float old_b_quant_offset
Definition: qsvenc.h:289
QSVEncContext::old_int_ref_cycle_dist
int old_int_ref_cycle_dist
Definition: qsvenc.h:298
QSVEncContext::low_power
int low_power
Definition: qsvenc.h:258
QSVEncContext::old_max_qp_p
int old_max_qp_p
Definition: qsvenc.h:304