Hi,
Attached are API extension proposals from Intel to support additional profiles
for H.264 encode and video post-processing. The main changes/additions from the
existing APIs are described below and comments/feedbacks are appreciated to
help with finalizing the API extensions. A proposal page for API enhancements
has also been created at
http://www.freedesktop.org/wiki/Software/vaapi/proposals
Regards,
Jonathan Bian
1. Added new entrypoint for video post-processing 2. Added a number of
configuration attributes to accommodate differing capabilities in hardware
encoders.
3. Added "Ext" buffer types to extend encode parameters buffers without
impacting compatibility with existing encode data structures 4. Added new
buffer types for packed header to be sent by the app, and various buffers
required for video post-processing 5. Added "Ext" version of sequence, picture
and slice parameter buffer structures for H.264 to support High Profile
encoding.
6. Added new functions and data structures to support video post-processing
(see va_vpp.h).
With this proposal, video post-processing is modeled as a pipeline of connected
and configurable processing filters. The existing
vaBeginPicture/vaRenderPicture/vaEndPicture semantics is used to perform video
post-processing frame by frame, with configuration parameters passed through
vaRenderPicture as buffers. For optimal performance, the assumption is made
that the implementation will retain the parameter settings affecting the
processing pipeline until the application makes explicit modifications of these
parameters. Following is some pseudo code to demonstrate the usage of the
video post-processing APIs:
// find out if post-processing entrypoint is available
va_status = vaQueryConfigEntrypoints(va_dpy,
VAProfileNone,
va_entrypoints,
&entrypointsCount);
if(VAEntrypointVideoProc == va_entrypoints[entrypointsIndx])
va_status = vaCreateConfig(va_dpy,
VAProfileNone,
VAEntrypointVideoProc,
&va_attributes,
1,
&va_config);
// create context for post-processing
va_status = vaCreateContext(va_dpy,...)
// query pipeline level capabilities
va_status = vaQueryVideoProcPipelineCap(caps) // for ex: Denoise (DN), DI,
sharpening (SHRP), procamp are supported by driver
// query individual filter capabilities, e.g. parameter value range
va_status = vaQueryVideoProcFilterCap(dn, caps_dn);
Va_status = vaQueryVideoProcFilterCap(procamp, caps_procamp);
While( is_new_input )
{
vaBeginPicture(out);
// setup pipeline parameter (VAProcPipelineParameterBuffer)
vaRenderPicture(pipeline_param);
// query reference frame requirements for this pipeline
vaQueryVideoProcReferenceFrameCap(&forward_ref, &backward_ref);
// set up input parameter (VAProcInputParameterBuffer)
vaRenderPicture(input_param);
// set up denoise parameters (VAProcFilterBaseParameterBuffer)
vaRenderPicture(dn_param);
// set up procamp parameters (VAProcFilterProcAmpParameterBuffer)
vaRenderPicture(procamp_param);
vaEndPicture();
// find out whether processing has completed at some later time
vaQueryStatus();
}
#ifndef _VA_VPP_H_
#define _VA_VPP_H_
#include <va/va.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Video Processing Data Structures
*/
#define VA_PROC_PIPELINE_MAX_NUM_FILTERS 32
typedef enum
{
VAProcFilterNone = 0,
VAProcFilterDering = 1,
VAProcFilterDeblocking = 2,
VAProcFilterNoiseReduction = 3,
VAProcFilterDeinterlacing = 4,
VAProcFilterSharpening = 5,
VAProcFilterColorEnhancement = 6,
VAProcFilterProcAmp = 7,
VAProcFilterComposition = 8,
VAProcFilterFrameRateConversion = 9
} VAProcFilterType;
typedef enum
{
VAProcColorPrimariesUnknown = 0,
VAProcColorPrimariesBT709 = 1,
VAProcColorPrimariesBT470M = 2,
VAProcColorPrimariesBT470BG = 3,
VAProcColorPrimariesBT601 = 4,
VAProcColorPrimariesSMPTE240M = 5,
VAProcColorPrimariesGenericFilm = 6
} VAProcColorPrimaries;
typedef enum
{
VAProcStreamPrimaryVideo = 1,
VAProcStreamSecondaryVideo = 2,
VAProcStreamSubpicture = 3
} VAProcStreamType;
typedef struct _VAProcPipelineParameterBuffer
{
VAProcFilterType filter_pipeline[VA_PROC_PIPELINE_MAX_NUM_FILTERS];
VAProcColorPrimaries output_color_primaries;
/*
* VPP only affects pixels in the output region and fills the rest of the
* output surface with a background color
*/
VARectangle output_region;
unsigned int output_background_color;
} VAProcPipelineParameterBuffer;
typedef struct _VAProcInputParameterBuffer
{
VASurfaceID surface;
VARectangle region; /* region within the surface to be processed */
VAProcColorPrimaries color_primaries;
VAProcStreamType stream_type;
unsigned int num_forward_reference;
unsigned int num_backward_reference;
VASurfaceID *forward_referrence; /* array of forward reference frames */
VASurfaceID *backward_reference; /* array of backward reference frames */
} VAProcInputParameterBuffer;
typedef struct _VAProcFilterBaseParameterBuffer
{
VAProcFilterType filter;
float value;
} VAProcFilterBaseParameterBuffer;
typedef struct _VAProcFilterProcAmpParameterBuffer
{
float brightness;
float contrast;
float saturation;
float hue;
} VAProcFilterProcAmpParameterBuffer;
typedef enum
{
VAProcDeinterlacingBob = 1,
VAProcDeinterlacingWeave = 2,
VAProcDeinterlacingMotionAdaptive = 3,
VAProcDeinterlacingMotionCompensated= 4
} VAProcDeinterlacingMode;
typedef struct _VAProcFilterDeinterlacingParameterBuffer
{
VAProcDeinterlacingMode mode;
} VAProcFilterDeinterlacingParameterBuffer;
typedef struct _VAProcPipelineCap
{
VAProcFilterType filter_pipeline[VA_PROC_PIPELINE_MAX_NUM_FILTERS];
/*
* 1 means filter can be by-passed, 0 means it can't
*/
unsigned char bypass[VA_PROC_PIPELINE_MAX_NUM_FILTERS];
} VAProcPipelineCap;
typedef struct _VAProcFilterValueRange
{
float min;
float max;
float default_value;
float step;
} VAProcFilterValueRange;
typedef struct _VAProcFilterCapBase
{
VAProcFilterValueRange range;
} VAProcFilterCapBase;
typedef struct _VAProcFilterCapProcAmp
{
VAProcFilterValueRange brightness_range;
VAProcFilterValueRange contrast_range;
VAProcFilterValueRange saturation_range;
VAProcFilterValueRange hue_range;
} VAProcFilterCapProcAmp;
/*
* Query video processing pipeline capabilities
*/
VAStatus vaQueryVideoProcPipelineCap (
VADisplay dpy,
VAContextID context,
VAProcPipelineCap *pipeline_cap /* out */
);
/*
* Query video processing filter capabilities
*/
VAStatus vaQueryVideoProcFilterCap (
VADisplay dpy,
VAContextID context,
VAProcFilterType filter,
void *cap /* out */
);
/*
* Query reference frame required by the pipeline
*/
VAStatus vaQueryVideoProcReferenceFramesCap (
VADisplay dpy,
VAContextID context,
unsigned int *num_forward_reference, /* out */
unsigned int *num_backward_reference /* out */
);
#ifdef __cplusplus
}
#endif
#endif /* _VA_VPP_H_ */
--- va.h.orig 2011-08-16 22:08:32.055187500 -0700
+++ va.h 2011-08-01 10:17:21.436797200 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved.
+ * 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
@@ -24,7 +24,7 @@
/*
* Video Acceleration (VA) API Specification
*
- * Rev. 0.30
+ * Rev. 0.32.2
* <[email protected]>
*
* Revision History:
@@ -61,6 +61,10 @@
* screen relative rather than source
video relative.
* rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into
VAPictureParameterBufferVC1
* update VAAPI to 0.32.0
+ * rev 0.32.1 (05/04/2011) - Linux VA encoding API extension
proposal
+ *
+ *
+ * rev 0.32.2 (07/05/2011 Jonathan Bian/Andrey Yakovenko) - Video Processing
interface
*
* Acknowledgements:
* Some concepts borrowed from XvMC and XvImage.
@@ -223,9 +227,13 @@
const char *func
);
+#define VA_ENUM_MAX 16384
+
+
/* Currently defined profiles */
typedef enum
{
+ VAProfileNone = -1, /* to be used for post-processing etc. */
VAProfileMPEG2Simple = 0,
VAProfileMPEG2Main = 1,
VAProfileMPEG4Simple = 2,
@@ -239,11 +247,11 @@
VAProfileVC1Advanced = 10,
VAProfileH263Baseline = 11,
VAProfileJPEGBaseline = 12,
- VAProfileH264ConstrainedBaseline = 13
+ VAProfileH264ConstrainedBaseline = 13,
+ VAProfileMax = VA_ENUM_MAX
} VAProfile;
/*
- * Currently defined entrypoints
*/
typedef enum
{
@@ -253,7 +261,9 @@
VAEntrypointMoComp = 4,
VAEntrypointDeblocking = 5,
VAEntrypointEncSlice = 6, /* slice level encode */
- VAEntrypointEncPicture = 7 /* pictuer encode, JPEG, etc */
+ VAEntrypointEncPicture = 7, /* pictuer encode, JPEG, etc */
+ VAEntrypointVideoProc = 8, /* video pre/post processing */
+ VAEntrypointMax = VA_ENUM_MAX
} VAEntrypoint;
/* Currently defined configuration attribute types */
@@ -264,7 +274,12 @@
VAConfigAttribSpatialClipping = 2,
VAConfigAttribIntraResidual = 3,
VAConfigAttribEncryption = 4,
- VAConfigAttribRateControl = 5
+ VAConfigAttribStartCodeAndEPB = 5,
+ VAConfigAttribRateControl = 30, /*encode related attributes
starting here */
+ VAConfigAttribEncHeaderPacking = 31,
+ VAConfigAttribEncInterlaced = 32,
+ VAConifgAttribEncSliceStructure = 33,
+ VAConfigAttribTypeMax = VA_ENUM_MAX
} VAConfigAttribType;
/*
@@ -282,14 +297,37 @@
#define VA_RT_FORMAT_YUV420 0x00000001
#define VA_RT_FORMAT_YUV422 0x00000002
#define VA_RT_FORMAT_YUV444 0x00000004
+#define VA_RT_FORMAT_RGB 0x00000010
#define VA_RT_FORMAT_PROTECTED 0x80000000
+/* attribute value for VAConfigAttribStartCodeAndEPB */
+#define VA_STARTCODE_AND_EPB_NO_SKIP 0x00000000 /* include start code and
EPB when setting up slice params */
+#define VA_STARTCODE_AND_EBP_SKIP 0x00000001 /* skip start code and EPB
when setting up slice params */
+
/* attribute value for VAConfigAttribRateControl */
#define VA_RC_NONE 0x00000001
#define VA_RC_CBR 0x00000002
#define VA_RC_VBR 0x00000004
#define VA_RC_VCM 0x00000008 /* video conference mode */
+/* attribute value for VAConfigAttribEncHeaderPacking */
+#define VA_ENC_HEADER_PACKING_NONE 0x00000000
+#define VA_ENC_HEADER_PACKING_SPS 0x00000001
+#define VA_ENC_HEADER_PACKING_PPS 0x00000002
+#define VA_ENC_HEADER_PACKING_SLICE 0x00000004
+
+/* attribute value for VAConfigAttribEncInterlaced */
+#define VA_ENC_INTERLACED_NONE 0x00000000 /* no interlface coding
support */
+#define VA_ENC_INTERLACED_FRAME 0x00000001 /* interlace frame coding */
+#define VA_ENC_INTERLACED_FIELD 0x00000002 /* interlace field coding */
+#define VA_ENC_INTERLACED_MBAFF 0x00000004 /* Macroblock Adaptive
Frame Field */
+#define VA_ENC_INTERLACED_PIC_AFF 0x00000008 /* Picture Adaptive Frame
Field */
+
+/* attribute value for VAConfigAttribEncSliceStructure */
+#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS 0x00000000
+#define VA_ENC_SLICE_STRUCTURE_POWER_OF_TWO_ROWS 0x00000001
+#define VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS 0x00000002
+
/*
* if an attribute is not applicable for a given
* profile/entrypoint pair, then set the value to the following
@@ -519,11 +557,49 @@
VAEncH264VUIBufferType = 25,
VAEncH264SEIBufferType = 26,
VAEncMiscParameterBufferType = 27,
- VABufferTypeMax = 0xff
+
+ VAEncSequenceParameterBufferExtType = 28,
+ VAEncPictureParameterBufferExtType = 29,
+ VAEncSliceParameterBufferExtType = 30,
+ VAEncDecRefPicMarkingBufferH264Type = 31,
+
+ /* New packed header buffer types:
+ * Buffers contain NAL units packed by application
+ * Driver only needs to put them to bitstream buffer "as is"
+ * Header packing on host simplifies driver development and allows
+ * to implement new features and fix/work-around wide range of issues
without changing driver
+ */
+ VAEncPackedHeaderParameterBufferType = 32,
+ VAEncPackedHeaderDataBufferType = 33,
+
+ /* Following are video processing buffer types */
+ VAProcPipelineParameterBufferType = 60,
+ VAProcInputParameterBufferType = 61,
+ VAProcFilterBaseParameterBufferType = 62, /* general video processing
filter */
+ VAProcFilterDeinterlacingParameterBufferType = 63,
+ VAProcFilterProcAmpParameterBufferType = 64,
+ VABufferTypeMax = VA_ENUM_MAX
} VABufferType;
typedef enum
{
+ VAEncPackedHeaderSPS = 1,
+ VAEncPackedHeaderPPS = 2,
+ VAEncPackedHeaderSlice = 3
+} VAEncPackedHeaderType;
+
+typedef struct _VAEncPackedHeaderParameterBuffer
+{
+ VAEncPackedHeaderType type;
+ unsigned int insert_emulation_bytes; /* set to 1 to insert startcode
emulataion prevention bytes */
+ unsigned int skip_emulation_check_count;
+ unsigned int num_headers; /* number of headers in the buffer, must be 1
for SPS or PPS */
+ unsigned int *length_in_bits; /* array allocated by client to indicate
length for each header, with num_header entries */
+ unsigned int *offset_in_bytes; /* array allocated by client to indicate
offset from the beginning of the buffer for each header, with num_header
entries */
+} VAEncPackedHeaderParameterBuffer;
+
+typedef enum
+{
VAEncMiscParameterTypeFrameRate = 0,
VAEncMiscParameterTypeRateControl = 1,
VAEncMiscParameterTypeMaxSliceSize = 2,
@@ -562,7 +638,16 @@
unsigned int window_size; /* windows size in milliseconds. For example if
this is set to 500, then the rate control will guarantee the */
/* target bit-rate over a 500 ms window */
unsigned int initial_qp; /* initial QP at I frames */
- unsigned int min_qp;
+ unsigned int min_qp;
+ union
+ {
+ struct
+ {
+ unsigned int reset : 1;
+ unsigned int : 31;
+ } bits;
+ unsigned int value;
+ } rc_flags;
} VAEncMiscParameterRateControl;
typedef struct _VAEncMiscParameterFrameRate
@@ -580,6 +665,16 @@
unsigned int max_slice_size;
} VAEncMiscParameterMaxSliceSize;
+/*
+ * Allow a maximum frame size to be specified (in bits).
+ * The encoder will attempt to make sure that individual frames do not exceed
this size
+ * Or to signal applicate if the frame size exceed this size, see "status" of
VACodedBufferSegment
+ */
+typedef struct _VAEncMiscParameterMaxFrameSize
+{
+ unsigned int max_frame_size;
+} VAEncMiscParameterMaxFrameSize;
+
typedef struct _VAEncMiscParameterAIR
{
unsigned int air_num_mbs;
@@ -1181,6 +1276,55 @@
} slice_flags;
} VAEncSliceParameterBuffer;
+typedef struct _VAEncSliceParameterBufferH264Ext
+{
+ unsigned int starting_macroblock_address; /* starting MB address for
this slice */
+ unsigned int number_of_mbs; /* number of MBs in this
slice */
+ unsigned char pic_parameter_set_id; /* (0..255) */
+ unsigned char slice_type; /* (0..2, 5..7) */
+ unsigned char direct_spatial_mv_pred_flag;
+ unsigned char num_ref_idx_l0_active_minus1; /* (0..31) */
+ unsigned char num_ref_idx_l1_active_minus1; /* (0..31) */
+ unsigned char cabac_init_idc; /* (0..2) */
+ signed char slice_qp_delta;
+ unsigned char disable_deblocking_filter_idc; /* (0..2) */
+ signed char slice_alpha_c0_offset_div2;
+ signed char slice_beta_offset_div2;
+ unsigned short idr_pic_id; /* (0..65535) */
+ unsigned short pic_order_cnt_lsb;
+ int delta_pic_order_cnt_bottom;
+ int delta_pic_order_cnt[2];
+ unsigned char num_ref_idx_active_override_flag;
+
+ VAPictureH264 RefPicList0[32];
+ VAPictureH264 RefPicList1[32];
+
+ /* ref_pic_list_modification() */
+ unsigned char ref_pic_list_modification_flag_l0;
+ unsigned char ref_pic_list_modification_flag_l1;
+ unsigned char modification_of_pic_nums_idc_l0[32];
+ unsigned char modification_of_pic_nums_idc_l1[32];
+ unsigned int value_l0[32];
+ unsigned int value_l1[32];
+
+ // weights
+ unsigned char luma_log2_weight_denom;
+ unsigned char chroma_log2_weight_denom;
+ unsigned char luma_weight_l0_flag;
+ signed short luma_weight_l0[32];
+ signed short luma_offset_l0[32];
+ unsigned char chroma_weight_l0_flag;
+ signed short chroma_weight_l0[32][2];
+ signed short chroma_offset_l0[32][2];
+ unsigned char luma_weight_l1_flag;
+ signed short luma_weight_l1[32];
+ signed short luma_offset_l1[32];
+ unsigned char chroma_weight_l1_flag;
+ signed short chroma_weight_l1[32][2];
+ signed short chroma_offset_l1[32][2];
+
+} VAEncSliceParameterBufferH264Ext;
+
/****************************
* H.264 specific encode data structures
****************************/
@@ -1202,6 +1346,117 @@
unsigned char vui_flag;
} VAEncSequenceParameterBufferH264;
+typedef struct _VAEncSequenceParameterBufferH264Ext
+{
+ unsigned char seq_parameter_set_id;
+ unsigned char profile_idc;
+ unsigned char level_idc;
+ unsigned int intra_period;
+ unsigned int ip_period;
+ unsigned int max_num_ref_frames;
+ unsigned int picture_width_in_mbs;
+ unsigned int picture_height_in_mbs;
+ unsigned char frame_mbs_only_flag; /* for interlace */
+ unsigned char target_usage; /* quality/performance control
(1..7) */
+
+ /* bitrate control parameters*/
+ unsigned char rate_control_method; /* cbr/vbr/constqp/others */
+ unsigned int bits_per_second; /* target bitrate */
+ unsigned int max_bits_per_second; /* for vbr */
+ unsigned int min_bits_per_second; /* brc uses this information */
+ unsigned int initial_hrd_buffer_fullness; /* in bits, brc uses it to
guarantee hrd conformance */
+ unsigned int hrd_buffer_size; /* in bits, brc uses it to
guarantee hrd conformance */
+ unsigned int time_scale;
+ unsigned int num_units_in_tick; /* fps = time_scale / (2 *
num_units_in_tick) */
+
+ /* cropping, needed for 1080p */
+ unsigned char frame_cropping_flag;
+ unsigned int frame_crop_left_offset;
+ unsigned int frame_crop_right_offset;
+ unsigned int frame_crop_top_offset;
+ unsigned int frame_crop_bottom_offset;
+
+ unsigned char pic_order_cnt_type; /* (0..2) see avc 7.3.2.1.1 */
+ unsigned char direct_8x8_inference_flag; /* see avc 7.3.2.1.1 */
+
+ unsigned char log2_max_frame_num_minus4; /* (0..12) see avc
7.3.2.1.1 */
+ unsigned char log2_max_pic_order_cnt_lsb_minus4; /* for pic_order_cnt =
0 */
+
+ unsigned char vui_flag;
+
+ /* fields required by header packing */
+ union {
+ struct {
+ unsigned int chroma_format_idc : 2;
+ unsigned int seq_scaling_matrix_present_flag : 1;
+ unsigned int seq_scaling_list_present_flag : 1;
+ unsigned int delta_pic_order_always_zero_flag : 1;
+ } bits;
+ unsigned int value;
+ } seq_fields;
+ unsigned char bit_depth_luma_minus8;
+ unsigned char bit_depth_chroma_minus8;
+ unsigned char num_ref_frames_in_pic_order_cnt_cycle;
+ int offset_for_non_ref_pic;
+ int offset_for_top_to_bottom_field;
+ int offset_for_ref_frame[256];
+} VAEncSequenceParameterBufferH264Ext;
+
+/*
+ * if packed-buffers are adopted
+ * vui_paramters() will be generated by host application as a part of sps
header
+ * then entire vui structure can be removed from interface
+ */
+typedef struct _VAEncH264VUIBufferH264
+{
+ unsigned int aspect_ratio_info_present_flag : 1;
+ unsigned int overscan_info_present_flag : 1;
+ unsigned int overscan_appropriate_flag : 1;
+ unsigned int video_signal_type_present_flag : 1;
+ unsigned int video_full_range_flag : 1;
+ unsigned int colour_description_present_flag : 1;
+ unsigned int chroma_loc_info_present_flag : 1;
+ unsigned int timing_info_present_flag : 1;
+ unsigned int fixed_frame_rate_flag : 1;
+ unsigned int nal_hrd_parameters_present_flag : 1;
+ unsigned int vcl_hrd_parameters_present_flag : 1;
+ unsigned int low_delay_hrd_flag : 1;
+ unsigned int pic_struct_present_flag : 1;
+ unsigned int bitstream_restriction_flag : 1;
+ unsigned int motion_vectors_over_pic_boundaries_flag : 1;
+ unsigned int : 17;
+
+ unsigned short sar_width;
+ unsigned short sar_height;
+ unsigned char aspect_ratio_idc;
+ unsigned char video_format;
+ unsigned char colour_primaries;
+ unsigned char transfer_characteristics;
+ unsigned char matrix_coefficients;
+ unsigned char chroma_sample_loc_type_top_field;
+ unsigned char chroma_sample_loc_type_bottom_field;
+ unsigned char max_bytes_per_pic_denom;
+ unsigned char max_bits_per_mb_denom;
+ unsigned char log2_max_mv_length_horizontal;
+ unsigned char log2_max_mv_length_vertical;
+ unsigned char num_reorder_frames;
+ unsigned int num_units_in_tick;
+ unsigned int time_scale;
+ unsigned char max_dec_frame_buffering;
+
+ // HRD parameters
+ unsigned char cpb_cnt_minus1;
+ unsigned char bit_rate_scale;
+ unsigned char cpb_size_scale;
+ unsigned int bit_rate_value_minus1[32];
+ unsigned int cpb_size_value_minus1[32];
+ unsigned int cbr_flag; // bit 0 represent SchedSelIdx 0 and so on
+ unsigned char initial_cpb_removal_delay_length_minus1;
+ unsigned char cpb_removal_delay_length_minus1;
+ unsigned char dpb_output_delay_length_minus1;
+ unsigned char time_offset_length;
+} VAEncH264VUIBufferH264;
+
#define H264_LAST_PICTURE_EOSEQ 0x01 /* the last picture in the sequence */
#define H264_LAST_PICTURE_EOSTREAM 0x02 /* the last picture in the stream */
typedef struct _VAEncPictureParameterBufferH264
@@ -1214,6 +1469,57 @@
unsigned char last_picture;
} VAEncPictureParameterBufferH264;
+typedef struct _VAEncPictureParameterBufferH264Ext
+{
+ VAPictureH264 CurrPic;
+ VAPictureH264 ReferenceFrames[16]; /* DPB */
+ VABufferID CodedBuf;
+
+ unsigned char seq_parameter_set_id; /* (0..31) */
+ unsigned char pic_parameter_set_id; /* (0..255) )*/
+
+ unsigned char last_picture; /* for bd-rom compliance */
+
+ unsigned short frame_num; /* (0..65535) */
+ unsigned char coding_type; /* for convenience */
+
+ unsigned char pic_init_qp; /* (0..51) for const qp */
+ unsigned char num_ref_idx_l0_active_minus1; /* (0..31) */
+ unsigned char num_ref_idx_l1_active_minus1; /* (0..31) */
+ signed char chroma_qp_index_offset; /* (-12..12) */
+ signed char second_chroma_qp_index_offset; /* (-12..12) */
+
+ union
+ {
+ struct
+ {
+ unsigned int idr_pic_flag : 1;
+ unsigned int reference_pic_flag : 1; /* nal_ref_idc != 0 */
+ unsigned int entropy_coding_mode_flag : 1; /* CAVLC/CABAC */
+ unsigned int weighted_pred_flag : 1;
+ unsigned int weighted_bipred_idc : 2; /* (0..2) */
+ unsigned int constrained_intra_pred_flag : 1;
+ unsigned int transform_8x8_mode_flag : 1;
+ unsigned int deblocking_filter_control_present_flag : 1;
+ unsigned int pic_order_present_flag : 1;
+ unsigned int pic_scaling_matrix_present_flag : 1;
+ unsigned int pic_scaling_list_present_flag : 1;
+ } bits;
+
+ unsigned int value;
+ } pic_fields;
+
+} VAEncPictureParameterBufferH264Ext;
+
+typedef struct _VAEncH264DecRefPicMarkingBuffer
+{
+ unsigned char no_output_of_prior_pics_flag;
+ unsigned char long_term_reference_flag;
+ unsigned char adaptive_ref_pic_marking_mode_flag;
+ unsigned char memory_management_control_operation[32];
+ unsigned int value[32][2];
+} VAEncH264DecRefPicMarkingBuffer;
+
/****************************
* H.263 specific encode data structures
****************************/
_______________________________________________
Libva mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libva