Blame va/va_enc_hevc.h

Packit Service 9402ce
/*
Packit Service 9402ce
 * Copyright (c) 2007-2014 Intel Corporation. All Rights Reserved.
Packit Service 9402ce
 *
Packit Service 9402ce
 * Permission is hereby granted, free of charge, to any person obtaining a
Packit Service 9402ce
 * copy of this software and associated documentation files (the
Packit Service 9402ce
 * "Software"), to deal in the Software without restriction, including
Packit Service 9402ce
 * without limitation the rights to use, copy, modify, merge, publish,
Packit Service 9402ce
 * distribute, sub license, and/or sell copies of the Software, and to
Packit Service 9402ce
 * permit persons to whom the Software is furnished to do so, subject to
Packit Service 9402ce
 * the following conditions:
Packit Service 9402ce
 *
Packit Service 9402ce
 * The above copyright notice and this permission notice (including the
Packit Service 9402ce
 * next paragraph) shall be included in all copies or substantial portions
Packit Service 9402ce
 * of the Software.
Packit Service 9402ce
 *
Packit Service 9402ce
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Packit Service 9402ce
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit Service 9402ce
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
Packit Service 9402ce
 * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
Packit Service 9402ce
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
Packit Service 9402ce
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
Packit Service 9402ce
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit Service 9402ce
 */
Packit Service 9402ce
Packit Service 9402ce
/**
Packit Service 9402ce
 * \file va_enc_hevc.h
Packit Service 9402ce
 * \brief The HEVC encoding API
Packit Service 9402ce
 *
Packit Service 9402ce
 * This file contains the \ref api_enc_hevc "HEVC encoding API".
Packit Service 9402ce
 *
Packit Service 9402ce
 */
Packit Service 9402ce
Packit Service 9402ce
#ifndef VA_ENC_HEVC_H
Packit Service 9402ce
#define VA_ENC_HEVC_H
Packit Service 9402ce
Packit Service 9402ce
#ifdef __cplusplus
Packit Service 9402ce
extern "C" {
Packit Service 9402ce
#endif
Packit Service 9402ce
Packit Service 9402ce
#include <stdint.h>
Packit Service 9402ce
Packit Service 9402ce
/**
Packit Service 9402ce
 * \defgroup api_enc_hevc HEVC encoding API
Packit Service 9402ce
 *
Packit Service 9402ce
 * @{
Packit Service 9402ce
 */
Packit Service 9402ce
Packit Service 9402ce
/**
Packit Service 9402ce
 * @name Picture flags
Packit Service 9402ce
 *
Packit Service 9402ce
 * Those flags flags are meant to signal when a picture marks the end
Packit Service 9402ce
 * of a sequence, a stream, or even both at once.
Packit Service 9402ce
 *
Packit Service 9402ce
 * @{
Packit Service 9402ce
 */
Packit Service 9402ce
/**
Packit Service 9402ce
 * \brief Marks the last picture in the sequence.
Packit Service 9402ce
 *
Packit Service 9402ce
 * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame.
Packit Service 9402ce
 */
Packit Service 9402ce
#define HEVC_LAST_PICTURE_EOSEQ     0x01
Packit Service 9402ce
/**
Packit Service 9402ce
 * \brief Marks the last picture in the stream.
Packit Service 9402ce
 *
Packit Service 9402ce
 * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame.
Packit Service 9402ce
 */
Packit Service 9402ce
#define HEVC_LAST_PICTURE_EOSTREAM  0x02
Packit Service 9402ce
/**@}*/
Packit Service 9402ce
Packit Service 9402ce
/**
Packit Service 9402ce
 * \brief Packed header types specific to HEVC encoding.
Packit Service 9402ce
 *
Packit Service 9402ce
 * Types of packed headers generally used for HEVC encoding. Each
Packit Service 9402ce
 * associated packed header data buffer shall contain the start code
Packit Service 9402ce
 * prefix 0x000001 followed by the complete NAL unit, thus also
Packit Service 9402ce
 * including the \c nal_unit_type.
Packit Service 9402ce
 *
Packit Service 9402ce
 * Note: the start code prefix can contain an arbitrary number of leading
Packit Service 9402ce
 * zeros. The driver will skip them for emulation prevention bytes insertion,
Packit Service 9402ce
 * if necessary.
Packit Service 9402ce
 */
Packit Service 9402ce
typedef enum {
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Packed Video Parameter Set (VPS).
Packit Service 9402ce
     *
Packit Service 9402ce
     * The corresponding packed header data buffer shall contain the
Packit Service 9402ce
     * complete video_parameter_set_rbsp() syntax element.
Packit Service 9402ce
     *
Packit Service 9402ce
     * Note: packed \c nal_unit_type shall be equal to 32.
Packit Service 9402ce
     */
Packit Service 9402ce
    VAEncPackedHeaderHEVC_VPS   = VAEncPackedHeaderSequence,
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Packed Sequence Parameter Set (SPS).
Packit Service 9402ce
     *
Packit Service 9402ce
     * The corresponding packed header data buffer shall contain the
Packit Service 9402ce
     * complete seq_parameter_set_rbsp() syntax element.
Packit Service 9402ce
     *
Packit Service 9402ce
     * Note: packed \c nal_unit_type shall be equal to 33.
Packit Service 9402ce
     */
Packit Service 9402ce
    VAEncPackedHeaderHEVC_SPS   = VAEncPackedHeaderSequence,
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Packed Picture Parameter Set (PPS).
Packit Service 9402ce
     *
Packit Service 9402ce
     * The corresponding packed header data buffer shall contain the
Packit Service 9402ce
     * complete pic_parameter_set_rbsp() syntax element.
Packit Service 9402ce
     *
Packit Service 9402ce
     * Note: packed \c nal_unit_type shall be equal to 34.
Packit Service 9402ce
     */
Packit Service 9402ce
    VAEncPackedHeaderHEVC_PPS   = VAEncPackedHeaderPicture,
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Packed slice header.
Packit Service 9402ce
     *
Packit Service 9402ce
     * The corresponding packed header data buffer shall contain the
Packit Service 9402ce
     * \c slice_header() syntax element only, along with any start
Packit Service 9402ce
     * code prefix and NAL unit type preceeding it. i.e. this means
Packit Service 9402ce
     * that the buffer does not contain any of the \c slice_data() or
Packit Service 9402ce
     * the \c rbsp_slice_trailing_bits().
Packit Service 9402ce
     *
Packit Service 9402ce
     * Note: packed \c nal_unit_type shall be equal to 0 to 9 (non-IRAP
Packit Service 9402ce
     * picture), or 16 to 21 (IRAP picture).
Packit Service 9402ce
     */
Packit Service 9402ce
    VAEncPackedHeaderHEVC_Slice = VAEncPackedHeaderSlice,
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Packed Supplemental Enhancement Information (SEI).
Packit Service 9402ce
     *
Packit Service 9402ce
     * The corresponding packed header data buffer shall contain the
Packit Service 9402ce
     * complete sei_rbsp() syntax element, thus including several
Packit Service 9402ce
     * sei_message() elements if necessary.
Packit Service 9402ce
     *
Packit Service 9402ce
     * Note: packed \c nal_unit_type shall be equal to 39 or 40.
Packit Service 9402ce
     *
Packit Service 9402ce
     * @deprecated
Packit Service 9402ce
     * This is a deprecated packed header flag, All applications can use
Packit Service 9402ce
     * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed
Packit Service 9402ce
     * SEI header data buffer to the driver
Packit Service 9402ce
     */
Packit Service 9402ce
    VAEncPackedHeaderHEVC_SEI  va_deprecated_enum = (0x80000000 | 1),
Packit Service 9402ce
} VAEncPackedHeaderTypeHEVC;
Packit Service 9402ce
Packit Service 9402ce
/**
Packit Service 9402ce
 * \brief Sequence parameter for HEVC encoding in main & main 10
Packit Service 9402ce
 * profiles.
Packit Service 9402ce
 *
Packit Service 9402ce
 * This structure holds information for \c seq_parameter_set_data() as
Packit Service 9402ce
 * defined by the HEVC specification.
Packit Service 9402ce
 *
Packit Service 9402ce
 * If packed sequence headers mode is used, i.e. if the encoding
Packit Service 9402ce
 * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE
Packit Service 9402ce
 * flag, then the driver expects two more buffers to be provided to
Packit Service 9402ce
 * the same \c vaRenderPicture() as this buffer:
Packit Service 9402ce
 * - a #VAEncPackedHeaderParameterBuffer with type set to
Packit Service 9402ce
 *   VAEncPackedHeaderType::VAEncPackedHeaderSequence ;
Packit Service 9402ce
 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
Packit Service 9402ce
 *   header data.
Packit Service 9402ce
 *
Packit Service 9402ce
 * If \c seq_scaling_matrix_present_flag is set to \c 1, then a
Packit Service 9402ce
 * #VAQMatrixBufferHEVC buffer shall also be provided within the same
Packit Service 9402ce
 * \c vaRenderPicture() call as this sequence parameter buffer.
Packit Service 9402ce
 */
Packit Service 9402ce
typedef struct _VAEncSequenceParameterBufferHEVC {
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     *  value range [1..2].
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     general_profile_idc;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     *  general_level_idc shall be set equal to a value of 30 times the level
Packit Service 9402ce
     *  numbers allowed [1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2]
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     general_level_idc;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     *  Only value 0 is allowed for level value below 4, exclusive.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     general_tier_flag;
Packit Service 9402ce
    /** \brief Period between I frames. */
Packit Service 9402ce
    uint32_t    intra_period;
Packit Service 9402ce
    /** \brief Period between IDR frames. */
Packit Service 9402ce
    uint32_t    intra_idr_period;
Packit Service 9402ce
    /** \brief Period between I/P frames. */
Packit Service 9402ce
    uint32_t    ip_period;
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Initial bitrate set for this sequence in CBR or VBR modes.
Packit Service 9402ce
     *
Packit Service 9402ce
     * This field represents the initial bitrate value for this
Packit Service 9402ce
     * sequence if CBR or VBR mode is used, i.e. if the encoder
Packit Service 9402ce
     * pipeline was created with a #VAConfigAttribRateControl
Packit Service 9402ce
     * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
Packit Service 9402ce
     *
Packit Service 9402ce
     * The bitrate can be modified later on through
Packit Service 9402ce
     * #VAEncMiscParameterRateControl buffers.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint32_t    bits_per_second;
Packit Service 9402ce
    /** \brief Picture width in pixel samples.
Packit Service 9402ce
     *  Its value must be multiple of min CU size.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint16_t    pic_width_in_luma_samples;
Packit Service 9402ce
    /** \brief Picture height in pixel samples.
Packit Service 9402ce
     *  Its value must be multiple of min CU size.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint16_t    pic_height_in_luma_samples;
Packit Service 9402ce
Packit Service 9402ce
    union {
Packit Service 9402ce
        struct {
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    chroma_format_idc                              : 2;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    separate_colour_plane_flag                     : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    bit_depth_luma_minus8                          : 3;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    bit_depth_chroma_minus8                        : 3;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    scaling_list_enabled_flag                      : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    strong_intra_smoothing_enabled_flag            : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    amp_enabled_flag                               : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    sample_adaptive_offset_enabled_flag            : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    pcm_enabled_flag                               : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    pcm_loop_filter_disabled_flag                  : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    sps_temporal_mvp_enabled_flag                  : 1;
Packit Service 9402ce
Packit Service 9402ce
            uint32_t    reserved_bits                                  : 16;
Packit Service 9402ce
        } bits;
Packit Service 9402ce
        uint32_t value;
Packit Service 9402ce
    } seq_fields;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     *  value range [0..3]
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     log2_min_luma_coding_block_size_minus3;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     log2_diff_max_min_luma_coding_block_size;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     *  value range [0..3]
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     log2_min_transform_block_size_minus2;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     log2_diff_max_min_transform_block_size;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     *  value range [2]
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     max_transform_hierarchy_depth_inter;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element.
Packit Service 9402ce
     *  value range [2]
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t     max_transform_hierarchy_depth_intra;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint32_t    pcm_sample_bit_depth_luma_minus1;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint32_t    pcm_sample_bit_depth_chroma_minus1;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint32_t    log2_min_pcm_luma_coding_block_size_minus3;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Derived from the HEVC bitstream syntax element.
Packit Service 9402ce
    *  log2_min_pcm_luma_coding_block_size_minus3 +
Packit Service 9402ce
    *  log2_diff_max_min_pcm_luma_coding_block_size
Packit Service 9402ce
    */
Packit Service 9402ce
    uint32_t    log2_max_pcm_luma_coding_block_size_minus3;
Packit Service 9402ce
Packit Service 9402ce
    /** @name VUI parameters (optional) */
Packit Service 9402ce
    /**@{*/
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint8_t     vui_parameters_present_flag;
Packit Service 9402ce
    union {
Packit Service 9402ce
        struct {
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    aspect_ratio_info_present_flag                 : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    neutral_chroma_indication_flag                 : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    field_seq_flag                                 : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    vui_timing_info_present_flag                   : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    bitstream_restriction_flag                     : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    tiles_fixed_structure_flag                     : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    motion_vectors_over_pic_boundaries_flag        : 1;
Packit Service 9402ce
            /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
            uint32_t    restricted_ref_pic_lists_flag                  : 1;
Packit Service 9402ce
            /** \brief Range: 0 to 16, inclusive. */
Packit Service 9402ce
            uint32_t    log2_max_mv_length_horizontal                  : 5;
Packit Service 9402ce
            /** \brief Range: 0 to 16, inclusive. */
Packit Service 9402ce
            uint32_t    log2_max_mv_length_vertical                    : 5;
Packit Service 9402ce
        } bits;
Packit Service 9402ce
        uint32_t value;
Packit Service 9402ce
    } vui_fields;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint8_t     aspect_ratio_idc;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint32_t    sar_width;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint32_t    sar_height;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint32_t    vui_num_units_in_tick;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint32_t    vui_time_scale;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint16_t    min_spatial_segmentation_idc;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint8_t     max_bytes_per_pic_denom;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint8_t     max_bits_per_min_cu_denom;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Reserved bytes for future use, must be zero */
Packit Service 9402ce
    uint32_t                va_reserved[VA_PADDING_MEDIUM];
Packit Service 9402ce
    /**@}*/
Packit Service 9402ce
} VAEncSequenceParameterBufferHEVC;
Packit Service 9402ce
Packit Service 9402ce
/****************************
Packit Service 9402ce
 * HEVC data structures
Packit Service 9402ce
 ****************************/
Packit Service 9402ce
/**
Packit Service 9402ce
 * \brief Picture parameter for HEVC encoding in main & main 10
Packit Service 9402ce
 * profiles.
Packit Service 9402ce
 *
Packit Service 9402ce
 * This structure holds information for \c pic_parameter_set_rbsp() as
Packit Service 9402ce
 * defined by the HEVC specification.
Packit Service 9402ce
 *
Packit Service 9402ce
 * If packed picture headers mode is used, i.e. if the encoding
Packit Service 9402ce
 * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE
Packit Service 9402ce
 * flag, then the driver expects two more buffers to be provided to
Packit Service 9402ce
 * the same \c vaRenderPicture() as this buffer:
Packit Service 9402ce
 * - a #VAEncPackedHeaderParameterBuffer with type set to
Packit Service 9402ce
 *   VAEncPackedHeaderType::VAEncPackedHeaderPicture ;
Packit Service 9402ce
 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
Packit Service 9402ce
 *   header data.
Packit Service 9402ce
 *
Packit Service 9402ce
 * If \c pic_scaling_matrix_present_flag is set to \c 1, then a
Packit Service 9402ce
 * #VAQMatrixBufferHEVC buffer shall also be provided within the same
Packit Service 9402ce
 * \c vaRenderPicture() call as this picture parameter buffer.
Packit Service 9402ce
 */
Packit Service 9402ce
typedef struct _VAEncPictureParameterBufferHEVC {
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Information about the picture to be encoded.
Packit Service 9402ce
     *
Packit Service 9402ce
     * See #VAPictureHEVC for further description of each field.
Packit Service 9402ce
     * Note that decoded_curr_pic.picture_id represents the reconstructed
Packit Service 9402ce
     * (decoded) picture. User provides a scratch VA surface ID here.
Packit Service 9402ce
     * Long term reference and RPS related fields should be set to 0
Packit Service 9402ce
     * and ignored.
Packit Service 9402ce
     */
Packit Service 9402ce
    VAPictureHEVC   decoded_curr_pic;
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Decoded Picture Buffer (DPB).
Packit Service 9402ce
     *
Packit Service 9402ce
     * This array represents the list of reconstructed (decoded)
Packit Service 9402ce
     * frames used as reference. It is important to keep track of
Packit Service 9402ce
     * reconstructed frames so that they can be used later on as
Packit Service 9402ce
     * reference for P or B-frames encoding.
Packit Service 9402ce
     */
Packit Service 9402ce
    VAPictureHEVC   reference_frames[15];
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief Output encoded bitstream.
Packit Service 9402ce
     *
Packit Service 9402ce
     * \ref coded_buf has type #VAEncCodedBufferType. It should be
Packit Service 9402ce
     * large enough to hold the compressed NAL slice and possibly VPS, SPS
Packit Service 9402ce
     * and PPS NAL units, and other NAL units such as SEI.
Packit Service 9402ce
     */
Packit Service 9402ce
    VABufferID      coded_buf;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief collocated reference picture buffer index of ReferenceFrames[].
Packit Service 9402ce
     * Please note it is different from HEVC syntac element collocated_ref_idx.
Packit Service 9402ce
     * When  the HEVC syntax element slice_temporal_mvp_enable_flag takes value 0,
Packit Service 9402ce
     * collocated_ref_pic_index should take value 0xFF. .
Packit Service 9402ce
     * Range: [0..14, 0xFF]
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         collocated_ref_pic_index;
Packit Service 9402ce
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief OR'd flags describing whether the picture is the last one or not.
Packit Service 9402ce
     *
Packit Service 9402ce
     * This fields holds 0 if the picture to be encoded is not the last
Packit Service 9402ce
     * one in the stream or sequence. Otherwise, it is a combination of
Packit Service 9402ce
     * \ref HEVC_LAST_PICTURE_EOSEQ or \ref HEVC_LAST_PICTURE_EOSTREAM.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         last_picture;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief \c init_qp_minus26 + 26. */
Packit Service 9402ce
    uint8_t         pic_init_qp;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
    uint8_t         diff_cu_qp_delta_depth;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
    int8_t          pps_cb_qp_offset;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
    int8_t          pps_cr_qp_offset;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
    uint8_t         num_tile_columns_minus1;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
    uint8_t         num_tile_rows_minus1;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
    uint8_t         column_width_minus1[19];
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
    uint8_t         row_height_minus1[21];
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
    uint8_t         log2_parallel_merge_level_minus2;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Application may set the CTU bit size limit based on
Packit Service 9402ce
     *  spec requirement (A.3.2), or other value for special purpose.
Packit Service 9402ce
     *  If the value is set 0, no bit size limit is checked.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         ctu_max_bitsize_allowed;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Maximum reference index for reference picture list 0.
Packit Service 9402ce
     *   value range: [0..14].
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         num_ref_idx_l0_default_active_minus1;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Maximum reference index for reference picture list 1.
Packit Service 9402ce
     *  value range: [0..14].
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         num_ref_idx_l1_default_active_minus1;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief PPS header
Packit Service 9402ce
     *  Used by GPU to generate new slice headers in slice size control.
Packit Service 9402ce
     *  value range: [0..63].
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         slice_pic_parameter_set_id;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief NAL unit type
Packit Service 9402ce
     *  Used by GPU to generate new slice headers in slice size control.
Packit Service 9402ce
     *  value range: [0..63].
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         nal_unit_type;
Packit Service 9402ce
Packit Service 9402ce
    union {
Packit Service 9402ce
        struct {
Packit Service 9402ce
            /** \brief Is picture an IDR picture? */
Packit Service 9402ce
            uint32_t    idr_pic_flag                                   : 1;
Packit Service 9402ce
            /** \brief Picture type.
Packit Service 9402ce
             *  I  - 1;
Packit Service 9402ce
             *  P  - 2;
Packit Service 9402ce
             *  B  - 3;
Packit Service 9402ce
             *  B1 - 4;
Packit Service 9402ce
             *  B2 - 5;
Packit Service 9402ce
             * B1 and B2 are frame types for hierachical B, explanation
Packit Service 9402ce
             * can refer to num_b_in_gop[].
Packit Service 9402ce
             */
Packit Service 9402ce
            uint32_t    coding_type                                    : 3;
Packit Service 9402ce
            /** \brief Is picture a reference picture? */
Packit Service 9402ce
            uint32_t    reference_pic_flag                             : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    dependent_slice_segments_enabled_flag          : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    sign_data_hiding_enabled_flag                  : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    constrained_intra_pred_flag                    : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    transform_skip_enabled_flag                    : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    cu_qp_delta_enabled_flag	               : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    weighted_pred_flag                             : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    weighted_bipred_flag                           : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    transquant_bypass_enabled_flag                 : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    tiles_enabled_flag                             : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    entropy_coding_sync_enabled_flag               : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    loop_filter_across_tiles_enabled_flag          : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    pps_loop_filter_across_slices_enabled_flag     : 1;
Packit Service 9402ce
            /** \brief A combination of HEVC syntax element of
Packit Service 9402ce
             *  sps_scaling_list_data_present_flag and
Packit Service 9402ce
             *  pps_scaling_list_data_present_flag
Packit Service 9402ce
             *  when scaling_list_enable_flag is 0, it must be 0.
Packit Service 9402ce
             */
Packit Service 9402ce
            uint32_t    scaling_list_data_present_flag                 : 1;
Packit Service 9402ce
            /** \brief indicate the current picture contains significant
Packit Service 9402ce
             *  screen contents (text, characters, etc.) or animated image.
Packit Service 9402ce
             *  GPU may want to treat them differently from normal video.
Packit Service 9402ce
             *  For example, encoder may choose a small transform unit size
Packit Service 9402ce
             *  and may use transform skip mode.
Packit Service 9402ce
             */
Packit Service 9402ce
            uint32_t    screen_content_flag                            : 1;
Packit Service 9402ce
            /**
Packit Service 9402ce
             *  When either weighted_pred_flag or weighted_bipred_flag is
Packit Service 9402ce
             *  turned on, the flag enable_gpu_weighted_prediction requests
Packit Service 9402ce
             *  GPU to determine weighted prediction factors. In this case,
Packit Service 9402ce
             *  the following parameters in slice control data structure
Packit Service 9402ce
             *  shall be ignored:
Packit Service 9402ce
             *  luma_log2_weight_denom, delta_chroma_log2_weight_denom,
Packit Service 9402ce
             *  luma_offset_l0[15], luma_offset_l1[15],
Packit Service 9402ce
             *  delta_luma_weight_l0[15], delta_luma_weight_l1[15],
Packit Service 9402ce
             *  chroma_offset_l0[15][2], chroma_offset_l1[15][2],
Packit Service 9402ce
             *  and delta_chroma_weight_l0[15][2], delta_chroma_weight_l1[15][2].
Packit Service 9402ce
             */
Packit Service 9402ce
            uint32_t    enable_gpu_weighted_prediction                 : 1;
Packit Service 9402ce
            /** \brief HEVC syntax element in slice segment header
Packit Service 9402ce
             *  GPU uses it to generate new slice headers in slice size control.
Packit Service 9402ce
             */
Packit Service 9402ce
            uint32_t    no_output_of_prior_pics_flag                   : 1;
Packit Service 9402ce
            uint32_t    reserved                                       : 11;
Packit Service 9402ce
        } bits;
Packit Service 9402ce
        uint32_t        value;
Packit Service 9402ce
    } pic_fields;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Reserved bytes for future use, must be zero */
Packit Service 9402ce
    uint32_t                va_reserved[VA_PADDING_HIGH];
Packit Service 9402ce
} VAEncPictureParameterBufferHEVC;
Packit Service 9402ce
Packit Service 9402ce
/**
Packit Service 9402ce
 * \brief Slice parameter for HEVC encoding in main & main 10 profiles.
Packit Service 9402ce
 *
Packit Service 9402ce
 * This structure holds information for \c
Packit Service 9402ce
 * slice_segment_layer_rbsp() as defined by the HEVC
Packit Service 9402ce
 * specification.
Packit Service 9402ce
 *
Packit Service 9402ce
 * If packed slice headers mode is used, i.e. if the encoding
Packit Service 9402ce
 * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE
Packit Service 9402ce
 * flag, then the driver expects two more buffers to be provided to
Packit Service 9402ce
 * the same \c vaRenderPicture() as this buffer:
Packit Service 9402ce
 * - a #VAEncPackedHeaderParameterBuffer with type set to
Packit Service 9402ce
 *   VAEncPackedHeaderType::VAEncPackedHeaderSlice ;
Packit Service 9402ce
 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
Packit Service 9402ce
 *   header data.
Packit Service 9402ce
 *
Packit Service 9402ce
 */
Packit Service 9402ce
typedef struct _VAEncSliceParameterBufferHEVC {
Packit Service 9402ce
    /** \brief Starting CTU address for this slice. */
Packit Service 9402ce
    uint32_t        slice_segment_address;
Packit Service 9402ce
    /** \brief Number of CTUs in this slice. */
Packit Service 9402ce
    uint32_t        num_ctu_in_slice;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Slice type.
Packit Service 9402ce
     *  Corresponds to HEVC syntax element of the same name.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         slice_type;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint8_t         slice_pic_parameter_set_id;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Maximum reference index for reference picture list 0.
Packit Service 9402ce
     *  Range: 0 to 14, inclusive.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         num_ref_idx_l0_active_minus1;
Packit Service 9402ce
    /** \brief Maximum reference index for reference picture list 1.
Packit Service 9402ce
     *  Range: 0 to 14, inclusive.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         num_ref_idx_l1_active_minus1;
Packit Service 9402ce
    /** \brief Reference picture list 0 (for P slices). */
Packit Service 9402ce
    VAPictureHEVC   ref_pic_list0[15];
Packit Service 9402ce
    /** \brief Reference picture list 1 (for B slices). */
Packit Service 9402ce
    VAPictureHEVC   ref_pic_list1[15];
Packit Service 9402ce
    /**@}*/
Packit Service 9402ce
Packit Service 9402ce
    /** @name pred_weight_table() */
Packit Service 9402ce
    /**@{*/
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    uint8_t         luma_log2_weight_denom;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          delta_chroma_log2_weight_denom;
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          delta_luma_weight_l0[15];
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          luma_offset_l0[15];
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          delta_chroma_weight_l0[15][2];
Packit Service 9402ce
    /** \brief Same as the HEVC spec variable ChromaOffsetL0[]. */
Packit Service 9402ce
    int8_t          chroma_offset_l0[15][2];
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          delta_luma_weight_l1[15];
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          luma_offset_l1[15];
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          delta_chroma_weight_l1[15][2];
Packit Service 9402ce
    /** \brief Same as the HEVC spec variable ChromaOffsetL1[]. */
Packit Service 9402ce
    int8_t          chroma_offset_l1[15][2];
Packit Service 9402ce
    /**@}*/
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Corresponds to HEVC spec variable MaxNumMergeCand.
Packit Service 9402ce
     *  Range: [1..5].
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t         max_num_merge_cand;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          slice_qp_delta;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          slice_cb_qp_offset;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          slice_cr_qp_offset;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          slice_beta_offset_div2;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Same as the HEVC bitstream syntax element. */
Packit Service 9402ce
    int8_t          slice_tc_offset_div2;
Packit Service 9402ce
Packit Service 9402ce
    union {
Packit Service 9402ce
        struct {
Packit Service 9402ce
            /** \brief Indicates if current slice is the last one in picture */
Packit Service 9402ce
            uint32_t    last_slice_of_pic_flag                         : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name */
Packit Service 9402ce
            uint32_t    dependent_slice_segment_flag                   : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name */
Packit Service 9402ce
            uint32_t    colour_plane_id                                : 2;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    slice_temporal_mvp_enabled_flag                : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    slice_sao_luma_flag                            : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    slice_sao_chroma_flag                          : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name.
Packit Service 9402ce
             *  if this flag is set to 0, num_ref_idx_l0_active_minus1 should be
Packit Service 9402ce
             *  equal to num_ref_idx_l0_default_active_minus1
Packit Service 9402ce
             *  as well as for that for l1.
Packit Service 9402ce
             */
Packit Service 9402ce
            uint32_t    num_ref_idx_active_override_flag               : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    mvd_l1_zero_flag                               : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    cabac_init_flag        	                    : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    slice_deblocking_filter_disabled_flag          : 2;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    slice_loop_filter_across_slices_enabled_flag   : 1;
Packit Service 9402ce
            /** \brief Corresponds to HEVC syntax element of the same name. */
Packit Service 9402ce
            uint32_t    collocated_from_l0_flag                        : 1;
Packit Service 9402ce
        } bits;
Packit Service 9402ce
        uint32_t        value;
Packit Service 9402ce
    } slice_fields;
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Reserved bytes for future use, must be zero */
Packit Service 9402ce
    uint32_t                va_reserved[VA_PADDING_MEDIUM];
Packit Service 9402ce
    /**@}*/
Packit Service 9402ce
} VAEncSliceParameterBufferHEVC;
Packit Service 9402ce
Packit Service 9402ce
/**
Packit Service 9402ce
 * \brief HEVC Quantization Matrix Buffer Structure
Packit Service 9402ce
 *
Packit Service 9402ce
 * This structure is sent once per frame,
Packit Service 9402ce
 * and only when scaling_list_enabled_flag = 1 and scaling_list_data_present_flag = 1.
Packit Service 9402ce
 * Only when scaling_list_data_present_flag = 1, app still
Packit Service 9402ce
 * needs to send in this structure. When scaling_list_enabled_flag = 1 and
Packit Service 9402ce
 * scaling_list_data_present_flag = 0, driver is responsible to generate
Packit Service 9402ce
 * the default scaling list values.
Packit Service 9402ce
 *
Packit Service 9402ce
 * Matrix entries are in raster scan order which follows HEVC spec.
Packit Service 9402ce
 */
Packit Service 9402ce
typedef struct _VAQMatrixBufferHEVC
Packit Service 9402ce
{
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief scaling lists,
Packit Service 9402ce
     * corresponds to same HEVC spec syntax element
Packit Service 9402ce
     * ScalingList[ i ][ MatrixID ][ j ].
Packit Service 9402ce
     *
Packit Service 9402ce
     * \brief 4x4 scaling,
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t             scaling_lists_4x4[3][2][16];
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief 8x8 scaling,
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t             scaling_lists_8x8[3][2][64];
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief 16x16 scaling,
Packit Service 9402ce
     * correspongs i = 2, MatrixID is in the range of 0 to 5,
Packit Service 9402ce
     * inclusive. And j is in the range of 0 to 63, inclusive.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t             scaling_lists_16x16[3][2][64];
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief 32x32 scaling,
Packit Service 9402ce
     * correspongs i = 3, MatrixID is in the range of 0 to 1,
Packit Service 9402ce
     * inclusive. And j is in the range of 0 to 63, inclusive.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t             scaling_lists_32x32[2][64];
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief DC values of the 16x16 scaling lists,
Packit Service 9402ce
     * corresponds to HEVC spec syntax
Packit Service 9402ce
     * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8
Packit Service 9402ce
     * with sizeID = 2 and matrixID in the range of 0 to 5, inclusive.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t             scaling_list_dc_16x16[3][2];
Packit Service 9402ce
    /**
Packit Service 9402ce
     * \brief DC values of the 32x32 scaling lists,
Packit Service 9402ce
     * corresponds to HEVC spec syntax
Packit Service 9402ce
     * scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8
Packit Service 9402ce
     * with sizeID = 3 and matrixID in the range of 0 to 1, inclusive.
Packit Service 9402ce
     */
Packit Service 9402ce
    uint8_t             scaling_list_dc_32x32[2];
Packit Service 9402ce
Packit Service 9402ce
    /** \brief Reserved bytes for future use, must be zero */
Packit Service 9402ce
    uint32_t                va_reserved[VA_PADDING_LOW];
Packit Service 9402ce
} VAQMatrixBufferHEVC;
Packit Service 9402ce
Packit Service 9402ce
/**@}*/
Packit Service 9402ce
Packit Service 9402ce
#ifdef __cplusplus
Packit Service 9402ce
}
Packit Service 9402ce
#endif
Packit Service 9402ce
Packit Service 9402ce
#endif /* VA_ENC_HEVC_H */