* associated packed header data buffer shall contain the start code
* prefix 0x000001 followed by the complete NAL unit, thus also
* including the \c nal_unit_type.
+ *
+ * Note: the start code prefix can contain an arbitrary number of leading
+ * zeros. The driver will skip them for emulation prevention bytes insertion,
+ * if necessary.
*/
typedef enum {
/**
+ * \brief Packed Sequence Parameter Set (SPS).
+ *
+ * The corresponding packed header data buffer shall contain the
+ * complete seq_parameter_set_rbsp() syntax element.
+ *
+ * Note: packed \c nal_unit_type shall be equal to 7.
+ */
+ VAEncPackedHeaderH264_SPS = VAEncPackedHeaderSequence,
+ /**
+ * \brief Packed Picture Parameter Set (PPS).
+ *
+ * The corresponding packed header data buffer shall contain the
+ * complete pic_parameter_set_rbsp() syntax element.
+ *
+ * Note: packed \c nal_unit_type shall be equal to 8.
+ */
+ VAEncPackedHeaderH264_PPS = VAEncPackedHeaderPicture,
+ /**
+ * \brief Packed slice header.
+ *
+ * The corresponding packed header data buffer shall contain the
+ * \c slice_header() syntax element only, along with any start
+ * code prefix and NAL unit type preceeding it. i.e. this means
+ * that the buffer does not contain any of the \c slice_data() or
+ * the \c rbsp_slice_trailing_bits().
+ *
+ * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR
+ * picture), or 5 (IDR picture).
+ */
+ VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice,
+ /**
* \brief Packed Supplemental Enhancement Information (SEI).
*
* The corresponding packed header data buffer shall contain the
*
* Note: packed \c nal_unit_type shall be equal to 6.
*/
- VAEncPackedHeaderH264_SEI = (VAEncPackedHeaderMiscMask | 1),
+ VAEncPackedHeaderH264_SEI = (VAEncPackedHeaderMiscMask | 1),
} VAEncPackedHeaderTypeH264;
/**
- * \brief Sequence parameter for H.264 encoding in main & high profiles.
+ * \brief Sequence parameter for H.264 encoding in baseline, main & high
+ * profiles.
*
* This structure holds information for \c seq_parameter_set_data() as
* defined by the H.264 specification.
union {
struct {
/** \brief Same as the H.264 bitstream syntax element. */
+ unsigned int aspect_ratio_info_present_flag : 1;
+ /** \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;
unsigned int value;
} vui_fields;
/** \brief Same as the H.264 bitstream syntax element. */
+ unsigned char aspect_ratio_idc;
+ /** \brief Same as the H.264 bitstream syntax element. */
+ unsigned int sar_width;
+ /** \brief Same as the H.264 bitstream syntax element. */
+ unsigned int sar_height;
+ /** \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.
+ * \brief Picture parameter for H.264 encoding in baseline, main & high
+ * profiles.
*
* This structure holds information for \c pic_parameter_set_rbsp() as
* defined by the H.264 specification.
} VAEncPictureParameterBufferH264;
/**
- * \brief Slice parameter for H.264 encoding in main & high profiles.
+ * \brief Slice parameter for H.264 encoding in baseline, main & high profiles.
*
* This structure holds information for \c
* slice_layer_without_partitioning_rbsp() as defined by the H.264
*
* If per-macroblock encoder configuration is needed, \c macroblock_info
* references a buffer of type #VAEncMacroblockParameterBufferH264. This
- * buffer is not passed to vaRenderPicture(). i.e. it is not destroyed
- * by subsequent calls to vaRenderPicture() and then can be re-used
+ * buffer is not passed to vaRenderPicture() and it can be re-used
* without re-allocating the whole buffer.
*/
typedef struct _VAEncSliceParameterBufferH264 {
/** \brief Starting MB address for this slice. */
unsigned int macroblock_address;
+ /** \brief Number of macroblocks in this slice. */
+ unsigned int num_macroblocks;
/**
* \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID.
*
* elements.
*/
VABufferID macroblock_info;
- /** \brief Number of macroblocks in this slice. */
- unsigned int num_macroblocks;
/** \brief Slice type.
* Range: 0..2, 5..7, i.e. no switching slices.
*/
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. */
/**@}*/
/**
- * \brief Macroblock parameter for H.264 encoding in main & high profiles.
+ * \brief Macroblock parameter for H.264 encoding in baseline, main & high
+ * profiles.
*
* This structure holds per-macroblock information. The buffer must be
* allocated with as many elements (macroblocks) as necessary to fit