158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * Copyright (C) 2014 Intel Corporation. All rights reserved.
358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * Licensed under the Apache License, Version 2.0 (the "License");
558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * you may not use this file except in compliance with the License.
658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * You may obtain a copy of the License at
758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *      http://www.apache.org/licenses/LICENSE-2.0
958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
1058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * Unless required by applicable law or agreed to in writing, software
1158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * distributed under the License is distributed on an "AS IS" BASIS,
1258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * See the License for the specific language governing permissions and
1458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * limitations under the License.
1558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
1658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
17eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
1858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifndef VBP_LOADER_H
1958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#define VBP_LOADER_H
2058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
2158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#include <va/va.h>
2258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
2358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifdef USE_HW_VP8
2458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#include <va/va_dec_vp8.h>
2558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
2658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
2758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifndef TRUE
2858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#define TRUE 1
2958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
3058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
3158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifndef FALSE
3258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#define FALSE 0
3358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
3458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
3558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
3658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifndef uint8
3758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef unsigned char uint8;
3858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
3958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifndef uint16
4058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef unsigned short uint16;
4158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
4258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifndef uint32
4358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef unsigned int uint32;
4458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
4558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifndef int16
4658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef short int16;
4758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
4858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
4958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef void *Handle;
5058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
5158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
5258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * MPEG-4 Part 2 data structure
5358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
5458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
5558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_codec_data_mp42
5658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
5758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  profile_and_level_indication;
5858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 video_object_layer_width;
5958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 video_object_layer_height;
6058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
6158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // 0 for unspecified, PAL/NTSC/SECAM
6258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  video_format;
6358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
6458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // 0 short range, 1 full range
6558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  video_range;
6658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
6758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // default 2 (unspecified), 1 for BT709.
6858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  matrix_coefficients;
6958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
7058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  short_video_header;
7158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
7258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // always exist for mpeg-4,
7358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8   aspect_ratio_info;
7458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8   par_width;
7558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8   par_height;
7658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
7758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // bit rate
7858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int bit_rate;
79eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
80eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    // indicate if vol is received
81eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    uint8 got_vol;
82eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    // indicate if vop is received
83eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    uint8 got_vop;
8458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_codec_data_mp42;
8558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
8658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_slice_data_mp42
8758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
8858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8* buffer_addr;
8958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 slice_offset;
9058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 slice_size;
9158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VASliceParameterBufferMPEG4 slice_param;
92eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    uint8* cur_frame_addr;
93eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    uint8* forward_ref_addr;
94eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    uint8* backward_ref_addr;
95eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    uint32_t pic_stride;
96eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    uint32_t pic_height;
9758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_slice_data_mp42;
9858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
9958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_picture_data_mp42 vbp_picture_data_mp42;
10058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
10158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudelstruct _vbp_picture_data_mp42
10258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
10358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 vop_coded;
10458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint16 vop_time_increment;
10558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* indicates if current buffer contains parameter for the first slice of the picture */
10658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 new_picture_flag;
10758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAPictureParameterBufferMPEG4 picture_param;
10858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_slice_data_mp42 slice_data;
10958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
11058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_picture_data_mp42* next_picture_data;
11158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel};
11258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
11358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_data_mp42
11458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
11558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_codec_data_mp42 codec_data;
11658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAIQMatrixBufferMPEG4 iq_matrix_buffer;
11758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
11858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 number_picture_data;
11958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 number_pictures;
12058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
12158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_picture_data_mp42 *picture_data;
12258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
12358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_data_mp42;
12458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
12558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
126eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo * MPEG2 data structure
127eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo */
128a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
129a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huangtypedef struct _vbp_codec_data_mpeg2
130a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang{
131a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8 profile_and_level_indication;
132a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
133a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // picture_coding_type
134a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8 frame_type;
135a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
136a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // picture_structure
137a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8 interlaced;
138a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
139a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // horizontal_size is a 14-bit unsigned integer
140a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 frame_width;
141a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // vertical_size is a 14-bit unsigned integer
142a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 frame_height;
143a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
144a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // a 3-bit integer, 0 for unspecified, PAL/NTSC/SECAM
145a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8 video_format;
146eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
147a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // 0 short range, 1 full range
148a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8 video_range;
149a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
150a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // a 4-bit integer
151a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8  aspect_ratio;
152a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 par_width;
153a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 par_height;
154a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
155a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // a 8-bit integer
156a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8  matrix_coefficients;
157eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
158a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8  load_intra_quantiser_matrix;
159a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8  load_non_intra_quantiser_matrix;
160a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
161a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // a 30-bit integer
162a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    int bit_rate;
163a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
164a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    // a 4-bit integer
165a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    int frame_rate;
166a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang} vbp_codec_data_mpeg2;
167a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
168a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huangtypedef struct _vbp_slice_data_mpeg2
169a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang{
170a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint8* buffer_addr;
171a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 slice_offset;
172a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 slice_size;
173a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    VASliceParameterBufferMPEG2 slice_param;
174a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang} vbp_slice_data_mpeg2;
175a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
176a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huangtypedef struct _vbp_picture_data_mpeg2
177a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang{
178a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    VAPictureParameterBufferMPEG2* pic_parms;
179a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    vbp_slice_data_mpeg2* slice_data;
180eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
181a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 num_slices;
182a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang} vbp_picture_data_mpeg2;
183a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
184a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huangtypedef struct _vbp_data_mpeg2
185a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang{
186a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    /* rolling counter of buffers sent by vbp_parse */
187a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 buf_number;
188eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
189a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    vbp_codec_data_mpeg2* codec_data;
190a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    VAIQMatrixBufferMPEG2* iq_matrix_buffer;
191a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
192a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    uint32 num_pictures;
193eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
194a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang    vbp_picture_data_mpeg2 *pic_data;
195a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang} vbp_data_mpeg2;
196a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang
197eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
198a9def98ead34169ef97a54fc70b2213e16c6f362Yuanjun Huang/*
19958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * H.264 data structure
20058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
20158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
20258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_codec_data_h264
20358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
20458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 pic_parameter_set_id;
20558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 seq_parameter_set_id;
20658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
20758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 profile_idc;
20858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 level_idc;
20958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /*constraint flag sets (h.264 Spec v2009)*/
21058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 constraint_set0_flag;
21158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 constraint_set1_flag;
21258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 constraint_set2_flag;
21358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 constraint_set3_flag;
21458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 constraint_set4_flag;
215eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    uint8 constraint_set5_flag;
21658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
21758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 num_ref_frames;
21858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 gaps_in_frame_num_value_allowed_flag;
21958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
22058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 frame_mbs_only_flag;
22158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 mb_adaptive_frame_field_flag;
22258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
22358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int frame_width;
22458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int frame_height;
22558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
22658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 vui_parameters_present_flag;
22758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
22858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* aspect ratio */
22958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 aspect_ratio_idc;
23058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint16 sar_width;
23158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint16 sar_height;
23258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
23358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* cropping information */
23458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int crop_top;
23558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int crop_bottom;
23658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int crop_left;
23758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int crop_right;
23858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
23958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* video fromat */
24058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
24158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // default 5 unspecified
24258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 video_format;
24358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 video_full_range_flag;
24458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
24558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // default 2 unspecified
24658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 matrix_coefficients;
24758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
24858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 pic_order_cnt_type;
24958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int log2_max_pic_order_cnt_lsb_minus4;
25058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
25158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int bit_rate;
25258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
25358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int has_slice;
25458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_codec_data_h264;
25558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
25658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_slice_data_h264
25758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
25858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8* buffer_addr;
25958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
26058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 slice_offset; /* slice data offset */
26158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
26258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 slice_size; /* slice data size */
26358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
26458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 nal_unit_type;
26558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
26658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VASliceParameterBufferH264 slc_parms;
26758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
26858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_slice_data_h264;
26958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
27058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
27158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_picture_data_h264
27258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
27358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAPictureParameterBufferH264* pic_parms;
27458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
27558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 num_slices;
27658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
27758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_slice_data_h264* slc_data;
27858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
27958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_picture_data_h264;
28058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
28158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
28258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_data_h264
28358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
28458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* rolling counter of buffers sent by vbp_parse */
28558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 buf_number;
28658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
28758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 num_pictures;
28858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
28958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* if SPS has been received */
29058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  has_sps;
29158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
29258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* if PPS has been received */
29358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  has_pps;
29458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
29558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  new_sps;
29658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
29758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  new_pps;
29858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
29958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_picture_data_h264* pic_data;
30058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
30158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /**
30258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel        * do we need to send matrix to VA for each picture? If not, we need
30358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel        * a flag indicating whether it is updated.
30458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel        */
30558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAIQMatrixBufferH264* IQ_matrix_buf;
30658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
30758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_codec_data_h264* codec_data;
30858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
30958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifdef USE_SLICE_HEADER_PARSING
31058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAParsePictureParameterBuffer* pic_parse_buffer;
31158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
31258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
31358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_data_h264;
31458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
31558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
31658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * vc1 data structure
31758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
31858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_codec_data_vc1
31958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
32058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* Sequence layer. */
32158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  PROFILE;
32258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  LEVEL;
32358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  POSTPROCFLAG;
32458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  PULLDOWN;
32558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  INTERLACE;
32658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  TFCNTRFLAG;
32758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  FINTERPFLAG;
32858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  PSF;
32958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
33058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // default 2: unspecified
33158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  MATRIX_COEF;
33258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
33358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* Entry point layer. */
33458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  BROKEN_LINK;
33558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  CLOSED_ENTRY;
33658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  PANSCAN_FLAG;
33758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  REFDIST_FLAG;
33858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  LOOPFILTER;
33958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  FASTUVMC;
34058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  EXTENDED_MV;
34158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  DQUANT;
34258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  VSTRANSFORM;
34358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  OVERLAP;
34458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  QUANTIZER;
34558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint16 CODED_WIDTH;
34658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint16 CODED_HEIGHT;
34758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  EXTENDED_DMV;
34858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  RANGE_MAPY_FLAG;
34958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  RANGE_MAPY;
35058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  RANGE_MAPUV_FLAG;
35158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  RANGE_MAPUV;
35258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
35358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* Others. */
35458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  RANGERED;
35558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  MAXBFRAMES;
35658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  MULTIRES;
35758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  SYNCMARKER;
35858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  RNDCTRL;
35958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  REFDIST;
36058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint16 widthMB;
36158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint16 heightMB;
36258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
36358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  INTCOMPFIELD;
36458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  LUMSCALE2;
36558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8  LUMSHIFT2;
36658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
36758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // aspect ratio
36858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
36958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // default unspecified
37058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 ASPECT_RATIO;
37158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
37258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 ASPECT_HORIZ_SIZE;
37358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 ASPECT_VERT_SIZE;
37458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    // bit rate
37558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int bit_rate;
37658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_codec_data_vc1;
37758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
37858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_slice_data_vc1
37958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
38058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 *buffer_addr;
38158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 slice_offset;
38258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 slice_size;
38358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VASliceParameterBufferVC1 slc_parms;     /* pointer to slice parms */
38458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_slice_data_vc1;
38558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
38658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
38758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_picture_data_vc1
38858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
38958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 picture_is_skipped;                /* VC1_PTYPE_SKIPPED is PTYPE is skipped. */
39058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAPictureParameterBufferVC1 *pic_parms;   /* current parsed picture header */
39158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 size_bitplanes;                    /* based on number of MBs */
39258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 *packed_bitplanes;                  /* contains up to three bitplanes packed for libVA */
39358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 num_slices;                        /* number of slices.  always at least one */
39458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_slice_data_vc1 *slc_data;             /* pointer to array of slice data */
39558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_picture_data_vc1;
39658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
39758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_data_vc1
39858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
39958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 buf_number;                        /* rolling counter of buffers sent by vbp_parse */
40058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_codec_data_vc1 *se_data;              /* parsed SH/EPs */
40158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
40258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 num_pictures;
40358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
40458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_picture_data_vc1* pic_data;
40558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_data_vc1;
40658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
40758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifdef USE_HW_VP8
40858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_codec_data_vp8
40958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
41058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 frame_type;
41158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 version_num;
41258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int show_frame;
41358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
414eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    /* color space type specification */
415eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo    int clr_type;
416eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
41758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 frame_width;
41858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 frame_height;
41958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
42058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int refresh_alt_frame;
42158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int refresh_golden_frame;
42258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int refresh_last_frame;
42358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
42458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    /* cropping information */
42558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int crop_top;
42658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int crop_bottom;
42758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int crop_left;
42858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int crop_right;
42958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
43058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int golden_copied;
43158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    int altref_copied;
43258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_codec_data_vp8;
43358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
43458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_slice_data_vp8
43558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
43658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint8 *buffer_addr;
43758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 slice_offset;
43858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 slice_size;
43958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VASliceParameterBufferVP8 slc_parms;     /* pointer to slice parms */
44058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_slice_data_vp8;
44158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
44258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_picture_data_vp8
44358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
44458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAPictureParameterBufferVP8* pic_parms;   /* current parsed picture header */
44558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
44658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 num_slices;                        /* number of slices.  always one for VP8 */
44758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_slice_data_vp8 *slc_data;             /* pointer to array of slice data */
44858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_picture_data_vp8;
44958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
45058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeltypedef struct _vbp_data_vp8
45158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
45258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 buf_number;                        /* rolling counter of buffers sent by vbp_parse */
45358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_codec_data_vp8 *codec_data;
45458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
45558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    uint32 num_pictures;
45658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
45758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    vbp_picture_data_vp8* pic_data;
45858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
45958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAProbabilityDataBufferVP8* prob_data;
46058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VAIQMatrixBufferVP8* IQ_matrix_buf;
46158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel} vbp_data_vp8;
46258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
46358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
46458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudelenum _picture_type
46558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
46658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VC1_PTYPE_I,
46758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VC1_PTYPE_P,
46858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VC1_PTYPE_B,
46958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VC1_PTYPE_BI,
47058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VC1_PTYPE_SKIPPED
47158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel};
47258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
47358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudelenum _vbp_parser_error
47458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
47558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_OK,
47658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_TYPE,
47758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_LOAD,
47858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_INIT,
47958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_DATA,
48058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_DONE,
48158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_MEM,
48258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_PARM,
48358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_PARTIAL,
48458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_MULTI,
48558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_ERROR
48658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel};
48758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
48858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudelenum _vbp_parser_type
48958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel{
49058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_VC1,
49158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_MPEG2,
49258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_MPEG4,
49358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_H264,
49458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#ifdef USE_HW_VP8
49558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_VP8,
49658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
49758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#if (defined USE_AVC_SHORT_FORMAT || defined USE_SLICE_HEADER_PARSING)
49858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel    VBP_H264SECURE,
49958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
50058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel};
50158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
50258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
50358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
50458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * open video bitstream parser to parse a specific media type.
50558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param  parser_type: one of the types defined in #vbp_parser_type
50658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param  hcontext: pointer to hold returned VBP context handle.
50758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @return VBP_OK on success, anything else on failure.
50858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
50958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
51058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeluint32 vbp_open(uint32 parser_type, Handle *hcontext);
51158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
51258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
51358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * close video bitstream parser.
51458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param hcontext: VBP context handle.
51558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @returns VBP_OK on success, anything else on failure.
51658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
51758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
51858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeluint32 vbp_close(Handle hcontext);
51958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
52058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
52158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * parse bitstream.
52258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param hcontext: handle to VBP context.
52358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param data: pointer to bitstream buffer.
52458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param size: size of bitstream buffer.
52558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param init_flag: 1 if buffer contains bitstream configuration data, 0 otherwise.
52658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @return VBP_OK on success, anything else on failure.
52758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
52858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
52958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeluint32 vbp_parse(Handle hcontext, uint8 *data, uint32 size, uint8 init_data_flag);
53058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
53158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
53258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * query parsing result.
53358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param hcontext: handle to VBP context.
53458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param data: pointer to hold a data blob that contains parsing result.
53558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * Structure of data blob is determined by the media type.
53658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @return VBP_OK on success, anything else on failure.
53758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
53858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
53958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeluint32 vbp_query(Handle hcontext, void **data);
54058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
54158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
54258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
54358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * flush any un-parsed bitstream.
54458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param hcontext: handle to VBP context.
54558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @returns VBP_OK on success, anything else on failure.
54658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
54758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel */
54858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeluint32 vbp_flush(Handle hcontent);
54958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
55058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#if (defined USE_AVC_SHORT_FORMAT || defined USE_SLICE_HEADER_PARSING)
55158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel/*
55258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * update the the vbp context using the new data
55358ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param hcontext: handle to VBP context.
55458ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param data: pointer to the new data buffer.
55558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param size: size of new data buffer.
55658ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @param data: pointer to hold a data blob that contains parsing result.
55758ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel * @returns VBP_OK on success, anything else on failure.
55858ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel *
55958ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel*/
56058ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudeluint32 vbp_update(Handle hcontext, void *newdata, uint32 size, void **data);
56158ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif
56258ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel
563eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guouint32 vbp_decode(Handle hcontext, void *picdata);
564eecb5f24ecb6e09fe1b27bad76c73e333a83a336Nana Guo
56558ab4ceb5ea3d2733f108cacfcccb93e0c8d84daThierry Strudel#endif /* VBP_LOADER_H */
566