| Index: third_party/libva/va/va_enc_h264.h | 
| diff --git a/third_party/libva/va/va_enc_h264.h b/third_party/libva/va/va_enc_h264.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..604877fafa8077890984827f3c99a574872a040c | 
| --- /dev/null | 
| +++ b/third_party/libva/va/va_enc_h264.h | 
| @@ -0,0 +1,592 @@ | 
| +/* | 
| + * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved. | 
| + * | 
| + * Permission is hereby granted, free of charge, to any person obtaining a | 
| + * copy of this software and associated documentation files (the | 
| + * "Software"), to deal in the Software without restriction, including | 
| + * without limitation the rights to use, copy, modify, merge, publish, | 
| + * distribute, sub license, and/or sell copies of the Software, and to | 
| + * permit persons to whom the Software is furnished to do so, subject to | 
| + * the following conditions: | 
| + * | 
| + * The above copyright notice and this permission notice (including the | 
| + * next paragraph) shall be included in all copies or substantial portions | 
| + * of the Software. | 
| + * | 
| + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | 
| + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | 
| + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. | 
| + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR | 
| + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | 
| + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | 
| + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | 
| + */ | 
| + | 
| +/** | 
| + * \file va_enc_h264.h | 
| + * \brief The H.264 encoding API | 
| + * | 
| + * This file contains the \ref api_enc_h264 "H.264 encoding API". | 
| + */ | 
| + | 
| +#ifndef VA_ENC_H264_H | 
| +#define VA_ENC_H264_H | 
| + | 
| +#ifdef __cplusplus | 
| +extern "C" { | 
| +#endif | 
| + | 
| +/** | 
| + * \defgroup api_enc_h264 H.264 encoding API | 
| + * | 
| + * @{ | 
| + */ | 
| + | 
| +/** | 
| + * @name Picture flags | 
| + * | 
| + * Those flags flags are meant to signal when a picture marks the end | 
| + * of a sequence, a stream, or even both at once. | 
| + * | 
| + * @{ | 
| + */ | 
| +/** | 
| + * \brief Marks the last picture in the sequence. | 
| + * | 
| + * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. | 
| + */ | 
| +#define H264_LAST_PICTURE_EOSEQ     0x01 | 
| +/** | 
| + * \brief Marks the last picture in the stream. | 
| + * | 
| + * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. | 
| + */ | 
| +#define H264_LAST_PICTURE_EOSTREAM  0x02 | 
| +/**@}*/ | 
| + | 
| +/** | 
| + * \brief Packed header types specific to H.264 encoding. | 
| + * | 
| + * Types of packed headers generally used for H.264 encoding. Each | 
| + * associated packed header data buffer shall contain the start code | 
| + * prefix 0x000001 followed by the complete NAL unit, thus also | 
| + * including the \c nal_unit_type. | 
| + * | 
| + * Note: the start code prefix can contain an arbitrary number of leading | 
| + * zeros. The driver will skip them for emulation prevention bytes insertion, | 
| + * if necessary. | 
| + */ | 
| +typedef enum { | 
| +    /** | 
| +     * \brief Packed Sequence Parameter Set (SPS). | 
| +     * | 
| +     * The corresponding packed header data buffer shall contain the | 
| +     * complete seq_parameter_set_rbsp() syntax element. | 
| +     * | 
| +     * Note: packed \c nal_unit_type shall be equal to 7. | 
| +     */ | 
| +    VAEncPackedHeaderH264_SPS   = VAEncPackedHeaderSequence, | 
| +    /** | 
| +     * \brief Packed Picture Parameter Set (PPS). | 
| +     * | 
| +     * The corresponding packed header data buffer shall contain the | 
| +     * complete pic_parameter_set_rbsp() syntax element. | 
| +     * | 
| +     * Note: packed \c nal_unit_type shall be equal to 8. | 
| +     */ | 
| +    VAEncPackedHeaderH264_PPS   = VAEncPackedHeaderPicture, | 
| +    /** | 
| +     * \brief Packed slice header. | 
| +     * | 
| +     * The corresponding packed header data buffer shall contain the | 
| +     * \c slice_header() syntax element only, along with any start | 
| +     * code prefix and NAL unit type preceeding it. i.e. this means | 
| +     * that the buffer does not contain any of the \c slice_data() or | 
| +     * the \c rbsp_slice_trailing_bits(). | 
| +     * | 
| +     * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR | 
| +     * picture), or 5 (IDR picture). | 
| +     */ | 
| +    VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice, | 
| +    /** | 
| +     * \brief Packed Supplemental Enhancement Information (SEI). | 
| +     * | 
| +     * The corresponding packed header data buffer shall contain the | 
| +     * complete sei_rbsp() syntax element, thus including several | 
| +     * sei_message() elements if necessary. | 
| +     * | 
| +     * Note: packed \c nal_unit_type shall be equal to 6. | 
| +     */ | 
| +    VAEncPackedHeaderH264_SEI   = (VAEncPackedHeaderMiscMask | 1), | 
| +} VAEncPackedHeaderTypeH264; | 
| + | 
| +/** | 
| + * \brief Sequence parameter for H.264 encoding in baseline, main & high | 
| + * profiles. | 
| + * | 
| + * This structure holds information for \c seq_parameter_set_data() as | 
| + * defined by the H.264 specification. | 
| + * | 
| + * If packed sequence headers mode is used, i.e. if the encoding | 
| + * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE | 
| + * flag, then the driver expects two more buffers to be provided to | 
| + * the same \c vaRenderPicture() as this buffer: | 
| + * - a #VAEncPackedHeaderParameterBuffer with type set to | 
| + *   VAEncPackedHeaderType::VAEncPackedHeaderSequence ; | 
| + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed | 
| + *   header data. | 
| + * | 
| + * If \c seq_scaling_matrix_present_flag is set to \c 1, then a | 
| + * #VAIQMatrixBufferH264 buffer shall also be provided within the same | 
| + * \c vaRenderPicture() call as this sequence parameter buffer. | 
| + */ | 
| +typedef struct _VAEncSequenceParameterBufferH264 { | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   seq_parameter_set_id; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   level_idc; | 
| +    /** \brief Period between I frames. */ | 
| +    unsigned int    intra_period; | 
| +    /** \brief Period between IDR frames. */ | 
| +    unsigned int    intra_idr_period; | 
| +    /** \brief Period between I/P frames. */ | 
| +    unsigned int    ip_period; | 
| +    /** | 
| +     * \brief Initial bitrate set for this sequence in CBR or VBR modes. | 
| +     * | 
| +     * This field represents the initial bitrate value for this | 
| +     * sequence if CBR or VBR mode is used, i.e. if the encoder | 
| +     * pipeline was created with a #VAConfigAttribRateControl | 
| +     * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. | 
| +     * | 
| +     * The bitrate can be modified later on through | 
| +     * #VAEncMiscParameterRateControl buffers. | 
| +     */ | 
| +    unsigned int    bits_per_second; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    max_num_ref_frames; | 
| +    /** \brief Picture width in macroblocks. */ | 
| +    unsigned short  picture_width_in_mbs; | 
| +    /** \brief Picture height in macroblocks. */ | 
| +    unsigned short  picture_height_in_mbs; | 
| + | 
| +    union { | 
| +        struct { | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int chroma_format_idc                      : 2; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int frame_mbs_only_flag                    : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int mb_adaptive_frame_field_flag           : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int seq_scaling_matrix_present_flag        : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int direct_8x8_inference_flag              : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int log2_max_frame_num_minus4              : 4; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int pic_order_cnt_type                     : 2; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int log2_max_pic_order_cnt_lsb_minus4      : 4; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int delta_pic_order_always_zero_flag       : 1; | 
| +        } bits; | 
| +        unsigned int value; | 
| +    } seq_fields; | 
| + | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   bit_depth_luma_minus8; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   bit_depth_chroma_minus8; | 
| + | 
| +    /** if pic_order_cnt_type == 1 */ | 
| +    /**@{*/ | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   num_ref_frames_in_pic_order_cnt_cycle; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    int             offset_for_non_ref_pic; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    int             offset_for_top_to_bottom_field; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    int             offset_for_ref_frame[256]; | 
| +    /**@}*/ | 
| + | 
| +    /** @name Cropping (optional) */ | 
| +    /**@{*/ | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   frame_cropping_flag; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    frame_crop_left_offset; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    frame_crop_right_offset; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    frame_crop_top_offset; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    frame_crop_bottom_offset; | 
| +    /**@}*/ | 
| + | 
| +    /** @name VUI parameters (optional) */ | 
| +    /**@{*/ | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   vui_parameters_present_flag; | 
| +    union { | 
| +        struct { | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int aspect_ratio_info_present_flag         : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int timing_info_present_flag               : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int bitstream_restriction_flag             : 1; | 
| +            /** \brief Range: 0 to 16, inclusive. */ | 
| +            unsigned int log2_max_mv_length_horizontal          : 5; | 
| +            /** \brief Range: 0 to 16, inclusive. */ | 
| +            unsigned int log2_max_mv_length_vertical            : 5; | 
| +        } bits; | 
| +        unsigned int value; | 
| +    } vui_fields; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   aspect_ratio_idc; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    sar_width; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    sar_height; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    num_units_in_tick; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned int    time_scale; | 
| +    /**@}*/ | 
| +} VAEncSequenceParameterBufferH264; | 
| + | 
| +/** | 
| + * \brief Picture parameter for H.264 encoding in baseline, main & high | 
| + * profiles. | 
| + * | 
| + * This structure holds information for \c pic_parameter_set_rbsp() as | 
| + * defined by the H.264 specification. | 
| + * | 
| + * If packed picture headers mode is used, i.e. if the encoding | 
| + * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE | 
| + * flag, then the driver expects two more buffers to be provided to | 
| + * the same \c vaRenderPicture() as this buffer: | 
| + * - a #VAEncPackedHeaderParameterBuffer with type set to | 
| + *   VAEncPackedHeaderType::VAEncPackedHeaderPicture ; | 
| + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed | 
| + *   header data. | 
| + * | 
| + * If \c pic_scaling_matrix_present_flag is set to \c 1, then a | 
| + * #VAIQMatrixBufferH264 buffer shall also be provided within the same | 
| + * \c vaRenderPicture() call as this picture parameter buffer. | 
| + */ | 
| +typedef struct _VAEncPictureParameterBufferH264 { | 
| +    /** | 
| +     * \brief Information about the picture to be encoded. | 
| +     * | 
| +     * See #VAPictureH264 for further description of each field. | 
| +     * Note that CurrPic.picture_id represents the reconstructed | 
| +     * (decoded) picture. User provides a scratch VA surface ID here. | 
| +     */ | 
| +    VAPictureH264   CurrPic; | 
| +    /** | 
| +     * \brief Decoded Picture Buffer (DPB). | 
| +     * | 
| +     * This array represents the list of reconstructed (decoded) | 
| +     * frames used as reference. It is important to keep track of | 
| +     * reconstructed frames so that they can be used later on as | 
| +     * reference for P or B-frames encoding. | 
| +     */ | 
| +    VAPictureH264   ReferenceFrames[16]; | 
| +    /** | 
| +     * \brief Output encoded bitstream. | 
| +     * | 
| +     * \ref coded_buf has type #VAEncCodedBufferType. It should be | 
| +     * large enough to hold the compressed NAL slice and possibly SPS | 
| +     * and PPS NAL units. | 
| +     */ | 
| +    VABufferID      coded_buf; | 
| + | 
| +    /** \brief The picture parameter set referred to in the slice header. */ | 
| +    unsigned char   pic_parameter_set_id; | 
| +    /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ | 
| +    unsigned char   seq_parameter_set_id; | 
| + | 
| +    /** | 
| +     * \brief OR'd flags describing whether the picture is the last one or not. | 
| +     * | 
| +     * This fields holds 0 if the picture to be encoded is not the last | 
| +     * one in the stream or sequence. Otherwise, it is a combination of | 
| +     * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. | 
| +     */ | 
| +    unsigned char   last_picture; | 
| + | 
| +    /** \brief The picture identifier. | 
| +     *   Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. | 
| +     */ | 
| +    unsigned short  frame_num; | 
| + | 
| +    /** \brief \c pic_init_qp_minus26 + 26. */ | 
| +    unsigned char   pic_init_qp; | 
| +    /** \brief Maximum reference index for reference picture list 0. | 
| +     *   Range: 0 to 31, inclusive. | 
| +     */ | 
| +    unsigned char   num_ref_idx_l0_active_minus1; | 
| +    /** \brief Maximum reference index for reference picture list 1. | 
| +     *  Range: 0 to 31, inclusive. | 
| +     */ | 
| +    unsigned char   num_ref_idx_l1_active_minus1; | 
| + | 
| +    /** \brief Range: -12 to 12, inclusive. */ | 
| +    signed char     chroma_qp_index_offset; | 
| +    /** \brief Range: -12 to 12, inclusive. */ | 
| +    signed char     second_chroma_qp_index_offset; | 
| + | 
| +    union { | 
| +        struct { | 
| +            /** \brief Is picture an IDR picture? */ | 
| +            unsigned int idr_pic_flag                           : 1; | 
| +            /** \brief Is picture a reference picture? */ | 
| +            unsigned int reference_pic_flag                     : 2; | 
| +            /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ | 
| +            unsigned int entropy_coding_mode_flag               : 1; | 
| +            /** \brief Is weighted prediction applied to P slices? */ | 
| +            unsigned int weighted_pred_flag                     : 1; | 
| +            /** \brief Range: 0 to 2, inclusive. */ | 
| +            unsigned int weighted_bipred_idc                    : 2; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int constrained_intra_pred_flag            : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int transform_8x8_mode_flag                : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int deblocking_filter_control_present_flag : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int redundant_pic_cnt_present_flag         : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int pic_order_present_flag                 : 1; | 
| +            /** \brief Same as the H.264 bitstream syntax element. */ | 
| +            unsigned int pic_scaling_matrix_present_flag        : 1; | 
| +        } bits; | 
| +        unsigned int value; | 
| +    } pic_fields; | 
| +} VAEncPictureParameterBufferH264; | 
| + | 
| +/** | 
| + * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. | 
| + * | 
| + * This structure holds information for \c | 
| + * slice_layer_without_partitioning_rbsp() as defined by the H.264 | 
| + * specification. | 
| + * | 
| + * If packed slice headers mode is used, i.e. if the encoding | 
| + * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE | 
| + * flag, then the driver expects two more buffers to be provided to | 
| + * the same \c vaRenderPicture() as this buffer: | 
| + * - a #VAEncPackedHeaderParameterBuffer with type set to | 
| + *   VAEncPackedHeaderType::VAEncPackedHeaderSlice ; | 
| + * - a #VAEncPackedHeaderDataBuffer which holds the actual packed | 
| + *   header data. | 
| + * | 
| + * If per-macroblock encoder configuration is needed, \c macroblock_info | 
| + * references a buffer of type #VAEncMacroblockParameterBufferH264. This | 
| + * buffer is not passed to vaRenderPicture(). i.e. it is not destroyed | 
| + * by subsequent calls to vaRenderPicture() and then can be re-used | 
| + * without re-allocating the whole buffer. | 
| + */ | 
| +typedef struct _VAEncSliceParameterBufferH264 { | 
| +    /** \brief Starting MB address for this slice. */ | 
| +    unsigned int    macroblock_address; | 
| +    /** \brief Number of macroblocks in this slice. */ | 
| +    unsigned int    num_macroblocks; | 
| +    /** | 
| +     * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. | 
| +     * | 
| +     * If per-MB encoder configuration is needed, then \ref macroblock_info | 
| +     * references a buffer of type #VAEncMacroblockParameterBufferH264 | 
| +     * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id | 
| +     * is set to \c VA_INVALID_ID and per-MB configuration is derived | 
| +     * from this slice parameter. | 
| +     * | 
| +     * The \c macroblock_info buffer must hold \ref num_macroblocks | 
| +     * elements. | 
| +     */ | 
| +    VABufferID      macroblock_info; | 
| +    /** \brief Slice type. | 
| +     *  Range: 0..2, 5..7, i.e. no switching slices. | 
| +     */ | 
| +    unsigned char   slice_type; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   pic_parameter_set_id; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned short  idr_pic_id; | 
| + | 
| +    /** @name If pic_order_cnt_type == 0 */ | 
| +    /**@{*/ | 
| +    /** \brief The picture order count modulo MaxPicOrderCntLsb. */ | 
| +    unsigned short  pic_order_cnt_lsb; | 
| +    /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ | 
| +    int             delta_pic_order_cnt_bottom; | 
| +    /**@}*/ | 
| +    /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ | 
| +    /**@{*/ | 
| +    /** \brief [0]: top, [1]: bottom. */ | 
| +    int             delta_pic_order_cnt[2]; | 
| +    /**@}*/ | 
| + | 
| +    /** @name If slice_type == B */ | 
| +    /**@{*/ | 
| +    unsigned char   direct_spatial_mv_pred_flag; | 
| +    /**@}*/ | 
| + | 
| +    /** @name If slice_type == P */ | 
| +    /**@{*/ | 
| +    /** \brief Specifies if | 
| +     * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or | 
| +     * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are | 
| +     * overriden by the values for this slice. | 
| +     */ | 
| +    unsigned char   num_ref_idx_active_override_flag; | 
| +    /** \brief Maximum reference index for reference picture list 0. | 
| +     *  Range: 0 to 31, inclusive. | 
| +     */ | 
| +    unsigned char   num_ref_idx_l0_active_minus1; | 
| +    /** \brief Maximum reference index for reference picture list 1. | 
| +     *  Range: 0 to 31, inclusive. | 
| +     */ | 
| +    unsigned char   num_ref_idx_l1_active_minus1; | 
| +    /** \brief Reference picture list 0 (for P slices). */ | 
| +    VAPictureH264   RefPicList0[32]; | 
| +    /** \brief Reference picture list 1 (for B slices). */ | 
| +    VAPictureH264   RefPicList1[32]; | 
| +    /**@}*/ | 
| + | 
| +    /** @name pred_weight_table() */ | 
| +    /**@{*/ | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   luma_log2_weight_denom; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   chroma_log2_weight_denom; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   luma_weight_l0_flag; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed short    luma_weight_l0[32]; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed short    luma_offset_l0[32]; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   chroma_weight_l0_flag; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed short    chroma_weight_l0[32][2]; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed short    chroma_offset_l0[32][2]; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   luma_weight_l1_flag; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed short    luma_weight_l1[32]; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed short    luma_offset_l1[32]; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    unsigned char   chroma_weight_l1_flag; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed short    chroma_weight_l1[32][2]; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed short    chroma_offset_l1[32][2]; | 
| +    /**@}*/ | 
| + | 
| +    /** \brief Range: 0 to 2, inclusive. */ | 
| +    unsigned char   cabac_init_idc; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed char     slice_qp_delta; | 
| +    /** @name If deblocking_filter_control_present_flag */ | 
| +    /**@{*/ | 
| +    /** \brief Range: 0 to 2, inclusive. */ | 
| +    unsigned char   disable_deblocking_filter_idc; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed char     slice_alpha_c0_offset_div2; | 
| +    /** \brief Same as the H.264 bitstream syntax element. */ | 
| +    signed char     slice_beta_offset_div2; | 
| +    /**@}*/ | 
| +} VAEncSliceParameterBufferH264; | 
| + | 
| +/** | 
| + * @name Macroblock neighbour availability bits | 
| + * | 
| + * \anchor api_enc_h264_mb_pred_avail_bits | 
| + * Definitions for macroblock neighbour availability bits used in | 
| + * intra prediction mode (non MBAFF only). | 
| + * | 
| + * @{ | 
| + */ | 
| +/** \brief References macroblock in the top-left corner. */ | 
| +#define VA_MB_PRED_AVAIL_TOP_LEFT         (1 << 2) | 
| +/** \brief References macroblock above the current macroblock. */ | 
| +#define VA_MB_PRED_AVAIL_TOP              (1 << 4) | 
| +/** \brief References macroblock in the top-right corner. */ | 
| +#define VA_MB_PRED_AVAIL_TOP_RIGHT        (1 << 3) | 
| +/** \brief References macroblock on the left of the current macroblock. */ | 
| +#define VA_MB_PRED_AVAIL_LEFT             (1 << 6) | 
| +/**@}*/ | 
| + | 
| +/** | 
| + * \brief Macroblock parameter for H.264 encoding in baseline, main & high | 
| + * profiles. | 
| + * | 
| + * This structure holds per-macroblock information. The buffer must be | 
| + * allocated with as many elements (macroblocks) as necessary to fit | 
| + * the slice to be encoded. Besides, the per-macroblock records must | 
| + * be written in a strict raster order and with no gap. i.e. every | 
| + * macroblock, regardless of its type, shall have an entry. | 
| + */ | 
| +typedef struct _VAEncMacroblockParameterBufferH264 { | 
| +    /** | 
| +     * \brief Quantization parameter. | 
| +     * | 
| +     * Requested quantization parameter. Range: 0 to 51, inclusive. | 
| +     * If \ref qp is set to 0xff, then the actual value is derived | 
| +     * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. | 
| +     */ | 
| +    unsigned char   qp; | 
| + | 
| +    union { | 
| +        /** @name Data for intra macroblock */ | 
| +        /**@{*/ | 
| +        struct { | 
| +            union { | 
| +                /** | 
| +                 * \brief Flag specified to override MB neighbour | 
| +                 * availability bits from VME stage. | 
| +                 * | 
| +                 * This flag specifies that macroblock neighbour | 
| +                 * availability bits from the VME stage are overriden | 
| +                 * by the \ref pred_avail_flags hereunder. | 
| +                 */ | 
| +                unsigned int    pred_avail_override_flag        : 1; | 
| +                /** | 
| +                 * \brief Bitwise representation of which macroblocks | 
| +                 * are available for intra prediction. | 
| +                 * | 
| +                 * If the slice is intra-coded, this field represents | 
| +                 * the macroblocks available for intra prediction. | 
| +                 * See \ref api_enc_h264_mb_pred_avail_bits | 
| +                 * "macroblock neighbour availability" bit definitions. | 
| +                 */ | 
| +                unsigned int    pred_avail_flags                : 8; | 
| +            } bits; | 
| +            unsigned int value; | 
| +        } intra_fields; | 
| +        /**@}*/ | 
| + | 
| +        /** @name Data for inter macroblock */ | 
| +        /**@{*/ | 
| +        struct { | 
| +            union { | 
| +            } bits; | 
| +            unsigned int value; | 
| +        } inter_fields; | 
| +        /**@}*/ | 
| +    } info; | 
| +} VAEncMacroblockParameterBufferH264; | 
| + | 
| +/**@}*/ | 
| + | 
| +#ifdef __cplusplus | 
| +} | 
| +#endif | 
| + | 
| +#endif /* VA_ENC_H264_H */ | 
|  |