/*
 * 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.
     *
     * @deprecated
     * This is a deprecated packed header flag, All applications can use
     * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed
     * SEI header data buffer to the driver
     */
    VAEncPackedHeaderH264_SEI va_deprecated_enum  = (0x80000000 | 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. */
    uint8_t   seq_parameter_set_id;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   level_idc;
    /** \brief Period between I frames. */
    uint32_t    intra_period;
    /** \brief Period between IDR frames. */
    uint32_t    intra_idr_period;
    /** \brief Period between I/P frames. */
    uint32_t    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.
     */
    uint32_t    bits_per_second;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    max_num_ref_frames;
    /** \brief Picture width in macroblocks. */
    uint16_t  picture_width_in_mbs;
    /** \brief Picture height in macroblocks. */
    uint16_t  picture_height_in_mbs;

    union {
        struct {
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t chroma_format_idc                      : 2;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t frame_mbs_only_flag                    : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t mb_adaptive_frame_field_flag           : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t seq_scaling_matrix_present_flag        : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t direct_8x8_inference_flag              : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t log2_max_frame_num_minus4              : 4;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t pic_order_cnt_type                     : 2;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t log2_max_pic_order_cnt_lsb_minus4      : 4;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t delta_pic_order_always_zero_flag       : 1;
        } bits;
        uint32_t value;
    } seq_fields;

    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   bit_depth_luma_minus8;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   bit_depth_chroma_minus8;

    /** if pic_order_cnt_type == 1 */
    /**@{*/
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   num_ref_frames_in_pic_order_cnt_cycle;
    /** \brief Same as the H.264 bitstream syntax element. */
    int32_t             offset_for_non_ref_pic;
    /** \brief Same as the H.264 bitstream syntax element. */
    int32_t             offset_for_top_to_bottom_field;
    /** \brief Same as the H.264 bitstream syntax element. */
    int32_t             offset_for_ref_frame[256];
    /**@}*/

    /** @name Cropping (optional) */
    /**@{*/
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   frame_cropping_flag;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    frame_crop_left_offset;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    frame_crop_right_offset;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    frame_crop_top_offset;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    frame_crop_bottom_offset;
    /**@}*/

    /** @name VUI parameters (optional) */
    /**@{*/
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   vui_parameters_present_flag;
    union {
        struct {
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t aspect_ratio_info_present_flag         : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t timing_info_present_flag               : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t bitstream_restriction_flag             : 1;
            /** \brief Range: 0 to 16, inclusive. */
            uint32_t log2_max_mv_length_horizontal          : 5;
            /** \brief Range: 0 to 16, inclusive. */
            uint32_t log2_max_mv_length_vertical            : 5;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t fixed_frame_rate_flag                  : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t low_delay_hrd_flag                     : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t motion_vectors_over_pic_boundaries_flag: 1;
            /** \brief Reserved for future use, must be zero */
            uint32_t reserved                               : 16;
        } bits;
        uint32_t value;
    } vui_fields;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   aspect_ratio_idc;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    sar_width;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    sar_height;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    num_units_in_tick;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint32_t    time_scale;

    /** \brief Reserved bytes for future use, must be zero */
    uint32_t                va_reserved[VA_PADDING_LOW];
    /**@}*/
} 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. */
    uint8_t   pic_parameter_set_id;
    /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */
    uint8_t   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.
     */
    uint8_t   last_picture;

    /** \brief The picture identifier.
     *   Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive.
     */
    uint16_t  frame_num;

    /** \brief \c pic_init_qp_minus26 + 26. */
    uint8_t   pic_init_qp;
    /** \brief Maximum reference index for reference picture list 0.
     *   Range: 0 to 31, inclusive.
     */
    uint8_t   num_ref_idx_l0_active_minus1;
    /** \brief Maximum reference index for reference picture list 1.
     *  Range: 0 to 31, inclusive.
     */
    uint8_t   num_ref_idx_l1_active_minus1;

    /** \brief Range: -12 to 12, inclusive. */
    int8_t     chroma_qp_index_offset;
    /** \brief Range: -12 to 12, inclusive. */
    int8_t     second_chroma_qp_index_offset;

    union {
        struct {
            /** \brief Is picture an IDR picture? */
            uint32_t idr_pic_flag                           : 1;
            /** \brief Is picture a reference picture? */
            uint32_t reference_pic_flag                     : 2;
            /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */
            uint32_t entropy_coding_mode_flag               : 1;
            /** \brief Is weighted prediction applied to P slices? */
            uint32_t weighted_pred_flag                     : 1;
            /** \brief Range: 0 to 2, inclusive. */
            uint32_t weighted_bipred_idc                    : 2;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t constrained_intra_pred_flag            : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t transform_8x8_mode_flag                : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t deblocking_filter_control_present_flag : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t redundant_pic_cnt_present_flag         : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t pic_order_present_flag                 : 1;
            /** \brief Same as the H.264 bitstream syntax element. */
            uint32_t pic_scaling_matrix_present_flag        : 1;
        } bits;
        uint32_t value;
    } pic_fields;

    /** \brief Reserved bytes for future use, must be zero */
    uint32_t                va_reserved[VA_PADDING_LOW];
} VAEncPictureParameterBufferH264;

typedef struct _VAEncQPBufferH264 {
    /*
     * \brief This structure holds QP per 16x16 macroblock. Buffer size shall be
     * sufficient to fit the slice or frame to be encoded depending on if it is a
     * slice level or frame level encoding.
     */
    uint8_t qp;
} VAEncQPBufferH264;

/**
 * \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() and it can be re-used
 * without re-allocating the whole buffer.
 */
typedef struct _VAEncSliceParameterBufferH264 {
    /** \brief Starting MB address for this slice. */
    uint32_t    macroblock_address;
    /** \brief Number of macroblocks in this slice. */
    uint32_t    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.
     */
    uint8_t   slice_type;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   pic_parameter_set_id;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint16_t  idr_pic_id;

    /** @name If pic_order_cnt_type == 0 */
    /**@{*/
    /** \brief The picture order count modulo MaxPicOrderCntLsb. */
    uint16_t  pic_order_cnt_lsb;
    /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */
    int32_t             delta_pic_order_cnt_bottom;
    /**@}*/
    /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */
    /**@{*/
    /** \brief [0]: top, [1]: bottom. */
    int32_t             delta_pic_order_cnt[2];
    /**@}*/

    /** @name If slice_type == B */
    /**@{*/
    uint8_t   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.
     */
    uint8_t   num_ref_idx_active_override_flag;
    /** \brief Maximum reference index for reference picture list 0.
     *  Range: 0 to 31, inclusive.
     */
    uint8_t   num_ref_idx_l0_active_minus1;
    /** \brief Maximum reference index for reference picture list 1.
     *  Range: 0 to 31, inclusive.
     */
    uint8_t   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. */
    uint8_t   luma_log2_weight_denom;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   chroma_log2_weight_denom;
    /** \brief Same as the H.264 bitstream syntax element. */
    uint8_t   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. */
    uint8_t   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. */
    uint8_t   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. */
    uint8_t   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. */
    uint8_t   cabac_init_idc;
    /** \brief Same as the H.264 bitstream syntax element. */
    int8_t     slice_qp_delta;
    /** @name If deblocking_filter_control_present_flag */
    /**@{*/
    /** \brief Range: 0 to 2, inclusive. */
    uint8_t   disable_deblocking_filter_idc;
    /** \brief Same as the H.264 bitstream syntax element. */
    int8_t     slice_alpha_c0_offset_div2;
    /** \brief Same as the H.264 bitstream syntax element. */
    int8_t     slice_beta_offset_div2;

    /** \brief Reserved bytes for future use, must be zero */
    uint32_t                va_reserved[VA_PADDING_LOW];
    /**@}*/
} 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.
     */
    uint8_t   qp;

    union {
        /** @name Data for intra macroblock */
        /**@{*/
        union {
            struct {
                /**
                 * \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.
                 */
                uint32_t    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.
                 */
                uint32_t    pred_avail_flags                : 8;
            } bits;
            uint32_t value;
        } intra_fields;
        /**@}*/

        /** @name Data for inter macroblock */
        /**@{*/
        union {
            struct {
                uint32_t reserved;
            } bits;
            uint32_t value;
        } inter_fields;
        /**@}*/
    } info;

    /** \brief Reserved bytes for future use, must be zero */
    uint32_t                va_reserved[VA_PADDING_LOW];
} VAEncMacroblockParameterBufferH264;

/**
 * \brief MB partition modes and 1/2 1/4 motion search configuration
 *
 * Specifies MB partition modes that are disabled. Specifies Half-pel
 * mode and Quarter-pel mode searching
 */
typedef struct _VAEncMiscParameterSubMbPartPelH264
{
    uint32_t disable_inter_sub_mb_partition;
    union {
        struct {
            uint32_t disable_16x16_inter_mb_partition        : 1;
            uint32_t disable_16x8_inter_mb_partition         : 1;
            uint32_t disable_8x16_inter_mb_partition         : 1;
            uint32_t disable_8x8_inter_mb_partition          : 1;
            uint32_t disable_8x4_inter_mb_partition          : 1;
            uint32_t disable_4x8_inter_mb_partition          : 1;
            uint32_t disable_4x4_inter_mb_partition          : 1;
            uint32_t reserved                                : 1;
        } bits;
         uint8_t value;
    } inter_sub_mb_partition_mask;

    /**
     * \brief Precison of motion search
     * 0:Integer mode searching
     * 1:Half-pel mode searching
     * 2:Reserved
     * 3:Quarter-pel mode searching
     */
    uint32_t enable_sub_pel_mode;
    uint8_t sub_pel_mode;
    uint8_t reserved[3];
} VAEncMiscParameterSubMbPartPelH264;
/**@}*/

#ifdef __cplusplus
}
#endif

#endif /* VA_ENC_H264_H */
