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