VA-API
va_enc_hevc.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2007-2014 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 
33 #ifndef VA_ENC_HEVC_H
34 #define VA_ENC_HEVC_H
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 #include <stdint.h>
41 
61 #define HEVC_LAST_PICTURE_EOSEQ 0x01
62 
67 #define HEVC_LAST_PICTURE_EOSTREAM 0x02
68 
82 typedef enum {
137  VAEncPackedHeaderHEVC_SEI va_deprecated_enum = (0x80000000 | 1),
139 
160 typedef struct _VAEncSequenceParameterBufferHEVC {
175  uint32_t intra_period;
179  uint32_t ip_period;
191  uint32_t bits_per_second;
200 
201  union {
202  struct {
204  uint32_t chroma_format_idc : 2;
206  uint32_t separate_colour_plane_flag : 1;
208  uint32_t bit_depth_luma_minus8 : 3;
210  uint32_t bit_depth_chroma_minus8 : 3;
212  uint32_t scaling_list_enabled_flag : 1;
214  uint32_t strong_intra_smoothing_enabled_flag : 1;
216  uint32_t amp_enabled_flag : 1;
218  uint32_t sample_adaptive_offset_enabled_flag : 1;
220  uint32_t pcm_enabled_flag : 1;
222  uint32_t pcm_loop_filter_disabled_flag : 1;
224  uint32_t sps_temporal_mvp_enabled_flag : 1;
225 
226  uint32_t reserved_bits : 16;
227  } bits;
228  uint32_t value;
229  } seq_fields;
230 
235 
239 
244 
248 
253 
258 
261 
264 
267 
273 
278  union {
279  struct {
281  uint32_t aspect_ratio_info_present_flag : 1;
283  uint32_t neutral_chroma_indication_flag : 1;
285  uint32_t field_seq_flag : 1;
287  uint32_t vui_timing_info_present_flag : 1;
289  uint32_t bitstream_restriction_flag : 1;
291  uint32_t tiles_fixed_structure_flag : 1;
293  uint32_t motion_vectors_over_pic_boundaries_flag : 1;
295  uint32_t restricted_ref_pic_lists_flag : 1;
297  uint32_t log2_max_mv_length_horizontal : 5;
299  uint32_t log2_max_mv_length_vertical : 5;
300  } bits;
301  uint32_t value;
302  } vui_fields;
306  uint32_t sar_width;
308  uint32_t sar_height;
312  uint32_t vui_time_scale;
319 
321  uint32_t va_reserved[VA_PADDING_MEDIUM];
324 
325 /****************************
326  * HEVC data structures
327  ****************************/
348 typedef struct _VAEncPictureParameterBufferHEVC {
367  VAPictureHEVC reference_frames[15];
376 
384 
392  uint8_t last_picture;
393 
395  uint8_t pic_init_qp;
396 
399 
402 
405 
408 
411 
413  uint8_t column_width_minus1[19];
414 
416  uint8_t row_height_minus1[21];
417 
420 
426 
431 
436 
442 
447  uint8_t nal_unit_type;
448 
449  union {
450  struct {
452  uint32_t idr_pic_flag : 1;
462  uint32_t coding_type : 3;
464  uint32_t reference_pic_flag : 1;
466  uint32_t dependent_slice_segments_enabled_flag : 1;
468  uint32_t sign_data_hiding_enabled_flag : 1;
470  uint32_t constrained_intra_pred_flag : 1;
472  uint32_t transform_skip_enabled_flag : 1;
474  uint32_t cu_qp_delta_enabled_flag : 1;
476  uint32_t weighted_pred_flag : 1;
478  uint32_t weighted_bipred_flag : 1;
480  uint32_t transquant_bypass_enabled_flag : 1;
482  uint32_t tiles_enabled_flag : 1;
484  uint32_t entropy_coding_sync_enabled_flag : 1;
486  uint32_t loop_filter_across_tiles_enabled_flag : 1;
488  uint32_t pps_loop_filter_across_slices_enabled_flag : 1;
494  uint32_t scaling_list_data_present_flag : 1;
501  uint32_t screen_content_flag : 1;
514  uint32_t enable_gpu_weighted_prediction : 1;
518  uint32_t no_output_of_prior_pics_flag : 1;
519  uint32_t reserved : 11;
520  } bits;
521  uint32_t value;
522  } pic_fields;
523 
525  uint32_t va_reserved[VA_PADDING_HIGH];
527 
545 typedef struct _VAEncSliceParameterBufferHEVC {
550 
554  uint8_t slice_type;
557 
567  VAPictureHEVC ref_pic_list0[15];
569  VAPictureHEVC ref_pic_list1[15];
579  int8_t delta_luma_weight_l0[15];
581  int8_t luma_offset_l0[15];
583  int8_t delta_chroma_weight_l0[15][2];
585  int8_t chroma_offset_l0[15][2];
587  int8_t delta_luma_weight_l1[15];
589  int8_t luma_offset_l1[15];
591  int8_t delta_chroma_weight_l1[15][2];
593  int8_t chroma_offset_l1[15][2];
600 
603 
606 
609 
612 
615 
616  union {
617  struct {
619  uint32_t last_slice_of_pic_flag : 1;
621  uint32_t dependent_slice_segment_flag : 1;
623  uint32_t colour_plane_id : 2;
625  uint32_t slice_temporal_mvp_enabled_flag : 1;
627  uint32_t slice_sao_luma_flag : 1;
629  uint32_t slice_sao_chroma_flag : 1;
635  uint32_t num_ref_idx_active_override_flag : 1;
637  uint32_t mvd_l1_zero_flag : 1;
639  uint32_t cabac_init_flag : 1;
641  uint32_t slice_deblocking_filter_disabled_flag : 2;
643  uint32_t slice_loop_filter_across_slices_enabled_flag : 1;
645  uint32_t collocated_from_l0_flag : 1;
646  } bits;
647  uint32_t value;
648  } slice_fields;
649 
651  uint32_t va_reserved[VA_PADDING_MEDIUM];
654 
667 typedef struct _VAQMatrixBufferHEVC
668 {
676  uint8_t scaling_lists_4x4[3][2][16];
680  uint8_t scaling_lists_8x8[3][2][64];
686  uint8_t scaling_lists_16x16[3][2][64];
692  uint8_t scaling_lists_32x32[2][64];
699  uint8_t scaling_list_dc_16x16[3][2];
706  uint8_t scaling_list_dc_32x32[2];
707 
709  uint32_t va_reserved[VA_PADDING_LOW];
711 
714 #ifdef __cplusplus
715 }
716 #endif
717 
718 #endif /* VA_ENC_HEVC_H */
uint32_t vui_num_units_in_tick
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:310
int8_t slice_beta_offset_div2
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:611
Picture parameter for HEVC encoding in main & main 10 profiles.
Definition: va_enc_hevc.h:348
uint8_t general_tier_flag
Same as the HEVC bitstream syntax element. Only value 0 is allowed for level value below 4...
Definition: va_enc_hevc.h:173
uint32_t num_ctu_in_slice
Number of CTUs in this slice.
Definition: va_enc_hevc.h:549
int8_t slice_cr_qp_offset
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:608
Packed slice header.
Definition: va_enc_hevc.h:122
uint8_t num_ref_idx_l1_active_minus1
Maximum reference index for reference picture list 1. Range: 0 to 14, inclusive.
Definition: va_enc_hevc.h:565
uint16_t pic_width_in_luma_samples
Picture width in pixel samples. Its value must be multiple of min CU size.
Definition: va_enc_hevc.h:195
uint8_t slice_pic_parameter_set_id
PPS header Used by GPU to generate new slice headers in slice size control. value range: [0...
Definition: va_enc_hevc.h:441
Packed Video Parameter Set (VPS).
Definition: va_enc_hevc.h:91
uint8_t slice_pic_parameter_set_id
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:556
uint8_t ctu_max_bitsize_allowed
Application may set the CTU bit size limit based on spec requirement (A.3.2), or other value for spec...
Definition: va_enc_hevc.h:425
uint32_t log2_max_pcm_luma_coding_block_size_minus3
Derived from the HEVC bitstream syntax element. log2_min_pcm_luma_coding_block_size_minus3 + log2_dif...
Definition: va_enc_hevc.h:272
Sequence parameter for HEVC encoding in main & main 10 profiles.
Definition: va_enc_hevc.h:160
uint8_t log2_diff_max_min_transform_block_size
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:247
HEVC Quantization Matrix Buffer Structure.
Definition: va_enc_hevc.h:667
uint8_t max_transform_hierarchy_depth_intra
Same as the HEVC bitstream syntax element. value range [2].
Definition: va_enc_hevc.h:257
uint16_t min_spatial_segmentation_idc
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:314
uint32_t bits_per_second
Initial bitrate set for this sequence in CBR or VBR modes.
Definition: va_enc_hevc.h:191
uint8_t nal_unit_type
NAL unit type Used by GPU to generate new slice headers in slice size control. value range: [0...
Definition: va_enc_hevc.h:447
uint8_t max_bits_per_min_cu_denom
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:318
Packed picture header.
Definition: va.h:1727
VAGenericID VABufferID
Definition: va.h:1525
uint32_t pcm_sample_bit_depth_chroma_minus1
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:263
uint8_t num_tile_columns_minus1
Corresponds to HEVC syntax element of the same name.
Definition: va_enc_hevc.h:407
uint8_t slice_type
Slice type. Corresponds to HEVC syntax element of the same name.
Definition: va_enc_hevc.h:554
Packed Supplemental Enhancement Information (SEI).
Definition: va_enc_hevc.h:137
uint32_t sar_width
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:306
uint8_t pic_init_qp
init_qp_minus26 + 26.
Definition: va_enc_hevc.h:395
uint8_t log2_min_luma_coding_block_size_minus3
Same as the HEVC bitstream syntax element. value range [0..3].
Definition: va_enc_hevc.h:234
int8_t slice_tc_offset_div2
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:614
uint8_t num_tile_rows_minus1
Corresponds to HEVC syntax element of the same name.
Definition: va_enc_hevc.h:410
uint8_t diff_cu_qp_delta_depth
Corresponds to HEVC syntax element of the same name.
Definition: va_enc_hevc.h:398
uint16_t pic_height_in_luma_samples
Picture height in pixel samples. Its value must be multiple of min CU size.
Definition: va_enc_hevc.h:199
uint8_t log2_parallel_merge_level_minus2
Corresponds to HEVC syntax element of the same name.
Definition: va_enc_hevc.h:419
Packed sequence header.
Definition: va.h:1725
int8_t delta_chroma_log2_weight_denom
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:577
uint8_t num_ref_idx_l0_active_minus1
Maximum reference index for reference picture list 0. Range: 0 to 14, inclusive.
Definition: va_enc_hevc.h:561
uint32_t intra_idr_period
Period between IDR frames.
Definition: va_enc_hevc.h:177
uint8_t aspect_ratio_idc
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:304
int8_t slice_qp_delta
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:602
uint8_t general_profile_idc
Same as the HEVC bitstream syntax element. value range [1..2].
Definition: va_enc_hevc.h:164
Packed Sequence Parameter Set (SPS).
Definition: va_enc_hevc.h:100
uint8_t collocated_ref_pic_index
collocated reference picture buffer index of ReferenceFrames[]. Please note it is different from HEVC...
Definition: va_enc_hevc.h:383
#define VA_PADDING_LOW
Definition: va.h:249
uint8_t last_picture
OR&#39;d flags describing whether the picture is the last one or not.
Definition: va_enc_hevc.h:392
uint8_t max_transform_hierarchy_depth_inter
Same as the HEVC bitstream syntax element. value range [2].
Definition: va_enc_hevc.h:252
uint32_t log2_min_pcm_luma_coding_block_size_minus3
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:266
uint32_t slice_segment_address
Starting CTU address for this slice.
Definition: va_enc_hevc.h:547
VAEncPackedHeaderTypeHEVC
Packed header types specific to HEVC encoding.
Definition: va_enc_hevc.h:82
uint8_t log2_diff_max_min_luma_coding_block_size
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:238
int8_t slice_cb_qp_offset
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:605
uint32_t pcm_sample_bit_depth_luma_minus1
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:260
VABufferID coded_buf
Output encoded bitstream.
Definition: va_enc_hevc.h:375
int8_t pps_cr_qp_offset
Corresponds to HEVC syntax element of the same name.
Definition: va_enc_hevc.h:404
uint8_t num_ref_idx_l1_default_active_minus1
Maximum reference index for reference picture list 1. value range: [0..14].
Definition: va_enc_hevc.h:435
uint32_t intra_period
Period between I frames.
Definition: va_enc_hevc.h:175
VAPictureHEVC decoded_curr_pic
Information about the picture to be encoded.
Definition: va_enc_hevc.h:358
uint8_t max_bytes_per_pic_denom
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:316
uint32_t sar_height
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:308
Slice parameter for HEVC encoding in main & main 10 profiles.
Definition: va_enc_hevc.h:545
uint8_t general_level_idc
Same as the HEVC bitstream syntax element. general_level_idc shall be set equal to a value of 30 time...
Definition: va_enc_hevc.h:169
uint32_t vui_time_scale
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:312
uint8_t log2_min_transform_block_size_minus2
Same as the HEVC bitstream syntax element. value range [0..3].
Definition: va_enc_hevc.h:243
Description of picture properties of those in DPB surfaces.
Definition: va.h:4118
Packed Picture Parameter Set (PPS).
Definition: va_enc_hevc.h:109
uint8_t num_ref_idx_l0_default_active_minus1
Maximum reference index for reference picture list 0. value range: [0..14].
Definition: va_enc_hevc.h:430
int8_t pps_cb_qp_offset
Corresponds to HEVC syntax element of the same name.
Definition: va_enc_hevc.h:401
uint32_t ip_period
Period between I/P frames.
Definition: va_enc_hevc.h:179
Packed slice header.
Definition: va.h:1729
uint8_t vui_parameters_present_flag
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:277
uint8_t max_num_merge_cand
Corresponds to HEVC spec variable MaxNumMergeCand. Range: [1..5].
Definition: va_enc_hevc.h:599
uint8_t luma_log2_weight_denom
Same as the HEVC bitstream syntax element.
Definition: va_enc_hevc.h:575