[Libva] [PATCH 05/42] API: add new H.264 encoding API for main and high profiles.

Xiang, Haihao haihao.xiang at intel.com
Mon May 13 00:51:28 PDT 2013


From: Gwenole Beauchesne <gwenole.beauchesne at intel.com>

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
---
 va/va.h          |   50 ++++++-
 va/va_enc_h264.h |  471 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 520 insertions(+), 1 deletions(-)
 create mode 100644 va/va_enc_h264.h

diff --git a/va/va.h b/va/va.h
index f7506eb..d943b51 100644
--- a/va/va.h
+++ b/va/va.h
@@ -285,7 +285,9 @@ typedef enum
     VAConfigAttribSpatialClipping	= 2,
     VAConfigAttribIntraResidual		= 3,
     VAConfigAttribEncryption		= 4,
-    VAConfigAttribRateControl		= 5
+    VAConfigAttribRateControl		= 5,
+    VAConfigAttribEncPackedHeaders      = 6, /**< Packed headers mode. */
+    VAConfigAttribEncInterlaced         = 7, /**< Interlaced mode. */
 } VAConfigAttribType;
 
 /*
@@ -311,6 +313,32 @@ typedef struct _VAConfigAttrib {
 #define VA_RC_VBR	0x00000004	
 #define VA_RC_VCM	0x00000008 /* video conference mode */
 
+/** @name Attribute values for VAConfigAttribuEncPackedHeaders */
+/**@{*/
+/** \brief Driver does not support any packed headers mode. */
+#define VA_ENC_PACKED_HEADER_NONE       0x00000000
+/** \brief Driver supports packed sequence headers. e.g. SPS for H.264. */
+#define VA_ENC_PACKED_HEADER_SEQUENCE   0x00000001
+/** \brief Driver supports packed picture headers. e.g. PPS for H.264. */
+#define VA_ENC_PACKED_HEADER_PICTURE    0x00000002
+/** \brief Driver supports packed slice headers. e.g. \c slice_header() for H.264. */
+#define VA_ENC_PACKED_HEADER_SLICE      0x00000004
+/**@}*/
+
+/** @name Attribute values for VAConfigAttributeEncInterlaced */
+/**@{*/
+/** \brief Driver does not support interlaced coding. */
+#define VA_ENC_INTERLACED_NONE          0x00000000
+/** \brief Driver supports interlaced frame coding. */
+#define VA_ENC_INTERLACED_FRAME         0x00000001
+/** \brief Driver supports interlaced field coding. */
+#define VA_ENC_INTERLACED_FIELD         0x00000002
+/** \brief Driver supports macroblock adaptive frame field coding. */
+#define VA_ENC_INTERLACED_MBAFF         0x00000004
+/** \brief Driver support picture adaptive frame field coding. */
+#define VA_ENC_INTERLACED_PAFF          0x00000008
+/**@}*/
+
 /*
  * if an attribute is not applicable for a given
  * profile/entrypoint pair, then set the value to the following 
@@ -568,6 +596,8 @@ typedef enum
     VAEncPictureParameterBufferType	= 23,
     VAEncSliceParameterBufferType	= 24,
     VAEncMiscParameterBufferType	= 27,
+    VAEncPackedHeaderParameterBufferType = 28,
+    VAEncPackedHeaderDataBufferType     = 29,
     VABufferTypeMax                     = 0xff
 } VABufferType;
 
@@ -579,6 +609,24 @@ typedef enum
     VAEncMiscParameterTypeAIR    	= 3,
 } VAEncMiscParameterType;
 
+/** \brief Packed header type. */
+typedef enum {
+    VAEncPackedHeaderSequence           = 1, /**< Packed sequence header. */
+    VAEncPackedHeaderPicture            = 2, /**< Packed picture header. */
+    VAEncPackedHeaderSlice              = 3, /**< Packed slice header. */
+} VAEncPackedHeaderType;
+
+/** \brief Packed header parameter. */
+typedef struct _VAEncPackedHeaderParameterBuffer {
+    /** Type of the packed header buffer. See #VAEncPackedHeaderType. */
+    VAEncPackedHeaderType       type;
+    /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */
+    unsigned int                bit_length;
+    /** \brief Flag set to 1 if startcode emulation prevention bytes are to be inserted. */
+    /* XXX: does this mean the driver re-process the buffer? */
+    unsigned char               insert_emulation_bytes;
+} VAEncPackedHeaderParameterBuffer;
+
 /*
  *  For application, e.g. set a new bitrate
  *    VABufferID buf_id;
diff --git a/va/va_enc_h264.h b/va/va_enc_h264.h
new file mode 100644
index 0000000..7df8df2
--- /dev/null
+++ b/va/va_enc_h264.h
@@ -0,0 +1,471 @@
+/*
+ * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file va_enc_h264.h
+ * \brief The H.264 encoding API
+ *
+ * This file contains the \ref api_enc_h264 "H.264 encoding API".
+ */
+
+#ifndef VA_ENC_H264_H
+#define VA_ENC_H264_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup api_enc_h264 H.264 encoding API
+ *
+ * @{
+ */
+
+/**
+ * @name Picture flags
+ *
+ * Those flags flags are meant to signal when a picture marks the end
+ * of a sequence, a stream, or even both at once.
+ *
+ * @{
+ */
+/**
+ * \brief Marks the last picture in the sequence.
+ *
+ * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame.
+ */
+#define H264_LAST_PICTURE_EOSEQ     0x01
+/**
+ * \brief Marks the last picture in the stream.
+ *
+ * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame.
+ */
+#define H264_LAST_PICTURE_EOSTREAM  0x02
+/**@}*/
+
+/**
+ * \brief Sequence parameter for H.264 encoding in main & high profiles.
+ *
+ * This structure holds information for \c seq_parameter_set_data() as
+ * defined by the H.264 specification.
+ *
+ * If packed sequence headers mode is used, i.e. if the encoding
+ * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE
+ * flag, then the driver expects two more buffers to be provided to
+ * the same \c vaRenderPicture() as this buffer:
+ * - a #VAEncPackedHeaderParameterBuffer with type set to
+ *   VAEncPackedHeaderType::VAEncPackedHeaderSequence ;
+ * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
+ *   header data.
+ *
+ * If \ref seq_scaling_matrix_present_flag is set to \c 1, then a
+ * #VAIQMatrixBufferH264 buffer shall also be provided within the same
+ * \c vaRenderPicture() call as this sequence parameter buffer.
+ */
+typedef struct _VAEncSequenceParameterBufferH264 {
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   seq_parameter_set_id;
+    /** \brief XXX: implied by VA config. */
+    unsigned char   profile_idc;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   level_idc;
+    /** \brief Period between I frames. */
+    unsigned int    intra_period;
+    /** \brief Period between I/P frames. */
+    unsigned int    ip_period;
+    /**
+     * \brief Initial bitrate set for this sequence in CBR or VBR modes.
+     *
+     * This field represents the initial bitrate value for this
+     * sequence if CBR or VBR mode is used, i.e. if the encoder
+     * pipeline was created with a #VAConfigAttribRateControl
+     * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
+     *
+     * The bitrate can be modified later on through
+     * #VAEncMiscParameterRateControl buffers.
+     */
+    unsigned int    bits_per_second;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned int    max_num_ref_frames;
+    /** \brief Picture width in macroblocks. */
+    unsigned short  picture_width_in_mbs;
+    /** \brief Picture height in macroblocks. */
+    unsigned short  picture_height_in_mbs;
+
+    union {
+        struct {
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int chroma_format_idc                      : 2;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int frame_mbs_only_flag                    : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int mb_adaptive_frame_field_flag           : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int seq_scaling_matrix_present_flag        : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int direct_8x8_inference_flag              : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int log2_max_frame_num_minus4              : 4;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int pic_order_cnt_type                     : 2;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int log2_max_pic_order_cnt_lsb_minus4      : 4;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int delta_pic_order_always_zero_flag       : 1;
+        } bits;
+        unsigned int value;
+    } seq_fields;
+
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   bit_depth_luma_minus8;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   bit_depth_chroma_minus8;
+
+    /** if pic_order_cnt_type == 1 */
+    /**@{*/
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   num_ref_frames_in_pic_order_cnt_cycle;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    int             offset_for_non_ref_pic;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    int             offset_for_top_to_bottom_field;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    int             offset_for_ref_frame[256];
+    /**@}*/
+
+    /** @name Cropping (optional) */
+    /**@{*/
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   frame_cropping_flag;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned int    frame_crop_left_offset;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned int    frame_crop_right_offset;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned int    frame_crop_top_offset;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned int    frame_crop_bottom_offset;
+    /**@}*/
+
+    /** @name VUI parameters (optional) */
+    /**@{*/
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   vui_parameters_present_flag;
+    union {
+        struct {
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int timing_info_present_flag               : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int bitstream_restriction_flag             : 1;
+            /** \brief Range: 0 to 16, inclusive. */
+            unsigned int log2_max_mv_length_horizontal          : 5;
+            /** \brief Range: 0 to 16, inclusive. */
+            unsigned int log2_max_mv_length_vertical            : 5;
+        } bits;
+        unsigned int value;
+    } vui_fields;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned int    num_units_in_tick;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned int    time_scale;
+    /**@}*/
+} VAEncSequenceParameterBufferH264;
+
+/**
+ * \brief Picture parameter for H.264 encoding in main & high profiles.
+ *
+ * This structure holds information for \c pic_parameter_set_rbsp() as
+ * defined by the H.264 specification.
+ *
+ * If packed picture headers mode is used, i.e. if the encoding
+ * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE
+ * flag, then the driver expects two more buffers to be provided to
+ * the same \c vaRenderPicture() as this buffer:
+ * - a #VAEncPackedHeaderParameterBuffer with type set to
+ *   VAEncPackedHeaderType::VAEncPackedHeaderPicture ;
+ * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
+ *   header data.
+ *
+ * If \ref pic_scaling_matrix_present_flag is set to \c 1, then a
+ * #VAIQMatrixBufferH264 buffer shall also be provided within the same
+ * \c vaRenderPicture() call as this picture parameter buffer.
+ */
+typedef struct _VAEncPictureParameterBufferH264 {
+    /** \brief Information about the picture to be encoded. */
+    VAPictureH264   CurrPic;
+    /** \brief Decoded Picture Buffer (DPB).
+     *  XXX: is this really used?
+     */
+    VAPictureH264   ReferenceFrames[16];
+    /**
+     * \brief Output encoded bitstream.
+     *
+     * \ref coded_buf has type #VAEncCodedBufferType. It should be
+     * large enough to hold the compressed NAL slice and possibly SPS
+     * and PPS NAL units.
+     */
+    VABufferID      coded_buf;
+
+    /** \brief The picture parameter set referred to in the slice header. */
+    unsigned char   pic_parameter_set_id;
+    /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */
+    unsigned char   seq_parameter_set_id;
+
+    /**
+     * \brief OR'd flags describing whether the picture is the last one or not.
+     *
+     * This fields holds 0 if the picture to be encoded is not the last
+     * one in the stream or sequence. Otherwise, it is a combination of
+     * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM.
+     */
+    unsigned char   last_picture;
+
+    /** \brief The picture identifier.
+     *   Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive.
+     */
+    unsigned short  frame_num;                       /* (0..65535) */
+
+    /** \brief \c pic_init_qp_minus26 + 26. */
+    unsigned char   pic_init_qp;
+    /** \brief Maximum reference index for reference picture list 0.
+     *   Range: 0 to 31, inclusive.
+     */
+    unsigned char   num_ref_idx_l0_active_minus1;
+    /** \brief Maximum reference index for reference picture list 1.
+     *  Range: 0 to 31, inclusive.
+     */
+    unsigned char   num_ref_idx_l1_active_minus1;
+
+    /** \brief Range: -12 to 12, inclusive. */
+    signed char     chroma_qp_index_offset;
+    /** \brief Range: -12 to 12, inclusive. */
+    signed char     second_chroma_qp_index_offset;
+
+    union {
+        struct {
+            /** \brief Is picture an IDR picture? */
+            unsigned int idr_pic_flag                           : 1;
+            /** \brief Is picture a reference picture? */
+            unsigned int reference_pic_flag                     : 2;
+            /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */
+            unsigned int entropy_coding_mode_flag               : 1;
+            /** \brief Is weighted prediction applied to P slices? */
+            unsigned int weighted_pred_flag                     : 1;
+            /** \brief Range: 0 to 2, inclusive. */
+            unsigned int weighted_bipred_idc                    : 2;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int constrained_intra_pred_flag            : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int transform_8x8_mode_flag                : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int deblocking_filter_control_present_flag : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int redundant_pic_cnt_present_flag         : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int pic_order_present_flag                 : 1;
+            /** \brief Same as the H.264 bitstream syntax element. */
+            unsigned int pic_scaling_matrix_present_flag        : 1;
+        } bits;
+        unsigned int value;
+    } pic_fields;
+} VAEncPictureParameterBufferH264;
+
+/**
+ * \brief Slice parameter for H.264 encoding in main & high profiles.
+ *
+ * This structure holds information for \c
+ * slice_layer_without_partitioning_rbsp() as defined by the H.264
+ * specification.
+ *
+ * If packed slice headers mode is used, i.e. if the encoding
+ * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE
+ * flag, then the driver expects two more buffers to be provided to
+ * the same \c vaRenderPicture() as this buffer:
+ * - a #VAEncPackedHeaderParameterBuffer with type set to
+ *   VAEncPackedHeaderType::VAEncPackedHeaderSlice ;
+ * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
+ *   header data.
+ */
+typedef struct _VAEncSliceParameterBufferH264 {
+    /** \brief Starting MB address for this slice. */
+    unsigned int    macroblock_address;
+    /** \brief Number of macroblocks in this slice. */
+    unsigned int    num_macroblocks;
+    /** \brief Slice type.
+     *  Range: 0..2, 5..7, i.e. no switching slices.
+     */
+    unsigned char   slice_type;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   pic_parameter_set_id;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned short  idr_pic_id;
+
+    /** @name If pic_order_cnt_type == 0 */
+    /**@{*/
+    /** \brief The picture order count modulo MaxPicOrderCntLsb. */
+    unsigned short  pic_order_cnt_lsb;
+    /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */
+    int             delta_pic_order_cnt_bottom;
+    /**@}*/
+    /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */
+    /**@{*/
+    /** \brief [0]: top, [1]: bottom. */
+    int             delta_pic_order_cnt[2];
+    /**@}*/
+
+    /** @name If slice_type == B */
+    /**@{*/
+    unsigned char   direct_spatial_mv_pred_flag;
+    /**@}*/
+
+    /** @name If slice_type == P */
+    /**@{*/
+    /** \brief Specifies if
+     * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or
+     * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are
+     * overriden by the values for this slice.
+     */
+    unsigned char   num_ref_idx_active_override_flag;
+    /** \brief Maximum reference index for reference picture list 0.
+     *  Range: 0 to 31, inclusive.
+     */
+    unsigned char   num_ref_idx_l0_active_minus1;
+    /** \brief Maximum reference index for reference picture list 1.
+     *  Range: 0 to 31, inclusive.
+     */
+    unsigned char   num_ref_idx_l1_active_minus1;
+    /** \brief XXX: is this really used? */
+    VAPictureH264   RefPicList0[32];
+    /** \brief XXX: is this really used? */
+    VAPictureH264   RefPicList1[32];
+    /**@}*/
+
+    /** @name ref_pic_list_modification() */
+    /**@{*/
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   ref_pic_list_modification_flag_l0;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   ref_pic_list_modification_flag_l1;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   modification_of_pic_nums_idc_l0[32];
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   modification_of_pic_nums_idc_l1[32];
+    /** \brief List 0 values for each \c modification_of_pic_nums_idc_l0. */
+    /**
+     * - If \c modification_of_pic_nums_idc == 0 or 1:
+     *   - \c modification_of_pic_nums_value is \c abs_diff_pic_num_minus1
+     * - If \c modification_of_pic_nums_idc == 2:
+     *   - \c modification_of_pic_nums_value is \c long_term_pic_num
+     */
+    unsigned int    modification_of_pic_nums_value_l0[32];
+    /** \brief Same as \c modification_of_pic_nums_value_l0 but for list 1. */
+    unsigned int    modification_of_pic_nums_value_l1[32];
+    /**@}*/
+
+    /** @name pred_weight_table() */
+    /**@{*/
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   luma_log2_weight_denom;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   chroma_log2_weight_denom;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   luma_weight_l0_flag;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed short    luma_weight_l0[32];
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed short    luma_offset_l0[32];
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   chroma_weight_l0_flag;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed short    chroma_weight_l0[32][2];
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed short    chroma_offset_l0[32][2];
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   luma_weight_l1_flag;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed short    luma_weight_l1[32];
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed short    luma_offset_l1[32];
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   chroma_weight_l1_flag;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed short    chroma_weight_l1[32][2];
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed short    chroma_offset_l1[32][2];
+    /**@}*/
+
+    /** @name dec_ref_pic_marking() */
+    /**@{*/
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   no_output_of_prior_pics_flag;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   long_term_reference_flag;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    unsigned char   adaptive_ref_pic_marking_mode_flag;
+    /** \brief Same as the \c memory_management_control_operation syntax element. */
+    unsigned char   mmco[32];
+    /**
+     * \brief Values for each \c memory_management_control_operation.
+     *
+     * - If \c mmco == 1:
+     *   - \c mmco_value[0] is \c difference_of_pic_nums_minus1
+     *   - \c mmco_value[1] is not used
+     * - If \c mmco == 2:
+     *   - \c mmco_value[0] is \c long_term_pic_num
+     *   - \c mmco_value[1] is not used
+     * - If \c mmco == 3:
+     *   - \c mmco_value[0] is \c difference_of_pic_nums_minus1
+     *   - \c mmco_value[1] is \c long_term_frame_idx
+     * - If \c mmco == 4:
+     *   - \c mmco_value[0] is \c max_long_term_frame_idx_plus1
+     *   - \c mmco_value[1] is not used
+     * - If \c mmco == 6:
+     *   - \c mmco_value[0] is \c long_term_frame_idx
+     *   - \c mmco_value[1] is not used
+     */
+    unsigned int    mmco_value[32][2];
+    /**@}*/
+
+    /** \brief Range: 0 to 2, inclusive. */
+    unsigned char   cabac_init_idc;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed char     slice_qp_delta;
+    /** @name If deblocking_filter_control_present_flag */
+    /**@{*/
+    /** \brief Range: 0 to 2, inclusive. */
+    unsigned char   disable_deblocking_filter_idc;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed char     slice_alpha_c0_offset_div2;
+    /** \brief Same as the H.264 bitstream syntax element. */
+    signed char     slice_beta_offset_div2;
+    /**@}*/
+} VAEncSliceParameterBufferH264;
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* VA_ENC_H264_H */
-- 
1.7.4.1



More information about the Libva mailing list