VA-API  2.22.0
va_fei_h264.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2007-2017 Intel Corporation. All Rights Reserved.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sub license, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19  * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
30 #ifndef VA_FEI_H264_H
31 #define VA_FEI_H264_H
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 #include <stdint.h>
38 #include "va_fei.h"
39 
47 typedef struct _VAEncMiscParameterFEIFrameControlH264 {
48  uint32_t function; /* one of the VAConfigAttribFEIFunctionType values */
86 
88  uint32_t num_mv_predictors_l0 : 16;
89  uint32_t num_mv_predictors_l1 : 16;
90 
96  uint32_t search_path : 8;
101  uint32_t len_sp : 8;
102  uint32_t reserved0 : 16;
114  uint32_t sub_mb_part_mask : 7;
120  uint32_t intra_part_mask : 5;
122  uint32_t multi_pred_l0 : 1;
124  uint32_t multi_pred_l1 : 1;
130  uint32_t sub_pel_mode : 2;
134  uint32_t inter_sad : 2;
138  uint32_t intra_sad : 2;
142  uint32_t distortion_type : 1;
148  uint32_t adaptive_search : 1;
154  uint32_t mv_predictor_enable : 1;
156  uint32_t mb_qp : 1;
158  uint32_t mb_input : 1;
161  uint32_t mb_size_ctrl : 1;
165  uint32_t reserved1 : 4;
166 
168  uint32_t ref_width : 8;
169  uint32_t ref_height : 8;
182  uint32_t search_window : 4;
183  uint32_t reserved2 : 12;
184 
186  uint32_t max_frame_size;
188  uint32_t num_passes;
190  uint8_t *delta_qp;
191  uint32_t reserved3[VA_PADDING_LOW];
193 
195 typedef struct _VAEncFEIMBControlH264 {
197  uint32_t force_to_intra : 1;
199  uint32_t force_to_skip : 1;
201  uint32_t force_to_nonskip : 1;
202  uint32_t enable_direct_bias_adjustment : 1;
203  uint32_t enable_motion_bias_adjustment : 1;
204  uint32_t ext_mv_cost_scaling_factor : 3;
205  uint32_t reserved0 : 24;
206 
207  uint32_t reserved1;
208 
209  uint32_t reserved2;
210 
211  uint32_t reserved3 : 16;
213  uint32_t target_size_in_word : 8;
215  uint32_t max_size_in_word : 8;
217 
218 
222 typedef struct _VAEncFEIMVPredictorH264 {
227  struct {
228  uint8_t ref_idx_l0 : 4;
229  uint8_t ref_idx_l1 : 4;
230  } ref_idx[4]; /* index is predictor number */
231  uint32_t reserved;
237  VAMotionVector mv[4]; /* MaxNumPredictor is 4 */
239 
271 typedef struct _VAEncFEIMBCodeH264 {
272  //DWORD 0~2
273  uint32_t reserved0[3];
274 
275  //DWORD 3
276  uint32_t inter_mb_mode : 2;
277  uint32_t mb_skip_flag : 1;
278  uint32_t reserved1 : 1;
279  uint32_t intra_mb_mode : 2;
280  uint32_t reserved2 : 1;
281  uint32_t field_mb_polarity_flag : 1;
282  uint32_t mb_type : 5;
283  uint32_t intra_mb_flag : 1;
284  uint32_t field_mb_flag : 1;
285  uint32_t transform8x8_flag : 1;
286  uint32_t reserved3 : 1;
287  uint32_t dc_block_coded_cr_flag : 1;
288  uint32_t dc_block_coded_cb_flag : 1;
289  uint32_t dc_block_coded_y_flag : 1;
290  uint32_t reserved4 : 12;
291 
292  //DWORD 4
293  uint32_t horz_origin : 8;
294  uint32_t vert_origin : 8;
295  uint32_t cbp_y : 16;
296 
297  //DWORD 5
298  uint32_t cbp_cb : 16;
299  uint32_t cbp_cr : 16;
300 
301  //DWORD 6
302  uint32_t qp_prime_y : 8;
303  uint32_t reserved5 : 17;
304  uint32_t mb_skip_conv_disable : 1;
305  uint32_t is_last_mb : 1;
306  uint32_t enable_coefficient_clamp : 1;
307  uint32_t direct8x8_pattern : 4;
308 
309  //DWORD 7 8 and 9
310  union {
311  /* Intra MBs */
312  struct {
313  uint32_t luma_intra_pred_modes0 : 16;
314  uint32_t luma_intra_pred_modes1 : 16;
315 
316  uint32_t luma_intra_pred_modes2 : 16;
317  uint32_t luma_intra_pred_modes3 : 16;
318 
319  uint32_t chroma_intra_pred_mode : 2;
320  uint32_t intra_pred_avail_flag : 5;
321  uint32_t intra_pred_avail_flagF : 1;
322  uint32_t reserved6 : 24;
323  } intra_mb;
324 
325  /* Inter MBs */
326  struct {
327  uint32_t sub_mb_shapes : 8;
328  uint32_t sub_mb_pred_modes : 8;
329  uint32_t reserved7 : 16;
330 
331  uint32_t ref_idx_l0_0 : 8;
332  uint32_t ref_idx_l0_1 : 8;
333  uint32_t ref_idx_l0_2 : 8;
334  uint32_t ref_idx_l0_3 : 8;
335 
336  uint32_t ref_idx_l1_0 : 8;
337  uint32_t ref_idx_l1_1 : 8;
338  uint32_t ref_idx_l1_2 : 8;
339  uint32_t ref_idx_l1_3 : 8;
340  } inter_mb;
341  } mb_mode;
342 
343  //DWORD 10
344  uint32_t reserved8 : 16;
345  uint32_t target_size_in_word : 8;
346  uint32_t max_size_in_word : 8;
347 
348  //DWORD 11~14
349  uint32_t reserved9[4];
350 
351  //DWORD 15
352  uint32_t reserved10;
353 } VAEncFEIMBCodeH264; // 64 bytes
354 
359 typedef struct _VAEncFEIDistortionH264 {
363  uint16_t inter_distortion[16];
364  uint32_t best_inter_distortion : 16;
365  uint32_t best_intra_distortion : 16;
366  uint32_t colocated_mb_distortion : 16;
367  uint32_t reserved0 : 16;
368  uint32_t reserved1[2];
369 } VAEncFEIDistortionH264; // 48 bytes
370 
374 typedef struct _VAStatsStatisticsParameterH264 {
375  VAStatsStatisticsParameter stats_params;
376 
377  uint32_t frame_qp : 8;
379  uint32_t len_sp : 8;
385  uint32_t search_path : 8;
386  uint32_t reserved0 : 8;
387 
388  uint32_t sub_mb_part_mask : 7;
395  uint32_t sub_pel_mode : 2;
402  uint32_t inter_sad : 2;
409  uint32_t intra_sad : 2;
410  uint32_t adaptive_search : 1;
417  uint32_t mv_predictor_ctrl : 3;
418  uint32_t mb_qp : 1;
423  uint32_t ft_enable : 1;
430  uint32_t intra_part_mask : 5;
431  uint32_t reserved1 : 8;
432 
434  uint32_t ref_width : 8;
435  uint32_t ref_height : 8;
448  uint32_t search_window : 4;
449  uint32_t reserved2 : 12;
450 
452  uint32_t disable_mv_output : 1;
456  uint32_t enable_8x8_statistics : 1;
457  uint32_t reserved3 : 29;
458  uint32_t reserved4[2];
460 
467 typedef struct _VAStatsStatisticsH264 {
469  uint32_t best_inter_distortion0 : 16;
470  uint32_t inter_mode0 : 16;
471 
473  uint32_t best_inter_distortion1 : 16;
474  uint32_t inter_mode1 : 16;
475 
476  uint32_t best_intra_distortion : 16;
477  uint32_t intra_mode : 16;
478 
479  uint32_t num_non_zero_coef : 16;
480  uint32_t reserved0 : 16;
481 
482  uint32_t sum_coef;
483 
485  uint32_t mb_is_flat : 1;
486  uint32_t reserved1 : 31;
487 
489  uint32_t variance_16x16;
491  uint32_t variance_8x8[4];
492 
496  uint32_t pixel_average_8x8[4];
497 } VAStatsStatisticsH264; // 64 bytes
498 
501 #ifdef __cplusplus
502 }
503 #endif
504 
505 #endif /* VA_FEI_H264_H */
#define VA_PADDING_LOW
Definition: va.h:360
VAGenericID VABufferID
Definition: va.h:2019
VAEncFEIDistortionH264 defines the data structure for VAEncFEIDistortionBufferType per 16x16 MB block...
Definition: va_fei_h264.h:359
FEI output.
Definition: va_fei_h264.h:271
FEI MB level control data structure.
Definition: va_fei_h264.h:195
uint32_t force_to_intra
when set, correposndent MB is coded as intra
Definition: va_fei_h264.h:197
uint32_t max_size_in_word
specifies the max size of each MB
Definition: va_fei_h264.h:215
uint32_t target_size_in_word
when mb_size_ctrl is set, size here is used to budget accumulatively. Set to 0xFF if don't care.
Definition: va_fei_h264.h:213
uint32_t force_to_nonskip
specifies whether this macroblock should be coded as a non-skipped macroblock.
Definition: va_fei_h264.h:201
uint32_t force_to_skip
when set, correposndent MB is coded as skip
Definition: va_fei_h264.h:199
Application can use this definition as reference to allocate the buffer based on MaxNumPredictor retu...
Definition: va_fei_h264.h:222
FEI frame level control buffer for H.264.
Definition: va_fei_h264.h:47
uint32_t ref_width
motion search window(ref_width * ref_height)
Definition: va_fei_h264.h:168
uint32_t multi_pred_l1
Definition: va_fei_h264.h:124
uint32_t sub_mb_part_mask
defines the bit-mask for disabling sub-partition The lower 4 bits are for the major partitions (sub-m...
Definition: va_fei_h264.h:114
uint32_t intra_sad
Definition: va_fei_h264.h:138
uint32_t mb_qp
Definition: va_fei_h264.h:156
VABufferID mb_code_data
MBCode data output of MB ENC. Each 16x16 block has one MB Code data with layout VAEncFEIMBCodeH264 Bu...
Definition: va_fei_h264.h:74
VABufferID qp
QP input buffer with layout VAEncQPBufferH264. It is valid only when mb_qp is set to 1....
Definition: va_fei_h264.h:79
uint32_t search_path
motion search method definition 0: default value, diamond search 1: full search 2: diamond search
Definition: va_fei_h264.h:96
uint32_t max_frame_size
max frame size control with multi passes QP setting
Definition: va_fei_h264.h:186
VABufferID mv_predictor
MV predictor. It is valid only when mv_predictor_enable is set to 1. Each 16x16 block has one or more...
Definition: va_fei_h264.h:85
uint32_t multi_pred_l0
Definition: va_fei_h264.h:122
uint32_t num_passes
number of passes, every pass has different QP
Definition: va_fei_h264.h:188
VABufferID distortion
distortion output of MB ENC or ENC_PAK. Each 16x16 block has one distortion data with VAEncFEIDistort...
Definition: va_fei_h264.h:62
uint32_t search_window
predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) and search_path ...
Definition: va_fei_h264.h:182
VABufferID mv_data
MVs data output of MB ENC. Each 16x16 block has one MVs data with layout VAMotionVector Buffer size s...
Definition: va_fei_h264.h:68
uint32_t repartition_check_enable
Definition: va_fei_h264.h:144
uint32_t adaptive_search
Definition: va_fei_h264.h:148
uint32_t mb_size_ctrl
Definition: va_fei_h264.h:161
uint32_t mb_input
Definition: va_fei_h264.h:158
uint8_t * delta_qp
delta QP list for every pass
Definition: va_fei_h264.h:190
uint32_t inter_sad
Definition: va_fei_h264.h:134
uint32_t mv_predictor_enable
Definition: va_fei_h264.h:154
VABufferID mb_ctrl
MB (16x16) control input buffer. It is valid only when (mb_input | mb_size_ctrl) is set to 1....
Definition: va_fei_h264.h:56
uint32_t colocated_mb_distortion
Definition: va_fei_h264.h:164
uint32_t intra_part_mask
Definition: va_fei_h264.h:120
uint32_t distortion_type
Definition: va_fei_h264.h:142
uint32_t len_sp
maximum number of Search Units, valid range is [1, 63] 0 is treated as 1. reference search locations ...
Definition: va_fei_h264.h:101
uint32_t sub_pel_mode
Definition: va_fei_h264.h:130
uint32_t num_mv_predictors_l0
number of MV predictors. It must not be greater than maximum supported MV predictor.
Definition: va_fei_h264.h:88
Generic motion vector data structure.
Definition: va.h:414
VAStatsStatisticsH264. H264 Statistics buffer layout for VAStatsStatisticsBufferType and VAStatsStati...
Definition: va_fei_h264.h:467
uint32_t pixel_average_16x16
DWORD 11 pixel_average for block16x16.
Definition: va_fei_h264.h:494
uint32_t best_inter_distortion1
future reference
Definition: va_fei_h264.h:473
uint32_t variance_16x16
DWORD 6 variance for block16x16.
Definition: va_fei_h264.h:489
uint32_t mb_is_flat
DWORD 5 flat info.
Definition: va_fei_h264.h:485
uint32_t best_inter_distortion0
past reference
Definition: va_fei_h264.h:469
Motion Vector and Statistics frame level controls. VAStatsStatisticsParameterBufferType for H264 16x1...
Definition: va_fei_h264.h:374
uint32_t disable_statistics_output
StatisticsOutput. When set to 1, Statistics output is NOT provided.
Definition: va_fei_h264.h:454
uint32_t intra_part_mask
luma intra mode partition mask xxxx1: luma_intra_16x16 disabled xxx1x: luma_intra_8x8 disabled xx1xx:...
Definition: va_fei_h264.h:430
uint32_t search_path
motion search method definition 0: default value, diamond search 1: full search 2: diamond search
Definition: va_fei_h264.h:385
uint32_t ref_width
motion search window(ref_width * ref_height)
Definition: va_fei_h264.h:434
uint32_t search_window
predefined motion search windows. If selected, len_sp, window(ref_width * ref_eight) and search_path ...
Definition: va_fei_h264.h:448
uint32_t inter_sad
distortion measure adjustment for inter search SAD comparison 00b: none 01b: reserved 10b: Haar trans...
Definition: va_fei_h264.h:402
uint32_t len_sp
length of search path
Definition: va_fei_h264.h:379
uint32_t sub_pel_mode
sub pixel mode definition 00b: integer mode searching 01b: half-pel mode searching 10b: reserved 11b:...
Definition: va_fei_h264.h:395
uint32_t enable_8x8_statistics
block 8x8 data enabling in statistics output
Definition: va_fei_h264.h:456
uint32_t disable_mv_output
MVOutput. When set to 1, MV output is NOT provided.
Definition: va_fei_h264.h:452
uint32_t ft_enable
forward transform enable 0: disable 1: enable, needs frame_qp or mb_qp input for transform
Definition: va_fei_h264.h:423
uint32_t intra_sad
distortion measure adjustment for intra search SAD comparison 00b: none 01b: reserved 10b: Haar trans...
Definition: va_fei_h264.h:409
uint32_t mv_predictor_ctrl
indicate if future or/and past MV in mv_predictor buffer is valid. 0: MV predictor disabled 1: MV pre...
Definition: va_fei_h264.h:417
Motion Vector and Statistics frame level controls. common part VAStatsStatisticsParameterBufferType f...
Definition: va_fei.h:107
The FEI encoding common API.