Home | History | Annotate | Download | only in parser
      1 /*
      2  INTEL CONFIDENTIAL
      3  Copyright 2009 Intel Corporation All Rights Reserved.
      4  The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intels prior express written permission.
      5 
      6  No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
      7  */
      8 
      9 #ifndef VBP_LOADER_H
     10 #define VBP_LOADER_H
     11 
     12 #include <va/va.h>
     13 
     14 #ifndef TRUE
     15 #define TRUE 1
     16 #endif
     17 
     18 #ifndef FALSE
     19 #define FALSE 0
     20 #endif
     21 
     22 
     23 #ifndef uint8
     24 typedef unsigned char uint8;
     25 #endif
     26 #ifndef uint16
     27 typedef unsigned short uint16;
     28 #endif
     29 #ifndef uint32
     30 typedef unsigned int uint32;
     31 #endif
     32 #ifndef bool
     33 typedef int bool;
     34 #endif
     35 
     36 typedef void *Handle;
     37 
     38 /*
     39  * MPEG-4 Part 2 data structure
     40  */
     41 
     42 typedef struct _vbp_codec_data_mp42
     43 {
     44     uint8  profile_and_level_indication;
     45 } vbp_codec_data_mp42;
     46 
     47 typedef struct _vbp_slice_data_mp42
     48 {
     49 	uint8* buffer_addr;
     50 	uint32 slice_offset;
     51 	uint32 slice_size;
     52 	VASliceParameterBufferMPEG4 slice_param;
     53 } vbp_slice_data_mp42;
     54 
     55 typedef struct _vbp_picture_data_mp42
     56 {
     57 	uint8 vop_coded;
     58 	VAPictureParameterBufferMPEG4 picture_param;
     59 	VAIQMatrixBufferMPEG4 iq_matrix_buffer;
     60 
     61 	uint32 number_slices;
     62 	vbp_slice_data_mp42 *slice_data;
     63 
     64 } vbp_picture_data_mp42;
     65 
     66 typedef struct _vbp_data_mp42
     67 {
     68 	vbp_codec_data_mp42 codec_data;
     69 
     70 	uint32 number_pictures;
     71 	vbp_picture_data_mp42 *picture_data;
     72 
     73 } vbp_data_mp42;
     74 
     75 /*
     76  * H.264 data structure
     77  */
     78 
     79 typedef struct _vbp_codec_data_h264
     80 {
     81 	uint8		pic_parameter_set_id;
     82 	uint8	 	seq_parameter_set_id;
     83 
     84 	uint8 		profile_idc;
     85 	uint8 		level_idc;
     86 	uint8		constraint_set1_flag;
     87 
     88 	uint8	 	num_ref_frames;
     89 	uint8	 	gaps_in_frame_num_value_allowed_flag;
     90 
     91 	uint8	 	frame_mbs_only_flag;
     92 	uint8	 	mb_adaptive_frame_field_flag;
     93 
     94 	int			frame_width;
     95 	int			frame_height;
     96 
     97 	uint8	 	frame_cropping_flag;
     98 	int 		frame_crop_rect_left_offset;
     99 	int			frame_crop_rect_right_offset;
    100 	int 		frame_crop_rect_top_offset;
    101 	int 		frame_crop_rect_bottom_offset;
    102 
    103 	uint8	 	vui_parameters_present_flag;
    104 	/* aspect ratio */
    105 	uint8  		aspect_ratio_info_present_flag;
    106 	uint8  		aspect_ratio_idc;
    107 	uint16		sar_width;
    108 	uint16		sar_height;
    109 
    110 	/* video fromat */
    111 	uint8   	video_signal_type_present_flag;
    112 	uint8  		video_format;
    113 
    114 } vbp_codec_data_h264;
    115 
    116 typedef struct _vbp_slice_data_h264
    117 {
    118      uint8* buffer_addr;
    119 
    120      uint32 slice_offset; /* slice data offset */
    121 
    122      uint32 slice_size; /* slice data size */
    123 
    124      VASliceParameterBufferH264 slc_parms;
    125 
    126 } vbp_slice_data_h264;
    127 
    128 
    129  typedef struct _vbp_picture_data_h264
    130  {
    131      VAPictureParameterBufferH264* pic_parms;
    132 
    133      uint32 num_slices;
    134 
    135      vbp_slice_data_h264* slc_data;
    136 
    137  } vbp_picture_data_h264;
    138 
    139 
    140 typedef struct _vbp_data_h264
    141 {
    142      /* rolling counter of buffers sent by vbp_parse */
    143      uint32 buf_number;
    144 
    145 	 uint32 num_pictures;
    146 
    147 	 vbp_picture_data_h264* pic_data;
    148 
    149      /**
    150 	 * do we need to send matrix to VA for each picture? If not, we need
    151      * a flag indicating whether it is updated.
    152 	 */
    153      VAIQMatrixBufferH264* IQ_matrix_buf;
    154 
    155      vbp_codec_data_h264* codec_data;
    156 
    157 } vbp_data_h264;
    158 
    159 /*
    160  * vc1 data structure
    161  */
    162 typedef struct _vbp_codec_data_vc1
    163 {
    164 	/* Sequence layer. */
    165 	uint8  PROFILE;
    166 	uint8  LEVEL;
    167 	uint8  POSTPROCFLAG;
    168 	uint8  PULLDOWN;
    169 	uint8  INTERLACE;
    170 	uint8  TFCNTRFLAG;
    171 	uint8  FINTERPFLAG;
    172 	uint8  PSF;
    173 
    174 	/* Entry point layer. */
    175 	uint8  BROKEN_LINK;
    176 	uint8  CLOSED_ENTRY;
    177 	uint8  PANSCAN_FLAG;
    178 	uint8  REFDIST_FLAG;
    179 	uint8  LOOPFILTER;
    180 	uint8  FASTUVMC;
    181 	uint8  EXTENDED_MV;
    182 	uint8  DQUANT;
    183 	uint8  VSTRANSFORM;
    184 	uint8  OVERLAP;
    185 	uint8  QUANTIZER;
    186 	uint16 CODED_WIDTH;
    187 	uint16 CODED_HEIGHT;
    188 	uint8  EXTENDED_DMV;
    189 	uint8  RANGE_MAPY_FLAG;
    190 	uint8  RANGE_MAPY;
    191 	uint8  RANGE_MAPUV_FLAG;
    192 	uint8  RANGE_MAPUV;
    193 
    194 	/* Others. */
    195 	uint8  RANGERED;
    196 	uint8  MAXBFRAMES;
    197 	uint8  MULTIRES;
    198 	uint8  SYNCMARKER;
    199 	uint8  RNDCTRL;
    200 	uint8  REFDIST;
    201 	uint16 widthMB;
    202 	uint16 heightMB;
    203 
    204 	uint8  INTCOMPFIELD;
    205 	uint8  LUMSCALE2;
    206 	uint8  LUMSHIFT2;
    207 } vbp_codec_data_vc1;
    208 
    209 typedef struct _vbp_slice_data_vc1
    210 {
    211 	uint8 *buffer_addr;
    212 	uint32 slice_offset;
    213 	uint32 slice_size;
    214 	VASliceParameterBufferVC1 slc_parms;     /* pointer to slice parms */
    215 } vbp_slice_data_vc1;
    216 
    217 
    218 typedef struct _vbp_picture_data_vc1
    219 {
    220 	uint32 picture_is_skipped;                /* VC1_PTYPE_SKIPPED is PTYPE is skipped. */
    221 	VAPictureParameterBufferVC1 *pic_parms;   /* current parsed picture header */
    222 	uint32 size_bitplanes;                    /* based on number of MBs */
    223 	uint8 *packed_bitplanes;                  /* contains up to three bitplanes packed for libVA */
    224 	uint32 num_slices;                        /* number of slices.  always at least one */
    225 	vbp_slice_data_vc1 *slc_data;             /* pointer to array of slice data */
    226 } vbp_picture_data_vc1;
    227 
    228 typedef struct _vbp_data_vc1
    229 {
    230 	uint32 buf_number;                        /* rolling counter of buffers sent by vbp_parse */
    231 	vbp_codec_data_vc1 *se_data;              /* parsed SH/EPs */
    232 
    233 	uint32 num_pictures;
    234 
    235 	vbp_picture_data_vc1* pic_data;
    236 } vbp_data_vc1;
    237 
    238 enum _picture_type
    239 {
    240 	VC1_PTYPE_I,
    241 	VC1_PTYPE_P,
    242 	VC1_PTYPE_B,
    243 	VC1_PTYPE_BI,
    244 	VC1_PTYPE_SKIPPED
    245 };
    246 
    247 enum _vbp_parser_error
    248 {
    249 	VBP_OK,
    250 	VBP_TYPE,
    251 	VBP_LOAD,
    252 	VBP_UNLOAD,
    253 	VBP_INIT,
    254 	VBP_DATA,
    255 	VBP_DONE,
    256 	VBP_GLIB,
    257 	VBP_MEM,
    258 	VBP_PARM,
    259 	VBP_CXT,
    260 	VBP_IMPL
    261 };
    262 
    263 enum _vbp_parser_type
    264 {
    265 	VBP_VC1,
    266 	VBP_MPEG2,
    267 	VBP_MPEG4,
    268 	VBP_H264
    269 };
    270 
    271 /*
    272  * open video bitstream parser to parse a specific media type.
    273  * @param  parser_type: one of the types defined in #vbp_parser_type
    274  * @param  hcontext: pointer to hold returned VBP context handle.
    275  * @return VBP_OK on success, anything else on failure.
    276  *
    277  */
    278 uint32 vbp_open(uint32 parser_type, Handle *hcontext);
    279 
    280 /*
    281  * close video bitstream parser.
    282  * @param hcontext: VBP context handle.
    283  * @returns VBP_OK on success, anything else on failure.
    284  *
    285  */
    286 uint32 vbp_close(Handle hcontext);
    287 
    288 /*
    289  * parse bitstream.
    290  * @param hcontext: handle to VBP context.
    291  * @param data: pointer to bitstream buffer.
    292  * @param size: size of bitstream buffer.
    293  * @param init_flag: 1 if buffer contains bitstream configuration data, 0 otherwise.
    294  * @return VBP_OK on success, anything else on failure.
    295  *
    296  */
    297 uint32 vbp_parse(Handle hcontext, uint8 *data, uint32 size, uint8 init_data_flag);
    298 
    299 /*
    300  * query parsing result.
    301  * @param hcontext: handle to VBP context.
    302  * @param data: pointer to hold a data blob that contains parsing result.
    303  * 				Structure of data blob is determined by the media type.
    304  * @return VBP_OK on success, anything else on failure.
    305  *
    306  */
    307 uint32 vbp_query(Handle hcontext, void **data);
    308 
    309 
    310 /*
    311  * flush any un-parsed bitstream.
    312  * @param hcontext: handle to VBP context.
    313  * @returns VBP_OK on success, anything else on failure.
    314  *
    315  */
    316 uint32 vbp_flush(Handle hcontent);
    317 
    318 #endif /* VBP_LOADER_H */
    319