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 #else
49 #define QSV_HAVE_AVBR 0
50 #define QSV_HAVE_VCM 0
51 #define QSV_HAVE_MF !QSV_ONEVPL
52 #endif
53 
54 #define QSV_COMMON_OPTS \
55 { "async_depth", "Maximum processing parallelism", OFFSET(qsv.async_depth), AV_OPT_TYPE_INT, { .i64 = ASYNC_DEPTH_DEFAULT }, 1, INT_MAX, VE }, \
56 { "preset", NULL, OFFSET(qsv.preset), AV_OPT_TYPE_INT, { .i64 = MFX_TARGETUSAGE_UNKNOWN }, MFX_TARGETUSAGE_UNKNOWN, MFX_TARGETUSAGE_BEST_SPEED, VE, "preset" }, \
57 { "veryfast", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BEST_SPEED }, INT_MIN, INT_MAX, VE, "preset" }, \
58 { "faster", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_6 }, INT_MIN, INT_MAX, VE, "preset" }, \
59 { "fast", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_5 }, INT_MIN, INT_MAX, VE, "preset" }, \
60 { "medium", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BALANCED }, INT_MIN, INT_MAX, VE, "preset" }, \
61 { "slow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_3 }, INT_MIN, INT_MAX, VE, "preset" }, \
62 { "slower", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_2 }, INT_MIN, INT_MAX, VE, "preset" }, \
63 { "veryslow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_TARGETUSAGE_BEST_QUALITY }, INT_MIN, INT_MAX, VE, "preset" }, \
64 { "forced_idr", "Forcing I frames as IDR frames", OFFSET(qsv.forced_idr), AV_OPT_TYPE_BOOL,{ .i64 = 0 }, 0, 1, VE }, \
65 { "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},
66 
67 #define QSV_OPTION_RDO \
68 { "rdo", "Enable rate distortion optimization", OFFSET(qsv.rdo), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
69 
70 #define QSV_OPTION_MAX_FRAME_SIZE \
71 { "max_frame_size", "Maximum encoded frame size in bytes", OFFSET(qsv.max_frame_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE }, \
72 { "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 }, \
73 { "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 },
74 
75 #define QSV_OPTION_MAX_SLICE_SIZE \
76 { "max_slice_size", "Maximum encoded slice size in bytes", OFFSET(qsv.max_slice_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
77 
78 #define QSV_OPTION_BITRATE_LIMIT \
79 { "bitrate_limit", "Toggle bitrate limitations", OFFSET(qsv.bitrate_limit), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
80 
81 #define QSV_OPTION_MBBRC \
82 { "mbbrc", "MB level bitrate control", OFFSET(qsv.mbbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
83 
84 #define QSV_OPTION_EXTBRC \
85 { "extbrc", "Extended bitrate control", OFFSET(qsv.extbrc), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
86 
87 #define QSV_OPTION_ADAPTIVE_I \
88 { "adaptive_i", "Adaptive I-frame placement", OFFSET(qsv.adaptive_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
89 
90 #define QSV_OPTION_ADAPTIVE_B \
91 { "adaptive_b", "Adaptive B-frame placement", OFFSET(qsv.adaptive_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
92 
93 #define QSV_OPTION_P_STRATEGY \
94 { "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 },
95 
96 #define QSV_OPTION_B_STRATEGY \
97 { "b_strategy", "Strategy to choose between I/P/B-frames", OFFSET(qsv.b_strategy), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
98 
99 #define QSV_OPTION_DBLK_IDC \
100 { "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},
101 
102 #define QSV_OPTION_LOW_DELAY_BRC \
103 { "low_delay_brc", "Allow to strictly obey avg frame size", OFFSET(qsv.low_delay_brc), AV_OPT_TYPE_BOOL,{ .i64 = -1 }, -1, 1, VE },
104 
105 #define QSV_OPTION_MAX_MIN_QP \
106 { "max_qp_i", "Maximum video quantizer scale for I frame", OFFSET(qsv.max_qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
107 { "min_qp_i", "Minimum video quantizer scale for I frame", OFFSET(qsv.min_qp_i), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
108 { "max_qp_p", "Maximum video quantizer scale for P frame", OFFSET(qsv.max_qp_p), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
109 { "min_qp_p", "Minimum video quantizer scale for P frame", OFFSET(qsv.min_qp_p), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
110 { "max_qp_b", "Maximum video quantizer scale for B frame", OFFSET(qsv.max_qp_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE}, \
111 { "min_qp_b", "Minimum video quantizer scale for B frame", OFFSET(qsv.min_qp_b), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 51, VE},
112 
113 #define QSV_OPTION_SCENARIO \
114 { "scenario", "A hint to encoder about the scenario for the encoding session", OFFSET(qsv.scenario), AV_OPT_TYPE_INT, { .i64 = MFX_SCENARIO_UNKNOWN }, \
115  MFX_SCENARIO_UNKNOWN, MFX_SCENARIO_REMOTE_GAMING, VE, "scenario" }, \
116 { "unknown", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_UNKNOWN }, .flags = VE, "scenario" }, \
117 { "displayremoting", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_DISPLAY_REMOTING }, .flags = VE, "scenario" }, \
118 { "videoconference", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_VIDEO_CONFERENCE }, .flags = VE, "scenario" }, \
119 { "archive", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_ARCHIVE }, .flags = VE, "scenario" }, \
120 { "livestreaming", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_LIVE_STREAMING }, .flags = VE, "scenario" }, \
121 { "cameracapture", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_CAMERA_CAPTURE }, .flags = VE, "scenario" }, \
122 { "videosurveillance", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_VIDEO_SURVEILLANCE }, .flags = VE, "scenario" }, \
123 { "gamestreaming", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_GAME_STREAMING }, .flags = VE, "scenario" }, \
124 { "remotegaming", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCENARIO_REMOTE_GAMING }, .flags = VE, "scenario" },
125 
126 #define QSV_OPTION_AVBR \
127 { "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 }, \
128 { "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 },
129 
130 #define QSV_OPTION_SKIP_FRAME \
131 { "skip_frame", "Allow frame skipping", OFFSET(qsv.skip_frame), AV_OPT_TYPE_INT, { .i64 = MFX_SKIPFRAME_NO_SKIP }, \
132  MFX_SKIPFRAME_NO_SKIP, MFX_SKIPFRAME_BRC_ONLY, VE, "skip_frame" }, \
133 { "no_skip", "Frame skipping is disabled", \
134  0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_NO_SKIP }, .flags = VE, "skip_frame" }, \
135 { "insert_dummy", "Encoder inserts into bitstream frame where all macroblocks are encoded as skipped", \
136  0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_INSERT_DUMMY }, .flags = VE, "skip_frame" }, \
137 { "insert_nothing", "Encoder inserts nothing into bitstream", \
138  0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_INSERT_NOTHING }, .flags = VE, "skip_frame" }, \
139 { "brc_only", "skip_frame metadata indicates the number of missed frames before the current frame", \
140  0, AV_OPT_TYPE_CONST, { .i64 = MFX_SKIPFRAME_BRC_ONLY }, .flags = VE, "skip_frame" },
141 
142 extern const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[];
143 
144 typedef int SetEncodeCtrlCB (AVCodecContext *avctx,
145  const AVFrame *frame, mfxEncodeCtrl* enc_ctrl);
146 typedef struct QSVEncContext {
148 
150 
151  mfxSession session;
153 
157 
158  mfxVideoParam param;
159  mfxFrameAllocRequest req;
160 
161  mfxExtCodingOption extco;
162  mfxExtCodingOption2 extco2;
163  mfxExtCodingOption3 extco3;
164 #if QSV_HAVE_MF
165  mfxExtMultiFrameParam extmfp;
166  mfxExtMultiFrameControl extmfc;
167 #endif
168  mfxExtHEVCTiles exthevctiles;
169  mfxExtVP9Param extvp9param;
170 #if QSV_HAVE_EXT_AV1_PARAM
171  mfxExtAV1TileParam extav1tileparam;
172  mfxExtAV1BitstreamParam extav1bsparam;
173 #endif
174 
175 #if QSV_HAVE_OPAQUE
176  mfxExtOpaqueSurfaceAlloc opaque_alloc;
177  mfxFrameSurface1 **opaque_surfaces;
179 #endif
180 
181  mfxExtVideoSignalInfo extvsi;
182 
183  mfxExtBuffer *extparam_internal[5 + (QSV_HAVE_MF * 2) + QSV_HAVE_EXT_AV1_PARAM * 2];
185 
186  mfxExtBuffer **extparam;
187 
189 
191 
192  mfxVersion ver;
193 
194  int hevc_vps;
195 
196  // options set by the caller
199  int profile;
200  int tier;
201  int preset;
208  int vcm;
209  int rdo;
214  int dblk_idc;
215  int scenario;
216 
219 
220  int aud;
221 
224 
226  int mbbrc;
227  int extbrc;
232  int cavlc;
233 
239 
242  int gpb;
244 
245  int a53_cc;
246 
247 #if QSV_HAVE_MF
248  int mfmode;
249 #endif
254 
255  int co2_idx;
256  int co3_idx;
258  int vp9_idx;
259 
260  int max_qp_i;
261  int min_qp_i;
262  int max_qp_p;
263  int min_qp_p;
264  int max_qp_b;
265  int min_qp_b;
266  // These are used for qp reset
272  // This is used for max_frame_size reset
274  // This is used for gop reset
276  // These are used for intra refresh reset
281  // These are used for max/min qp reset;
282  int old_qmax;
283  int old_qmin;
290  // This is used for low_delay_brc reset
292  // This is used for framerate reset
294  // These are used for bitrate control reset
299  // This is used for SEI Timing reset
302 } QSVEncContext;
303 
305 
307  AVPacket *pkt, const AVFrame *frame, int *got_packet);
308 
310 
311 #endif /* AVCODEC_QSVENC_H */
hwconfig.h
QSVEncContext::look_ahead_depth
int look_ahead_depth
Definition: qsvenc.h:206
QSVEncContext::old_max_qp_i
int old_max_qp_i
Definition: qsvenc.h:284
QSVEncContext::repeat_pps
int repeat_pps
Definition: qsvenc.h:240
QSVEncContext::max_qp_i
int max_qp_i
Definition: qsvenc.h:260
QSVEncContext::p_strategy
int p_strategy
Definition: qsvenc.h:231
QSVEncContext::old_rc_buffer_size
int old_rc_buffer_size
Definition: qsvenc.h:296
ff_qsv_encode
int ff_qsv_encode(AVCodecContext *avctx, QSVEncContext *q, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: qsvenc.c:2375
QSVEncContext::avbr_accuracy
int avbr_accuracy
Definition: qsvenc.h:202
QSVEncContext::extco
mfxExtCodingOption extco
Definition: qsvenc.h:161
QSVEncContext::old_int_ref_type
int old_int_ref_type
Definition: qsvenc.h:277
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:325
QSVEncContext::adaptive_b
int adaptive_b
Definition: qsvenc.h:229
QSVEncContext::max_frame_size
int max_frame_size
Definition: qsvenc.h:210
QSVEncContext::tile_cols
int tile_cols
Definition: qsvenc.h:217
QSVEncContext::packet_size
int packet_size
Definition: qsvenc.h:154
QSVEncContext::adaptive_i
int adaptive_i
Definition: qsvenc.h:228
QSVEncContext::int_ref_qp_delta
int int_ref_qp_delta
Definition: qsvenc.h:236
QSVEncContext::old_int_ref_cycle_size
int old_int_ref_cycle_size
Definition: qsvenc.h:278
QSVEncContext::frames_ctx
QSVFramesContext frames_ctx
Definition: qsvenc.h:190
QSVEncContext::old_gop_size
int old_gop_size
Definition: qsvenc.h:275
QSVEncContext::load_plugins
char * load_plugins
Definition: qsvenc.h:250
QSVEncContext::exthevctiles_idx
int exthevctiles_idx
Definition: qsvenc.h:257
QSVEncContext::extvsi
mfxExtVideoSignalInfo extvsi
Definition: qsvenc.h:181
QSVEncContext::recovery_point_sei
int recovery_point_sei
Definition: qsvenc.h:238
QSVEncContext::hevc_vps
int hevc_vps
Definition: qsvenc.h:194
fifo.h
QSVEncContext::param
mfxVideoParam param
Definition: qsvenc.h:158
QSVEncContext::height_align
int height_align
Definition: qsvenc.h:156
QSVEncContext::profile
int profile
Definition: qsvenc.h:199
QSVEncContext::old_global_quality
int old_global_quality
Definition: qsvenc.h:267
qsv_internal.h
QSVEncContext::extparam_internal
mfxExtBuffer * extparam_internal[5+(QSV_HAVE_MF *2)+QSV_HAVE_EXT_AV1_PARAM *2]
Definition: qsvenc.h:183
QSVEncContext::extbrc
int extbrc
Definition: qsvenc.h:227
QSVEncContext::min_qp_i
int min_qp_i
Definition: qsvenc.h:261
pkt
AVPacket * pkt
Definition: movenc.c:59
QSVEncContext
Definition: qsvenc.h:146
QSVEncContext::old_pic_timing_sei
int old_pic_timing_sei
Definition: qsvenc.h:300
QSVEncContext::old_int_ref_qp_delta
int old_int_ref_qp_delta
Definition: qsvenc.h:279
QSVEncContext::skip_frame
int skip_frame
Definition: qsvenc.h:301
QSVEncContext::old_framerate
AVRational old_framerate
Definition: qsvenc.h:293
QSVEncContext::max_frame_size_p
int max_frame_size_p
Definition: qsvenc.h:212
QSVEncContext::nb_extparam_internal
int nb_extparam_internal
Definition: qsvenc.h:184
QSVEncContext::pic_timing_sei
int pic_timing_sei
Definition: qsvenc.h:204
QSVEncContext::forced_idr
int forced_idr
Definition: qsvenc.h:252
QSVEncContext::exthevctiles
mfxExtHEVCTiles exthevctiles
Definition: qsvenc.h:168
QSVFrame
Definition: qsv_internal.h:80
QSVEncContext::int_ref_cycle_size
int int_ref_cycle_size
Definition: qsvenc.h:235
QSVEncContext::opaque_surfaces
mfxFrameSurface1 ** opaque_surfaces
Definition: qsvenc.h:177
ff_qsv_enc_hw_configs
const AVCodecHWConfigInternal *const ff_qsv_enc_hw_configs[]
Definition: qsvenc.c:2489
QSVEncContext::req
mfxFrameAllocRequest req
Definition: qsvenc.h:159
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
QSVEncContext::look_ahead_downsampling
int look_ahead_downsampling
Definition: qsvenc.h:207
QSVEncContext::max_dec_frame_buffering
int max_dec_frame_buffering
Definition: qsvenc.h:223
QSVEncContext::old_max_frame_size
int old_max_frame_size
Definition: qsvenc.h:273
QSVEncContext::mbbrc
int mbbrc
Definition: qsvenc.h:226
QSV_HAVE_MF
#define QSV_HAVE_MF
Definition: qsvenc.h:51
QSVEncContext::preset
int preset
Definition: qsvenc.h:201
QSVEncContext::min_qp_p
int min_qp_p
Definition: qsvenc.h:263
QSVEncContext::extmfp
mfxExtMultiFrameParam extmfp
Definition: qsvenc.h:165
AVFifo
Definition: fifo.c:35
QSVEncContext::avbr_convergence
int avbr_convergence
Definition: qsvenc.h:203
QSVEncContext::old_rc_initial_buffer_occupancy
int old_rc_initial_buffer_occupancy
Definition: qsvenc.h:297
QSVEncContext::opaque_alloc_buf
AVBufferRef * opaque_alloc_buf
Definition: qsvenc.h:178
QSVEncContext::min_qp_b
int min_qp_b
Definition: qsvenc.h:265
QSVEncContext::old_min_qp_b
int old_min_qp_b
Definition: qsvenc.h:289
QSVEncContext::extco2
mfxExtCodingOption2 extco2
Definition: qsvenc.h:162
QSVEncContext::max_qp_b
int max_qp_b
Definition: qsvenc.h:264
QSVEncContext::old_low_delay_brc
int old_low_delay_brc
Definition: qsvenc.h:291
QSVEncContext::co2_idx
int co2_idx
Definition: qsvenc.h:255
QSVEncContext::a53_cc
int a53_cc
Definition: qsvenc.h:245
AVCodecHWConfigInternal
Definition: hwconfig.h:29
QSVEncContext::max_slice_size
int max_slice_size
Definition: qsvenc.h:213
QSVEncContext::max_frame_size_i
int max_frame_size_i
Definition: qsvenc.h:211
QSV_HAVE_EXT_AV1_PARAM
#define QSV_HAVE_EXT_AV1_PARAM
Definition: qsvenc.h:42
QSVEncContext::mfmode
int mfmode
Definition: qsvenc.h:248
QSVEncContext::work_frames
QSVFrame * work_frames
Definition: qsvenc.h:149
QSVEncContext::old_i_quant_offset
float old_i_quant_offset
Definition: qsvenc.h:269
QSVEncContext::bitrate_limit
int bitrate_limit
Definition: qsvenc.h:225
QSVEncContext::rdo
int rdo
Definition: qsvenc.h:209
QSVEncContext::tier
int tier
Definition: qsvenc.h:200
QSVEncContext::opaque_alloc
mfxExtOpaqueSurfaceAlloc opaque_alloc
Definition: qsvenc.h:176
QSVEncContext::single_sei_nal_unit
int single_sei_nal_unit
Definition: qsvenc.h:222
QSVEncContext::dblk_idc
int dblk_idc
Definition: qsvenc.h:214
hwcontext_qsv.h
QSVEncContext::set_encode_ctrl_cb
SetEncodeCtrlCB * set_encode_ctrl_cb
Definition: qsvenc.h:251
QSVEncContext::internal_qs
QSVSession internal_qs
Definition: qsvenc.h:152
QSVEncContext::old_bit_rate
int old_bit_rate
Definition: qsvenc.h:295
common.h
QSVEncContext::extco3
mfxExtCodingOption3 extco3
Definition: qsvenc.h:163
QSVEncContext::extparam
mfxExtBuffer ** extparam
Definition: qsvenc.h:186
QSVEncContext::async_depth
int async_depth
Definition: qsvenc.h:197
QSVEncContext::cavlc
int cavlc
Definition: qsvenc.h:232
ff_qsv_enc_init
int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q)
Definition: qsvenc.c:1501
QSVEncContext::old_qmax
int old_qmax
Definition: qsvenc.h:282
QSVEncContext::aud
int aud
Definition: qsvenc.h:220
avcodec.h
QSVEncContext::int_ref_type
int int_ref_type
Definition: qsvenc.h:234
QSVEncContext::old_min_qp_i
int old_min_qp_i
Definition: qsvenc.h:285
QSVEncContext::max_qp_p
int max_qp_p
Definition: qsvenc.h:262
QSVEncContext::look_ahead
int look_ahead
Definition: qsvenc.h:205
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:106
QSVEncContext::async_fifo
AVFifo * async_fifo
Definition: qsvenc.h:188
QSVEncContext::co3_idx
int co3_idx
Definition: qsvenc.h:256
QSVEncContext::int_ref_cycle_dist
int int_ref_cycle_dist
Definition: qsvenc.h:237
AVCodecContext
main external API structure.
Definition: avcodec.h:398
QSVEncContext::old_b_quant_factor
float old_b_quant_factor
Definition: qsvenc.h:270
QSVEncContext::b_strategy
int b_strategy
Definition: qsvenc.h:230
QSVEncContext::gpb
int gpb
Definition: qsvenc.h:242
QSVEncContext::vcm
int vcm
Definition: qsvenc.h:208
ff_qsv_enc_close
int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q)
Definition: qsvenc.c:2441
QSVEncContext::idr_interval
int idr_interval
Definition: qsvenc.h:198
QSVEncContext::old_rc_max_rate
int old_rc_max_rate
Definition: qsvenc.h:298
QSVEncContext::ver
mfxVersion ver
Definition: qsvenc.h:192
QSVEncContext::session
mfxSession session
Definition: qsvenc.h:151
avutil.h
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
QSVEncContext::old_qmin
int old_qmin
Definition: qsvenc.h:283
QSVEncContext::old_min_qp_p
int old_min_qp_p
Definition: qsvenc.h:287
SetEncodeCtrlCB
int SetEncodeCtrlCB(AVCodecContext *avctx, const AVFrame *frame, mfxEncodeCtrl *enc_ctrl)
Definition: qsvenc.h:144
QSVFramesContext
Definition: qsv_internal.h:115
AVPacket
This structure stores compressed data.
Definition: packet.h:351
QSVEncContext::extvp9param
mfxExtVP9Param extvp9param
Definition: qsvenc.h:169
QSVEncContext::low_delay_brc
int low_delay_brc
Definition: qsvenc.h:253
QSVEncContext::transform_skip
int transform_skip
Definition: qsvenc.h:243
QSVEncContext::width_align
int width_align
Definition: qsvenc.h:155
QSVEncContext::scenario
int scenario
Definition: qsvenc.h:215
hwcontext.h
QSVEncContext::avctx
AVCodecContext * avctx
Definition: qsvenc.h:147
QSVEncContext::old_i_quant_factor
float old_i_quant_factor
Definition: qsvenc.h:268
QSVEncContext::tile_rows
int tile_rows
Definition: qsvenc.h:218
QSVEncContext::vp9_idx
int vp9_idx
Definition: qsvenc.h:258
QSVEncContext::extmfc
mfxExtMultiFrameControl extmfc
Definition: qsvenc.h:166
QSVEncContext::old_max_qp_b
int old_max_qp_b
Definition: qsvenc.h:288
QSVEncContext::old_b_quant_offset
float old_b_quant_offset
Definition: qsvenc.h:271
QSVEncContext::old_int_ref_cycle_dist
int old_int_ref_cycle_dist
Definition: qsvenc.h:280
QSVEncContext::low_power
int low_power
Definition: qsvenc.h:241
QSVEncContext::old_max_qp_p
int old_max_qp_p
Definition: qsvenc.h:286