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