xref: /aosp_15_r20/external/libva/va/va_enc_h264.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker  * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved.
3*54e60f84SAndroid Build Coastguard Worker  *
4*54e60f84SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*54e60f84SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the
6*54e60f84SAndroid Build Coastguard Worker  * "Software"), to deal in the Software without restriction, including
7*54e60f84SAndroid Build Coastguard Worker  * without limitation the rights to use, copy, modify, merge, publish,
8*54e60f84SAndroid Build Coastguard Worker  * distribute, sub license, and/or sell copies of the Software, and to
9*54e60f84SAndroid Build Coastguard Worker  * permit persons to whom the Software is furnished to do so, subject to
10*54e60f84SAndroid Build Coastguard Worker  * the following conditions:
11*54e60f84SAndroid Build Coastguard Worker  *
12*54e60f84SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the
13*54e60f84SAndroid Build Coastguard Worker  * next paragraph) shall be included in all copies or substantial portions
14*54e60f84SAndroid Build Coastguard Worker  * of the Software.
15*54e60f84SAndroid Build Coastguard Worker  *
16*54e60f84SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17*54e60f84SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18*54e60f84SAndroid Build Coastguard Worker  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19*54e60f84SAndroid Build Coastguard Worker  * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
20*54e60f84SAndroid Build Coastguard Worker  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21*54e60f84SAndroid Build Coastguard Worker  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22*54e60f84SAndroid Build Coastguard Worker  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23*54e60f84SAndroid Build Coastguard Worker  */
24*54e60f84SAndroid Build Coastguard Worker 
25*54e60f84SAndroid Build Coastguard Worker /**
26*54e60f84SAndroid Build Coastguard Worker  * \file va_enc_h264.h
27*54e60f84SAndroid Build Coastguard Worker  * \brief The H.264 encoding API
28*54e60f84SAndroid Build Coastguard Worker  *
29*54e60f84SAndroid Build Coastguard Worker  * This file contains the \ref api_enc_h264 "H.264 encoding API".
30*54e60f84SAndroid Build Coastguard Worker  */
31*54e60f84SAndroid Build Coastguard Worker 
32*54e60f84SAndroid Build Coastguard Worker #ifndef VA_ENC_H264_H
33*54e60f84SAndroid Build Coastguard Worker #define VA_ENC_H264_H
34*54e60f84SAndroid Build Coastguard Worker 
35*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
36*54e60f84SAndroid Build Coastguard Worker extern "C" {
37*54e60f84SAndroid Build Coastguard Worker #endif
38*54e60f84SAndroid Build Coastguard Worker 
39*54e60f84SAndroid Build Coastguard Worker /**
40*54e60f84SAndroid Build Coastguard Worker  * \defgroup api_enc_h264 H.264 encoding API
41*54e60f84SAndroid Build Coastguard Worker  *
42*54e60f84SAndroid Build Coastguard Worker  * @{
43*54e60f84SAndroid Build Coastguard Worker  */
44*54e60f84SAndroid Build Coastguard Worker 
45*54e60f84SAndroid Build Coastguard Worker /**
46*54e60f84SAndroid Build Coastguard Worker  * @name Picture flags
47*54e60f84SAndroid Build Coastguard Worker  *
48*54e60f84SAndroid Build Coastguard Worker  * Those flags flags are meant to signal when a picture marks the end
49*54e60f84SAndroid Build Coastguard Worker  * of a sequence, a stream, or even both at once.
50*54e60f84SAndroid Build Coastguard Worker  *
51*54e60f84SAndroid Build Coastguard Worker  * @{
52*54e60f84SAndroid Build Coastguard Worker  */
53*54e60f84SAndroid Build Coastguard Worker /**
54*54e60f84SAndroid Build Coastguard Worker  * \brief Marks the last picture in the sequence.
55*54e60f84SAndroid Build Coastguard Worker  *
56*54e60f84SAndroid Build Coastguard Worker  * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame.
57*54e60f84SAndroid Build Coastguard Worker  */
58*54e60f84SAndroid Build Coastguard Worker #define H264_LAST_PICTURE_EOSEQ     0x01
59*54e60f84SAndroid Build Coastguard Worker /**
60*54e60f84SAndroid Build Coastguard Worker  * \brief Marks the last picture in the stream.
61*54e60f84SAndroid Build Coastguard Worker  *
62*54e60f84SAndroid Build Coastguard Worker  * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame.
63*54e60f84SAndroid Build Coastguard Worker  */
64*54e60f84SAndroid Build Coastguard Worker #define H264_LAST_PICTURE_EOSTREAM  0x02
65*54e60f84SAndroid Build Coastguard Worker /**@}*/
66*54e60f84SAndroid Build Coastguard Worker 
67*54e60f84SAndroid Build Coastguard Worker /**
68*54e60f84SAndroid Build Coastguard Worker  * \brief Packed header types specific to H.264 encoding.
69*54e60f84SAndroid Build Coastguard Worker  *
70*54e60f84SAndroid Build Coastguard Worker  * Types of packed headers generally used for H.264 encoding. Each
71*54e60f84SAndroid Build Coastguard Worker  * associated packed header data buffer shall contain the start code
72*54e60f84SAndroid Build Coastguard Worker  * prefix 0x000001 followed by the complete NAL unit, thus also
73*54e60f84SAndroid Build Coastguard Worker  * including the \c nal_unit_type.
74*54e60f84SAndroid Build Coastguard Worker  *
75*54e60f84SAndroid Build Coastguard Worker  * Note: the start code prefix can contain an arbitrary number of leading
76*54e60f84SAndroid Build Coastguard Worker  * zeros. The driver will skip them for emulation prevention bytes insertion,
77*54e60f84SAndroid Build Coastguard Worker  * if necessary.
78*54e60f84SAndroid Build Coastguard Worker  */
79*54e60f84SAndroid Build Coastguard Worker typedef enum {
80*54e60f84SAndroid Build Coastguard Worker     /**
81*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Sequence Parameter Set (SPS).
82*54e60f84SAndroid Build Coastguard Worker      *
83*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
84*54e60f84SAndroid Build Coastguard Worker      * complete seq_parameter_set_rbsp() syntax element.
85*54e60f84SAndroid Build Coastguard Worker      *
86*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 7.
87*54e60f84SAndroid Build Coastguard Worker      */
88*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderH264_SPS   = VAEncPackedHeaderSequence,
89*54e60f84SAndroid Build Coastguard Worker     /**
90*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Picture Parameter Set (PPS).
91*54e60f84SAndroid Build Coastguard Worker      *
92*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
93*54e60f84SAndroid Build Coastguard Worker      * complete pic_parameter_set_rbsp() syntax element.
94*54e60f84SAndroid Build Coastguard Worker      *
95*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 8.
96*54e60f84SAndroid Build Coastguard Worker      */
97*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderH264_PPS   = VAEncPackedHeaderPicture,
98*54e60f84SAndroid Build Coastguard Worker     /**
99*54e60f84SAndroid Build Coastguard Worker      * \brief Packed slice header.
100*54e60f84SAndroid Build Coastguard Worker      *
101*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
102*54e60f84SAndroid Build Coastguard Worker      * \c slice_header() syntax element only, along with any start
103*54e60f84SAndroid Build Coastguard Worker      * code prefix and NAL unit type preceeding it. i.e. this means
104*54e60f84SAndroid Build Coastguard Worker      * that the buffer does not contain any of the \c slice_data() or
105*54e60f84SAndroid Build Coastguard Worker      * the \c rbsp_slice_trailing_bits().
106*54e60f84SAndroid Build Coastguard Worker      *
107*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR
108*54e60f84SAndroid Build Coastguard Worker      * picture), or 5 (IDR picture).
109*54e60f84SAndroid Build Coastguard Worker      */
110*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice,
111*54e60f84SAndroid Build Coastguard Worker     /**
112*54e60f84SAndroid Build Coastguard Worker      * \brief Packed Supplemental Enhancement Information (SEI).
113*54e60f84SAndroid Build Coastguard Worker      *
114*54e60f84SAndroid Build Coastguard Worker      * The corresponding packed header data buffer shall contain the
115*54e60f84SAndroid Build Coastguard Worker      * complete sei_rbsp() syntax element, thus including several
116*54e60f84SAndroid Build Coastguard Worker      * sei_message() elements if necessary.
117*54e60f84SAndroid Build Coastguard Worker      *
118*54e60f84SAndroid Build Coastguard Worker      * Note: packed \c nal_unit_type shall be equal to 6.
119*54e60f84SAndroid Build Coastguard Worker      *
120*54e60f84SAndroid Build Coastguard Worker      * @deprecated
121*54e60f84SAndroid Build Coastguard Worker      * This is a deprecated packed header flag, All applications can use
122*54e60f84SAndroid Build Coastguard Worker      * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed
123*54e60f84SAndroid Build Coastguard Worker      * SEI header data buffer to the driver
124*54e60f84SAndroid Build Coastguard Worker      */
125*54e60f84SAndroid Build Coastguard Worker     VAEncPackedHeaderH264_SEI va_deprecated_enum  = (0x80000000 | 1),
126*54e60f84SAndroid Build Coastguard Worker } VAEncPackedHeaderTypeH264;
127*54e60f84SAndroid Build Coastguard Worker 
128*54e60f84SAndroid Build Coastguard Worker /**
129*54e60f84SAndroid Build Coastguard Worker  * \brief Sequence parameter for H.264 encoding in baseline, main & high
130*54e60f84SAndroid Build Coastguard Worker  * profiles.
131*54e60f84SAndroid Build Coastguard Worker  *
132*54e60f84SAndroid Build Coastguard Worker  * This structure holds information for \c seq_parameter_set_data() as
133*54e60f84SAndroid Build Coastguard Worker  * defined by the H.264 specification.
134*54e60f84SAndroid Build Coastguard Worker  *
135*54e60f84SAndroid Build Coastguard Worker  * If packed sequence headers mode is used, i.e. if the encoding
136*54e60f84SAndroid Build Coastguard Worker  * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE
137*54e60f84SAndroid Build Coastguard Worker  * flag, then the driver expects two more buffers to be provided to
138*54e60f84SAndroid Build Coastguard Worker  * the same \c vaRenderPicture() as this buffer:
139*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderParameterBuffer with type set to
140*54e60f84SAndroid Build Coastguard Worker  *   VAEncPackedHeaderType::VAEncPackedHeaderSequence ;
141*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
142*54e60f84SAndroid Build Coastguard Worker  *   header data.
143*54e60f84SAndroid Build Coastguard Worker  *
144*54e60f84SAndroid Build Coastguard Worker  * If \c seq_scaling_matrix_present_flag is set to \c 1, then a
145*54e60f84SAndroid Build Coastguard Worker  * #VAIQMatrixBufferH264 buffer shall also be provided within the same
146*54e60f84SAndroid Build Coastguard Worker  * \c vaRenderPicture() call as this sequence parameter buffer.
147*54e60f84SAndroid Build Coastguard Worker  */
148*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSequenceParameterBufferH264 {
149*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
150*54e60f84SAndroid Build Coastguard Worker     uint8_t   seq_parameter_set_id;
151*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
152*54e60f84SAndroid Build Coastguard Worker     uint8_t   level_idc;
153*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between I frames. */
154*54e60f84SAndroid Build Coastguard Worker     uint32_t    intra_period;
155*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between IDR frames. */
156*54e60f84SAndroid Build Coastguard Worker     uint32_t    intra_idr_period;
157*54e60f84SAndroid Build Coastguard Worker     /** \brief Period between I/P frames. */
158*54e60f84SAndroid Build Coastguard Worker     uint32_t    ip_period;
159*54e60f84SAndroid Build Coastguard Worker     /**
160*54e60f84SAndroid Build Coastguard Worker      * \brief Initial bitrate set for this sequence in CBR or VBR modes.
161*54e60f84SAndroid Build Coastguard Worker      *
162*54e60f84SAndroid Build Coastguard Worker      * This field represents the initial bitrate value for this
163*54e60f84SAndroid Build Coastguard Worker      * sequence if CBR or VBR mode is used, i.e. if the encoder
164*54e60f84SAndroid Build Coastguard Worker      * pipeline was created with a #VAConfigAttribRateControl
165*54e60f84SAndroid Build Coastguard Worker      * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
166*54e60f84SAndroid Build Coastguard Worker      *
167*54e60f84SAndroid Build Coastguard Worker      * The bitrate can be modified later on through
168*54e60f84SAndroid Build Coastguard Worker      * #VAEncMiscParameterRateControl buffers.
169*54e60f84SAndroid Build Coastguard Worker      */
170*54e60f84SAndroid Build Coastguard Worker     uint32_t    bits_per_second;
171*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
172*54e60f84SAndroid Build Coastguard Worker     uint32_t    max_num_ref_frames;
173*54e60f84SAndroid Build Coastguard Worker     /** \brief Picture width in macroblocks. */
174*54e60f84SAndroid Build Coastguard Worker     uint16_t  picture_width_in_mbs;
175*54e60f84SAndroid Build Coastguard Worker     /** \brief Picture height in macroblocks. */
176*54e60f84SAndroid Build Coastguard Worker     uint16_t  picture_height_in_mbs;
177*54e60f84SAndroid Build Coastguard Worker 
178*54e60f84SAndroid Build Coastguard Worker     union {
179*54e60f84SAndroid Build Coastguard Worker         struct {
180*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
181*54e60f84SAndroid Build Coastguard Worker             uint32_t chroma_format_idc                      : 2;
182*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
183*54e60f84SAndroid Build Coastguard Worker             uint32_t frame_mbs_only_flag                    : 1;
184*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
185*54e60f84SAndroid Build Coastguard Worker             uint32_t mb_adaptive_frame_field_flag           : 1;
186*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
187*54e60f84SAndroid Build Coastguard Worker             uint32_t seq_scaling_matrix_present_flag        : 1;
188*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
189*54e60f84SAndroid Build Coastguard Worker             uint32_t direct_8x8_inference_flag              : 1;
190*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
191*54e60f84SAndroid Build Coastguard Worker             uint32_t log2_max_frame_num_minus4              : 4;
192*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
193*54e60f84SAndroid Build Coastguard Worker             uint32_t pic_order_cnt_type                     : 2;
194*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
195*54e60f84SAndroid Build Coastguard Worker             uint32_t log2_max_pic_order_cnt_lsb_minus4      : 4;
196*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
197*54e60f84SAndroid Build Coastguard Worker             uint32_t delta_pic_order_always_zero_flag       : 1;
198*54e60f84SAndroid Build Coastguard Worker         } bits;
199*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
200*54e60f84SAndroid Build Coastguard Worker     } seq_fields;
201*54e60f84SAndroid Build Coastguard Worker 
202*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
203*54e60f84SAndroid Build Coastguard Worker     uint8_t   bit_depth_luma_minus8;
204*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
205*54e60f84SAndroid Build Coastguard Worker     uint8_t   bit_depth_chroma_minus8;
206*54e60f84SAndroid Build Coastguard Worker 
207*54e60f84SAndroid Build Coastguard Worker     /** if pic_order_cnt_type == 1 */
208*54e60f84SAndroid Build Coastguard Worker     /**@{*/
209*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
210*54e60f84SAndroid Build Coastguard Worker     uint8_t   num_ref_frames_in_pic_order_cnt_cycle;
211*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
212*54e60f84SAndroid Build Coastguard Worker     int32_t             offset_for_non_ref_pic;
213*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
214*54e60f84SAndroid Build Coastguard Worker     int32_t             offset_for_top_to_bottom_field;
215*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
216*54e60f84SAndroid Build Coastguard Worker     int32_t             offset_for_ref_frame[256];
217*54e60f84SAndroid Build Coastguard Worker     /**@}*/
218*54e60f84SAndroid Build Coastguard Worker 
219*54e60f84SAndroid Build Coastguard Worker     /** @name Cropping (optional) */
220*54e60f84SAndroid Build Coastguard Worker     /**@{*/
221*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
222*54e60f84SAndroid Build Coastguard Worker     uint8_t   frame_cropping_flag;
223*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
224*54e60f84SAndroid Build Coastguard Worker     uint32_t    frame_crop_left_offset;
225*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
226*54e60f84SAndroid Build Coastguard Worker     uint32_t    frame_crop_right_offset;
227*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
228*54e60f84SAndroid Build Coastguard Worker     uint32_t    frame_crop_top_offset;
229*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
230*54e60f84SAndroid Build Coastguard Worker     uint32_t    frame_crop_bottom_offset;
231*54e60f84SAndroid Build Coastguard Worker     /**@}*/
232*54e60f84SAndroid Build Coastguard Worker 
233*54e60f84SAndroid Build Coastguard Worker     /** @name VUI parameters (optional) */
234*54e60f84SAndroid Build Coastguard Worker     /**@{*/
235*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
236*54e60f84SAndroid Build Coastguard Worker     uint8_t   vui_parameters_present_flag;
237*54e60f84SAndroid Build Coastguard Worker     union {
238*54e60f84SAndroid Build Coastguard Worker         struct {
239*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
240*54e60f84SAndroid Build Coastguard Worker             uint32_t aspect_ratio_info_present_flag         : 1;
241*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
242*54e60f84SAndroid Build Coastguard Worker             uint32_t timing_info_present_flag               : 1;
243*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
244*54e60f84SAndroid Build Coastguard Worker             uint32_t bitstream_restriction_flag             : 1;
245*54e60f84SAndroid Build Coastguard Worker             /** \brief Range: 0 to 16, inclusive. */
246*54e60f84SAndroid Build Coastguard Worker             uint32_t log2_max_mv_length_horizontal          : 5;
247*54e60f84SAndroid Build Coastguard Worker             /** \brief Range: 0 to 16, inclusive. */
248*54e60f84SAndroid Build Coastguard Worker             uint32_t log2_max_mv_length_vertical            : 5;
249*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
250*54e60f84SAndroid Build Coastguard Worker             uint32_t fixed_frame_rate_flag                  : 1;
251*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
252*54e60f84SAndroid Build Coastguard Worker             uint32_t low_delay_hrd_flag                     : 1;
253*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
254*54e60f84SAndroid Build Coastguard Worker             uint32_t motion_vectors_over_pic_boundaries_flag: 1;
255*54e60f84SAndroid Build Coastguard Worker             /** \brief Reserved for future use, must be zero */
256*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved                               : 16;
257*54e60f84SAndroid Build Coastguard Worker         } bits;
258*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
259*54e60f84SAndroid Build Coastguard Worker     } vui_fields;
260*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
261*54e60f84SAndroid Build Coastguard Worker     uint8_t   aspect_ratio_idc;
262*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
263*54e60f84SAndroid Build Coastguard Worker     uint32_t    sar_width;
264*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
265*54e60f84SAndroid Build Coastguard Worker     uint32_t    sar_height;
266*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
267*54e60f84SAndroid Build Coastguard Worker     uint32_t    num_units_in_tick;
268*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
269*54e60f84SAndroid Build Coastguard Worker     uint32_t    time_scale;
270*54e60f84SAndroid Build Coastguard Worker 
271*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
272*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
273*54e60f84SAndroid Build Coastguard Worker     /**@}*/
274*54e60f84SAndroid Build Coastguard Worker } VAEncSequenceParameterBufferH264;
275*54e60f84SAndroid Build Coastguard Worker 
276*54e60f84SAndroid Build Coastguard Worker /**
277*54e60f84SAndroid Build Coastguard Worker  * \brief Picture parameter for H.264 encoding in baseline, main & high
278*54e60f84SAndroid Build Coastguard Worker  * profiles.
279*54e60f84SAndroid Build Coastguard Worker  *
280*54e60f84SAndroid Build Coastguard Worker  * This structure holds information for \c pic_parameter_set_rbsp() as
281*54e60f84SAndroid Build Coastguard Worker  * defined by the H.264 specification.
282*54e60f84SAndroid Build Coastguard Worker  *
283*54e60f84SAndroid Build Coastguard Worker  * If packed picture headers mode is used, i.e. if the encoding
284*54e60f84SAndroid Build Coastguard Worker  * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE
285*54e60f84SAndroid Build Coastguard Worker  * flag, then the driver expects two more buffers to be provided to
286*54e60f84SAndroid Build Coastguard Worker  * the same \c vaRenderPicture() as this buffer:
287*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderParameterBuffer with type set to
288*54e60f84SAndroid Build Coastguard Worker  *   VAEncPackedHeaderType::VAEncPackedHeaderPicture ;
289*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
290*54e60f84SAndroid Build Coastguard Worker  *   header data.
291*54e60f84SAndroid Build Coastguard Worker  *
292*54e60f84SAndroid Build Coastguard Worker  * If \c pic_scaling_matrix_present_flag is set to \c 1, then a
293*54e60f84SAndroid Build Coastguard Worker  * #VAIQMatrixBufferH264 buffer shall also be provided within the same
294*54e60f84SAndroid Build Coastguard Worker  * \c vaRenderPicture() call as this picture parameter buffer.
295*54e60f84SAndroid Build Coastguard Worker  */
296*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncPictureParameterBufferH264 {
297*54e60f84SAndroid Build Coastguard Worker     /**
298*54e60f84SAndroid Build Coastguard Worker      * \brief Information about the picture to be encoded.
299*54e60f84SAndroid Build Coastguard Worker      *
300*54e60f84SAndroid Build Coastguard Worker      * See #VAPictureH264 for further description of each field.
301*54e60f84SAndroid Build Coastguard Worker      * Note that CurrPic.picture_id represents the reconstructed
302*54e60f84SAndroid Build Coastguard Worker      * (decoded) picture. User provides a scratch VA surface ID here.
303*54e60f84SAndroid Build Coastguard Worker      */
304*54e60f84SAndroid Build Coastguard Worker     VAPictureH264   CurrPic;
305*54e60f84SAndroid Build Coastguard Worker     /**
306*54e60f84SAndroid Build Coastguard Worker      * \brief Decoded Picture Buffer (DPB).
307*54e60f84SAndroid Build Coastguard Worker      *
308*54e60f84SAndroid Build Coastguard Worker      * This array represents the list of reconstructed (decoded)
309*54e60f84SAndroid Build Coastguard Worker      * frames used as reference. It is important to keep track of
310*54e60f84SAndroid Build Coastguard Worker      * reconstructed frames so that they can be used later on as
311*54e60f84SAndroid Build Coastguard Worker      * reference for P or B-frames encoding.
312*54e60f84SAndroid Build Coastguard Worker      */
313*54e60f84SAndroid Build Coastguard Worker     VAPictureH264   ReferenceFrames[16];
314*54e60f84SAndroid Build Coastguard Worker     /**
315*54e60f84SAndroid Build Coastguard Worker      * \brief Output encoded bitstream.
316*54e60f84SAndroid Build Coastguard Worker      *
317*54e60f84SAndroid Build Coastguard Worker      * \ref coded_buf has type #VAEncCodedBufferType. It should be
318*54e60f84SAndroid Build Coastguard Worker      * large enough to hold the compressed NAL slice and possibly SPS
319*54e60f84SAndroid Build Coastguard Worker      * and PPS NAL units.
320*54e60f84SAndroid Build Coastguard Worker      */
321*54e60f84SAndroid Build Coastguard Worker     VABufferID      coded_buf;
322*54e60f84SAndroid Build Coastguard Worker 
323*54e60f84SAndroid Build Coastguard Worker     /** \brief The picture parameter set referred to in the slice header. */
324*54e60f84SAndroid Build Coastguard Worker     uint8_t   pic_parameter_set_id;
325*54e60f84SAndroid Build Coastguard Worker     /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */
326*54e60f84SAndroid Build Coastguard Worker     uint8_t   seq_parameter_set_id;
327*54e60f84SAndroid Build Coastguard Worker 
328*54e60f84SAndroid Build Coastguard Worker     /**
329*54e60f84SAndroid Build Coastguard Worker      * \brief OR'd flags describing whether the picture is the last one or not.
330*54e60f84SAndroid Build Coastguard Worker      *
331*54e60f84SAndroid Build Coastguard Worker      * This fields holds 0 if the picture to be encoded is not the last
332*54e60f84SAndroid Build Coastguard Worker      * one in the stream or sequence. Otherwise, it is a combination of
333*54e60f84SAndroid Build Coastguard Worker      * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM.
334*54e60f84SAndroid Build Coastguard Worker      */
335*54e60f84SAndroid Build Coastguard Worker     uint8_t   last_picture;
336*54e60f84SAndroid Build Coastguard Worker 
337*54e60f84SAndroid Build Coastguard Worker     /** \brief The picture identifier.
338*54e60f84SAndroid Build Coastguard Worker      *   Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive.
339*54e60f84SAndroid Build Coastguard Worker      */
340*54e60f84SAndroid Build Coastguard Worker     uint16_t  frame_num;
341*54e60f84SAndroid Build Coastguard Worker 
342*54e60f84SAndroid Build Coastguard Worker     /** \brief \c pic_init_qp_minus26 + 26. */
343*54e60f84SAndroid Build Coastguard Worker     uint8_t   pic_init_qp;
344*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum reference index for reference picture list 0.
345*54e60f84SAndroid Build Coastguard Worker      *   Range: 0 to 31, inclusive.
346*54e60f84SAndroid Build Coastguard Worker      */
347*54e60f84SAndroid Build Coastguard Worker     uint8_t   num_ref_idx_l0_active_minus1;
348*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum reference index for reference picture list 1.
349*54e60f84SAndroid Build Coastguard Worker      *  Range: 0 to 31, inclusive.
350*54e60f84SAndroid Build Coastguard Worker      */
351*54e60f84SAndroid Build Coastguard Worker     uint8_t   num_ref_idx_l1_active_minus1;
352*54e60f84SAndroid Build Coastguard Worker 
353*54e60f84SAndroid Build Coastguard Worker     /** \brief Range: -12 to 12, inclusive. */
354*54e60f84SAndroid Build Coastguard Worker     int8_t     chroma_qp_index_offset;
355*54e60f84SAndroid Build Coastguard Worker     /** \brief Range: -12 to 12, inclusive. */
356*54e60f84SAndroid Build Coastguard Worker     int8_t     second_chroma_qp_index_offset;
357*54e60f84SAndroid Build Coastguard Worker 
358*54e60f84SAndroid Build Coastguard Worker     union {
359*54e60f84SAndroid Build Coastguard Worker         struct {
360*54e60f84SAndroid Build Coastguard Worker             /** \brief Is picture an IDR picture? */
361*54e60f84SAndroid Build Coastguard Worker             uint32_t idr_pic_flag                           : 1;
362*54e60f84SAndroid Build Coastguard Worker             /** \brief Is picture a reference picture? */
363*54e60f84SAndroid Build Coastguard Worker             uint32_t reference_pic_flag                     : 2;
364*54e60f84SAndroid Build Coastguard Worker             /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */
365*54e60f84SAndroid Build Coastguard Worker             uint32_t entropy_coding_mode_flag               : 1;
366*54e60f84SAndroid Build Coastguard Worker             /** \brief Is weighted prediction applied to P slices? */
367*54e60f84SAndroid Build Coastguard Worker             uint32_t weighted_pred_flag                     : 1;
368*54e60f84SAndroid Build Coastguard Worker             /** \brief Range: 0 to 2, inclusive. */
369*54e60f84SAndroid Build Coastguard Worker             uint32_t weighted_bipred_idc                    : 2;
370*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
371*54e60f84SAndroid Build Coastguard Worker             uint32_t constrained_intra_pred_flag            : 1;
372*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
373*54e60f84SAndroid Build Coastguard Worker             uint32_t transform_8x8_mode_flag                : 1;
374*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
375*54e60f84SAndroid Build Coastguard Worker             uint32_t deblocking_filter_control_present_flag : 1;
376*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
377*54e60f84SAndroid Build Coastguard Worker             uint32_t redundant_pic_cnt_present_flag         : 1;
378*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
379*54e60f84SAndroid Build Coastguard Worker             uint32_t pic_order_present_flag                 : 1;
380*54e60f84SAndroid Build Coastguard Worker             /** \brief Same as the H.264 bitstream syntax element. */
381*54e60f84SAndroid Build Coastguard Worker             uint32_t pic_scaling_matrix_present_flag        : 1;
382*54e60f84SAndroid Build Coastguard Worker         } bits;
383*54e60f84SAndroid Build Coastguard Worker         uint32_t value;
384*54e60f84SAndroid Build Coastguard Worker     } pic_fields;
385*54e60f84SAndroid Build Coastguard Worker 
386*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
387*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
388*54e60f84SAndroid Build Coastguard Worker } VAEncPictureParameterBufferH264;
389*54e60f84SAndroid Build Coastguard Worker 
390*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncQPBufferH264 {
391*54e60f84SAndroid Build Coastguard Worker     /*
392*54e60f84SAndroid Build Coastguard Worker      * \brief This structure holds QP per 16x16 macroblock. Buffer size shall be
393*54e60f84SAndroid Build Coastguard Worker      * sufficient to fit the slice or frame to be encoded depending on if it is a
394*54e60f84SAndroid Build Coastguard Worker      * slice level or frame level encoding.
395*54e60f84SAndroid Build Coastguard Worker      */
396*54e60f84SAndroid Build Coastguard Worker     uint8_t qp;
397*54e60f84SAndroid Build Coastguard Worker } VAEncQPBufferH264;
398*54e60f84SAndroid Build Coastguard Worker 
399*54e60f84SAndroid Build Coastguard Worker /**
400*54e60f84SAndroid Build Coastguard Worker  * \brief Slice parameter for H.264 encoding in baseline, main & high profiles.
401*54e60f84SAndroid Build Coastguard Worker  *
402*54e60f84SAndroid Build Coastguard Worker  * This structure holds information for \c
403*54e60f84SAndroid Build Coastguard Worker  * slice_layer_without_partitioning_rbsp() as defined by the H.264
404*54e60f84SAndroid Build Coastguard Worker  * specification.
405*54e60f84SAndroid Build Coastguard Worker  *
406*54e60f84SAndroid Build Coastguard Worker  * If packed slice headers mode is used, i.e. if the encoding
407*54e60f84SAndroid Build Coastguard Worker  * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE
408*54e60f84SAndroid Build Coastguard Worker  * flag, then the driver expects two more buffers to be provided to
409*54e60f84SAndroid Build Coastguard Worker  * the same \c vaRenderPicture() as this buffer:
410*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderParameterBuffer with type set to
411*54e60f84SAndroid Build Coastguard Worker  *   VAEncPackedHeaderType::VAEncPackedHeaderSlice ;
412*54e60f84SAndroid Build Coastguard Worker  * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
413*54e60f84SAndroid Build Coastguard Worker  *   header data.
414*54e60f84SAndroid Build Coastguard Worker  *
415*54e60f84SAndroid Build Coastguard Worker  * If per-macroblock encoder configuration is needed, \c macroblock_info
416*54e60f84SAndroid Build Coastguard Worker  * references a buffer of type #VAEncMacroblockParameterBufferH264. This
417*54e60f84SAndroid Build Coastguard Worker  * buffer is not passed to vaRenderPicture() and it can be re-used
418*54e60f84SAndroid Build Coastguard Worker  * without re-allocating the whole buffer.
419*54e60f84SAndroid Build Coastguard Worker  */
420*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncSliceParameterBufferH264 {
421*54e60f84SAndroid Build Coastguard Worker     /** \brief Starting MB address for this slice. */
422*54e60f84SAndroid Build Coastguard Worker     uint32_t    macroblock_address;
423*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of macroblocks in this slice. */
424*54e60f84SAndroid Build Coastguard Worker     uint32_t    num_macroblocks;
425*54e60f84SAndroid Build Coastguard Worker     /**
426*54e60f84SAndroid Build Coastguard Worker      * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID.
427*54e60f84SAndroid Build Coastguard Worker      *
428*54e60f84SAndroid Build Coastguard Worker      * If per-MB encoder configuration is needed, then \ref macroblock_info
429*54e60f84SAndroid Build Coastguard Worker      * references a buffer of type #VAEncMacroblockParameterBufferH264
430*54e60f84SAndroid Build Coastguard Worker      * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id
431*54e60f84SAndroid Build Coastguard Worker      * is set to \c VA_INVALID_ID and per-MB configuration is derived
432*54e60f84SAndroid Build Coastguard Worker      * from this slice parameter.
433*54e60f84SAndroid Build Coastguard Worker      *
434*54e60f84SAndroid Build Coastguard Worker      * The \c macroblock_info buffer must hold \ref num_macroblocks
435*54e60f84SAndroid Build Coastguard Worker      * elements.
436*54e60f84SAndroid Build Coastguard Worker      */
437*54e60f84SAndroid Build Coastguard Worker     VABufferID      macroblock_info;
438*54e60f84SAndroid Build Coastguard Worker     /** \brief Slice type.
439*54e60f84SAndroid Build Coastguard Worker      *  Range: 0..2, 5..7, i.e. no switching slices.
440*54e60f84SAndroid Build Coastguard Worker      */
441*54e60f84SAndroid Build Coastguard Worker     uint8_t   slice_type;
442*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
443*54e60f84SAndroid Build Coastguard Worker     uint8_t   pic_parameter_set_id;
444*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
445*54e60f84SAndroid Build Coastguard Worker     uint16_t  idr_pic_id;
446*54e60f84SAndroid Build Coastguard Worker 
447*54e60f84SAndroid Build Coastguard Worker     /** @name If pic_order_cnt_type == 0 */
448*54e60f84SAndroid Build Coastguard Worker     /**@{*/
449*54e60f84SAndroid Build Coastguard Worker     /** \brief The picture order count modulo MaxPicOrderCntLsb. */
450*54e60f84SAndroid Build Coastguard Worker     uint16_t  pic_order_cnt_lsb;
451*54e60f84SAndroid Build Coastguard Worker     /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */
452*54e60f84SAndroid Build Coastguard Worker     int32_t             delta_pic_order_cnt_bottom;
453*54e60f84SAndroid Build Coastguard Worker     /**@}*/
454*54e60f84SAndroid Build Coastguard Worker     /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */
455*54e60f84SAndroid Build Coastguard Worker     /**@{*/
456*54e60f84SAndroid Build Coastguard Worker     /** \brief [0]: top, [1]: bottom. */
457*54e60f84SAndroid Build Coastguard Worker     int32_t             delta_pic_order_cnt[2];
458*54e60f84SAndroid Build Coastguard Worker     /**@}*/
459*54e60f84SAndroid Build Coastguard Worker 
460*54e60f84SAndroid Build Coastguard Worker     /** @name If slice_type == B */
461*54e60f84SAndroid Build Coastguard Worker     /**@{*/
462*54e60f84SAndroid Build Coastguard Worker     uint8_t   direct_spatial_mv_pred_flag;
463*54e60f84SAndroid Build Coastguard Worker     /**@}*/
464*54e60f84SAndroid Build Coastguard Worker 
465*54e60f84SAndroid Build Coastguard Worker     /** @name If slice_type == P */
466*54e60f84SAndroid Build Coastguard Worker     /**@{*/
467*54e60f84SAndroid Build Coastguard Worker     /** \brief Specifies if
468*54e60f84SAndroid Build Coastguard Worker      * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or
469*54e60f84SAndroid Build Coastguard Worker      * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are
470*54e60f84SAndroid Build Coastguard Worker      * overriden by the values for this slice.
471*54e60f84SAndroid Build Coastguard Worker      */
472*54e60f84SAndroid Build Coastguard Worker     uint8_t   num_ref_idx_active_override_flag;
473*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum reference index for reference picture list 0.
474*54e60f84SAndroid Build Coastguard Worker      *  Range: 0 to 31, inclusive.
475*54e60f84SAndroid Build Coastguard Worker      */
476*54e60f84SAndroid Build Coastguard Worker     uint8_t   num_ref_idx_l0_active_minus1;
477*54e60f84SAndroid Build Coastguard Worker     /** \brief Maximum reference index for reference picture list 1.
478*54e60f84SAndroid Build Coastguard Worker      *  Range: 0 to 31, inclusive.
479*54e60f84SAndroid Build Coastguard Worker      */
480*54e60f84SAndroid Build Coastguard Worker     uint8_t   num_ref_idx_l1_active_minus1;
481*54e60f84SAndroid Build Coastguard Worker     /** \brief Reference picture list 0 (for P slices). */
482*54e60f84SAndroid Build Coastguard Worker     VAPictureH264   RefPicList0[32];
483*54e60f84SAndroid Build Coastguard Worker     /** \brief Reference picture list 1 (for B slices). */
484*54e60f84SAndroid Build Coastguard Worker     VAPictureH264   RefPicList1[32];
485*54e60f84SAndroid Build Coastguard Worker     /**@}*/
486*54e60f84SAndroid Build Coastguard Worker 
487*54e60f84SAndroid Build Coastguard Worker     /** @name pred_weight_table() */
488*54e60f84SAndroid Build Coastguard Worker     /**@{*/
489*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
490*54e60f84SAndroid Build Coastguard Worker     uint8_t   luma_log2_weight_denom;
491*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
492*54e60f84SAndroid Build Coastguard Worker     uint8_t   chroma_log2_weight_denom;
493*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
494*54e60f84SAndroid Build Coastguard Worker     uint8_t   luma_weight_l0_flag;
495*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
496*54e60f84SAndroid Build Coastguard Worker     signed short    luma_weight_l0[32];
497*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
498*54e60f84SAndroid Build Coastguard Worker     signed short    luma_offset_l0[32];
499*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
500*54e60f84SAndroid Build Coastguard Worker     uint8_t   chroma_weight_l0_flag;
501*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
502*54e60f84SAndroid Build Coastguard Worker     signed short    chroma_weight_l0[32][2];
503*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
504*54e60f84SAndroid Build Coastguard Worker     signed short    chroma_offset_l0[32][2];
505*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
506*54e60f84SAndroid Build Coastguard Worker     uint8_t   luma_weight_l1_flag;
507*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
508*54e60f84SAndroid Build Coastguard Worker     signed short    luma_weight_l1[32];
509*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
510*54e60f84SAndroid Build Coastguard Worker     signed short    luma_offset_l1[32];
511*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
512*54e60f84SAndroid Build Coastguard Worker     uint8_t   chroma_weight_l1_flag;
513*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
514*54e60f84SAndroid Build Coastguard Worker     signed short    chroma_weight_l1[32][2];
515*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
516*54e60f84SAndroid Build Coastguard Worker     signed short    chroma_offset_l1[32][2];
517*54e60f84SAndroid Build Coastguard Worker     /**@}*/
518*54e60f84SAndroid Build Coastguard Worker 
519*54e60f84SAndroid Build Coastguard Worker     /** \brief Range: 0 to 2, inclusive. */
520*54e60f84SAndroid Build Coastguard Worker     uint8_t   cabac_init_idc;
521*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
522*54e60f84SAndroid Build Coastguard Worker     int8_t     slice_qp_delta;
523*54e60f84SAndroid Build Coastguard Worker     /** @name If deblocking_filter_control_present_flag */
524*54e60f84SAndroid Build Coastguard Worker     /**@{*/
525*54e60f84SAndroid Build Coastguard Worker     /** \brief Range: 0 to 2, inclusive. */
526*54e60f84SAndroid Build Coastguard Worker     uint8_t   disable_deblocking_filter_idc;
527*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
528*54e60f84SAndroid Build Coastguard Worker     int8_t     slice_alpha_c0_offset_div2;
529*54e60f84SAndroid Build Coastguard Worker     /** \brief Same as the H.264 bitstream syntax element. */
530*54e60f84SAndroid Build Coastguard Worker     int8_t     slice_beta_offset_div2;
531*54e60f84SAndroid Build Coastguard Worker 
532*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
533*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
534*54e60f84SAndroid Build Coastguard Worker     /**@}*/
535*54e60f84SAndroid Build Coastguard Worker } VAEncSliceParameterBufferH264;
536*54e60f84SAndroid Build Coastguard Worker 
537*54e60f84SAndroid Build Coastguard Worker /**
538*54e60f84SAndroid Build Coastguard Worker  * @name Macroblock neighbour availability bits
539*54e60f84SAndroid Build Coastguard Worker  *
540*54e60f84SAndroid Build Coastguard Worker  * \anchor api_enc_h264_mb_pred_avail_bits
541*54e60f84SAndroid Build Coastguard Worker  * Definitions for macroblock neighbour availability bits used in
542*54e60f84SAndroid Build Coastguard Worker  * intra prediction mode (non MBAFF only).
543*54e60f84SAndroid Build Coastguard Worker  *
544*54e60f84SAndroid Build Coastguard Worker  * @{
545*54e60f84SAndroid Build Coastguard Worker  */
546*54e60f84SAndroid Build Coastguard Worker /** \brief References macroblock in the top-left corner. */
547*54e60f84SAndroid Build Coastguard Worker #define VA_MB_PRED_AVAIL_TOP_LEFT         (1 << 2)
548*54e60f84SAndroid Build Coastguard Worker /** \brief References macroblock above the current macroblock. */
549*54e60f84SAndroid Build Coastguard Worker #define VA_MB_PRED_AVAIL_TOP              (1 << 4)
550*54e60f84SAndroid Build Coastguard Worker /** \brief References macroblock in the top-right corner. */
551*54e60f84SAndroid Build Coastguard Worker #define VA_MB_PRED_AVAIL_TOP_RIGHT        (1 << 3)
552*54e60f84SAndroid Build Coastguard Worker /** \brief References macroblock on the left of the current macroblock. */
553*54e60f84SAndroid Build Coastguard Worker #define VA_MB_PRED_AVAIL_LEFT             (1 << 6)
554*54e60f84SAndroid Build Coastguard Worker /**@}*/
555*54e60f84SAndroid Build Coastguard Worker 
556*54e60f84SAndroid Build Coastguard Worker /**
557*54e60f84SAndroid Build Coastguard Worker  * \brief Macroblock parameter for H.264 encoding in baseline, main & high
558*54e60f84SAndroid Build Coastguard Worker  * profiles.
559*54e60f84SAndroid Build Coastguard Worker  *
560*54e60f84SAndroid Build Coastguard Worker  * This structure holds per-macroblock information. The buffer must be
561*54e60f84SAndroid Build Coastguard Worker  * allocated with as many elements (macroblocks) as necessary to fit
562*54e60f84SAndroid Build Coastguard Worker  * the slice to be encoded. Besides, the per-macroblock records must
563*54e60f84SAndroid Build Coastguard Worker  * be written in a strict raster order and with no gap. i.e. every
564*54e60f84SAndroid Build Coastguard Worker  * macroblock, regardless of its type, shall have an entry.
565*54e60f84SAndroid Build Coastguard Worker  */
566*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMacroblockParameterBufferH264 {
567*54e60f84SAndroid Build Coastguard Worker     /**
568*54e60f84SAndroid Build Coastguard Worker      * \brief Quantization parameter.
569*54e60f84SAndroid Build Coastguard Worker      *
570*54e60f84SAndroid Build Coastguard Worker      * Requested quantization parameter. Range: 0 to 51, inclusive.
571*54e60f84SAndroid Build Coastguard Worker      * If \ref qp is set to 0xff, then the actual value is derived
572*54e60f84SAndroid Build Coastguard Worker      * from the slice-level value: \c pic_init_qp + \c slice_qp_delta.
573*54e60f84SAndroid Build Coastguard Worker      */
574*54e60f84SAndroid Build Coastguard Worker     uint8_t   qp;
575*54e60f84SAndroid Build Coastguard Worker 
576*54e60f84SAndroid Build Coastguard Worker     union {
577*54e60f84SAndroid Build Coastguard Worker         /** @name Data for intra macroblock */
578*54e60f84SAndroid Build Coastguard Worker         /**@{*/
579*54e60f84SAndroid Build Coastguard Worker         union {
580*54e60f84SAndroid Build Coastguard Worker             struct {
581*54e60f84SAndroid Build Coastguard Worker                 /**
582*54e60f84SAndroid Build Coastguard Worker                  * \brief Flag specified to override MB neighbour
583*54e60f84SAndroid Build Coastguard Worker                  * availability bits from VME stage.
584*54e60f84SAndroid Build Coastguard Worker                  *
585*54e60f84SAndroid Build Coastguard Worker                  * This flag specifies that macroblock neighbour
586*54e60f84SAndroid Build Coastguard Worker                  * availability bits from the VME stage are overriden
587*54e60f84SAndroid Build Coastguard Worker                  * by the \ref pred_avail_flags hereunder.
588*54e60f84SAndroid Build Coastguard Worker                  */
589*54e60f84SAndroid Build Coastguard Worker                 uint32_t    pred_avail_override_flag        : 1;
590*54e60f84SAndroid Build Coastguard Worker                 /**
591*54e60f84SAndroid Build Coastguard Worker                  * \brief Bitwise representation of which macroblocks
592*54e60f84SAndroid Build Coastguard Worker                  * are available for intra prediction.
593*54e60f84SAndroid Build Coastguard Worker                  *
594*54e60f84SAndroid Build Coastguard Worker                  * If the slice is intra-coded, this field represents
595*54e60f84SAndroid Build Coastguard Worker                  * the macroblocks available for intra prediction.
596*54e60f84SAndroid Build Coastguard Worker                  * See \ref api_enc_h264_mb_pred_avail_bits
597*54e60f84SAndroid Build Coastguard Worker                  * "macroblock neighbour availability" bit definitions.
598*54e60f84SAndroid Build Coastguard Worker                  */
599*54e60f84SAndroid Build Coastguard Worker                 uint32_t    pred_avail_flags                : 8;
600*54e60f84SAndroid Build Coastguard Worker             } bits;
601*54e60f84SAndroid Build Coastguard Worker             uint32_t value;
602*54e60f84SAndroid Build Coastguard Worker         } intra_fields;
603*54e60f84SAndroid Build Coastguard Worker         /**@}*/
604*54e60f84SAndroid Build Coastguard Worker 
605*54e60f84SAndroid Build Coastguard Worker         /** @name Data for inter macroblock */
606*54e60f84SAndroid Build Coastguard Worker         /**@{*/
607*54e60f84SAndroid Build Coastguard Worker         union {
608*54e60f84SAndroid Build Coastguard Worker             struct {
609*54e60f84SAndroid Build Coastguard Worker                 uint32_t reserved;
610*54e60f84SAndroid Build Coastguard Worker             } bits;
611*54e60f84SAndroid Build Coastguard Worker             uint32_t value;
612*54e60f84SAndroid Build Coastguard Worker         } inter_fields;
613*54e60f84SAndroid Build Coastguard Worker         /**@}*/
614*54e60f84SAndroid Build Coastguard Worker     } info;
615*54e60f84SAndroid Build Coastguard Worker 
616*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
617*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
618*54e60f84SAndroid Build Coastguard Worker } VAEncMacroblockParameterBufferH264;
619*54e60f84SAndroid Build Coastguard Worker 
620*54e60f84SAndroid Build Coastguard Worker /**
621*54e60f84SAndroid Build Coastguard Worker  * \brief MB partition modes and 1/2 1/4 motion search configuration
622*54e60f84SAndroid Build Coastguard Worker  *
623*54e60f84SAndroid Build Coastguard Worker  * Specifies MB partition modes that are disabled. Specifies Half-pel
624*54e60f84SAndroid Build Coastguard Worker  * mode and Quarter-pel mode searching
625*54e60f84SAndroid Build Coastguard Worker  */
626*54e60f84SAndroid Build Coastguard Worker typedef struct _VAEncMiscParameterSubMbPartPelH264 {
627*54e60f84SAndroid Build Coastguard Worker     uint32_t disable_inter_sub_mb_partition;
628*54e60f84SAndroid Build Coastguard Worker     union {
629*54e60f84SAndroid Build Coastguard Worker         struct {
630*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_16x16_inter_mb_partition        : 1;
631*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_16x8_inter_mb_partition         : 1;
632*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_8x16_inter_mb_partition         : 1;
633*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_8x8_inter_mb_partition          : 1;
634*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_8x4_inter_mb_partition          : 1;
635*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_4x8_inter_mb_partition          : 1;
636*54e60f84SAndroid Build Coastguard Worker             uint32_t disable_4x4_inter_mb_partition          : 1;
637*54e60f84SAndroid Build Coastguard Worker             uint32_t reserved                                : 1;
638*54e60f84SAndroid Build Coastguard Worker         } bits;
639*54e60f84SAndroid Build Coastguard Worker         uint8_t value;
640*54e60f84SAndroid Build Coastguard Worker     } inter_sub_mb_partition_mask;
641*54e60f84SAndroid Build Coastguard Worker 
642*54e60f84SAndroid Build Coastguard Worker     /**
643*54e60f84SAndroid Build Coastguard Worker      * \brief Precison of motion search
644*54e60f84SAndroid Build Coastguard Worker      * 0:Integer mode searching
645*54e60f84SAndroid Build Coastguard Worker      * 1:Half-pel mode searching
646*54e60f84SAndroid Build Coastguard Worker      * 2:Reserved
647*54e60f84SAndroid Build Coastguard Worker      * 3:Quarter-pel mode searching
648*54e60f84SAndroid Build Coastguard Worker      */
649*54e60f84SAndroid Build Coastguard Worker     uint32_t enable_sub_pel_mode;
650*54e60f84SAndroid Build Coastguard Worker     uint8_t sub_pel_mode;
651*54e60f84SAndroid Build Coastguard Worker     uint8_t reserved[3];
652*54e60f84SAndroid Build Coastguard Worker } VAEncMiscParameterSubMbPartPelH264;
653*54e60f84SAndroid Build Coastguard Worker /**@}*/
654*54e60f84SAndroid Build Coastguard Worker 
655*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
656*54e60f84SAndroid Build Coastguard Worker }
657*54e60f84SAndroid Build Coastguard Worker #endif
658*54e60f84SAndroid Build Coastguard Worker 
659*54e60f84SAndroid Build Coastguard Worker #endif /* VA_ENC_H264_H */
660