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