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