• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

hardware/intel/libva


Commit MetaInfo

修訂8c70e247c623fcb0aef55930e57f0ee63231c9ae (tree)
時間2013-05-28 17:19:08
作者Gwenole Beauchesne <gwenole.beauchesne@inte...>
CommiterXiang, Haihao

Log Message

API: add new H.264 encoding API for main and high profiles.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>

Change Summary

差異

--- a/va/va.h
+++ b/va/va.h
@@ -272,7 +272,9 @@ typedef enum
272272 VAConfigAttribSpatialClipping = 2,
273273 VAConfigAttribIntraResidual = 3,
274274 VAConfigAttribEncryption = 4,
275- VAConfigAttribRateControl = 5
275+ VAConfigAttribRateControl = 5,
276+ VAConfigAttribEncPackedHeaders = 6, /**< Packed headers mode. */
277+ VAConfigAttribEncInterlaced = 7, /**< Interlaced mode. */
276278 } VAConfigAttribType;
277279
278280 /*
@@ -298,6 +300,32 @@ typedef struct _VAConfigAttrib {
298300 #define VA_RC_VBR 0x00000004
299301 #define VA_RC_VCM 0x00000008 /* video conference mode */
300302
303+/** @name Attribute values for VAConfigAttribuEncPackedHeaders */
304+/**@{*/
305+/** \brief Driver does not support any packed headers mode. */
306+#define VA_ENC_PACKED_HEADER_NONE 0x00000000
307+/** \brief Driver supports packed sequence headers. e.g. SPS for H.264. */
308+#define VA_ENC_PACKED_HEADER_SEQUENCE 0x00000001
309+/** \brief Driver supports packed picture headers. e.g. PPS for H.264. */
310+#define VA_ENC_PACKED_HEADER_PICTURE 0x00000002
311+/** \brief Driver supports packed slice headers. e.g. \c slice_header() for H.264. */
312+#define VA_ENC_PACKED_HEADER_SLICE 0x00000004
313+/**@}*/
314+
315+/** @name Attribute values for VAConfigAttributeEncInterlaced */
316+/**@{*/
317+/** \brief Driver does not support interlaced coding. */
318+#define VA_ENC_INTERLACED_NONE 0x00000000
319+/** \brief Driver supports interlaced frame coding. */
320+#define VA_ENC_INTERLACED_FRAME 0x00000001
321+/** \brief Driver supports interlaced field coding. */
322+#define VA_ENC_INTERLACED_FIELD 0x00000002
323+/** \brief Driver supports macroblock adaptive frame field coding. */
324+#define VA_ENC_INTERLACED_MBAFF 0x00000004
325+/** \brief Driver support picture adaptive frame field coding. */
326+#define VA_ENC_INTERLACED_PAFF 0x00000008
327+/**@}*/
328+
301329 /*
302330 * if an attribute is not applicable for a given
303331 * profile/entrypoint pair, then set the value to the following
@@ -555,6 +583,8 @@ typedef enum
555583 VAEncPictureParameterBufferType = 23,
556584 VAEncSliceParameterBufferType = 24,
557585 VAEncMiscParameterBufferType = 27,
586+ VAEncPackedHeaderParameterBufferType = 28,
587+ VAEncPackedHeaderDataBufferType = 29,
558588 VABufferTypeMax = 0xff
559589 } VABufferType;
560590
@@ -566,6 +596,24 @@ typedef enum
566596 VAEncMiscParameterTypeAIR = 3,
567597 } VAEncMiscParameterType;
568598
599+/** \brief Packed header type. */
600+typedef enum {
601+ VAEncPackedHeaderSequence = 1, /**< Packed sequence header. */
602+ VAEncPackedHeaderPicture = 2, /**< Packed picture header. */
603+ VAEncPackedHeaderSlice = 3, /**< Packed slice header. */
604+} VAEncPackedHeaderType;
605+
606+/** \brief Packed header parameter. */
607+typedef struct _VAEncPackedHeaderParameterBuffer {
608+ /** Type of the packed header buffer. See #VAEncPackedHeaderType. */
609+ VAEncPackedHeaderType type;
610+ /** \brief Size of the #VAEncPackedHeaderDataBuffer in bits. */
611+ unsigned int bit_length;
612+ /** \brief Flag set to 1 if startcode emulation prevention bytes are to be inserted. */
613+ /* XXX: does this mean the driver re-process the buffer? */
614+ unsigned char insert_emulation_bytes;
615+} VAEncPackedHeaderParameterBuffer;
616+
569617 /*
570618 * For application, e.g. set a new bitrate
571619 * VABufferID buf_id;
--- /dev/null
+++ b/va/va_enc_h264.h
@@ -0,0 +1,471 @@
1+/*
2+ * Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved.
3+ *
4+ * Permission is hereby granted, free of charge, to any person obtaining a
5+ * copy of this software and associated documentation files (the
6+ * "Software"), to deal in the Software without restriction, including
7+ * without limitation the rights to use, copy, modify, merge, publish,
8+ * distribute, sub license, and/or sell copies of the Software, and to
9+ * permit persons to whom the Software is furnished to do so, subject to
10+ * the following conditions:
11+ *
12+ * The above copyright notice and this permission notice (including the
13+ * next paragraph) shall be included in all copies or substantial portions
14+ * of the Software.
15+ *
16+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19+ * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
20+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23+ */
24+
25+/**
26+ * \file va_enc_h264.h
27+ * \brief The H.264 encoding API
28+ *
29+ * This file contains the \ref api_enc_h264 "H.264 encoding API".
30+ */
31+
32+#ifndef VA_ENC_H264_H
33+#define VA_ENC_H264_H
34+
35+#ifdef __cplusplus
36+extern "C" {
37+#endif
38+
39+/**
40+ * \defgroup api_enc_h264 H.264 encoding API
41+ *
42+ * @{
43+ */
44+
45+/**
46+ * @name Picture flags
47+ *
48+ * Those flags flags are meant to signal when a picture marks the end
49+ * of a sequence, a stream, or even both at once.
50+ *
51+ * @{
52+ */
53+/**
54+ * \brief Marks the last picture in the sequence.
55+ *
56+ * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame.
57+ */
58+#define H264_LAST_PICTURE_EOSEQ 0x01
59+/**
60+ * \brief Marks the last picture in the stream.
61+ *
62+ * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame.
63+ */
64+#define H264_LAST_PICTURE_EOSTREAM 0x02
65+/**@}*/
66+
67+/**
68+ * \brief Sequence parameter for H.264 encoding in main & high profiles.
69+ *
70+ * This structure holds information for \c seq_parameter_set_data() as
71+ * defined by the H.264 specification.
72+ *
73+ * If packed sequence headers mode is used, i.e. if the encoding
74+ * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE
75+ * flag, then the driver expects two more buffers to be provided to
76+ * the same \c vaRenderPicture() as this buffer:
77+ * - a #VAEncPackedHeaderParameterBuffer with type set to
78+ * VAEncPackedHeaderType::VAEncPackedHeaderSequence ;
79+ * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
80+ * header data.
81+ *
82+ * If \ref seq_scaling_matrix_present_flag is set to \c 1, then a
83+ * #VAIQMatrixBufferH264 buffer shall also be provided within the same
84+ * \c vaRenderPicture() call as this sequence parameter buffer.
85+ */
86+typedef struct _VAEncSequenceParameterBufferH264 {
87+ /** \brief Same as the H.264 bitstream syntax element. */
88+ unsigned char seq_parameter_set_id;
89+ /** \brief XXX: implied by VA config. */
90+ unsigned char profile_idc;
91+ /** \brief Same as the H.264 bitstream syntax element. */
92+ unsigned char level_idc;
93+ /** \brief Period between I frames. */
94+ unsigned int intra_period;
95+ /** \brief Period between I/P frames. */
96+ unsigned int ip_period;
97+ /**
98+ * \brief Initial bitrate set for this sequence in CBR or VBR modes.
99+ *
100+ * This field represents the initial bitrate value for this
101+ * sequence if CBR or VBR mode is used, i.e. if the encoder
102+ * pipeline was created with a #VAConfigAttribRateControl
103+ * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR.
104+ *
105+ * The bitrate can be modified later on through
106+ * #VAEncMiscParameterRateControl buffers.
107+ */
108+ unsigned int bits_per_second;
109+ /** \brief Same as the H.264 bitstream syntax element. */
110+ unsigned int max_num_ref_frames;
111+ /** \brief Picture width in macroblocks. */
112+ unsigned short picture_width_in_mbs;
113+ /** \brief Picture height in macroblocks. */
114+ unsigned short picture_height_in_mbs;
115+
116+ union {
117+ struct {
118+ /** \brief Same as the H.264 bitstream syntax element. */
119+ unsigned int chroma_format_idc : 2;
120+ /** \brief Same as the H.264 bitstream syntax element. */
121+ unsigned int frame_mbs_only_flag : 1;
122+ /** \brief Same as the H.264 bitstream syntax element. */
123+ unsigned int mb_adaptive_frame_field_flag : 1;
124+ /** \brief Same as the H.264 bitstream syntax element. */
125+ unsigned int seq_scaling_matrix_present_flag : 1;
126+ /** \brief Same as the H.264 bitstream syntax element. */
127+ unsigned int direct_8x8_inference_flag : 1;
128+ /** \brief Same as the H.264 bitstream syntax element. */
129+ unsigned int log2_max_frame_num_minus4 : 4;
130+ /** \brief Same as the H.264 bitstream syntax element. */
131+ unsigned int pic_order_cnt_type : 2;
132+ /** \brief Same as the H.264 bitstream syntax element. */
133+ unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4;
134+ /** \brief Same as the H.264 bitstream syntax element. */
135+ unsigned int delta_pic_order_always_zero_flag : 1;
136+ } bits;
137+ unsigned int value;
138+ } seq_fields;
139+
140+ /** \brief Same as the H.264 bitstream syntax element. */
141+ unsigned char bit_depth_luma_minus8;
142+ /** \brief Same as the H.264 bitstream syntax element. */
143+ unsigned char bit_depth_chroma_minus8;
144+
145+ /** if pic_order_cnt_type == 1 */
146+ /**@{*/
147+ /** \brief Same as the H.264 bitstream syntax element. */
148+ unsigned char num_ref_frames_in_pic_order_cnt_cycle;
149+ /** \brief Same as the H.264 bitstream syntax element. */
150+ int offset_for_non_ref_pic;
151+ /** \brief Same as the H.264 bitstream syntax element. */
152+ int offset_for_top_to_bottom_field;
153+ /** \brief Same as the H.264 bitstream syntax element. */
154+ int offset_for_ref_frame[256];
155+ /**@}*/
156+
157+ /** @name Cropping (optional) */
158+ /**@{*/
159+ /** \brief Same as the H.264 bitstream syntax element. */
160+ unsigned char frame_cropping_flag;
161+ /** \brief Same as the H.264 bitstream syntax element. */
162+ unsigned int frame_crop_left_offset;
163+ /** \brief Same as the H.264 bitstream syntax element. */
164+ unsigned int frame_crop_right_offset;
165+ /** \brief Same as the H.264 bitstream syntax element. */
166+ unsigned int frame_crop_top_offset;
167+ /** \brief Same as the H.264 bitstream syntax element. */
168+ unsigned int frame_crop_bottom_offset;
169+ /**@}*/
170+
171+ /** @name VUI parameters (optional) */
172+ /**@{*/
173+ /** \brief Same as the H.264 bitstream syntax element. */
174+ unsigned char vui_parameters_present_flag;
175+ union {
176+ struct {
177+ /** \brief Same as the H.264 bitstream syntax element. */
178+ unsigned int timing_info_present_flag : 1;
179+ /** \brief Same as the H.264 bitstream syntax element. */
180+ unsigned int bitstream_restriction_flag : 1;
181+ /** \brief Range: 0 to 16, inclusive. */
182+ unsigned int log2_max_mv_length_horizontal : 5;
183+ /** \brief Range: 0 to 16, inclusive. */
184+ unsigned int log2_max_mv_length_vertical : 5;
185+ } bits;
186+ unsigned int value;
187+ } vui_fields;
188+ /** \brief Same as the H.264 bitstream syntax element. */
189+ unsigned int num_units_in_tick;
190+ /** \brief Same as the H.264 bitstream syntax element. */
191+ unsigned int time_scale;
192+ /**@}*/
193+} VAEncSequenceParameterBufferH264;
194+
195+/**
196+ * \brief Picture parameter for H.264 encoding in main & high profiles.
197+ *
198+ * This structure holds information for \c pic_parameter_set_rbsp() as
199+ * defined by the H.264 specification.
200+ *
201+ * If packed picture headers mode is used, i.e. if the encoding
202+ * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE
203+ * flag, then the driver expects two more buffers to be provided to
204+ * the same \c vaRenderPicture() as this buffer:
205+ * - a #VAEncPackedHeaderParameterBuffer with type set to
206+ * VAEncPackedHeaderType::VAEncPackedHeaderPicture ;
207+ * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
208+ * header data.
209+ *
210+ * If \ref pic_scaling_matrix_present_flag is set to \c 1, then a
211+ * #VAIQMatrixBufferH264 buffer shall also be provided within the same
212+ * \c vaRenderPicture() call as this picture parameter buffer.
213+ */
214+typedef struct _VAEncPictureParameterBufferH264 {
215+ /** \brief Information about the picture to be encoded. */
216+ VAPictureH264 CurrPic;
217+ /** \brief Decoded Picture Buffer (DPB).
218+ * XXX: is this really used?
219+ */
220+ VAPictureH264 ReferenceFrames[16];
221+ /**
222+ * \brief Output encoded bitstream.
223+ *
224+ * \ref coded_buf has type #VAEncCodedBufferType. It should be
225+ * large enough to hold the compressed NAL slice and possibly SPS
226+ * and PPS NAL units.
227+ */
228+ VABufferID coded_buf;
229+
230+ /** \brief The picture parameter set referred to in the slice header. */
231+ unsigned char pic_parameter_set_id;
232+ /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */
233+ unsigned char seq_parameter_set_id;
234+
235+ /**
236+ * \brief OR'd flags describing whether the picture is the last one or not.
237+ *
238+ * This fields holds 0 if the picture to be encoded is not the last
239+ * one in the stream or sequence. Otherwise, it is a combination of
240+ * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM.
241+ */
242+ unsigned char last_picture;
243+
244+ /** \brief The picture identifier.
245+ * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive.
246+ */
247+ unsigned short frame_num; /* (0..65535) */
248+
249+ /** \brief \c pic_init_qp_minus26 + 26. */
250+ unsigned char pic_init_qp;
251+ /** \brief Maximum reference index for reference picture list 0.
252+ * Range: 0 to 31, inclusive.
253+ */
254+ unsigned char num_ref_idx_l0_active_minus1;
255+ /** \brief Maximum reference index for reference picture list 1.
256+ * Range: 0 to 31, inclusive.
257+ */
258+ unsigned char num_ref_idx_l1_active_minus1;
259+
260+ /** \brief Range: -12 to 12, inclusive. */
261+ signed char chroma_qp_index_offset;
262+ /** \brief Range: -12 to 12, inclusive. */
263+ signed char second_chroma_qp_index_offset;
264+
265+ union {
266+ struct {
267+ /** \brief Is picture an IDR picture? */
268+ unsigned int idr_pic_flag : 1;
269+ /** \brief Is picture a reference picture? */
270+ unsigned int reference_pic_flag : 2;
271+ /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */
272+ unsigned int entropy_coding_mode_flag : 1;
273+ /** \brief Is weighted prediction applied to P slices? */
274+ unsigned int weighted_pred_flag : 1;
275+ /** \brief Range: 0 to 2, inclusive. */
276+ unsigned int weighted_bipred_idc : 2;
277+ /** \brief Same as the H.264 bitstream syntax element. */
278+ unsigned int constrained_intra_pred_flag : 1;
279+ /** \brief Same as the H.264 bitstream syntax element. */
280+ unsigned int transform_8x8_mode_flag : 1;
281+ /** \brief Same as the H.264 bitstream syntax element. */
282+ unsigned int deblocking_filter_control_present_flag : 1;
283+ /** \brief Same as the H.264 bitstream syntax element. */
284+ unsigned int redundant_pic_cnt_present_flag : 1;
285+ /** \brief Same as the H.264 bitstream syntax element. */
286+ unsigned int pic_order_present_flag : 1;
287+ /** \brief Same as the H.264 bitstream syntax element. */
288+ unsigned int pic_scaling_matrix_present_flag : 1;
289+ } bits;
290+ unsigned int value;
291+ } pic_fields;
292+} VAEncPictureParameterBufferH264;
293+
294+/**
295+ * \brief Slice parameter for H.264 encoding in main & high profiles.
296+ *
297+ * This structure holds information for \c
298+ * slice_layer_without_partitioning_rbsp() as defined by the H.264
299+ * specification.
300+ *
301+ * If packed slice headers mode is used, i.e. if the encoding
302+ * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE
303+ * flag, then the driver expects two more buffers to be provided to
304+ * the same \c vaRenderPicture() as this buffer:
305+ * - a #VAEncPackedHeaderParameterBuffer with type set to
306+ * VAEncPackedHeaderType::VAEncPackedHeaderSlice ;
307+ * - a #VAEncPackedHeaderDataBuffer which holds the actual packed
308+ * header data.
309+ */
310+typedef struct _VAEncSliceParameterBufferH264 {
311+ /** \brief Starting MB address for this slice. */
312+ unsigned int macroblock_address;
313+ /** \brief Number of macroblocks in this slice. */
314+ unsigned int num_macroblocks;
315+ /** \brief Slice type.
316+ * Range: 0..2, 5..7, i.e. no switching slices.
317+ */
318+ unsigned char slice_type;
319+ /** \brief Same as the H.264 bitstream syntax element. */
320+ unsigned char pic_parameter_set_id;
321+ /** \brief Same as the H.264 bitstream syntax element. */
322+ unsigned short idr_pic_id;
323+
324+ /** @name If pic_order_cnt_type == 0 */
325+ /**@{*/
326+ /** \brief The picture order count modulo MaxPicOrderCntLsb. */
327+ unsigned short pic_order_cnt_lsb;
328+ /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */
329+ int delta_pic_order_cnt_bottom;
330+ /**@}*/
331+ /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */
332+ /**@{*/
333+ /** \brief [0]: top, [1]: bottom. */
334+ int delta_pic_order_cnt[2];
335+ /**@}*/
336+
337+ /** @name If slice_type == B */
338+ /**@{*/
339+ unsigned char direct_spatial_mv_pred_flag;
340+ /**@}*/
341+
342+ /** @name If slice_type == P */
343+ /**@{*/
344+ /** \brief Specifies if
345+ * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or
346+ * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are
347+ * overriden by the values for this slice.
348+ */
349+ unsigned char num_ref_idx_active_override_flag;
350+ /** \brief Maximum reference index for reference picture list 0.
351+ * Range: 0 to 31, inclusive.
352+ */
353+ unsigned char num_ref_idx_l0_active_minus1;
354+ /** \brief Maximum reference index for reference picture list 1.
355+ * Range: 0 to 31, inclusive.
356+ */
357+ unsigned char num_ref_idx_l1_active_minus1;
358+ /** \brief XXX: is this really used? */
359+ VAPictureH264 RefPicList0[32];
360+ /** \brief XXX: is this really used? */
361+ VAPictureH264 RefPicList1[32];
362+ /**@}*/
363+
364+ /** @name ref_pic_list_modification() */
365+ /**@{*/
366+ /** \brief Same as the H.264 bitstream syntax element. */
367+ unsigned char ref_pic_list_modification_flag_l0;
368+ /** \brief Same as the H.264 bitstream syntax element. */
369+ unsigned char ref_pic_list_modification_flag_l1;
370+ /** \brief Same as the H.264 bitstream syntax element. */
371+ unsigned char modification_of_pic_nums_idc_l0[32];
372+ /** \brief Same as the H.264 bitstream syntax element. */
373+ unsigned char modification_of_pic_nums_idc_l1[32];
374+ /** \brief List 0 values for each \c modification_of_pic_nums_idc_l0. */
375+ /**
376+ * - If \c modification_of_pic_nums_idc == 0 or 1:
377+ * - \c modification_of_pic_nums_value is \c abs_diff_pic_num_minus1
378+ * - If \c modification_of_pic_nums_idc == 2:
379+ * - \c modification_of_pic_nums_value is \c long_term_pic_num
380+ */
381+ unsigned int modification_of_pic_nums_value_l0[32];
382+ /** \brief Same as \c modification_of_pic_nums_value_l0 but for list 1. */
383+ unsigned int modification_of_pic_nums_value_l1[32];
384+ /**@}*/
385+
386+ /** @name pred_weight_table() */
387+ /**@{*/
388+ /** \brief Same as the H.264 bitstream syntax element. */
389+ unsigned char luma_log2_weight_denom;
390+ /** \brief Same as the H.264 bitstream syntax element. */
391+ unsigned char chroma_log2_weight_denom;
392+ /** \brief Same as the H.264 bitstream syntax element. */
393+ unsigned char luma_weight_l0_flag;
394+ /** \brief Same as the H.264 bitstream syntax element. */
395+ signed short luma_weight_l0[32];
396+ /** \brief Same as the H.264 bitstream syntax element. */
397+ signed short luma_offset_l0[32];
398+ /** \brief Same as the H.264 bitstream syntax element. */
399+ unsigned char chroma_weight_l0_flag;
400+ /** \brief Same as the H.264 bitstream syntax element. */
401+ signed short chroma_weight_l0[32][2];
402+ /** \brief Same as the H.264 bitstream syntax element. */
403+ signed short chroma_offset_l0[32][2];
404+ /** \brief Same as the H.264 bitstream syntax element. */
405+ unsigned char luma_weight_l1_flag;
406+ /** \brief Same as the H.264 bitstream syntax element. */
407+ signed short luma_weight_l1[32];
408+ /** \brief Same as the H.264 bitstream syntax element. */
409+ signed short luma_offset_l1[32];
410+ /** \brief Same as the H.264 bitstream syntax element. */
411+ unsigned char chroma_weight_l1_flag;
412+ /** \brief Same as the H.264 bitstream syntax element. */
413+ signed short chroma_weight_l1[32][2];
414+ /** \brief Same as the H.264 bitstream syntax element. */
415+ signed short chroma_offset_l1[32][2];
416+ /**@}*/
417+
418+ /** @name dec_ref_pic_marking() */
419+ /**@{*/
420+ /** \brief Same as the H.264 bitstream syntax element. */
421+ unsigned char no_output_of_prior_pics_flag;
422+ /** \brief Same as the H.264 bitstream syntax element. */
423+ unsigned char long_term_reference_flag;
424+ /** \brief Same as the H.264 bitstream syntax element. */
425+ unsigned char adaptive_ref_pic_marking_mode_flag;
426+ /** \brief Same as the \c memory_management_control_operation syntax element. */
427+ unsigned char mmco[32];
428+ /**
429+ * \brief Values for each \c memory_management_control_operation.
430+ *
431+ * - If \c mmco == 1:
432+ * - \c mmco_value[0] is \c difference_of_pic_nums_minus1
433+ * - \c mmco_value[1] is not used
434+ * - If \c mmco == 2:
435+ * - \c mmco_value[0] is \c long_term_pic_num
436+ * - \c mmco_value[1] is not used
437+ * - If \c mmco == 3:
438+ * - \c mmco_value[0] is \c difference_of_pic_nums_minus1
439+ * - \c mmco_value[1] is \c long_term_frame_idx
440+ * - If \c mmco == 4:
441+ * - \c mmco_value[0] is \c max_long_term_frame_idx_plus1
442+ * - \c mmco_value[1] is not used
443+ * - If \c mmco == 6:
444+ * - \c mmco_value[0] is \c long_term_frame_idx
445+ * - \c mmco_value[1] is not used
446+ */
447+ unsigned int mmco_value[32][2];
448+ /**@}*/
449+
450+ /** \brief Range: 0 to 2, inclusive. */
451+ unsigned char cabac_init_idc;
452+ /** \brief Same as the H.264 bitstream syntax element. */
453+ signed char slice_qp_delta;
454+ /** @name If deblocking_filter_control_present_flag */
455+ /**@{*/
456+ /** \brief Range: 0 to 2, inclusive. */
457+ unsigned char disable_deblocking_filter_idc;
458+ /** \brief Same as the H.264 bitstream syntax element. */
459+ signed char slice_alpha_c0_offset_div2;
460+ /** \brief Same as the H.264 bitstream syntax element. */
461+ signed char slice_beta_offset_div2;
462+ /**@}*/
463+} VAEncSliceParameterBufferH264;
464+
465+/**@}*/
466+
467+#ifdef __cplusplus
468+}
469+#endif
470+
471+#endif /* VA_ENC_H264_H */