14b672db6ee89c9846451bbab23cf18e93c4260b2hding/*
24b672db6ee89c9846451bbab23cf18e93c4260b2hding * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved.
34b672db6ee89c9846451bbab23cf18e93c4260b2hding *
44b672db6ee89c9846451bbab23cf18e93c4260b2hding * Permission is hereby granted, free of charge, to any person obtaining a
54b672db6ee89c9846451bbab23cf18e93c4260b2hding * copy of this software and associated documentation files (the
64b672db6ee89c9846451bbab23cf18e93c4260b2hding * "Software"), to deal in the Software without restriction, including
74b672db6ee89c9846451bbab23cf18e93c4260b2hding * without limitation the rights to use, copy, modify, merge, publish,
84b672db6ee89c9846451bbab23cf18e93c4260b2hding * distribute, sub license, and/or sell copies of the Software, and to
94b672db6ee89c9846451bbab23cf18e93c4260b2hding * permit persons to whom the Software is furnished to do so, subject to
104b672db6ee89c9846451bbab23cf18e93c4260b2hding * the following conditions:
114b672db6ee89c9846451bbab23cf18e93c4260b2hding *
124b672db6ee89c9846451bbab23cf18e93c4260b2hding * The above copyright notice and this permission notice (including the
134b672db6ee89c9846451bbab23cf18e93c4260b2hding * next paragraph) shall be included in all copies or substantial portions
144b672db6ee89c9846451bbab23cf18e93c4260b2hding * of the Software.
154b672db6ee89c9846451bbab23cf18e93c4260b2hding *
164b672db6ee89c9846451bbab23cf18e93c4260b2hding * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
174b672db6ee89c9846451bbab23cf18e93c4260b2hding * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
184b672db6ee89c9846451bbab23cf18e93c4260b2hding * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
194b672db6ee89c9846451bbab23cf18e93c4260b2hding * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
204b672db6ee89c9846451bbab23cf18e93c4260b2hding * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
214b672db6ee89c9846451bbab23cf18e93c4260b2hding * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
224b672db6ee89c9846451bbab23cf18e93c4260b2hding * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
234b672db6ee89c9846451bbab23cf18e93c4260b2hding */
244b672db6ee89c9846451bbab23cf18e93c4260b2hding
254b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
264b672db6ee89c9846451bbab23cf18e93c4260b2hding * \file va_enc_h264.h
274b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief The H.264 encoding API
284b672db6ee89c9846451bbab23cf18e93c4260b2hding *
294b672db6ee89c9846451bbab23cf18e93c4260b2hding * This file contains the \ref api_enc_h264 "H.264 encoding API".
304b672db6ee89c9846451bbab23cf18e93c4260b2hding */
314b672db6ee89c9846451bbab23cf18e93c4260b2hding
324b672db6ee89c9846451bbab23cf18e93c4260b2hding#ifndef VA_ENC_H264_H
334b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_ENC_H264_H
344b672db6ee89c9846451bbab23cf18e93c4260b2hding
354b672db6ee89c9846451bbab23cf18e93c4260b2hding#ifdef __cplusplus
364b672db6ee89c9846451bbab23cf18e93c4260b2hdingextern "C" {
374b672db6ee89c9846451bbab23cf18e93c4260b2hding#endif
384b672db6ee89c9846451bbab23cf18e93c4260b2hding
39f6339eece05892fb49c4891b838545c41159ae39Austin Yuan#include <stdint.h>
404b672db6ee89c9846451bbab23cf18e93c4260b2hding#include <va/va_enc.h>
414b672db6ee89c9846451bbab23cf18e93c4260b2hding
424b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
434b672db6ee89c9846451bbab23cf18e93c4260b2hding * \defgroup api_enc_h264 H.264 encoding API
444b672db6ee89c9846451bbab23cf18e93c4260b2hding *
454b672db6ee89c9846451bbab23cf18e93c4260b2hding * @{
464b672db6ee89c9846451bbab23cf18e93c4260b2hding */
474b672db6ee89c9846451bbab23cf18e93c4260b2hding
484b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
494b672db6ee89c9846451bbab23cf18e93c4260b2hding * @name Picture flags
504b672db6ee89c9846451bbab23cf18e93c4260b2hding *
514b672db6ee89c9846451bbab23cf18e93c4260b2hding * Those flags flags are meant to signal when a picture marks the end
524b672db6ee89c9846451bbab23cf18e93c4260b2hding * of a sequence, a stream, or even both at once.
534b672db6ee89c9846451bbab23cf18e93c4260b2hding *
544b672db6ee89c9846451bbab23cf18e93c4260b2hding * @{
554b672db6ee89c9846451bbab23cf18e93c4260b2hding */
564b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
574b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Marks the last picture in the sequence.
584b672db6ee89c9846451bbab23cf18e93c4260b2hding *
594b672db6ee89c9846451bbab23cf18e93c4260b2hding * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame.
604b672db6ee89c9846451bbab23cf18e93c4260b2hding */
61409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define H264_LAST_PICTURE_EOSEQ     VA_ENC_LAST_PICTURE_EOSEQ
624b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
634b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Marks the last picture in the stream.
644b672db6ee89c9846451bbab23cf18e93c4260b2hding *
654b672db6ee89c9846451bbab23cf18e93c4260b2hding * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame.
664b672db6ee89c9846451bbab23cf18e93c4260b2hding */
67409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan#define H264_LAST_PICTURE_EOSTREAM  VA_ENC_LAST_PICTURE_EOSTREAM
684b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/
694b672db6ee89c9846451bbab23cf18e93c4260b2hding
704b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
714b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Packed header types specific to H.264 encoding.
724b672db6ee89c9846451bbab23cf18e93c4260b2hding *
734b672db6ee89c9846451bbab23cf18e93c4260b2hding * Types of packed headers generally used for H.264 encoding. Each
744b672db6ee89c9846451bbab23cf18e93c4260b2hding * associated packed header data buffer shall contain the start code
754b672db6ee89c9846451bbab23cf18e93c4260b2hding * prefix 0x000001 followed by the complete NAL unit, thus also
764b672db6ee89c9846451bbab23cf18e93c4260b2hding * including the \c nal_unit_type.
774b672db6ee89c9846451bbab23cf18e93c4260b2hding *
784b672db6ee89c9846451bbab23cf18e93c4260b2hding * Note: the start code prefix can contain an arbitrary number of leading
794b672db6ee89c9846451bbab23cf18e93c4260b2hding * zeros. The driver will skip them for emulation prevention bytes insertion,
804b672db6ee89c9846451bbab23cf18e93c4260b2hding * if necessary.
814b672db6ee89c9846451bbab23cf18e93c4260b2hding */
824b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef enum {
834b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
844b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Packed Sequence Parameter Set (SPS).
854b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
864b672db6ee89c9846451bbab23cf18e93c4260b2hding     * The corresponding packed header data buffer shall contain the
874b672db6ee89c9846451bbab23cf18e93c4260b2hding     * complete seq_parameter_set_rbsp() syntax element.
884b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
894b672db6ee89c9846451bbab23cf18e93c4260b2hding     * Note: packed \c nal_unit_type shall be equal to 7.
904b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
914b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAEncPackedHeaderH264_SPS   = VAEncPackedHeaderSequence,
924b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
934b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Packed Picture Parameter Set (PPS).
944b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
954b672db6ee89c9846451bbab23cf18e93c4260b2hding     * The corresponding packed header data buffer shall contain the
964b672db6ee89c9846451bbab23cf18e93c4260b2hding     * complete pic_parameter_set_rbsp() syntax element.
974b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
984b672db6ee89c9846451bbab23cf18e93c4260b2hding     * Note: packed \c nal_unit_type shall be equal to 8.
994b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
1004b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAEncPackedHeaderH264_PPS   = VAEncPackedHeaderPicture,
1014b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
1024b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Packed slice header.
1034b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
1044b672db6ee89c9846451bbab23cf18e93c4260b2hding     * The corresponding packed header data buffer shall contain the
1054b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \c slice_header() syntax element only, along with any start
1064b672db6ee89c9846451bbab23cf18e93c4260b2hding     * code prefix and NAL unit type preceeding it. i.e. this means
1074b672db6ee89c9846451bbab23cf18e93c4260b2hding     * that the buffer does not contain any of the \c slice_data() or
1084b672db6ee89c9846451bbab23cf18e93c4260b2hding     * the \c rbsp_slice_trailing_bits().
1094b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
1104b672db6ee89c9846451bbab23cf18e93c4260b2hding     * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR
1114b672db6ee89c9846451bbab23cf18e93c4260b2hding     * picture), or 5 (IDR picture).
1124b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
1134b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice,
1144b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
1154b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Packed Supplemental Enhancement Information (SEI).
1164b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
1174b672db6ee89c9846451bbab23cf18e93c4260b2hding     * The corresponding packed header data buffer shall contain the
1184b672db6ee89c9846451bbab23cf18e93c4260b2hding     * complete sei_rbsp() syntax element, thus including several
1194b672db6ee89c9846451bbab23cf18e93c4260b2hding     * sei_message() elements if necessary.
1204b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
1214b672db6ee89c9846451bbab23cf18e93c4260b2hding     * Note: packed \c nal_unit_type shall be equal to 6.
1224b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
1234b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAEncPackedHeaderH264_SEI   = (VAEncPackedHeaderMiscMask | 1),
1244b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncPackedHeaderTypeH264;
1254b672db6ee89c9846451bbab23cf18e93c4260b2hding
1264b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
127409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * \brief Sequence parameter for H.264 encoding in baseline, main & high
128409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * profiles.
1294b672db6ee89c9846451bbab23cf18e93c4260b2hding *
1304b672db6ee89c9846451bbab23cf18e93c4260b2hding * This structure holds information for \c seq_parameter_set_data() as
1314b672db6ee89c9846451bbab23cf18e93c4260b2hding * defined by the H.264 specification.
1324b672db6ee89c9846451bbab23cf18e93c4260b2hding *
1334b672db6ee89c9846451bbab23cf18e93c4260b2hding * If packed sequence headers mode is used, i.e. if the encoding
1344b672db6ee89c9846451bbab23cf18e93c4260b2hding * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE
1354b672db6ee89c9846451bbab23cf18e93c4260b2hding * flag, then the driver expects two more buffers to be provided to
1364b672db6ee89c9846451bbab23cf18e93c4260b2hding * the same \c vaRenderPicture() as this buffer:
1374b672db6ee89c9846451bbab23cf18e93c4260b2hding * - a #VAEncPackedHeaderParameterBuffer with type set to
1384b672db6ee89c9846451bbab23cf18e93c4260b2hding *   VAEncPackedHeaderType::VAEncPackedHeaderSequence ;
1394b672db6ee89c9846451bbab23cf18e93c4260b2hding * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
1404b672db6ee89c9846451bbab23cf18e93c4260b2hding *   header data.
1414b672db6ee89c9846451bbab23cf18e93c4260b2hding *
1424b672db6ee89c9846451bbab23cf18e93c4260b2hding * If \c seq_scaling_matrix_present_flag is set to \c 1, then a
1434b672db6ee89c9846451bbab23cf18e93c4260b2hding * #VAIQMatrixBufferH264 buffer shall also be provided within the same
1444b672db6ee89c9846451bbab23cf18e93c4260b2hding * \c vaRenderPicture() call as this sequence parameter buffer.
1454b672db6ee89c9846451bbab23cf18e93c4260b2hding */
1464b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef struct _VAEncSequenceParameterBufferH264 {
1474b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
1484b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   seq_parameter_set_id;
1494b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
1504b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   level_idc;
1514b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Period between I frames. */
1524b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    intra_period;
1534b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Period between IDR frames. */
1544b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    intra_idr_period;
1554b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Period between I/P frames. */
1564b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    ip_period;
1574b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
1584b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Initial bitrate set for this sequence in CBR or VBR modes.
1594b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
1604b672db6ee89c9846451bbab23cf18e93c4260b2hding     * This field represents the initial bitrate value for this
1614b672db6ee89c9846451bbab23cf18e93c4260b2hding     * sequence if CBR or VBR mode is used, i.e. if the encoder
1624b672db6ee89c9846451bbab23cf18e93c4260b2hding     * pipeline was created with a #VAConfigAttribRateControl
1634b672db6ee89c9846451bbab23cf18e93c4260b2hding     * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
1644b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
1654b672db6ee89c9846451bbab23cf18e93c4260b2hding     * The bitrate can be modified later on through
1664b672db6ee89c9846451bbab23cf18e93c4260b2hding     * #VAEncMiscParameterRateControl buffers.
1674b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
1684b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    bits_per_second;
1694b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
1704b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    max_num_ref_frames;
1714b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Picture width in macroblocks. */
1724b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned short  picture_width_in_mbs;
1734b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Picture height in macroblocks. */
1744b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned short  picture_height_in_mbs;
1754b672db6ee89c9846451bbab23cf18e93c4260b2hding
1764b672db6ee89c9846451bbab23cf18e93c4260b2hding    union {
1774b672db6ee89c9846451bbab23cf18e93c4260b2hding        struct {
1784b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1794b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int chroma_format_idc                      : 2;
1804b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1814b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int frame_mbs_only_flag                    : 1;
1824b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1834b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int mb_adaptive_frame_field_flag           : 1;
1844b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1854b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int seq_scaling_matrix_present_flag        : 1;
1864b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1874b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int direct_8x8_inference_flag              : 1;
1884b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1894b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int log2_max_frame_num_minus4              : 4;
1904b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1914b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int pic_order_cnt_type                     : 2;
1924b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1934b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int log2_max_pic_order_cnt_lsb_minus4      : 4;
1944b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
1954b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int delta_pic_order_always_zero_flag       : 1;
1964b672db6ee89c9846451bbab23cf18e93c4260b2hding        } bits;
1974b672db6ee89c9846451bbab23cf18e93c4260b2hding        unsigned int value;
1984b672db6ee89c9846451bbab23cf18e93c4260b2hding    } seq_fields;
1994b672db6ee89c9846451bbab23cf18e93c4260b2hding
2004b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2014b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   bit_depth_luma_minus8;
2024b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2034b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   bit_depth_chroma_minus8;
2044b672db6ee89c9846451bbab23cf18e93c4260b2hding
2054b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** if pic_order_cnt_type == 1 */
2064b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
2074b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2084b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   num_ref_frames_in_pic_order_cnt_cycle;
2094b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2104b672db6ee89c9846451bbab23cf18e93c4260b2hding    int             offset_for_non_ref_pic;
2114b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2124b672db6ee89c9846451bbab23cf18e93c4260b2hding    int             offset_for_top_to_bottom_field;
2134b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2144b672db6ee89c9846451bbab23cf18e93c4260b2hding    int             offset_for_ref_frame[256];
2154b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
2164b672db6ee89c9846451bbab23cf18e93c4260b2hding
2174b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** @name Cropping (optional) */
2184b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
2194b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2204b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   frame_cropping_flag;
2214b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2224b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    frame_crop_left_offset;
2234b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2244b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    frame_crop_right_offset;
2254b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2264b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    frame_crop_top_offset;
2274b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2284b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    frame_crop_bottom_offset;
2294b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
2304b672db6ee89c9846451bbab23cf18e93c4260b2hding
2314b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** @name VUI parameters (optional) */
2324b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
2334b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2344b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   vui_parameters_present_flag;
2354b672db6ee89c9846451bbab23cf18e93c4260b2hding    union {
2364b672db6ee89c9846451bbab23cf18e93c4260b2hding        struct {
2374b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
2384b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int aspect_ratio_info_present_flag         : 1;
2394b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
2404b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int timing_info_present_flag               : 1;
2414b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
2424b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int bitstream_restriction_flag             : 1;
2434b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Range: 0 to 16, inclusive. */
2444b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int log2_max_mv_length_horizontal          : 5;
2454b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Range: 0 to 16, inclusive. */
2464b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int log2_max_mv_length_vertical            : 5;
2474b672db6ee89c9846451bbab23cf18e93c4260b2hding        } bits;
2484b672db6ee89c9846451bbab23cf18e93c4260b2hding        unsigned int value;
2494b672db6ee89c9846451bbab23cf18e93c4260b2hding    } vui_fields;
2504b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2514b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   aspect_ratio_idc;
2524b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2534b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    sar_width;
2544b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2554b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    sar_height;
2564b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2574b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    num_units_in_tick;
2584b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
2594b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    time_scale;
2604b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
2614b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncSequenceParameterBufferH264;
2624b672db6ee89c9846451bbab23cf18e93c4260b2hding
2634b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
264409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * \brief Picture parameter for H.264 encoding in baseline, main & high
265409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * profiles.
2664b672db6ee89c9846451bbab23cf18e93c4260b2hding *
2674b672db6ee89c9846451bbab23cf18e93c4260b2hding * This structure holds information for \c pic_parameter_set_rbsp() as
2684b672db6ee89c9846451bbab23cf18e93c4260b2hding * defined by the H.264 specification.
2694b672db6ee89c9846451bbab23cf18e93c4260b2hding *
2704b672db6ee89c9846451bbab23cf18e93c4260b2hding * If packed picture headers mode is used, i.e. if the encoding
2714b672db6ee89c9846451bbab23cf18e93c4260b2hding * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE
2724b672db6ee89c9846451bbab23cf18e93c4260b2hding * flag, then the driver expects two more buffers to be provided to
2734b672db6ee89c9846451bbab23cf18e93c4260b2hding * the same \c vaRenderPicture() as this buffer:
2744b672db6ee89c9846451bbab23cf18e93c4260b2hding * - a #VAEncPackedHeaderParameterBuffer with type set to
2754b672db6ee89c9846451bbab23cf18e93c4260b2hding *   VAEncPackedHeaderType::VAEncPackedHeaderPicture ;
2764b672db6ee89c9846451bbab23cf18e93c4260b2hding * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
2774b672db6ee89c9846451bbab23cf18e93c4260b2hding *   header data.
2784b672db6ee89c9846451bbab23cf18e93c4260b2hding *
2794b672db6ee89c9846451bbab23cf18e93c4260b2hding * If \c pic_scaling_matrix_present_flag is set to \c 1, then a
2804b672db6ee89c9846451bbab23cf18e93c4260b2hding * #VAIQMatrixBufferH264 buffer shall also be provided within the same
2814b672db6ee89c9846451bbab23cf18e93c4260b2hding * \c vaRenderPicture() call as this picture parameter buffer.
2824b672db6ee89c9846451bbab23cf18e93c4260b2hding */
2834b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef struct _VAEncPictureParameterBufferH264 {
2844b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
2854b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Information about the picture to be encoded.
2864b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
2874b672db6ee89c9846451bbab23cf18e93c4260b2hding     * See #VAPictureH264 for further description of each field.
2884b672db6ee89c9846451bbab23cf18e93c4260b2hding     * Note that CurrPic.picture_id represents the reconstructed
2894b672db6ee89c9846451bbab23cf18e93c4260b2hding     * (decoded) picture. User provides a scratch VA surface ID here.
2904b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
2914b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAPictureH264   CurrPic;
2924b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
2934b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Decoded Picture Buffer (DPB).
2944b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
2954b672db6ee89c9846451bbab23cf18e93c4260b2hding     * This array represents the list of reconstructed (decoded)
2964b672db6ee89c9846451bbab23cf18e93c4260b2hding     * frames used as reference. It is important to keep track of
2974b672db6ee89c9846451bbab23cf18e93c4260b2hding     * reconstructed frames so that they can be used later on as
2984b672db6ee89c9846451bbab23cf18e93c4260b2hding     * reference for P or B-frames encoding.
2994b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
3004b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAPictureH264   ReferenceFrames[16];
3014b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
3024b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Output encoded bitstream.
3034b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
3044b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \ref coded_buf has type #VAEncCodedBufferType. It should be
3054b672db6ee89c9846451bbab23cf18e93c4260b2hding     * large enough to hold the compressed NAL slice and possibly SPS
3064b672db6ee89c9846451bbab23cf18e93c4260b2hding     * and PPS NAL units.
3074b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
3084b672db6ee89c9846451bbab23cf18e93c4260b2hding    VABufferID      coded_buf;
3094b672db6ee89c9846451bbab23cf18e93c4260b2hding
3104b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief The picture parameter set referred to in the slice header. */
3114b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   pic_parameter_set_id;
3124b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */
3134b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   seq_parameter_set_id;
3144b672db6ee89c9846451bbab23cf18e93c4260b2hding
3154b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
3164b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief OR'd flags describing whether the picture is the last one or not.
3174b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
3184b672db6ee89c9846451bbab23cf18e93c4260b2hding     * This fields holds 0 if the picture to be encoded is not the last
3194b672db6ee89c9846451bbab23cf18e93c4260b2hding     * one in the stream or sequence. Otherwise, it is a combination of
3204b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM.
3214b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
3224b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   last_picture;
3234b672db6ee89c9846451bbab23cf18e93c4260b2hding
3244b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief The picture identifier.
3254b672db6ee89c9846451bbab23cf18e93c4260b2hding     *   Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive.
3264b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
3274b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned short  frame_num;
3284b672db6ee89c9846451bbab23cf18e93c4260b2hding
3294b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief \c pic_init_qp_minus26 + 26. */
3304b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   pic_init_qp;
3314b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Maximum reference index for reference picture list 0.
3324b672db6ee89c9846451bbab23cf18e93c4260b2hding     *   Range: 0 to 31, inclusive.
3334b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
3344b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   num_ref_idx_l0_active_minus1;
3354b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Maximum reference index for reference picture list 1.
3364b672db6ee89c9846451bbab23cf18e93c4260b2hding     *  Range: 0 to 31, inclusive.
3374b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
3384b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   num_ref_idx_l1_active_minus1;
3394b672db6ee89c9846451bbab23cf18e93c4260b2hding
3404b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Range: -12 to 12, inclusive. */
3414b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed char     chroma_qp_index_offset;
3424b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Range: -12 to 12, inclusive. */
3434b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed char     second_chroma_qp_index_offset;
3444b672db6ee89c9846451bbab23cf18e93c4260b2hding
3454b672db6ee89c9846451bbab23cf18e93c4260b2hding    union {
3464b672db6ee89c9846451bbab23cf18e93c4260b2hding        struct {
3474b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Is picture an IDR picture? */
3484b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int idr_pic_flag                           : 1;
3494b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Is picture a reference picture? */
3504b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int reference_pic_flag                     : 2;
3514b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */
3524b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int entropy_coding_mode_flag               : 1;
3534b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Is weighted prediction applied to P slices? */
3544b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int weighted_pred_flag                     : 1;
3554b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Range: 0 to 2, inclusive. */
3564b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int weighted_bipred_idc                    : 2;
3574b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
3584b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int constrained_intra_pred_flag            : 1;
3594b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
3604b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int transform_8x8_mode_flag                : 1;
3614b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
3624b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int deblocking_filter_control_present_flag : 1;
3634b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
3644b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int redundant_pic_cnt_present_flag         : 1;
3654b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
3664b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int pic_order_present_flag                 : 1;
3674b672db6ee89c9846451bbab23cf18e93c4260b2hding            /** \brief Same as the H.264 bitstream syntax element. */
3684b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int pic_scaling_matrix_present_flag        : 1;
3694b672db6ee89c9846451bbab23cf18e93c4260b2hding        } bits;
3704b672db6ee89c9846451bbab23cf18e93c4260b2hding        unsigned int value;
3714b672db6ee89c9846451bbab23cf18e93c4260b2hding    } pic_fields;
3724b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncPictureParameterBufferH264;
3734b672db6ee89c9846451bbab23cf18e93c4260b2hding
3744b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
375409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * \brief Slice parameter for H.264 encoding in baseline, main & high profiles.
3764b672db6ee89c9846451bbab23cf18e93c4260b2hding *
3774b672db6ee89c9846451bbab23cf18e93c4260b2hding * This structure holds information for \c
3784b672db6ee89c9846451bbab23cf18e93c4260b2hding * slice_layer_without_partitioning_rbsp() as defined by the H.264
3794b672db6ee89c9846451bbab23cf18e93c4260b2hding * specification.
3804b672db6ee89c9846451bbab23cf18e93c4260b2hding *
3814b672db6ee89c9846451bbab23cf18e93c4260b2hding * If packed slice headers mode is used, i.e. if the encoding
3824b672db6ee89c9846451bbab23cf18e93c4260b2hding * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE
3834b672db6ee89c9846451bbab23cf18e93c4260b2hding * flag, then the driver expects two more buffers to be provided to
3844b672db6ee89c9846451bbab23cf18e93c4260b2hding * the same \c vaRenderPicture() as this buffer:
3854b672db6ee89c9846451bbab23cf18e93c4260b2hding * - a #VAEncPackedHeaderParameterBuffer with type set to
3864b672db6ee89c9846451bbab23cf18e93c4260b2hding *   VAEncPackedHeaderType::VAEncPackedHeaderSlice ;
3874b672db6ee89c9846451bbab23cf18e93c4260b2hding * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
3884b672db6ee89c9846451bbab23cf18e93c4260b2hding *   header data.
3894b672db6ee89c9846451bbab23cf18e93c4260b2hding *
3904b672db6ee89c9846451bbab23cf18e93c4260b2hding * If per-macroblock encoder configuration is needed, \c macroblock_info
3914b672db6ee89c9846451bbab23cf18e93c4260b2hding * references a buffer of type #VAEncMacroblockParameterBufferH264. This
3924b672db6ee89c9846451bbab23cf18e93c4260b2hding * buffer is not passed to vaRenderPicture(). i.e. it is not destroyed
3934b672db6ee89c9846451bbab23cf18e93c4260b2hding * by subsequent calls to vaRenderPicture() and then can be re-used
3944b672db6ee89c9846451bbab23cf18e93c4260b2hding * without re-allocating the whole buffer.
3954b672db6ee89c9846451bbab23cf18e93c4260b2hding */
3964b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef struct _VAEncSliceParameterBufferH264 {
3974b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Starting MB address for this slice. */
3984b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    macroblock_address;
3994b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Number of macroblocks in this slice. */
4004b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int    num_macroblocks;
4014b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
4024b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID.
4034b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
4044b672db6ee89c9846451bbab23cf18e93c4260b2hding     * If per-MB encoder configuration is needed, then \ref macroblock_info
4054b672db6ee89c9846451bbab23cf18e93c4260b2hding     * references a buffer of type #VAEncMacroblockParameterBufferH264
4064b672db6ee89c9846451bbab23cf18e93c4260b2hding     * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id
4074b672db6ee89c9846451bbab23cf18e93c4260b2hding     * is set to \c VA_INVALID_ID and per-MB configuration is derived
4084b672db6ee89c9846451bbab23cf18e93c4260b2hding     * from this slice parameter.
4094b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
4104b672db6ee89c9846451bbab23cf18e93c4260b2hding     * The \c macroblock_info buffer must hold \ref num_macroblocks
4114b672db6ee89c9846451bbab23cf18e93c4260b2hding     * elements.
4124b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
4134b672db6ee89c9846451bbab23cf18e93c4260b2hding    VABufferID      macroblock_info;
4144b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Slice type.
4154b672db6ee89c9846451bbab23cf18e93c4260b2hding     *  Range: 0..2, 5..7, i.e. no switching slices.
4164b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
4174b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   slice_type;
4184b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4194b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   pic_parameter_set_id;
4204b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4214b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned short  idr_pic_id;
4224b672db6ee89c9846451bbab23cf18e93c4260b2hding
4234b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** @name If pic_order_cnt_type == 0 */
4244b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
4254b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief The picture order count modulo MaxPicOrderCntLsb. */
4264b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned short  pic_order_cnt_lsb;
4274b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */
4284b672db6ee89c9846451bbab23cf18e93c4260b2hding    int             delta_pic_order_cnt_bottom;
4294b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
4304b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */
4314b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
4324b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief [0]: top, [1]: bottom. */
4334b672db6ee89c9846451bbab23cf18e93c4260b2hding    int             delta_pic_order_cnt[2];
4344b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
4354b672db6ee89c9846451bbab23cf18e93c4260b2hding
4364b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** @name If slice_type == B */
4374b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
4384b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   direct_spatial_mv_pred_flag;
4394b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
4404b672db6ee89c9846451bbab23cf18e93c4260b2hding
4414b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** @name If slice_type == P */
4424b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
4434b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Specifies if
4444b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or
4454b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are
4464b672db6ee89c9846451bbab23cf18e93c4260b2hding     * overriden by the values for this slice.
4474b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
4484b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   num_ref_idx_active_override_flag;
4494b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Maximum reference index for reference picture list 0.
4504b672db6ee89c9846451bbab23cf18e93c4260b2hding     *  Range: 0 to 31, inclusive.
4514b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
4524b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   num_ref_idx_l0_active_minus1;
4534b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Maximum reference index for reference picture list 1.
4544b672db6ee89c9846451bbab23cf18e93c4260b2hding     *  Range: 0 to 31, inclusive.
4554b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
4564b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   num_ref_idx_l1_active_minus1;
4574b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Reference picture list 0 (for P slices). */
4584b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAPictureH264   RefPicList0[32];
4594b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Reference picture list 1 (for B slices). */
4604b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAPictureH264   RefPicList1[32];
4614b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
4624b672db6ee89c9846451bbab23cf18e93c4260b2hding
4634b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** @name pred_weight_table() */
4644b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
4654b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4664b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   luma_log2_weight_denom;
4674b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4684b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   chroma_log2_weight_denom;
4694b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4704b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   luma_weight_l0_flag;
4714b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4724b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed short    luma_weight_l0[32];
4734b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4744b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed short    luma_offset_l0[32];
4754b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4764b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   chroma_weight_l0_flag;
4774b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4784b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed short    chroma_weight_l0[32][2];
4794b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4804b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed short    chroma_offset_l0[32][2];
4814b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4824b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   luma_weight_l1_flag;
4834b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4844b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed short    luma_weight_l1[32];
4854b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4864b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed short    luma_offset_l1[32];
4874b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4884b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   chroma_weight_l1_flag;
4894b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4904b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed short    chroma_weight_l1[32][2];
4914b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4924b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed short    chroma_offset_l1[32][2];
4934b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
4944b672db6ee89c9846451bbab23cf18e93c4260b2hding
4954b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Range: 0 to 2, inclusive. */
4964b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   cabac_init_idc;
4974b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
4984b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed char     slice_qp_delta;
4994b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** @name If deblocking_filter_control_present_flag */
5004b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@{*/
5014b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Range: 0 to 2, inclusive. */
5024b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   disable_deblocking_filter_idc;
5034b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
5044b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed char     slice_alpha_c0_offset_div2;
5054b672db6ee89c9846451bbab23cf18e93c4260b2hding    /** \brief Same as the H.264 bitstream syntax element. */
5064b672db6ee89c9846451bbab23cf18e93c4260b2hding    signed char     slice_beta_offset_div2;
5074b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**@}*/
5084b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncSliceParameterBufferH264;
5094b672db6ee89c9846451bbab23cf18e93c4260b2hding
5104b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
5114b672db6ee89c9846451bbab23cf18e93c4260b2hding * @name Macroblock neighbour availability bits
5124b672db6ee89c9846451bbab23cf18e93c4260b2hding *
5134b672db6ee89c9846451bbab23cf18e93c4260b2hding * \anchor api_enc_h264_mb_pred_avail_bits
5144b672db6ee89c9846451bbab23cf18e93c4260b2hding * Definitions for macroblock neighbour availability bits used in
5154b672db6ee89c9846451bbab23cf18e93c4260b2hding * intra prediction mode (non MBAFF only).
5164b672db6ee89c9846451bbab23cf18e93c4260b2hding *
5174b672db6ee89c9846451bbab23cf18e93c4260b2hding * @{
5184b672db6ee89c9846451bbab23cf18e93c4260b2hding */
5194b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief References macroblock in the top-left corner. */
5204b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_MB_PRED_AVAIL_TOP_LEFT         (1 << 2)
5214b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief References macroblock above the current macroblock. */
5224b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_MB_PRED_AVAIL_TOP              (1 << 4)
5234b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief References macroblock in the top-right corner. */
5244b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_MB_PRED_AVAIL_TOP_RIGHT        (1 << 3)
5254b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief References macroblock on the left of the current macroblock. */
5264b672db6ee89c9846451bbab23cf18e93c4260b2hding#define VA_MB_PRED_AVAIL_LEFT             (1 << 6)
5274b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/
5284b672db6ee89c9846451bbab23cf18e93c4260b2hding
5294b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
530409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * \brief Macroblock parameter for H.264 encoding in baseline, main & high
531409de6acb4473c973ed2532e340831dc582e5e0eAustin Yuan * profiles.
5324b672db6ee89c9846451bbab23cf18e93c4260b2hding *
5334b672db6ee89c9846451bbab23cf18e93c4260b2hding * This structure holds per-macroblock information. The buffer must be
5344b672db6ee89c9846451bbab23cf18e93c4260b2hding * allocated with as many elements (macroblocks) as necessary to fit
5354b672db6ee89c9846451bbab23cf18e93c4260b2hding * the slice to be encoded. Besides, the per-macroblock records must
5364b672db6ee89c9846451bbab23cf18e93c4260b2hding * be written in a strict raster order and with no gap. i.e. every
5374b672db6ee89c9846451bbab23cf18e93c4260b2hding * macroblock, regardless of its type, shall have an entry.
5384b672db6ee89c9846451bbab23cf18e93c4260b2hding */
5394b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef struct _VAEncMacroblockParameterBufferH264 {
5404b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
5414b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Quantization parameter.
5424b672db6ee89c9846451bbab23cf18e93c4260b2hding     *
5434b672db6ee89c9846451bbab23cf18e93c4260b2hding     * Requested quantization parameter. Range: 0 to 51, inclusive.
5444b672db6ee89c9846451bbab23cf18e93c4260b2hding     * If \ref qp is set to 0xff, then the actual value is derived
5454b672db6ee89c9846451bbab23cf18e93c4260b2hding     * from the slice-level value: \c pic_init_qp + \c slice_qp_delta.
5464b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
5474b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned char   qp;
5484b672db6ee89c9846451bbab23cf18e93c4260b2hding
5494b672db6ee89c9846451bbab23cf18e93c4260b2hding    union {
5504b672db6ee89c9846451bbab23cf18e93c4260b2hding        /** @name Data for intra macroblock */
5514b672db6ee89c9846451bbab23cf18e93c4260b2hding        /**@{*/
5524b672db6ee89c9846451bbab23cf18e93c4260b2hding        struct {
5534b672db6ee89c9846451bbab23cf18e93c4260b2hding            union {
5544b672db6ee89c9846451bbab23cf18e93c4260b2hding                /**
5554b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * \brief Flag specified to override MB neighbour
5564b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * availability bits from VME stage.
5574b672db6ee89c9846451bbab23cf18e93c4260b2hding                 *
5584b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * This flag specifies that macroblock neighbour
5594b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * availability bits from the VME stage are overriden
5604b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * by the \ref pred_avail_flags hereunder.
5614b672db6ee89c9846451bbab23cf18e93c4260b2hding                 */
5624b672db6ee89c9846451bbab23cf18e93c4260b2hding                unsigned int    pred_avail_override_flag        : 1;
5634b672db6ee89c9846451bbab23cf18e93c4260b2hding                /**
5644b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * \brief Bitwise representation of which macroblocks
5654b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * are available for intra prediction.
5664b672db6ee89c9846451bbab23cf18e93c4260b2hding                 *
5674b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * If the slice is intra-coded, this field represents
5684b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * the macroblocks available for intra prediction.
5694b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * See \ref api_enc_h264_mb_pred_avail_bits
5704b672db6ee89c9846451bbab23cf18e93c4260b2hding                 * "macroblock neighbour availability" bit definitions.
5714b672db6ee89c9846451bbab23cf18e93c4260b2hding                 */
5724b672db6ee89c9846451bbab23cf18e93c4260b2hding                unsigned int    pred_avail_flags                : 8;
5734b672db6ee89c9846451bbab23cf18e93c4260b2hding            } bits;
5744b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int value;
5754b672db6ee89c9846451bbab23cf18e93c4260b2hding        } intra_fields;
5764b672db6ee89c9846451bbab23cf18e93c4260b2hding        /**@}*/
5774b672db6ee89c9846451bbab23cf18e93c4260b2hding
5784b672db6ee89c9846451bbab23cf18e93c4260b2hding        /** @name Data for inter macroblock */
5794b672db6ee89c9846451bbab23cf18e93c4260b2hding        /**@{*/
5804b672db6ee89c9846451bbab23cf18e93c4260b2hding        struct {
5814b672db6ee89c9846451bbab23cf18e93c4260b2hding            union {
5824b672db6ee89c9846451bbab23cf18e93c4260b2hding            } bits;
5834b672db6ee89c9846451bbab23cf18e93c4260b2hding            unsigned int value;
5844b672db6ee89c9846451bbab23cf18e93c4260b2hding        } inter_fields;
5854b672db6ee89c9846451bbab23cf18e93c4260b2hding        /**@}*/
5864b672db6ee89c9846451bbab23cf18e93c4260b2hding    } info;
5874b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncMacroblockParameterBufferH264;
5884b672db6ee89c9846451bbab23cf18e93c4260b2hding
589f6339eece05892fb49c4891b838545c41159ae39Austin Yuan/**
590f6339eece05892fb49c4891b838545c41159ae39Austin Yuan * \brief H.264 Mutiview Coding(MVC) Sequence Parameter Buffer
591f6339eece05892fb49c4891b838545c41159ae39Austin Yuan *
592f6339eece05892fb49c4891b838545c41159ae39Austin Yuan */
593f6339eece05892fb49c4891b838545c41159ae39Austin Yuantypedef struct _VAEncSequenceParameterBufferH264_MVC {
594f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Basic common sequence parameter */
595f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    VAEncSequenceParameterBufferH264 base;
596f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
597f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Plus 1 specify the max number of views
598f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     * coded in the video sequence
599f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     */
600f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    uint16_t num_views_minus1;
601f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
602f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Specify the view information in all layers */
603f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    struct H264SPSExtMVCViewInfo{
604f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief The current view identifier. */
605f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint16_t view_id;
606f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the number of view components for inter-view
607f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * prediction in the initialized RefPicList0 in decoding
608f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * anchor views.
609f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
610f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint8_t  num_anchor_refs_l0;
611f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the view_id for inter-view prediction in
612f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * the initialized RefPicList0 in decoding anchor views.
613f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
614f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint16_t anchor_ref_l0[15];
615f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the number of view components for inter-view
616f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * prediction in the initialized RefPicList1 in decoding
617f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * anchor views
618f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
619f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint8_t  num_anchor_refs_l1;
620f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the view_id for inter-view prediction in
621f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * the initialized RefPicList1 in decoding anchor views.
622f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
623f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint16_t anchor_ref_l1[15];
624f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the number of view components for inter-view
625f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * prediction in the initialized RefPicList0 in decoding
626f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * non-anchor views.
627f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
628f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint8_t  num_non_anchor_refs_l0;
629f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the view_id for inter-view prediction in
630f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * the initialized RefPicList0 in decoding non-anchor views.
631f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
632f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint16_t non_anchor_ref_l0[15];
633f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the number of view components for inter-view
634f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * prediction in the initialized RefPicList1 in decoding
635f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * non-anchor view.
636f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
637f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint8_t  num_non_anchor_refs_l1;
638f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the view_id for inter-view prediction in
639f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         * the initialized RefPicList1 in decoding non-anchor views.
640f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
641f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint16_t non_anchor_ref_l1[15];
642f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    }* view_list;
643f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
644f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Plus 1 specifies the number of level values
645f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     * signalled for the coded video sequence
646f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     */
647f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    uint8_t num_level_values_signalled_minus1;
648f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
649f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Level values operation for a set of the operation
650f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     * points in the current sequence
651f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     */
652f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    struct H264SPSExtMVCLevelValue {
653f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Specifies the level value signalled for the coded video sequence */
654f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint8_t level_idc;
655f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
656f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Plus 1 specifies the number of operation points to
657f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         *  which the level indicated by level_idc applies
658f6339eece05892fb49c4891b838545c41159ae39Austin Yuan         */
659f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        uint16_t num_applicable_ops_minus1;
660f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
661f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        /** \brief Represent the specific operation to the view in the video sequence */
662f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        struct H264SPSExtMVCLevelValueOps {
663f6339eece05892fb49c4891b838545c41159ae39Austin Yuan            /** \brief Specify a temporal identifier for the NAL unit */
664f6339eece05892fb49c4891b838545c41159ae39Austin Yuan            uint8_t   temporal_id;
665f6339eece05892fb49c4891b838545c41159ae39Austin Yuan            /** \brief Specify the number of the views whose level value will be modified */
666f6339eece05892fb49c4891b838545c41159ae39Austin Yuan            uint16_t  num_target_views_minus1;
667f6339eece05892fb49c4891b838545c41159ae39Austin Yuan            /** \brief Specify the views whose level value will be modified */
668f6339eece05892fb49c4891b838545c41159ae39Austin Yuan            uint16_t* target_view_id_list;
669f6339eece05892fb49c4891b838545c41159ae39Austin Yuan            /** \brief Specify the number of views whose level value can be modified */
670f6339eece05892fb49c4891b838545c41159ae39Austin Yuan            uint16_t  num_views_minus1;
671f6339eece05892fb49c4891b838545c41159ae39Austin Yuan        }* level_value_ops_list;
672f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
673f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    }* level_value_list;
674f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
675f6339eece05892fb49c4891b838545c41159ae39Austin Yuan} VAEncSequenceParameterBufferH264_MVC;
676f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
677f6339eece05892fb49c4891b838545c41159ae39Austin Yuan/**
678f6339eece05892fb49c4891b838545c41159ae39Austin Yuan * \brief H.264 Multiview Coding(MVC) Picture Parameter Buffer
679f6339eece05892fb49c4891b838545c41159ae39Austin Yuan *
680f6339eece05892fb49c4891b838545c41159ae39Austin Yuan */
681f6339eece05892fb49c4891b838545c41159ae39Austin Yuantypedef struct _VAEncPictureParameterBufferH264_MVC
682f6339eece05892fb49c4891b838545c41159ae39Austin Yuan{
683f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Basic common picture parameter */
684f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    VAEncPictureParameterBufferH264 base;
685f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
686f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Specifes the view id for current picture */
687f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    uint16_t view_id;
688f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
689f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Specifes whether the picture is one anchor picture */
690f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    uint8_t  anchor_pic_flag;
691f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
692f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /** brief Specifes whether inter view reference frame
693f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     * is used to encode current picture.
694f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     */
695f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    uint8_t  inter_view_flag;
696f6339eece05892fb49c4891b838545c41159ae39Austin Yuan} VAEncPictureParameterBufferH264_MVC;
697f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
698f6339eece05892fb49c4891b838545c41159ae39Austin Yuantypedef struct _VAEncQpBufferH264 {
699f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    /*
700f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     * \brief This structure holds luma Qp per 16x16 macroblock. Buffer size shall be
701f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     * sufficient to fit the slice or frame to be encoded depending on if it is a slice level
702f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     * or frame level encoding.
703f6339eece05892fb49c4891b838545c41159ae39Austin Yuan     */
704f6339eece05892fb49c4891b838545c41159ae39Austin Yuan    unsigned char qp_y;
705f6339eece05892fb49c4891b838545c41159ae39Austin Yuan} VAEncQpBufferH264;
706f6339eece05892fb49c4891b838545c41159ae39Austin Yuan
7074b672db6ee89c9846451bbab23cf18e93c4260b2hding/** \brief Bitstream writer attribute types specific to H.264 encoding. */
7084b672db6ee89c9846451bbab23cf18e93c4260b2hdingtypedef enum {
7094b672db6ee89c9846451bbab23cf18e93c4260b2hding    /**
7104b672db6ee89c9846451bbab23cf18e93c4260b2hding     * \brief Flag: specifies whether to insert emulation prevention
7114b672db6ee89c9846451bbab23cf18e93c4260b2hding     * bytes (integer).
7124b672db6ee89c9846451bbab23cf18e93c4260b2hding     */
7134b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAEncBitstreamAttribEmulationPreventionH264 = (
7144b672db6ee89c9846451bbab23cf18e93c4260b2hding        VAEncBitstreamAttribMiscMask | 1),
7154b672db6ee89c9846451bbab23cf18e93c4260b2hding} VAEncBitstreamAttribTypeH264;
7164b672db6ee89c9846451bbab23cf18e93c4260b2hding
7174b672db6ee89c9846451bbab23cf18e93c4260b2hding
7184b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
7194b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Allocates a new H.264 bitstream writer.
7204b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7214b672db6ee89c9846451bbab23cf18e93c4260b2hding * Allocates a new bitstream writer. By default, libva allocates and
7224b672db6ee89c9846451bbab23cf18e93c4260b2hding * maintains its own buffer. However, the user can pass down his own
7234b672db6ee89c9846451bbab23cf18e93c4260b2hding * buffer with the \c VAEncBitstreamAttribBuffer attribute, along with
7244b672db6ee89c9846451bbab23cf18e93c4260b2hding * the size of that buffer with the \c VAEncBitstreamAttribBufferSize
7254b672db6ee89c9846451bbab23cf18e93c4260b2hding * attribute.
7264b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7274b672db6ee89c9846451bbab23cf18e93c4260b2hding * By default, emulation prevention bytes are not inserted. However,
7284b672db6ee89c9846451bbab23cf18e93c4260b2hding * the user can still request emulation prevention by setting the
7294b672db6ee89c9846451bbab23cf18e93c4260b2hding * \c VAEncBitstreamAttribEmulationPreventionH264 attribute to 1.
7304b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7314b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] attribs       the optional attributes, or NULL
7324b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] num_attribs   the number of attributes available in \c attribs
7334b672db6ee89c9846451bbab23cf18e93c4260b2hding * @return a new #VAEncBitstream, or NULL if an error occurred
7344b672db6ee89c9846451bbab23cf18e93c4260b2hding */
7354b672db6ee89c9846451bbab23cf18e93c4260b2hdingVAEncBitstream *
7364b672db6ee89c9846451bbab23cf18e93c4260b2hdingva_enc_bitstream_h264_new(
7374b672db6ee89c9846451bbab23cf18e93c4260b2hding    VAEncBitstreamAttrib *attribs,
7384b672db6ee89c9846451bbab23cf18e93c4260b2hding    unsigned int          num_attribs
7394b672db6ee89c9846451bbab23cf18e93c4260b2hding);
7404b672db6ee89c9846451bbab23cf18e93c4260b2hding
7414b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
7424b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Destroys an H.264 bitstream writer.
7434b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7444b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] bs            the bitstream writer to destroy
7454b672db6ee89c9846451bbab23cf18e93c4260b2hding */
7464b672db6ee89c9846451bbab23cf18e93c4260b2hdingvoid
7474b672db6ee89c9846451bbab23cf18e93c4260b2hdingva_enc_bitstream_h264_destroy(VAEncBitstream *bs);
7484b672db6ee89c9846451bbab23cf18e93c4260b2hding
7494b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
7504b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Writes an unsigned integer as \c ue(v).
7514b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7524b672db6ee89c9846451bbab23cf18e93c4260b2hding * Writes a 32-bit unsigned int value by following \c ue(v) from the
7534b672db6ee89c9846451bbab23cf18e93c4260b2hding * H.264 specification.
7544b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7554b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] bs            the bitstream writer
7564b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] value         the unsigned int value
7574b672db6ee89c9846451bbab23cf18e93c4260b2hding * @return the number of bits written, or a negative value to indicate an error
7584b672db6ee89c9846451bbab23cf18e93c4260b2hding */
7594b672db6ee89c9846451bbab23cf18e93c4260b2hdingint
7604b672db6ee89c9846451bbab23cf18e93c4260b2hdingva_enc_bitstream_h264_write_ue(VAEncBitstream *bs, unsigned int value);
7614b672db6ee89c9846451bbab23cf18e93c4260b2hding
7624b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
7634b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Writes a signed integer as \c se(v).
7644b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7654b672db6ee89c9846451bbab23cf18e93c4260b2hding * Writes a 32-bit signed int value by following \c se(v) from the
7664b672db6ee89c9846451bbab23cf18e93c4260b2hding * H.264 specification.
7674b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7684b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] bs            the bitstream writer
7694b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] value         the signed int value
7704b672db6ee89c9846451bbab23cf18e93c4260b2hding * @return the number of bits written, or a negative value to indicate an error
7714b672db6ee89c9846451bbab23cf18e93c4260b2hding */
7724b672db6ee89c9846451bbab23cf18e93c4260b2hdingint
7734b672db6ee89c9846451bbab23cf18e93c4260b2hdingva_enc_bitstream_h264_write_se(VAEncBitstream *bs, int value);
7744b672db6ee89c9846451bbab23cf18e93c4260b2hding
7754b672db6ee89c9846451bbab23cf18e93c4260b2hding/**
7764b672db6ee89c9846451bbab23cf18e93c4260b2hding * \brief Helper function to write trailing bits into the bitstream.
7774b672db6ee89c9846451bbab23cf18e93c4260b2hding *
7784b672db6ee89c9846451bbab23cf18e93c4260b2hding * @param[in] bs            the bitstream writer
7794b672db6ee89c9846451bbab23cf18e93c4260b2hding * @return the number of bits written, or a negative value to indicate an error
7804b672db6ee89c9846451bbab23cf18e93c4260b2hding */
7814b672db6ee89c9846451bbab23cf18e93c4260b2hdingint
7824b672db6ee89c9846451bbab23cf18e93c4260b2hdingva_enc_bitstream_h264_write_trailing_bits(VAEncBitstream *bs);
7834b672db6ee89c9846451bbab23cf18e93c4260b2hding
7844b672db6ee89c9846451bbab23cf18e93c4260b2hding/**@}*/
7854b672db6ee89c9846451bbab23cf18e93c4260b2hding
7864b672db6ee89c9846451bbab23cf18e93c4260b2hding#ifdef __cplusplus
7874b672db6ee89c9846451bbab23cf18e93c4260b2hding}
7884b672db6ee89c9846451bbab23cf18e93c4260b2hding#endif
7894b672db6ee89c9846451bbab23cf18e93c4260b2hding
7904b672db6ee89c9846451bbab23cf18e93c4260b2hding#endif /* VA_ENC_H264_H */
791