FFmpeg
d3d12va_encode.h
Go to the documentation of this file.
1 /*
2  * Direct3D 12 HW acceleration video encoder
3  *
4  * Copyright (c) 2024 Intel Corporation
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_D3D12VA_ENCODE_H
24 #define AVCODEC_D3D12VA_ENCODE_H
25 
26 #include "libavutil/fifo.h"
27 #include "libavutil/hwcontext.h"
30 #include "avcodec.h"
31 #include "internal.h"
32 #include "hwconfig.h"
33 #include "hw_base_encode.h"
34 
35 struct D3D12VAEncodeType;
36 
38 
39 #define MAX_PARAM_BUFFER_SIZE 4096
40 #define D3D12VA_VIDEO_ENC_ASYNC_DEPTH 8
41 
42 typedef struct D3D12VAEncodePicture {
45 
48 
50  ID3D12Resource *output_buffer;
51 
52  ID3D12Resource *encoded_metadata;
53  ID3D12Resource *resolved_metadata;
54 
56 
57  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA pic_ctl;
58 
60 
61  // ROI delta QP map (void* to support both INT8 for H.264/HEVC and INT16 for AV1)
62  void *qp_map;
65 
66 typedef struct D3D12VAEncodeProfile {
67  /**
68  * lavc profile value (AV_PROFILE_*).
69  */
71 
72  /**
73  * Supported bit depth.
74  */
75  int depth;
76 
77  /**
78  * Number of components.
79  */
81 
82  /**
83  * Chroma subsampling in width dimension.
84  */
86 
87  /**
88  * Chroma subsampling in height dimension.
89  */
91 
92  /**
93  * D3D12 profile value.
94  */
95  D3D12_VIDEO_ENCODER_PROFILE_DESC d3d12_profile;
97 
98 enum {
105 };
106 
107 
108 typedef struct D3D12VAEncodeRCMode {
109  /**
110  * Mode from above enum (RC_MODE_*).
111  */
112  int mode;
113 
114  /**
115  * Name.
116  *
117  */
118  const char *name;
119 
120  /**
121  * Uses bitrate parameters.
122  *
123  */
124  int bitrate;
125 
126  /**
127  * Supports maxrate distinct from bitrate.
128  *
129  */
130  int maxrate;
131 
132  /**
133  * Uses quality value.
134  *
135  */
136  int quality;
137 
138  /**
139  * Supports HRD/VBV parameters.
140  *
141  */
142  int hrd;
143 
144  /**
145  * D3D12 mode value.
146  */
147  D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE d3d12_mode;
149 
150 typedef struct D3D12VAEncodeContext {
152 
153  /**
154  * Codec-specific hooks.
155  */
156  const struct D3D12VAEncodeType *codec;
157 
158  /**
159  * Max frame size
160  */
162 
163  /**
164  * Explicitly set RC mode (otherwise attempt to pick from
165  * available modes).
166  */
168 
169  /**
170  * Explicitly-set QP, for use with the "qp" options.
171  * (Forces CQP mode when set, overriding everything else.)
172  */
174 
175  /**
176  * RC quality level - meaning depends on codec and RC mode.
177  * In CQP mode this sets the fixed quantiser value.
178  */
180 
181  /**
182  * Chosen encoding profile details.
183  */
185 
187 
188  /**
189  * ID3D12Device3 interface.
190  */
191  ID3D12Device3 *device3;
192 
193  /**
194  * ID3D12VideoDevice3 interface.
195  */
196  ID3D12VideoDevice3 *video_device3;
197 
198  /**
199  * Pool of (reusable) bitstream output buffers.
200  */
202 
203  /**
204  * Flag indicates if the HW is texture array mode.
205  */
207 
208  /**
209  * The number of planes in the input DXGI FORMAT.
210  */
212 
213  /**
214  * D3D12 video encoder.
215  */
217 
218  ID3D12VideoEncoder *encoder;
219 
220  /**
221  * D3D12 video encoder heap.
222  */
223  ID3D12VideoEncoderHeap *encoder_heap;
224 
225  /**
226  * A cached queue for reusing the D3D12 command allocators.
227  *
228  * @see https://learn.microsoft.com/en-us/windows/win32/direct3d12/recording-command-lists-and-bundles#id3d12commandallocator
229  */
231 
232  /**
233  * D3D12 command queue.
234  */
235  ID3D12CommandQueue *command_queue;
236 
237  /**
238  * D3D12 video encode command list.
239  */
240  ID3D12VideoEncodeCommandList2 *command_list;
241 
242  /**
243  * The sync context used to sync command queue.
244  */
246 
247  /**
248  * The bi_not_empty feature.
249  */
251 
252  /**
253  * D3D12_FEATURE structures.
254  */
255  D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS req;
256 
257  D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS res_limits;
258 
259  /**
260  * D3D12_VIDEO_ENCODER structures.
261  */
262  D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC resolution;
263 
264  D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION codec_conf;
265 
266  D3D12_VIDEO_ENCODER_RATE_CONTROL rc;
267 
268  D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE gop;
269 
270  D3D12_VIDEO_ENCODER_LEVEL_SETTING level;
271 
272  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA subregions_layout;
273 
274  /**
275  * Intra refresh configuration
276  */
277  D3D12_VIDEO_ENCODER_INTRA_REFRESH intra_refresh;
278 
279  /**
280  * Current frame index within intra refresh cycle
281  */
283 
284  /**
285  * Motion estimation precision mode
286  */
287  D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE me_precision;
288 
289  /**
290  * QP map region pixel size (block size for QP map)
291  */
294 
295 typedef struct D3D12VAEncodeType {
296  /**
297  * List of supported profiles.
298  */
300 
301  /**
302  * D3D12 codec name.
303  */
304  D3D12_VIDEO_ENCODER_CODEC d3d12_codec;
305 
306  /**
307  * Codec feature flags.
308  */
309  int flags;
310 
311  /**
312  * Default quality for this codec - used as quantiser or RC quality
313  * factor depending on RC mode.
314  */
316 
317  /**
318  * Query codec configuration and determine encode parameters like
319  * block sizes for surface alignment and slices. If not set, assume
320  * that all blocks are 16x16 and that surfaces should be aligned to match
321  * this.
322  */
324 
325  /**
326  * Perform any extra codec-specific configuration.
327  */
328  int (*configure)(AVCodecContext *avctx);
329 
330  /**
331  * Set codec-specific level setting.
332  */
333  int (*set_level)(AVCodecContext *avctx);
334 
335  /**
336  * Set codec-specific tile setting.
337  */
338  int (*set_tile)(AVCodecContext *avctx);
339 
340  /**
341  * The size of any private data structure associated with each
342  * picture (can be zero if not required).
343  */
345 
346  /**
347  * Fill the corresponding parameters.
348  */
350 
352  FFHWBaseEncodePicture *base_pic);
353 
355 
356  /**
357  * Write the packed header data to the provided buffer.
358  */
360  char *data, size_t *data_len);
361 
362  /**
363  * Fill the coded data into AVPacket
364  */
368 
370 
373 
374 #define D3D12VA_ENCODE_INTRA_REFRESH_MODE(name, mode, desc) \
375  { #name, desc, 0, AV_OPT_TYPE_CONST, { .i64 = D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_ ## mode }, \
376  0, 0, FLAGS, .unit = "intra_refresh_mode" }
377 
378 #if CONFIG_D3D12VA_ME_PRECISION_EIGHTH_PIXEL
379 #define D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAX_VALUE D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_EIGHTH_PIXEL
380 #else
381 #define D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAX_VALUE D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_QUARTER_PIXEL
382 #endif
383 
384 #define D3D12VA_ENCODE_ME_PRECISION_MODE(name, mode, desc) \
385  { #name, #desc " pixel precision", 0, AV_OPT_TYPE_CONST, \
386  { .i64 = D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_ ## mode }, \
387  0, 0, FLAGS, .unit = "me_precision" }
388 
389 #if CONFIG_D3D12VA_ME_PRECISION_EIGHTH_PIXEL
390 #define FFPP_D3D12VA_ME_PRECISION_EIGHTH_PIXEL \
391  , D3D12VA_ENCODE_ME_PRECISION_MODE(eighth_pixel, EIGHTH_PIXEL, Eighth)
392 #else
393 #define FFPP_D3D12VA_ME_PRECISION_EIGHTH_PIXEL
394 #endif
395 
396 #define D3D12VA_ENCODE_COMMON_OPTIONS \
397  { "max_frame_size", \
398  "Maximum frame size (in bytes)",\
399  OFFSET(common.max_frame_size), AV_OPT_TYPE_INT, \
400  { .i64 = 0 }, 0, INT_MAX / 8, FLAGS }, \
401  { "intra_refresh_mode", \
402  "Set intra refresh mode", \
403  OFFSET(common.intra_refresh.Mode), AV_OPT_TYPE_INT, \
404  { .i64 = D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE }, \
405  D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE, \
406  D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_ROW_BASED, FLAGS, .unit = "intra_refresh_mode" }, \
407  D3D12VA_ENCODE_INTRA_REFRESH_MODE(none, NONE, "Disable intra refresh"), \
408  D3D12VA_ENCODE_INTRA_REFRESH_MODE(row_based, ROW_BASED, "Row-based intra refresh"), \
409  { "intra_refresh_duration", \
410  "Number of frames over which to spread intra refresh (0 = GOP size)", \
411  OFFSET(common.intra_refresh.IntraRefreshDuration), AV_OPT_TYPE_INT, \
412  { .i64 = 0 }, 0, INT_MAX, FLAGS }, \
413  { "me_precision", "Motion estimation precision mode", \
414  OFFSET(common.me_precision), AV_OPT_TYPE_INT, \
415  { .i64 = D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAXIMUM }, \
416  D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAXIMUM, \
417  D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAX_VALUE, \
418  FLAGS, .unit = "me_precision" }, \
419  { "maximum", "Maximum (best quality, slowest)", 0, AV_OPT_TYPE_CONST, \
420  { .i64 = D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAXIMUM }, \
421  0, 0, FLAGS, .unit = "me_precision" }, \
422  D3D12VA_ENCODE_ME_PRECISION_MODE(full_pixel, FULL_PIXEL, Full), \
423  D3D12VA_ENCODE_ME_PRECISION_MODE(half_pixel, HALF_PIXEL, Half), \
424  D3D12VA_ENCODE_ME_PRECISION_MODE(quarter_pixel, QUARTER_PIXEL, Quarter) \
425  FFPP_D3D12VA_ME_PRECISION_EIGHTH_PIXEL
426 
427 #define D3D12VA_ENCODE_RC_MODE(name, desc) \
428  { #name, desc, 0, AV_OPT_TYPE_CONST, { .i64 = RC_MODE_ ## name }, \
429  0, 0, FLAGS, .unit = "rc_mode" }
430 #define D3D12VA_ENCODE_RC_OPTIONS \
431  { "rc_mode",\
432  "Set rate control mode", \
433  OFFSET(common.explicit_rc_mode), AV_OPT_TYPE_INT, \
434  { .i64 = RC_MODE_AUTO }, RC_MODE_AUTO, RC_MODE_MAX, FLAGS, .unit = "rc_mode" }, \
435  { "auto", "Choose mode automatically based on other parameters", \
436  0, AV_OPT_TYPE_CONST, { .i64 = RC_MODE_AUTO }, 0, 0, FLAGS, .unit = "rc_mode" }, \
437  D3D12VA_ENCODE_RC_MODE(CQP, "Constant-quality"), \
438  D3D12VA_ENCODE_RC_MODE(CBR, "Constant-bitrate"), \
439  D3D12VA_ENCODE_RC_MODE(VBR, "Variable-bitrate"), \
440  D3D12VA_ENCODE_RC_MODE(QVBR, "Quality-defined variable-bitrate")
441 
442 #endif /* AVCODEC_D3D12VA_ENCODE_H */
hwconfig.h
D3D12VAEncodeContext::qp_map_region_size
int qp_map_region_size
QP map region pixel size (block size for QP map)
Definition: d3d12va_encode.h:292
D3D12VAEncodeRCMode::mode
int mode
Mode from above enum (RC_MODE_*).
Definition: d3d12va_encode.h:112
D3D12VAEncodeType::init_sequence_params
int(* init_sequence_params)(AVCodecContext *avctx)
Fill the corresponding parameters.
Definition: d3d12va_encode.h:349
D3D12VAEncodeProfile::d3d12_profile
D3D12_VIDEO_ENCODER_PROFILE_DESC d3d12_profile
D3D12 profile value.
Definition: d3d12va_encode.h:95
D3D12VAEncodeType::d3d12_codec
D3D12_VIDEO_ENCODER_CODEC d3d12_codec
D3D12 codec name.
Definition: d3d12va_encode.h:304
AVBufferPool
The buffer pool.
Definition: buffer_internal.h:88
RC_MODE_AUTO
@ RC_MODE_AUTO
Definition: d3d12va_encode.h:99
D3D12VAEncodeType::init_picture_params
int(* init_picture_params)(AVCodecContext *avctx, FFHWBaseEncodePicture *base_pic)
Definition: d3d12va_encode.h:351
D3D12VAEncodeContext::encoder_heap
ID3D12VideoEncoderHeap * encoder_heap
D3D12 video encoder heap.
Definition: d3d12va_encode.h:223
D3D12VAEncodePicture::input_surface
AVD3D12VAFrame * input_surface
Definition: d3d12va_encode.h:46
D3D12VAEncodeContext::req
D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS req
D3D12_FEATURE structures.
Definition: d3d12va_encode.h:255
internal.h
D3D12VAEncodeContext::plane_count
int plane_count
The number of planes in the input DXGI FORMAT.
Definition: d3d12va_encode.h:211
D3D12VAEncodeContext::explicit_rc_mode
int explicit_rc_mode
Explicitly set RC mode (otherwise attempt to pick from available modes).
Definition: d3d12va_encode.h:167
data
const char data[16]
Definition: mxf.c:149
D3D12VAEncodePicture::qp_map_size
int qp_map_size
Definition: d3d12va_encode.h:63
D3D12VAEncodeRCMode::d3d12_mode
D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE d3d12_mode
D3D12 mode value.
Definition: d3d12va_encode.h:147
D3D12VAEncodeContext::encoder_ref
AVBufferRef * encoder_ref
D3D12 video encoder.
Definition: d3d12va_encode.h:216
RC_MODE_MAX
@ RC_MODE_MAX
Definition: d3d12va_encode.h:104
D3D12VAEncodeRCMode::maxrate
int maxrate
Supports maxrate distinct from bitrate.
Definition: d3d12va_encode.h:130
D3D12VAEncodeContext::encoder
ID3D12VideoEncoder * encoder
Definition: d3d12va_encode.h:218
D3D12VAEncodeType::configure
int(* configure)(AVCodecContext *avctx)
Perform any extra codec-specific configuration.
Definition: d3d12va_encode.h:328
D3D12VAEncodeContext::sync_ctx
AVD3D12VASyncContext sync_ctx
The sync context used to sync command queue.
Definition: d3d12va_encode.h:245
D3D12VAEncodeContext::resolution
D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC resolution
D3D12_VIDEO_ENCODER structures.
Definition: d3d12va_encode.h:262
D3D12VAEncodeRCMode::quality
int quality
Uses quality value.
Definition: d3d12va_encode.h:136
D3D12VAEncodePicture::resolved_metadata
ID3D12Resource * resolved_metadata
Definition: d3d12va_encode.h:53
FFHWBaseEncodeContext
Definition: hw_base_encode.h:122
fifo.h
D3D12VAEncodePicture::output_buffer_ref
AVBufferRef * output_buffer_ref
Definition: d3d12va_encode.h:49
D3D12VAEncodeContext::rc_quality
int rc_quality
RC quality level - meaning depends on codec and RC mode.
Definition: d3d12va_encode.h:179
D3D12VAEncodeContext::subregions_layout
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA subregions_layout
Definition: d3d12va_encode.h:272
D3D12VAEncodePicture::output_buffer
ID3D12Resource * output_buffer
Definition: d3d12va_encode.h:50
D3D12VAEncodeContext::hwctx
AVD3D12VADeviceContext * hwctx
Definition: d3d12va_encode.h:186
D3D12VAEncodePicture::recon_surface
AVD3D12VAFrame * recon_surface
Definition: d3d12va_encode.h:47
ff_d3d12va_encode_close
int ff_d3d12va_encode_close(AVCodecContext *avctx)
Definition: d3d12va_encode.c:1931
D3D12VAEncodeContext::bi_not_empty
int bi_not_empty
The bi_not_empty feature.
Definition: d3d12va_encode.h:250
D3D12VAEncodeType::default_quality
int default_quality
Default quality for this codec - used as quantiser or RC quality factor depending on RC mode.
Definition: d3d12va_encode.h:315
D3D12VAEncodeRCMode::bitrate
int bitrate
Uses bitrate parameters.
Definition: d3d12va_encode.h:124
D3D12VAEncodeType::free_picture_params
void(* free_picture_params)(D3D12VAEncodePicture *pic)
Definition: d3d12va_encode.h:354
D3D12VAEncodeProfile::log2_chroma_w
int log2_chroma_w
Chroma subsampling in width dimension.
Definition: d3d12va_encode.h:85
pkt
AVPacket * pkt
Definition: movenc.c:60
ff_d3d12va_encode_init
int ff_d3d12va_encode_init(AVCodecContext *avctx)
Definition: d3d12va_encode.c:1788
D3D12VAEncodePicture::header_size
int header_size
Definition: d3d12va_encode.h:43
D3D12VAEncodeContext::me_precision
D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE me_precision
Motion estimation precision mode.
Definition: d3d12va_encode.h:287
D3D12VAEncodeType::picture_priv_data_size
size_t picture_priv_data_size
The size of any private data structure associated with each picture (can be zero if not required).
Definition: d3d12va_encode.h:344
D3D12VAEncodeProfile::nb_components
int nb_components
Number of components.
Definition: d3d12va_encode.h:80
hw_base_encode.h
D3D12VAEncodePicture::pic_ctl
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA pic_ctl
Definition: d3d12va_encode.h:57
AVD3D12VASyncContext
This struct is used to sync d3d12 execution.
Definition: hwcontext_d3d12va.h:104
D3D12VAEncodeRCMode
Definition: d3d12va_encode.h:108
D3D12VAEncodeContext::device3
ID3D12Device3 * device3
ID3D12Device3 interface.
Definition: d3d12va_encode.h:191
D3D12VAEncodePicture::fence_value
int fence_value
Definition: d3d12va_encode.h:59
D3D12VAEncodeContext::base
FFHWBaseEncodeContext base
Definition: d3d12va_encode.h:151
D3D12VAEncodeContext::profile
const D3D12VAEncodeProfile * profile
Chosen encoding profile details.
Definition: d3d12va_encode.h:184
D3D12VAEncodePicture::subresource_index
int subresource_index
Definition: d3d12va_encode.h:55
hwcontext_d3d12va.h
D3D12VAEncodeContext::intra_refresh_frame_index
UINT intra_refresh_frame_index
Current frame index within intra refresh cycle.
Definition: d3d12va_encode.h:282
D3D12VAEncodeContext::max_frame_size
int max_frame_size
Max frame size.
Definition: d3d12va_encode.h:161
D3D12VAEncodeType::flags
int flags
Codec feature flags.
Definition: d3d12va_encode.h:309
D3D12VAEncodeContext::rc
D3D12_VIDEO_ENCODER_RATE_CONTROL rc
Definition: d3d12va_encode.h:266
D3D12VAEncodeContext::allocator_queue
AVFifo * allocator_queue
A cached queue for reusing the D3D12 command allocators.
Definition: d3d12va_encode.h:230
D3D12VAEncodeContext::codec_conf
D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION codec_conf
Definition: d3d12va_encode.h:264
AVFifo
Definition: fifo.c:35
D3D12VAEncodeContext::res_limits
D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS res_limits
Definition: d3d12va_encode.h:257
D3D12VAEncodeContext::is_texture_array
int is_texture_array
Flag indicates if the HW is texture array mode.
Definition: d3d12va_encode.h:206
D3D12VAEncodeProfile
Definition: d3d12va_encode.h:66
D3D12VAEncodeContext::codec
const struct D3D12VAEncodeType * codec
Codec-specific hooks.
Definition: d3d12va_encode.h:156
AVCodecHWConfigInternal
Definition: hwconfig.h:25
D3D12VAEncodeType::set_tile
int(* set_tile)(AVCodecContext *avctx)
Set codec-specific tile setting.
Definition: d3d12va_encode.h:338
D3D12VAEncodeType::get_coded_data
int(* get_coded_data)(AVCodecContext *avctx, D3D12VAEncodePicture *pic, AVPacket *pkt)
Fill the coded data into AVPacket.
Definition: d3d12va_encode.h:365
ff_d3d12va_encode_hw_configs
const AVCodecHWConfigInternal *const ff_d3d12va_encode_hw_configs[]
Definition: d3d12va_encode.c:37
AVD3D12VAFrame
D3D12VA frame descriptor for pool allocation.
Definition: hwcontext_d3d12va.h:138
RC_MODE_QVBR
@ RC_MODE_QVBR
Definition: d3d12va_encode.h:103
D3D12VAEncodePicture::encoded_metadata
ID3D12Resource * encoded_metadata
Definition: d3d12va_encode.h:52
D3D12VAEncodePicture
Definition: d3d12va_encode.h:42
D3D12VAEncodeContext::level
D3D12_VIDEO_ENCODER_LEVEL_SETTING level
Definition: d3d12va_encode.h:270
ff_d3d12va_encode_receive_packet
int ff_d3d12va_encode_receive_packet(AVCodecContext *avctx, AVPacket *pkt)
Definition: d3d12va_encode.c:1783
D3D12VAEncodePicture::qp_map
void * qp_map
Definition: d3d12va_encode.h:62
AVD3D12VADeviceContext
This struct is allocated as AVHWDeviceContext.hwctx.
Definition: hwcontext_d3d12va.h:43
RC_MODE_VBR
@ RC_MODE_VBR
Definition: d3d12va_encode.h:102
D3D12VAEncodeProfile::log2_chroma_h
int log2_chroma_h
Chroma subsampling in height dimension.
Definition: d3d12va_encode.h:90
D3D12VAEncodeRCMode::hrd
int hrd
Supports HRD/VBV parameters.
Definition: d3d12va_encode.h:142
D3D12VAEncodeType::write_sequence_header
int(* write_sequence_header)(AVCodecContext *avctx, char *data, size_t *data_len)
Write the packed header data to the provided buffer.
Definition: d3d12va_encode.h:359
avcodec.h
D3D12VAEncodeProfile::av_profile
int av_profile
lavc profile value (AV_PROFILE_*).
Definition: d3d12va_encode.h:70
FFHWBaseEncodePicture
Definition: hw_base_encode.h:61
D3D12VAEncodeContext
Definition: d3d12va_encode.h:150
D3D12VAEncodeContext::command_list
ID3D12VideoEncodeCommandList2 * command_list
D3D12 video encode command list.
Definition: d3d12va_encode.h:240
D3D12VAEncodeType::get_encoder_caps
int(* get_encoder_caps)(AVCodecContext *avctx)
Query codec configuration and determine encode parameters like block sizes for surface alignment and ...
Definition: d3d12va_encode.h:323
D3D12VAEncodeContext::command_queue
ID3D12CommandQueue * command_queue
D3D12 command queue.
Definition: d3d12va_encode.h:235
D3D12VAEncodeType::set_level
int(* set_level)(AVCodecContext *avctx)
Set codec-specific level setting.
Definition: d3d12va_encode.h:333
D3D12VAEncodeContext::intra_refresh
D3D12_VIDEO_ENCODER_INTRA_REFRESH intra_refresh
Intra refresh configuration.
Definition: d3d12va_encode.h:277
AVCodecContext
main external API structure.
Definition: avcodec.h:439
D3D12VAEncodeRCMode::name
const char * name
Name.
Definition: d3d12va_encode.h:118
D3D12VAEncodeContext::video_device3
ID3D12VideoDevice3 * video_device3
ID3D12VideoDevice3 interface.
Definition: d3d12va_encode.h:196
D3D12VAEncodeContext::output_buffer_pool
AVBufferPool * output_buffer_pool
Pool of (reusable) bitstream output buffers.
Definition: d3d12va_encode.h:201
D3D12VAEncodePicture::aligned_header_size
int aligned_header_size
Definition: d3d12va_encode.h:44
D3D12VAEncodeProfile::depth
int depth
Supported bit depth.
Definition: d3d12va_encode.h:75
D3D12VAEncodeContext::gop
D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE gop
Definition: d3d12va_encode.h:268
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
AVPacket
This structure stores compressed data.
Definition: packet.h:565
D3D12VAEncodeType::profiles
const D3D12VAEncodeProfile * profiles
List of supported profiles.
Definition: d3d12va_encode.h:299
D3D12VAEncodeContext::explicit_qp
int explicit_qp
Explicitly-set QP, for use with the "qp" options.
Definition: d3d12va_encode.h:173
hwcontext.h
D3D12VAEncodeType
Definition: d3d12va_encode.h:295
hwcontext_d3d12va_internal.h
RC_MODE_CQP
@ RC_MODE_CQP
Definition: d3d12va_encode.h:100
RC_MODE_CBR
@ RC_MODE_CBR
Definition: d3d12va_encode.h:101