Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
      3  * Copyright (c) Imagination Technologies Limited, UK
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sub license, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice (including the
     14  * next paragraph) shall be included in all copies or substantial portions
     15  * of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     20  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
     21  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     22  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     23  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     24  *
     25  * Authors:
     26  *    Waldo Bastian <waldo.bastian (at) intel.com>
     27  *    Li Zeng <li.zeng (at) intel.com>
     28  *
     29  */
     30 
     31 #include "pnw_MPEG4.h"
     32 #include "tng_vld_dec.h"
     33 #include "psb_def.h"
     34 #include "psb_drv_debug.h"
     35 
     36 #include "hwdefs/reg_io2.h"
     37 #include "hwdefs/msvdx_offsets.h"
     38 #include "hwdefs/msvdx_cmds_io2.h"
     39 #include "hwdefs/msvdx_vec_reg_io2.h"
     40 #include "hwdefs/msvdx_vec_mpeg4_reg_io2.h"
     41 #include "hwdefs/dxva_fw_ctrl.h"
     42 
     43 #include <stdlib.h>
     44 #include <stdint.h>
     45 #include <string.h>
     46 
     47 #define GET_SURFACE_INFO_is_defined(psb_surface) ((int) (psb_surface->extra_info[0]))
     48 #define SET_SURFACE_INFO_is_defined(psb_surface, val) psb_surface->extra_info[0] = (uint32_t) val;
     49 #define GET_SURFACE_INFO_picture_structure(psb_surface) (psb_surface->extra_info[1])
     50 #define SET_SURFACE_INFO_picture_structure(psb_surface, val) psb_surface->extra_info[1] = val;
     51 #define GET_SURFACE_INFO_picture_coding_type(psb_surface) ((int) (psb_surface->extra_info[2]))
     52 #define SET_SURFACE_INFO_picture_coding_type(psb_surface, val) psb_surface->extra_info[2] = (uint32_t) val;
     53 
     54 #define SLICEDATA_BUFFER_TYPE(type) ((type==VASliceDataBufferType)?"VASliceDataBufferType":"VAProtectedSliceDataBufferType")
     55 
     56 #define PIXELS_TO_MB(x)    ((x + 15) / 16)
     57 
     58 /*
     59  * Frame types - format dependant!
     60  */
     61 #define PICTURE_CODING_I    0x00
     62 #define PICTURE_CODING_P    0x01
     63 #define PICTURE_CODING_B    0x02
     64 #define PICTURE_CODING_S    0x03
     65 
     66 
     67 #define FE_STATE_BUFFER_SIZE    4096
     68 #define FE_STATE_SAVE_SIZE      ( 0xB40 - 0x700 )
     69 
     70 #define MPEG4_PROFILE_SIMPLE    0
     71 #define MPEG4_PROFILE_ASP    2
     72 
     73 #define HW_SUPPORTED_MAX_PICTURE_WIDTH_MPEG4   1920
     74 #define HW_SUPPORTED_MAX_PICTURE_HEIGHT_MPEG4  1088
     75 #define HW_SUPPORTED_MAX_PICTURE_WIDTH_H263    720
     76 #define HW_SUPPORTED_MAX_PICTURE_HEIGHT_H263   576
     77 
     78 /* Table V2-2 ISO/IEC 14496-2:2001(E) - sprite enable codewords */
     79 typedef enum {
     80     SPRITE_NOT_USED = 0,
     81     STATIC,
     82     GMC,
     83 } MPEG4_eSpriteEnable;
     84 
     85 
     86 #define MAX_QUANT_TABLES    (2) /* only 2 tables for 4:2:0 decode */
     87 
     88 static int scan0[64] = { // spec, fig 7-2
     89     /*u 0  .....                   7*/
     90     0,  1,  5,  6,  14, 15, 27, 28,  /* v = 0 */
     91     2,  4,  7,  13, 16, 26, 29, 42,
     92     3,  8,  12, 17, 25, 30, 41, 43,
     93     9,  11, 18, 24, 31, 40, 44, 53,
     94     10, 19, 23, 32, 39, 45, 52, 54,
     95     20, 22, 33, 38, 46, 51, 55, 60,
     96     21, 34, 37, 47, 50, 56, 59, 61,
     97     35, 36, 48, 49, 57, 58, 62, 63  /* v = 7 */
     98 };
     99 
    100 typedef enum {
    101     NONINTRA_LUMA_Q = 0,
    102     INTRA_LUMA_Q = 1
    103 } QUANT_IDX;
    104 
    105 /************************************************************************************/
    106 /*                Variable length codes in 'packed' format                            */
    107 /************************************************************************************/
    108 
    109 /* Format is: opcode, width, symbol. All VLC tables are concatenated.                 */
    110 #define VLC_PACK(a,b,c)         ( ( (a) << 12 ) | ( (b) << 9  ) | (c) )
    111 static const IMG_UINT16 gaui16mpeg4VlcTableDataPacked[] =
    112 {
    113 /* B6_mcbpc_i_s_vops_piece.out */
    114 	VLC_PACK( 4 , 0 , 12 ) ,
    115 	VLC_PACK( 5 , 0 , 7 ) ,
    116 	VLC_PACK( 4 , 2 , 13 ) ,
    117 	VLC_PACK( 4 , 3 , 16 ) ,
    118 	VLC_PACK( 5 , 0 , 9 ) ,
    119 	VLC_PACK( 4 , 5 , 17 ) ,
    120 	VLC_PACK( 2 , 2 , 1 ) ,
    121 	VLC_PACK( 3 , 2 , 0 ) ,
    122 	VLC_PACK( 3 , 2 , 0 ) ,
    123 	VLC_PACK( 4 , 2 , 36 ) ,
    124 	VLC_PACK( 3 , 2 , 0 ) ,
    125 /* B7_mcbpc_p_s_vops_update.out */
    126 	VLC_PACK( 4 , 0 , 0 ) ,
    127 	VLC_PACK( 0 , 0 , 6 ) ,
    128 	VLC_PACK( 0 , 0 , 7 ) ,
    129 	VLC_PACK( 2 , 1 , 8 ) ,
    130 	VLC_PACK( 0 , 1 , 10 ) ,
    131 	VLC_PACK( 2 , 1 , 13 ) ,
    132 	VLC_PACK( 0 , 2 , 15 ) ,
    133 	VLC_PACK( 4 , 0 , 8 ) ,
    134 	VLC_PACK( 4 , 0 , 4 ) ,
    135 	VLC_PACK( 4 , 0 , 2 ) ,
    136 	VLC_PACK( 4 , 0 , 1 ) ,
    137 	VLC_PACK( 4 , 0 , 12 ) ,
    138 	VLC_PACK( 4 , 1 , 3 ) ,
    139 	VLC_PACK( 4 , 1 , 16 ) ,
    140 	VLC_PACK( 4 , 1 , 10 ) ,
    141 	VLC_PACK( 4 , 1 , 9 ) ,
    142 	VLC_PACK( 4 , 1 , 6 ) ,
    143 	VLC_PACK( 4 , 1 , 5 ) ,
    144 	VLC_PACK( 4 , 0 , 15 ) ,
    145 	VLC_PACK( 4 , 1 , 11 ) ,
    146 	VLC_PACK( 4 , 1 , 13 ) ,
    147 	VLC_PACK( 3 , 2 , 0 ) ,
    148 	VLC_PACK( 4 , 2 , 36 ) ,
    149 	VLC_PACK( 4 , 2 , 19 ) ,
    150 	VLC_PACK( 4 , 2 , 18 ) ,
    151 	VLC_PACK( 4 , 2 , 17 ) ,
    152 	VLC_PACK( 4 , 2 , 7 ) ,
    153 	VLC_PACK( 4 , 1 , 14 ) ,
    154 	VLC_PACK( 4 , 1 , 14 ) ,
    155 /* B8_cbpy_intra.out */
    156 	VLC_PACK( 1 , 1 , 16 ) ,
    157 	VLC_PACK( 0 , 0 , 18 ) ,
    158 	VLC_PACK( 0 , 0 , 19 ) ,
    159 	VLC_PACK( 4 , 3 , 0 ) ,
    160 	VLC_PACK( 4 , 3 , 12 ) ,
    161 	VLC_PACK( 4 , 3 , 10 ) ,
    162 	VLC_PACK( 4 , 3 , 14 ) ,
    163 	VLC_PACK( 4 , 3 , 5 ) ,
    164 	VLC_PACK( 4 , 3 , 13 ) ,
    165 	VLC_PACK( 4 , 3 , 3 ) ,
    166 	VLC_PACK( 4 , 3 , 11 ) ,
    167 	VLC_PACK( 4 , 3 , 7 ) ,
    168 	VLC_PACK( 4 , 1 , 15 ) ,
    169 	VLC_PACK( 4 , 1 , 15 ) ,
    170 	VLC_PACK( 4 , 1 , 15 ) ,
    171 	VLC_PACK( 4 , 1 , 15 ) ,
    172 	VLC_PACK( 3 , 1 , 0 ) ,
    173 	VLC_PACK( 4 , 1 , 6 ) ,
    174 	VLC_PACK( 4 , 1 , 9 ) ,
    175 	VLC_PACK( 4 , 0 , 8 ) ,
    176 	VLC_PACK( 4 , 0 , 4 ) ,
    177 	VLC_PACK( 4 , 0 , 2 ) ,
    178 	VLC_PACK( 4 , 0 , 1 ) ,
    179 /* B8_cbpy_inter.out */
    180 	VLC_PACK( 1 , 1 , 16 ) ,
    181 	VLC_PACK( 0 , 0 , 18 ) ,
    182 	VLC_PACK( 6 , 0 , 6 ) ,
    183 	VLC_PACK( 4 , 3 , 15 ) ,
    184 	VLC_PACK( 4 , 3 , 3 ) ,
    185 	VLC_PACK( 4 , 3 , 5 ) ,
    186 	VLC_PACK( 4 , 3 , 1 ) ,
    187 	VLC_PACK( 4 , 3 , 10 ) ,
    188 	VLC_PACK( 4 , 3 , 2 ) ,
    189 	VLC_PACK( 4 , 3 , 12 ) ,
    190 	VLC_PACK( 4 , 3 , 4 ) ,
    191 	VLC_PACK( 4 , 3 , 8 ) ,
    192 	VLC_PACK( 4 , 1 , 0 ) ,
    193 	VLC_PACK( 4 , 1 , 0 ) ,
    194 	VLC_PACK( 4 , 1 , 0 ) ,
    195 	VLC_PACK( 4 , 1 , 0 ) ,
    196 	VLC_PACK( 3 , 1 , 0 ) ,
    197 	VLC_PACK( 4 , 1 , 9 ) ,
    198 	VLC_PACK( 4 , 1 , 6 ) ,
    199 	VLC_PACK( 4 , 0 , 7 ) ,
    200 	VLC_PACK( 4 , 0 , 11 ) ,
    201 /* B3_modb.out */
    202 	VLC_PACK( 4 , 0 , 0 ) ,
    203 	VLC_PACK( 4 , 1 , 1 ) ,
    204 	VLC_PACK( 4 , 1 , 2 ) ,
    205 /* B4_mb_type.out */
    206 	VLC_PACK( 4 , 0 , 0 ) ,
    207 	VLC_PACK( 4 , 1 , 1 ) ,
    208 	VLC_PACK( 4 , 2 , 2 ) ,
    209 	VLC_PACK( 4 , 3 , 3 ) ,
    210 	VLC_PACK( 3 , 3 , 0 ) ,
    211 /* 6_33_dbquant.out */
    212 	VLC_PACK( 4 , 0 , 0 ) ,
    213 	VLC_PACK( 4 , 1 , 6 ) ,
    214 	VLC_PACK( 4 , 1 , 2 ) ,
    215 /* B12_mvd.out */
    216 	VLC_PACK( 4 , 0 , 0 ) ,
    217 	VLC_PACK( 5 , 0 , 1 ) ,
    218 	VLC_PACK( 5 , 0 , 2 ) ,
    219 	VLC_PACK( 5 , 0 , 3 ) ,
    220 	VLC_PACK( 2 , 1 , 3 ) ,
    221 	VLC_PACK( 2 , 3 , 5 ) ,
    222 	VLC_PACK( 0 , 3 , 11 ) ,
    223 	VLC_PACK( 5 , 0 , 4 ) ,
    224 	VLC_PACK( 5 , 0 , 5 ) ,
    225 	VLC_PACK( 5 , 0 , 6 ) ,
    226 	VLC_PACK( 5 , 0 , 7 ) ,
    227 	VLC_PACK( 0 , 0 , 4 ) ,
    228 	VLC_PACK( 5 , 0 , 10 ) ,
    229 	VLC_PACK( 5 , 0 , 11 ) ,
    230 	VLC_PACK( 5 , 0 , 12 ) ,
    231 	VLC_PACK( 5 , 0 , 9 ) ,
    232 	VLC_PACK( 5 , 0 , 8 ) ,
    233 	VLC_PACK( 1 , 1 , 16 ) ,
    234 	VLC_PACK( 0 , 0 , 18 ) ,
    235 	VLC_PACK( 0 , 0 , 19 ) ,
    236 	VLC_PACK( 0 , 0 , 20 ) ,
    237 	VLC_PACK( 5 , 0 , 24 ) ,
    238 	VLC_PACK( 5 , 0 , 23 ) ,
    239 	VLC_PACK( 5 , 0 , 22 ) ,
    240 	VLC_PACK( 5 , 0 , 21 ) ,
    241 	VLC_PACK( 5 , 0 , 20 ) ,
    242 	VLC_PACK( 5 , 0 , 19 ) ,
    243 	VLC_PACK( 5 , 0 , 18 ) ,
    244 	VLC_PACK( 5 , 0 , 17 ) ,
    245 	VLC_PACK( 5 , 0 , 16 ) ,
    246 	VLC_PACK( 5 , 0 , 15 ) ,
    247 	VLC_PACK( 5 , 0 , 14 ) ,
    248 	VLC_PACK( 5 , 0 , 13 ) ,
    249 	VLC_PACK( 3 , 1 , 0 ) ,
    250 	VLC_PACK( 5 , 0 , 32 ) ,
    251 	VLC_PACK( 5 , 0 , 31 ) ,
    252 	VLC_PACK( 5 , 0 , 30 ) ,
    253 	VLC_PACK( 5 , 0 , 29 ) ,
    254 	VLC_PACK( 5 , 0 , 28 ) ,
    255 	VLC_PACK( 5 , 0 , 27 ) ,
    256 	VLC_PACK( 5 , 0 , 26 ) ,
    257 	VLC_PACK( 5 , 0 , 25 ) ,
    258 /* B13_dct_dc_size_luminance.out */
    259 	VLC_PACK( 2 , 5 , 4 ) ,
    260 	VLC_PACK( 0 , 0 , 14 ) ,
    261 	VLC_PACK( 4 , 1 , 2 ) ,
    262 	VLC_PACK( 4 , 1 , 1 ) ,
    263 	VLC_PACK( 4 , 0 , 4 ) ,
    264 	VLC_PACK( 4 , 1 , 5 ) ,
    265 	VLC_PACK( 4 , 2 , 6 ) ,
    266 	VLC_PACK( 4 , 3 , 7 ) ,
    267 	VLC_PACK( 4 , 4 , 8 ) ,
    268 	VLC_PACK( 4 , 5 , 9 ) ,
    269 	VLC_PACK( 2 , 2 , 1 ) ,
    270 	VLC_PACK( 4 , 0 , 10 ) ,
    271 	VLC_PACK( 4 , 1 , 11 ) ,
    272 	VLC_PACK( 4 , 2 , 12 ) ,
    273 	VLC_PACK( 3 , 2 , 0 ) ,
    274 	VLC_PACK( 4 , 0 , 3 ) ,
    275 	VLC_PACK( 4 , 0 , 0 ) ,
    276 /* B14_dct_dc_size_chrominance.out */
    277 	VLC_PACK( 2 , 5 , 4 ) ,
    278 	VLC_PACK( 4 , 1 , 2 ) ,
    279 	VLC_PACK( 4 , 1 , 1 ) ,
    280 	VLC_PACK( 4 , 1 , 0 ) ,
    281 	VLC_PACK( 4 , 0 , 3 ) ,
    282 	VLC_PACK( 4 , 1 , 4 ) ,
    283 	VLC_PACK( 4 , 2 , 5 ) ,
    284 	VLC_PACK( 4 , 3 , 6 ) ,
    285 	VLC_PACK( 4 , 4 , 7 ) ,
    286 	VLC_PACK( 4 , 5 , 8 ) ,
    287 	VLC_PACK( 2 , 3 , 1 ) ,
    288 	VLC_PACK( 4 , 0 , 9 ) ,
    289 	VLC_PACK( 4 , 1 , 10 ) ,
    290 	VLC_PACK( 4 , 2 , 11 ) ,
    291 	VLC_PACK( 4 , 3 , 12 ) ,
    292 	VLC_PACK( 3 , 3 , 0 ) ,
    293 /* B16_intra_tcoeff.out */
    294 	VLC_PACK( 2 , 1 , 16 ) ,
    295 	VLC_PACK( 0 , 3 , 77 ) ,
    296 	VLC_PACK( 0 , 2 , 96 ) ,
    297 	VLC_PACK( 0 , 1 , 103 ) ,
    298 	VLC_PACK( 2 , 1 , 106 ) ,
    299 	VLC_PACK( 2 , 1 , 108 ) ,
    300 	VLC_PACK( 5 , 1 , 250 ) ,
    301 	VLC_PACK( 7 , 0 , 254 ) ,
    302 	VLC_PACK( 4 , 2 , 508 ) ,
    303 	VLC_PACK( 4 , 2 , 508 ) ,
    304 	VLC_PACK( 4 , 2 , 509 ) ,
    305 	VLC_PACK( 4 , 2 , 509 ) ,
    306 	VLC_PACK( 4 , 3 , 506 ) ,
    307 	VLC_PACK( 4 , 3 , 507 ) ,
    308 	VLC_PACK( 5 , 0 , 222 ) ,
    309 	VLC_PACK( 5 , 0 , 252 ) ,
    310 	VLC_PACK( 0 , 3 , 3 ) ,
    311 	VLC_PACK( 2 , 1 , 18 ) ,
    312 	VLC_PACK( 0 , 3 , 44 ) ,
    313 	VLC_PACK( 5 , 1 , 237 ) ,
    314 	VLC_PACK( 7 , 0 , 433 ) ,
    315 	VLC_PACK( 7 , 0 , 434 ) ,
    316 	VLC_PACK( 7 , 0 , 435 ) ,
    317 	VLC_PACK( 7 , 0 , 436 ) ,
    318 	VLC_PACK( 7 , 0 , 437 ) ,
    319 	VLC_PACK( 7 , 0 , 221 ) ,
    320 	VLC_PACK( 7 , 0 , 251 ) ,
    321 	VLC_PACK( 5 , 0 , 435 ) ,
    322 	VLC_PACK( 5 , 0 , 436 ) ,
    323 	VLC_PACK( 5 , 0 , 29 ) ,
    324 	VLC_PACK( 5 , 0 , 61 ) ,
    325 	VLC_PACK( 5 , 0 , 93 ) ,
    326 	VLC_PACK( 5 , 0 , 156 ) ,
    327 	VLC_PACK( 5 , 0 , 188 ) ,
    328 	VLC_PACK( 5 , 0 , 217 ) ,
    329 	VLC_PACK( 4 , 0 , 255 ) ,
    330 	VLC_PACK( 0 , 3 , 2 ) ,
    331 	VLC_PACK( 0 , 2 , 17 ) ,
    332 	VLC_PACK( 5 , 0 , 230 ) ,
    333 	VLC_PACK( 5 , 0 , 229 ) ,
    334 	VLC_PACK( 5 , 0 , 228 ) ,
    335 	VLC_PACK( 5 , 0 , 214 ) ,
    336 	VLC_PACK( 5 , 0 , 60 ) ,
    337 	VLC_PACK( 5 , 0 , 213 ) ,
    338 	VLC_PACK( 5 , 0 , 186 ) ,
    339 	VLC_PACK( 5 , 0 , 28 ) ,
    340 	VLC_PACK( 5 , 0 , 433 ) ,
    341 	VLC_PACK( 7 , 0 , 247 ) ,
    342 	VLC_PACK( 7 , 0 , 93 ) ,
    343 	VLC_PACK( 7 , 0 , 61 ) ,
    344 	VLC_PACK( 7 , 0 , 430 ) ,
    345 	VLC_PACK( 7 , 0 , 429 ) ,
    346 	VLC_PACK( 7 , 0 , 428 ) ,
    347 	VLC_PACK( 7 , 0 , 427 ) ,
    348 	VLC_PACK( 5 , 0 , 232 ) ,
    349 	VLC_PACK( 5 , 0 , 231 ) ,
    350 	VLC_PACK( 5 , 0 , 215 ) ,
    351 	VLC_PACK( 5 , 0 , 374 ) ,
    352 	VLC_PACK( 7 , 0 , 157 ) ,
    353 	VLC_PACK( 7 , 0 , 125 ) ,
    354 	VLC_PACK( 7 , 0 , 432 ) ,
    355 	VLC_PACK( 7 , 0 , 431 ) ,
    356 	VLC_PACK( 3 , 3 , 0 ) ,
    357 	VLC_PACK( 3 , 3 , 0 ) ,
    358 	VLC_PACK( 7 , 1 , 248 ) ,
    359 	VLC_PACK( 5 , 1 , 233 ) ,
    360 	VLC_PACK( 7 , 0 , 189 ) ,
    361 	VLC_PACK( 7 , 0 , 220 ) ,
    362 	VLC_PACK( 7 , 0 , 250 ) ,
    363 	VLC_PACK( 5 , 0 , 434 ) ,
    364 	VLC_PACK( 5 , 0 , 92 ) ,
    365 	VLC_PACK( 5 , 0 , 375 ) ,
    366 	VLC_PACK( 5 , 0 , 124 ) ,
    367 	VLC_PACK( 5 , 0 , 155 ) ,
    368 	VLC_PACK( 5 , 0 , 187 ) ,
    369 	VLC_PACK( 5 , 0 , 216 ) ,
    370 	VLC_PACK( 5 , 0 , 235 ) ,
    371 	VLC_PACK( 5 , 0 , 236 ) ,
    372 	VLC_PACK( 0 , 0 , 16 ) ,
    373 	VLC_PACK( 0 , 0 , 17 ) ,
    374 	VLC_PACK( 5 , 1 , 241 ) ,
    375 	VLC_PACK( 7 , 0 , 439 ) ,
    376 	VLC_PACK( 7 , 0 , 30 ) ,
    377 	VLC_PACK( 7 , 0 , 62 ) ,
    378 	VLC_PACK( 7 , 0 , 252 ) ,
    379 	VLC_PACK( 5 , 0 , 437 ) ,
    380 	VLC_PACK( 5 , 0 , 438 ) ,
    381 	VLC_PACK( 5 , 0 , 439 ) ,
    382 	VLC_PACK( 7 , 0 , 438 ) ,
    383 	VLC_PACK( 5 , 0 , 157 ) ,
    384 	VLC_PACK( 5 , 0 , 219 ) ,
    385 	VLC_PACK( 5 , 0 , 243 ) ,
    386 	VLC_PACK( 5 , 0 , 244 ) ,
    387 	VLC_PACK( 5 , 0 , 245 ) ,
    388 	VLC_PACK( 5 , 0 , 218 ) ,
    389 	VLC_PACK( 5 , 0 , 239 ) ,
    390 	VLC_PACK( 5 , 0 , 125 ) ,
    391 	VLC_PACK( 5 , 0 , 240 ) ,
    392 	VLC_PACK( 7 , 0 , 126 ) ,
    393 	VLC_PACK( 7 , 0 , 158 ) ,
    394 	VLC_PACK( 5 , 0 , 62 ) ,
    395 	VLC_PACK( 7 , 0 , 94 ) ,
    396 	VLC_PACK( 5 , 0 , 30 ) ,
    397 	VLC_PACK( 5 , 0 , 189 ) ,
    398 	VLC_PACK( 5 , 0 , 220 ) ,
    399 	VLC_PACK( 5 , 0 , 246 ) ,
    400 	VLC_PACK( 7 , 0 , 253 ) ,
    401 	VLC_PACK( 5 , 0 , 94 ) ,
    402 	VLC_PACK( 7 , 0 , 190 ) ,
    403 	VLC_PACK( 7 , 0 , 222 ) ,
    404 	VLC_PACK( 5 , 1 , 247 ) ,
    405 	VLC_PACK( 5 , 0 , 158 ) ,
    406 	VLC_PACK( 5 , 0 , 126 ) ,
    407 	VLC_PACK( 5 , 0 , 190 ) ,
    408 	VLC_PACK( 5 , 0 , 249 ) ,
    409 	VLC_PACK( 5 , 0 , 221 ) ,
    410 /* B17_inter_tcoeff.out */
    411 	VLC_PACK( 2 , 4 , 16 ) ,
    412 	VLC_PACK( 2 , 3 , 68 ) ,
    413 	VLC_PACK( 0 , 2 , 84 ) ,
    414 	VLC_PACK( 0 , 1 , 91 ) ,
    415 	VLC_PACK( 1 , 1 , 94 ) ,
    416 	VLC_PACK( 2 , 1 , 96 ) ,
    417 	VLC_PACK( 0 , 0 , 98 ) ,
    418 	VLC_PACK( 7 , 0 , 254 ) ,
    419 	VLC_PACK( 4 , 2 , 508 ) ,
    420 	VLC_PACK( 4 , 2 , 508 ) ,
    421 	VLC_PACK( 4 , 2 , 509 ) ,
    422 	VLC_PACK( 4 , 2 , 509 ) ,
    423 	VLC_PACK( 4 , 3 , 444 ) ,
    424 	VLC_PACK( 4 , 3 , 445 ) ,
    425 	VLC_PACK( 5 , 0 , 190 ) ,
    426 	VLC_PACK( 5 , 0 , 253 ) ,
    427 	VLC_PACK( 2 , 3 , 6 ) ,
    428 	VLC_PACK( 2 , 1 , 14 ) ,
    429 	VLC_PACK( 0 , 2 , 40 ) ,
    430 	VLC_PACK( 7 , 2 , 419 ) ,
    431 	VLC_PACK( 2 , 1 , 46 ) ,
    432 	VLC_PACK( 3 , 4 , 0 ) ,
    433 	VLC_PACK( 2 , 2 , 5 ) ,
    434 	VLC_PACK( 7 , 2 , 426 ) ,
    435 	VLC_PACK( 7 , 1 , 424 ) ,
    436 	VLC_PACK( 7 , 0 , 423 ) ,
    437 	VLC_PACK( 5 , 1 , 246 ) ,
    438 	VLC_PACK( 5 , 2 , 427 ) ,
    439 	VLC_PACK( 5 , 1 , 425 ) ,
    440 	VLC_PACK( 7 , 0 , 253 ) ,
    441 	VLC_PACK( 7 , 0 , 430 ) ,
    442 	VLC_PACK( 4 , 0 , 255 ) ,
    443 	VLC_PACK( 0 , 3 , 2 ) ,
    444 	VLC_PACK( 0 , 2 , 17 ) ,
    445 	VLC_PACK( 5 , 0 , 217 ) ,
    446 	VLC_PACK( 5 , 0 , 187 ) ,
    447 	VLC_PACK( 5 , 0 , 124 ) ,
    448 	VLC_PACK( 5 , 0 , 92 ) ,
    449 	VLC_PACK( 5 , 0 , 60 ) ,
    450 	VLC_PACK( 5 , 0 , 373 ) ,
    451 	VLC_PACK( 5 , 0 , 422 ) ,
    452 	VLC_PACK( 5 , 0 , 421 ) ,
    453 	VLC_PACK( 7 , 0 , 414 ) ,
    454 	VLC_PACK( 7 , 0 , 413 ) ,
    455 	VLC_PACK( 7 , 0 , 412 ) ,
    456 	VLC_PACK( 7 , 0 , 411 ) ,
    457 	VLC_PACK( 7 , 0 , 410 ) ,
    458 	VLC_PACK( 7 , 0 , 409 ) ,
    459 	VLC_PACK( 7 , 0 , 408 ) ,
    460 	VLC_PACK( 7 , 0 , 407 ) ,
    461 	VLC_PACK( 5 , 0 , 243 ) ,
    462 	VLC_PACK( 5 , 0 , 218 ) ,
    463 	VLC_PACK( 5 , 0 , 424 ) ,
    464 	VLC_PACK( 5 , 0 , 423 ) ,
    465 	VLC_PACK( 7 , 0 , 418 ) ,
    466 	VLC_PACK( 7 , 0 , 417 ) ,
    467 	VLC_PACK( 7 , 0 , 416 ) ,
    468 	VLC_PACK( 7 , 0 , 415 ) ,
    469 	VLC_PACK( 5 , 0 , 374 ) ,
    470 	VLC_PACK( 5 , 0 , 375 ) ,
    471 	VLC_PACK( 5 , 0 , 29 ) ,
    472 	VLC_PACK( 5 , 0 , 61 ) ,
    473 	VLC_PACK( 5 , 0 , 93 ) ,
    474 	VLC_PACK( 5 , 0 , 156 ) ,
    475 	VLC_PACK( 5 , 0 , 188 ) ,
    476 	VLC_PACK( 5 , 0 , 219 ) ,
    477 	VLC_PACK( 5 , 1 , 244 ) ,
    478 	VLC_PACK( 7 , 0 , 252 ) ,
    479 	VLC_PACK( 7 , 0 , 221 ) ,
    480 	VLC_PACK( 0 , 2 , 5 ) ,
    481 	VLC_PACK( 7 , 2 , 432 ) ,
    482 	VLC_PACK( 0 , 0 , 11 ) ,
    483 	VLC_PACK( 0 , 0 , 12 ) ,
    484 	VLC_PACK( 5 , 1 , 431 ) ,
    485 	VLC_PACK( 7 , 0 , 436 ) ,
    486 	VLC_PACK( 7 , 0 , 437 ) ,
    487 	VLC_PACK( 7 , 0 , 438 ) ,
    488 	VLC_PACK( 5 , 0 , 433 ) ,
    489 	VLC_PACK( 5 , 0 , 434 ) ,
    490 	VLC_PACK( 5 , 0 , 189 ) ,
    491 	VLC_PACK( 5 , 0 , 220 ) ,
    492 	VLC_PACK( 5 , 0 , 250 ) ,
    493 	VLC_PACK( 5 , 1 , 248 ) ,
    494 	VLC_PACK( 7 , 0 , 431 ) ,
    495 	VLC_PACK( 5 , 0 , 125 ) ,
    496 	VLC_PACK( 5 , 0 , 157 ) ,
    497 	VLC_PACK( 7 , 0 , 439 ) ,
    498 	VLC_PACK( 7 , 0 , 30 ) ,
    499 	VLC_PACK( 7 , 0 , 62 ) ,
    500 	VLC_PACK( 7 , 0 , 94 ) ,
    501 	VLC_PACK( 5 , 0 , 435 ) ,
    502 	VLC_PACK( 5 , 0 , 436 ) ,
    503 	VLC_PACK( 5 , 0 , 437 ) ,
    504 	VLC_PACK( 5 , 0 , 251 ) ,
    505 	VLC_PACK( 7 , 0 , 126 ) ,
    506 	VLC_PACK( 7 , 0 , 158 ) ,
    507 	VLC_PACK( 7 , 0 , 190 ) ,
    508 	VLC_PACK( 7 , 0 , 222 ) ,
    509 	VLC_PACK( 5 , 1 , 438 ) ,
    510 	VLC_PACK( 5 , 0 , 30 ) ,
    511 	VLC_PACK( 5 , 0 , 62 ) ,
    512 	VLC_PACK( 5 , 0 , 94 ) ,
    513 	VLC_PACK( 5 , 0 , 252 ) ,
    514 	VLC_PACK( 5 , 0 , 221 ) ,
    515 	VLC_PACK( 5 , 0 , 126 ) ,
    516 	VLC_PACK( 5 , 0 , 158 ) ,
    517 /* B23_rvlc_tcoeff_0.out */
    518 	VLC_PACK( 5 , 0 , 255 ) ,
    519 	VLC_PACK( 5 , 0 , 222 ) ,
    520 	VLC_PACK( 0 , 0 , 14 ) ,
    521 	VLC_PACK( 0 , 1 , 15 ) ,
    522 	VLC_PACK( 0 , 0 , 44 ) ,
    523 	VLC_PACK( 0 , 1 , 45 ) ,
    524 	VLC_PACK( 0 , 1 , 74 ) ,
    525 	VLC_PACK( 0 , 2 , 103 ) ,
    526 	VLC_PACK( 0 , 1 , 230 ) ,
    527 	VLC_PACK( 0 , 0 , 256 ) ,
    528 	VLC_PACK( 5 , 0 , 252 ) ,
    529 	VLC_PACK( 7 , 0 , 254 ) ,
    530 	VLC_PACK( 4 , 3 , 508 ) ,
    531 	VLC_PACK( 4 , 3 , 509 ) ,
    532 	VLC_PACK( 4 , 3 , 506 ) ,
    533 	VLC_PACK( 4 , 3 , 507 ) ,
    534 	VLC_PACK( 5 , 0 , 190 ) ,
    535 	VLC_PACK( 5 , 0 , 158 ) ,
    536 	VLC_PACK( 5 , 0 , 126 ) ,
    537 	VLC_PACK( 5 , 0 , 94 ) ,
    538 	VLC_PACK( 0 , 0 , 2 ) ,
    539 	VLC_PACK( 0 , 1 , 3 ) ,
    540 	VLC_PACK( 5 , 0 , 62 ) ,
    541 	VLC_PACK( 5 , 0 , 30 ) ,
    542 	VLC_PACK( 5 , 0 , 439 ) ,
    543 	VLC_PACK( 5 , 0 , 438 ) ,
    544 	VLC_PACK( 0 , 0 , 2 ) ,
    545 	VLC_PACK( 0 , 1 , 3 ) ,
    546 	VLC_PACK( 5 , 0 , 437 ) ,
    547 	VLC_PACK( 5 , 0 , 93 ) ,
    548 	VLC_PACK( 5 , 0 , 436 ) ,
    549 	VLC_PACK( 5 , 0 , 435 ) ,
    550 	VLC_PACK( 0 , 0 , 2 ) ,
    551 	VLC_PACK( 0 , 1 , 3 ) ,
    552 	VLC_PACK( 5 , 0 , 434 ) ,
    553 	VLC_PACK( 5 , 0 , 374 ) ,
    554 	VLC_PACK( 5 , 0 , 373 ) ,
    555 	VLC_PACK( 5 , 0 , 123 ) ,
    556 	VLC_PACK( 0 , 0 , 2 ) ,
    557 	VLC_PACK( 0 , 1 , 3 ) ,
    558 	VLC_PACK( 5 , 0 , 433 ) ,
    559 	VLC_PACK( 5 , 0 , 432 ) ,
    560 	VLC_PACK( 5 , 0 , 431 ) ,
    561 	VLC_PACK( 5 , 0 , 430 ) ,
    562 	VLC_PACK( 0 , 0 , 2 ) ,
    563 	VLC_PACK( 3 , 1 , 0 ) ,
    564 	VLC_PACK( 5 , 0 , 228 ) ,
    565 	VLC_PACK( 5 , 0 , 150 ) ,
    566 	VLC_PACK( 5 , 0 , 221 ) ,
    567 	VLC_PACK( 5 , 0 , 251 ) ,
    568 	VLC_PACK( 5 , 0 , 250 ) ,
    569 	VLC_PACK( 5 , 0 , 249 ) ,
    570 	VLC_PACK( 0 , 0 , 2 ) ,
    571 	VLC_PACK( 0 , 1 , 3 ) ,
    572 	VLC_PACK( 5 , 0 , 189 ) ,
    573 	VLC_PACK( 5 , 0 , 220 ) ,
    574 	VLC_PACK( 5 , 0 , 157 ) ,
    575 	VLC_PACK( 5 , 0 , 125 ) ,
    576 	VLC_PACK( 0 , 0 , 2 ) ,
    577 	VLC_PACK( 0 , 1 , 3 ) ,
    578 	VLC_PACK( 5 , 0 , 188 ) ,
    579 	VLC_PACK( 5 , 0 , 156 ) ,
    580 	VLC_PACK( 5 , 0 , 61 ) ,
    581 	VLC_PACK( 5 , 0 , 29 ) ,
    582 	VLC_PACK( 0 , 0 , 2 ) ,
    583 	VLC_PACK( 0 , 1 , 3 ) ,
    584 	VLC_PACK( 5 , 0 , 92 ) ,
    585 	VLC_PACK( 5 , 0 , 60 ) ,
    586 	VLC_PACK( 5 , 0 , 91 ) ,
    587 	VLC_PACK( 5 , 0 , 59 ) ,
    588 	VLC_PACK( 0 , 0 , 2 ) ,
    589 	VLC_PACK( 0 , 1 , 3 ) ,
    590 	VLC_PACK( 5 , 0 , 372 ) ,
    591 	VLC_PACK( 5 , 0 , 311 ) ,
    592 	VLC_PACK( 5 , 0 , 429 ) ,
    593 	VLC_PACK( 5 , 0 , 503 ) ,
    594 	VLC_PACK( 0 , 0 , 2 ) ,
    595 	VLC_PACK( 3 , 1 , 0 ) ,
    596 	VLC_PACK( 5 , 0 , 58 ) ,
    597 	VLC_PACK( 5 , 0 , 26 ) ,
    598 	VLC_PACK( 7 , 0 , 158 ) ,
    599 	VLC_PACK( 7 , 0 , 126 ) ,
    600 	VLC_PACK( 0 , 0 , 2 ) ,
    601 	VLC_PACK( 0 , 1 , 3 ) ,
    602 	VLC_PACK( 5 , 0 , 248 ) ,
    603 	VLC_PACK( 7 , 0 , 30 ) ,
    604 	VLC_PACK( 5 , 0 , 219 ) ,
    605 	VLC_PACK( 5 , 0 , 218 ) ,
    606 	VLC_PACK( 0 , 0 , 2 ) ,
    607 	VLC_PACK( 0 , 1 , 3 ) ,
    608 	VLC_PACK( 5 , 0 , 217 ) ,
    609 	VLC_PACK( 5 , 0 , 245 ) ,
    610 	VLC_PACK( 5 , 0 , 375 ) ,
    611 	VLC_PACK( 5 , 0 , 124 ) ,
    612 	VLC_PACK( 0 , 0 , 2 ) ,
    613 	VLC_PACK( 0 , 1 , 3 ) ,
    614 	VLC_PACK( 5 , 0 , 28 ) ,
    615 	VLC_PACK( 5 , 0 , 155 ) ,
    616 	VLC_PACK( 5 , 0 , 154 ) ,
    617 	VLC_PACK( 5 , 0 , 122 ) ,
    618 	VLC_PACK( 0 , 0 , 2 ) ,
    619 	VLC_PACK( 0 , 1 , 3 ) ,
    620 	VLC_PACK( 5 , 0 , 310 ) ,
    621 	VLC_PACK( 5 , 0 , 27 ) ,
    622 	VLC_PACK( 5 , 0 , 90 ) ,
    623 	VLC_PACK( 5 , 0 , 121 ) ,
    624 	VLC_PACK( 0 , 0 , 2 ) ,
    625 	VLC_PACK( 3 , 1 , 0 ) ,
    626 	VLC_PACK( 5 , 0 , 502 ) ,
    627 	VLC_PACK( 5 , 0 , 371 ) ,
    628 	VLC_PACK( 7 , 0 , 439 ) ,
    629 	VLC_PACK( 7 , 0 , 438 ) ,
    630 	VLC_PACK( 0 , 0 , 6 ) ,
    631 	VLC_PACK( 0 , 1 , 7 ) ,
    632 	VLC_PACK( 0 , 0 , 27 ) ,
    633 	VLC_PACK( 0 , 1 , 28 ) ,
    634 	VLC_PACK( 0 , 1 , 48 ) ,
    635 	VLC_PACK( 0 , 2 , 68 ) ,
    636 	VLC_PACK( 5 , 0 , 247 ) ,
    637 	VLC_PACK( 5 , 0 , 246 ) ,
    638 	VLC_PACK( 5 , 0 , 244 ) ,
    639 	VLC_PACK( 7 , 0 , 221 ) ,
    640 	VLC_PACK( 0 , 0 , 2 ) ,
    641 	VLC_PACK( 0 , 1 , 3 ) ,
    642 	VLC_PACK( 5 , 0 , 187 ) ,
    643 	VLC_PACK( 5 , 0 , 216 ) ,
    644 	VLC_PACK( 5 , 0 , 186 ) ,
    645 	VLC_PACK( 5 , 0 , 185 ) ,
    646 	VLC_PACK( 0 , 0 , 2 ) ,
    647 	VLC_PACK( 0 , 1 , 3 ) ,
    648 	VLC_PACK( 5 , 0 , 213 ) ,
    649 	VLC_PACK( 5 , 0 , 237 ) ,
    650 	VLC_PACK( 5 , 0 , 153 ) ,
    651 	VLC_PACK( 5 , 0 , 184 ) ,
    652 	VLC_PACK( 0 , 0 , 2 ) ,
    653 	VLC_PACK( 2 , 1 , 3 ) ,
    654 	VLC_PACK( 5 , 0 , 89 ) ,
    655 	VLC_PACK( 5 , 0 , 152 ) ,
    656 	VLC_PACK( 3 , 1 , 0 ) ,
    657 	VLC_PACK( 7 , 0 , 218 ) ,
    658 	VLC_PACK( 5 , 0 , 428 ) ,
    659 	VLC_PACK( 7 , 0 , 253 ) ,
    660 	VLC_PACK( 7 , 0 , 435 ) ,
    661 	VLC_PACK( 7 , 0 , 432 ) ,
    662 	VLC_PACK( 7 , 0 , 431 ) ,
    663 	VLC_PACK( 0 , 0 , 2 ) ,
    664 	VLC_PACK( 0 , 1 , 3 ) ,
    665 	VLC_PACK( 5 , 0 , 243 ) ,
    666 	VLC_PACK( 5 , 0 , 242 ) ,
    667 	VLC_PACK( 5 , 0 , 215 ) ,
    668 	VLC_PACK( 5 , 0 , 214 ) ,
    669 	VLC_PACK( 0 , 0 , 2 ) ,
    670 	VLC_PACK( 0 , 1 , 3 ) ,
    671 	VLC_PACK( 5 , 0 , 236 ) ,
    672 	VLC_PACK( 5 , 0 , 233 ) ,
    673 	VLC_PACK( 5 , 0 , 183 ) ,
    674 	VLC_PACK( 5 , 0 , 182 ) ,
    675 	VLC_PACK( 0 , 0 , 2 ) ,
    676 	VLC_PACK( 2 , 1 , 3 ) ,
    677 	VLC_PACK( 5 , 0 , 151 ) ,
    678 	VLC_PACK( 5 , 0 , 181 ) ,
    679 	VLC_PACK( 3 , 1 , 0 ) ,
    680 	VLC_PACK( 7 , 0 , 370 ) ,
    681 	VLC_PACK( 7 , 0 , 188 ) ,
    682 	VLC_PACK( 7 , 0 , 430 ) ,
    683 	VLC_PACK( 7 , 0 , 429 ) ,
    684 	VLC_PACK( 0 , 0 , 2 ) ,
    685 	VLC_PACK( 0 , 1 , 3 ) ,
    686 	VLC_PACK( 5 , 0 , 241 ) ,
    687 	VLC_PACK( 7 , 0 , 426 ) ,
    688 	VLC_PACK( 5 , 0 , 240 ) ,
    689 	VLC_PACK( 5 , 0 , 239 ) ,
    690 	VLC_PACK( 0 , 0 , 2 ) ,
    691 	VLC_PACK( 0 , 1 , 3 ) ,
    692 	VLC_PACK( 7 , 0 , 220 ) ,
    693 	VLC_PACK( 7 , 0 , 157 ) ,
    694 	VLC_PACK( 5 , 0 , 212 ) ,
    695 	VLC_PACK( 5 , 0 , 235 ) ,
    696 	VLC_PACK( 0 , 0 , 2 ) ,
    697 	VLC_PACK( 2 , 1 , 3 ) ,
    698 	VLC_PACK( 5 , 0 , 180 ) ,
    699 	VLC_PACK( 5 , 0 , 211 ) ,
    700 	VLC_PACK( 3 , 1 , 0 ) ,
    701 	VLC_PACK( 7 , 0 , 405 ) ,
    702 	VLC_PACK( 7 , 0 , 406 ) ,
    703 	VLC_PACK( 7 , 0 , 425 ) ,
    704 	VLC_PACK( 7 , 0 , 424 ) ,
    705 	VLC_PACK( 0 , 0 , 6 ) ,
    706 	VLC_PACK( 0 , 1 , 7 ) ,
    707 	VLC_PACK( 0 , 0 , 18 ) ,
    708 	VLC_PACK( 0 , 1 , 19 ) ,
    709 	VLC_PACK( 0 , 1 , 27 ) ,
    710 	VLC_PACK( 2 , 2 , 35 ) ,
    711 	VLC_PACK( 5 , 0 , 238 ) ,
    712 	VLC_PACK( 7 , 0 , 252 ) ,
    713 	VLC_PACK( 7 , 0 , 125 ) ,
    714 	VLC_PACK( 7 , 0 , 418 ) ,
    715 	VLC_PACK( 0 , 0 , 2 ) ,
    716 	VLC_PACK( 0 , 1 , 3 ) ,
    717 	VLC_PACK( 5 , 0 , 234 ) ,
    718 	VLC_PACK( 5 , 0 , 232 ) ,
    719 	VLC_PACK( 5 , 0 , 210 ) ,
    720 	VLC_PACK( 5 , 0 , 231 ) ,
    721 	VLC_PACK( 0 , 0 , 2 ) ,
    722 	VLC_PACK( 3 , 1 , 0 ) ,
    723 	VLC_PACK( 7 , 0 , 404 ) ,
    724 	VLC_PACK( 7 , 0 , 403 ) ,
    725 	VLC_PACK( 7 , 0 , 189 ) ,
    726 	VLC_PACK( 7 , 0 , 421 ) ,
    727 	VLC_PACK( 7 , 0 , 417 ) ,
    728 	VLC_PACK( 7 , 0 , 416 ) ,
    729 	VLC_PACK( 0 , 0 , 2 ) ,
    730 	VLC_PACK( 2 , 1 , 3 ) ,
    731 	VLC_PACK( 7 , 0 , 251 ) ,
    732 	VLC_PACK( 7 , 0 , 93 ) ,
    733 	VLC_PACK( 3 , 1 , 0 ) ,
    734 	VLC_PACK( 5 , 0 , 229 ) ,
    735 	VLC_PACK( 5 , 0 , 230 ) ,
    736 	VLC_PACK( 7 , 0 , 415 ) ,
    737 	VLC_PACK( 7 , 0 , 414 ) ,
    738 	VLC_PACK( 0 , 0 , 2 ) ,
    739 	VLC_PACK( 2 , 1 , 3 ) ,
    740 	VLC_PACK( 7 , 0 , 61 ) ,
    741 	VLC_PACK( 7 , 0 , 29 ) ,
    742 	VLC_PACK( 3 , 1 , 0 ) ,
    743 	VLC_PACK( 7 , 0 , 219 ) ,
    744 	VLC_PACK( 7 , 0 , 250 ) ,
    745 	VLC_PACK( 2 , 2 , 4 ) ,
    746 	VLC_PACK( 2 , 1 , 7 ) ,
    747 	VLC_PACK( 7 , 0 , 374 ) ,
    748 	VLC_PACK( 7 , 0 , 375 ) ,
    749 	VLC_PACK( 3 , 2 , 0 ) ,
    750 	VLC_PACK( 3 , 2 , 0 ) ,
    751 	VLC_PACK( 7 , 0 , 409 ) ,
    752 	VLC_PACK( 7 , 0 , 371 ) ,
    753 	VLC_PACK( 3 , 1 , 0 ) ,
    754 	VLC_PACK( 7 , 0 , 372 ) ,
    755 	VLC_PACK( 7 , 0 , 373 ) ,
    756 	VLC_PACK( 0 , 1 , 4 ) ,
    757 	VLC_PACK( 0 , 0 , 24 ) ,
    758 	VLC_PACK( 7 , 0 , 94 ) ,
    759 	VLC_PACK( 7 , 0 , 62 ) ,
    760 	VLC_PACK( 0 , 1 , 4 ) ,
    761 	VLC_PACK( 0 , 0 , 18 ) ,
    762 	VLC_PACK( 7 , 0 , 434 ) ,
    763 	VLC_PACK( 7 , 0 , 433 ) ,
    764 	VLC_PACK( 0 , 1 , 4 ) ,
    765 	VLC_PACK( 0 , 0 , 12 ) ,
    766 	VLC_PACK( 7 , 0 , 423 ) ,
    767 	VLC_PACK( 7 , 0 , 422 ) ,
    768 	VLC_PACK( 1 , 1 , 4 ) ,
    769 	VLC_PACK( 0 , 0 , 6 ) ,
    770 	VLC_PACK( 7 , 0 , 413 ) ,
    771 	VLC_PACK( 7 , 0 , 412 ) ,
    772 	VLC_PACK( 3 , 1 , 0 ) ,
    773 	VLC_PACK( 7 , 0 , 408 ) ,
    774 	VLC_PACK( 7 , 0 , 407 ) ,
    775 	VLC_PACK( 7 , 0 , 411 ) ,
    776 	VLC_PACK( 7 , 0 , 410 ) ,
    777 	VLC_PACK( 7 , 0 , 420 ) ,
    778 	VLC_PACK( 7 , 0 , 419 ) ,
    779 	VLC_PACK( 7 , 0 , 428 ) ,
    780 	VLC_PACK( 7 , 0 , 427 ) ,
    781 	VLC_PACK( 7 , 0 , 437 ) ,
    782 	VLC_PACK( 7 , 0 , 436 ) ,
    783 	VLC_PACK( 7 , 0 , 222 ) ,
    784 	VLC_PACK( 7 , 0 , 190 ) ,
    785 /* B23_rvlc_tcoeff_1.out */
    786 	VLC_PACK( 5 , 0 , 255 ) ,
    787 	VLC_PACK( 5 , 0 , 253 ) ,
    788 	VLC_PACK( 0 , 0 , 14 ) ,
    789 	VLC_PACK( 0 , 1 , 15 ) ,
    790 	VLC_PACK( 0 , 0 , 44 ) ,
    791 	VLC_PACK( 0 , 1 , 45 ) ,
    792 	VLC_PACK( 0 , 1 , 74 ) ,
    793 	VLC_PACK( 0 , 2 , 103 ) ,
    794 	VLC_PACK( 0 , 1 , 230 ) ,
    795 	VLC_PACK( 0 , 0 , 256 ) ,
    796 	VLC_PACK( 5 , 0 , 190 ) ,
    797 	VLC_PACK( 7 , 0 , 254 ) ,
    798 	VLC_PACK( 4 , 3 , 508 ) ,
    799 	VLC_PACK( 4 , 3 , 509 ) ,
    800 	VLC_PACK( 4 , 3 , 444 ) ,
    801 	VLC_PACK( 4 , 3 , 445 ) ,
    802 	VLC_PACK( 5 , 0 , 252 ) ,
    803 	VLC_PACK( 5 , 0 , 158 ) ,
    804 	VLC_PACK( 5 , 0 , 221 ) ,
    805 	VLC_PACK( 5 , 0 , 62 ) ,
    806 	VLC_PACK( 0 , 0 , 2 ) ,
    807 	VLC_PACK( 0 , 1 , 3 ) ,
    808 	VLC_PACK( 5 , 0 , 251 ) ,
    809 	VLC_PACK( 5 , 0 , 189 ) ,
    810 	VLC_PACK( 5 , 0 , 250 ) ,
    811 	VLC_PACK( 5 , 0 , 249 ) ,
    812 	VLC_PACK( 0 , 0 , 2 ) ,
    813 	VLC_PACK( 0 , 1 , 3 ) ,
    814 	VLC_PACK( 5 , 0 , 248 ) ,
    815 	VLC_PACK( 5 , 0 , 219 ) ,
    816 	VLC_PACK( 5 , 0 , 247 ) ,
    817 	VLC_PACK( 5 , 0 , 246 ) ,
    818 	VLC_PACK( 0 , 0 , 2 ) ,
    819 	VLC_PACK( 0 , 1 , 3 ) ,
    820 	VLC_PACK( 5 , 0 , 245 ) ,
    821 	VLC_PACK( 5 , 0 , 244 ) ,
    822 	VLC_PACK( 5 , 0 , 243 ) ,
    823 	VLC_PACK( 5 , 0 , 216 ) ,
    824 	VLC_PACK( 0 , 0 , 2 ) ,
    825 	VLC_PACK( 0 , 1 , 3 ) ,
    826 	VLC_PACK( 5 , 0 , 242 ) ,
    827 	VLC_PACK( 5 , 0 , 241 ) ,
    828 	VLC_PACK( 5 , 0 , 238 ) ,
    829 	VLC_PACK( 5 , 0 , 237 ) ,
    830 	VLC_PACK( 0 , 0 , 2 ) ,
    831 	VLC_PACK( 3 , 1 , 0 ) ,
    832 	VLC_PACK( 5 , 0 , 236 ) ,
    833 	VLC_PACK( 5 , 0 , 152 ) ,
    834 	VLC_PACK( 5 , 0 , 126 ) ,
    835 	VLC_PACK( 5 , 0 , 94 ) ,
    836 	VLC_PACK( 5 , 0 , 30 ) ,
    837 	VLC_PACK( 5 , 0 , 439 ) ,
    838 	VLC_PACK( 0 , 0 , 2 ) ,
    839 	VLC_PACK( 0 , 1 , 3 ) ,
    840 	VLC_PACK( 5 , 0 , 438 ) ,
    841 	VLC_PACK( 5 , 0 , 437 ) ,
    842 	VLC_PACK( 5 , 0 , 220 ) ,
    843 	VLC_PACK( 5 , 0 , 157 ) ,
    844 	VLC_PACK( 0 , 0 , 2 ) ,
    845 	VLC_PACK( 0 , 1 , 3 ) ,
    846 	VLC_PACK( 5 , 0 , 188 ) ,
    847 	VLC_PACK( 5 , 0 , 93 ) ,
    848 	VLC_PACK( 5 , 0 , 218 ) ,
    849 	VLC_PACK( 5 , 0 , 156 ) ,
    850 	VLC_PACK( 0 , 0 , 2 ) ,
    851 	VLC_PACK( 0 , 1 , 3 ) ,
    852 	VLC_PACK( 5 , 0 , 217 ) ,
    853 	VLC_PACK( 5 , 0 , 187 ) ,
    854 	VLC_PACK( 5 , 0 , 186 ) ,
    855 	VLC_PACK( 5 , 0 , 155 ) ,
    856 	VLC_PACK( 0 , 0 , 2 ) ,
    857 	VLC_PACK( 0 , 1 , 3 ) ,
    858 	VLC_PACK( 5 , 0 , 240 ) ,
    859 	VLC_PACK( 5 , 0 , 239 ) ,
    860 	VLC_PACK( 5 , 0 , 214 ) ,
    861 	VLC_PACK( 5 , 0 , 213 ) ,
    862 	VLC_PACK( 0 , 0 , 2 ) ,
    863 	VLC_PACK( 3 , 1 , 0 ) ,
    864 	VLC_PACK( 5 , 0 , 122 ) ,
    865 	VLC_PACK( 5 , 0 , 27 ) ,
    866 	VLC_PACK( 7 , 0 , 158 ) ,
    867 	VLC_PACK( 7 , 0 , 126 ) ,
    868 	VLC_PACK( 0 , 0 , 2 ) ,
    869 	VLC_PACK( 0 , 1 , 3 ) ,
    870 	VLC_PACK( 5 , 0 , 436 ) ,
    871 	VLC_PACK( 7 , 0 , 30 ) ,
    872 	VLC_PACK( 5 , 0 , 125 ) ,
    873 	VLC_PACK( 5 , 0 , 435 ) ,
    874 	VLC_PACK( 0 , 0 , 2 ) ,
    875 	VLC_PACK( 0 , 1 , 3 ) ,
    876 	VLC_PACK( 5 , 0 , 432 ) ,
    877 	VLC_PACK( 5 , 0 , 431 ) ,
    878 	VLC_PACK( 5 , 0 , 61 ) ,
    879 	VLC_PACK( 5 , 0 , 29 ) ,
    880 	VLC_PACK( 0 , 0 , 2 ) ,
    881 	VLC_PACK( 0 , 1 , 3 ) ,
    882 	VLC_PACK( 5 , 0 , 124 ) ,
    883 	VLC_PACK( 5 , 0 , 92 ) ,
    884 	VLC_PACK( 5 , 0 , 60 ) ,
    885 	VLC_PACK( 5 , 0 , 28 ) ,
    886 	VLC_PACK( 0 , 0 , 2 ) ,
    887 	VLC_PACK( 0 , 1 , 3 ) ,
    888 	VLC_PACK( 5 , 0 , 215 ) ,
    889 	VLC_PACK( 5 , 0 , 154 ) ,
    890 	VLC_PACK( 5 , 0 , 185 ) ,
    891 	VLC_PACK( 5 , 0 , 184 ) ,
    892 	VLC_PACK( 0 , 0 , 2 ) ,
    893 	VLC_PACK( 3 , 1 , 0 ) ,
    894 	VLC_PACK( 5 , 0 , 366 ) ,
    895 	VLC_PACK( 5 , 0 , 410 ) ,
    896 	VLC_PACK( 7 , 0 , 439 ) ,
    897 	VLC_PACK( 7 , 0 , 438 ) ,
    898 	VLC_PACK( 0 , 0 , 6 ) ,
    899 	VLC_PACK( 0 , 1 , 7 ) ,
    900 	VLC_PACK( 0 , 0 , 27 ) ,
    901 	VLC_PACK( 0 , 1 , 28 ) ,
    902 	VLC_PACK( 0 , 1 , 48 ) ,
    903 	VLC_PACK( 0 , 2 , 68 ) ,
    904 	VLC_PACK( 5 , 0 , 434 ) ,
    905 	VLC_PACK( 5 , 0 , 433 ) ,
    906 	VLC_PACK( 5 , 0 , 430 ) ,
    907 	VLC_PACK( 7 , 0 , 221 ) ,
    908 	VLC_PACK( 0 , 0 , 2 ) ,
    909 	VLC_PACK( 0 , 1 , 3 ) ,
    910 	VLC_PACK( 5 , 0 , 375 ) ,
    911 	VLC_PACK( 5 , 0 , 374 ) ,
    912 	VLC_PACK( 5 , 0 , 373 ) ,
    913 	VLC_PACK( 5 , 0 , 426 ) ,
    914 	VLC_PACK( 0 , 0 , 2 ) ,
    915 	VLC_PACK( 0 , 1 , 3 ) ,
    916 	VLC_PACK( 5 , 0 , 372 ) ,
    917 	VLC_PACK( 5 , 0 , 420 ) ,
    918 	VLC_PACK( 5 , 0 , 123 ) ,
    919 	VLC_PACK( 5 , 0 , 91 ) ,
    920 	VLC_PACK( 0 , 0 , 2 ) ,
    921 	VLC_PACK( 2 , 1 , 3 ) ,
    922 	VLC_PACK( 5 , 0 , 153 ) ,
    923 	VLC_PACK( 5 , 0 , 59 ) ,
    924 	VLC_PACK( 3 , 1 , 0 ) ,
    925 	VLC_PACK( 7 , 0 , 218 ) ,
    926 	VLC_PACK( 5 , 0 , 409 ) ,
    927 	VLC_PACK( 7 , 0 , 253 ) ,
    928 	VLC_PACK( 7 , 0 , 435 ) ,
    929 	VLC_PACK( 7 , 0 , 432 ) ,
    930 	VLC_PACK( 7 , 0 , 431 ) ,
    931 	VLC_PACK( 0 , 0 , 2 ) ,
    932 	VLC_PACK( 0 , 1 , 3 ) ,
    933 	VLC_PACK( 5 , 0 , 429 ) ,
    934 	VLC_PACK( 5 , 0 , 428 ) ,
    935 	VLC_PACK( 5 , 0 , 425 ) ,
    936 	VLC_PACK( 5 , 0 , 424 ) ,
    937 	VLC_PACK( 0 , 0 , 2 ) ,
    938 	VLC_PACK( 0 , 1 , 3 ) ,
    939 	VLC_PACK( 5 , 0 , 419 ) ,
    940 	VLC_PACK( 5 , 0 , 418 ) ,
    941 	VLC_PACK( 5 , 0 , 311 ) ,
    942 	VLC_PACK( 5 , 0 , 371 ) ,
    943 	VLC_PACK( 0 , 0 , 2 ) ,
    944 	VLC_PACK( 2 , 1 , 3 ) ,
    945 	VLC_PACK( 5 , 0 , 310 ) ,
    946 	VLC_PACK( 5 , 0 , 370 ) ,
    947 	VLC_PACK( 3 , 1 , 0 ) ,
    948 	VLC_PACK( 7 , 0 , 370 ) ,
    949 	VLC_PACK( 7 , 0 , 188 ) ,
    950 	VLC_PACK( 7 , 0 , 430 ) ,
    951 	VLC_PACK( 7 , 0 , 429 ) ,
    952 	VLC_PACK( 0 , 0 , 2 ) ,
    953 	VLC_PACK( 0 , 1 , 3 ) ,
    954 	VLC_PACK( 5 , 0 , 427 ) ,
    955 	VLC_PACK( 7 , 0 , 426 ) ,
    956 	VLC_PACK( 5 , 0 , 423 ) ,
    957 	VLC_PACK( 5 , 0 , 422 ) ,
    958 	VLC_PACK( 0 , 0 , 2 ) ,
    959 	VLC_PACK( 0 , 1 , 3 ) ,
    960 	VLC_PACK( 7 , 0 , 220 ) ,
    961 	VLC_PACK( 7 , 0 , 157 ) ,
    962 	VLC_PACK( 5 , 0 , 417 ) ,
    963 	VLC_PACK( 5 , 0 , 416 ) ,
    964 	VLC_PACK( 0 , 0 , 2 ) ,
    965 	VLC_PACK( 2 , 1 , 3 ) ,
    966 	VLC_PACK( 5 , 0 , 369 ) ,
    967 	VLC_PACK( 5 , 0 , 368 ) ,
    968 	VLC_PACK( 3 , 1 , 0 ) ,
    969 	VLC_PACK( 7 , 0 , 405 ) ,
    970 	VLC_PACK( 7 , 0 , 406 ) ,
    971 	VLC_PACK( 7 , 0 , 425 ) ,
    972 	VLC_PACK( 7 , 0 , 424 ) ,
    973 	VLC_PACK( 0 , 0 , 6 ) ,
    974 	VLC_PACK( 0 , 1 , 7 ) ,
    975 	VLC_PACK( 0 , 0 , 18 ) ,
    976 	VLC_PACK( 0 , 1 , 19 ) ,
    977 	VLC_PACK( 0 , 1 , 27 ) ,
    978 	VLC_PACK( 2 , 2 , 35 ) ,
    979 	VLC_PACK( 5 , 0 , 421 ) ,
    980 	VLC_PACK( 7 , 0 , 252 ) ,
    981 	VLC_PACK( 7 , 0 , 125 ) ,
    982 	VLC_PACK( 7 , 0 , 418 ) ,
    983 	VLC_PACK( 0 , 0 , 2 ) ,
    984 	VLC_PACK( 0 , 1 , 3 ) ,
    985 	VLC_PACK( 5 , 0 , 415 ) ,
    986 	VLC_PACK( 5 , 0 , 414 ) ,
    987 	VLC_PACK( 5 , 0 , 367 ) ,
    988 	VLC_PACK( 5 , 0 , 413 ) ,
    989 	VLC_PACK( 0 , 0 , 2 ) ,
    990 	VLC_PACK( 3 , 1 , 0 ) ,
    991 	VLC_PACK( 7 , 0 , 404 ) ,
    992 	VLC_PACK( 7 , 0 , 403 ) ,
    993 	VLC_PACK( 7 , 0 , 189 ) ,
    994 	VLC_PACK( 7 , 0 , 421 ) ,
    995 	VLC_PACK( 7 , 0 , 417 ) ,
    996 	VLC_PACK( 7 , 0 , 416 ) ,
    997 	VLC_PACK( 0 , 0 , 2 ) ,
    998 	VLC_PACK( 2 , 1 , 3 ) ,
    999 	VLC_PACK( 7 , 0 , 251 ) ,
   1000 	VLC_PACK( 7 , 0 , 93 ) ,
   1001 	VLC_PACK( 3 , 1 , 0 ) ,
   1002 	VLC_PACK( 5 , 0 , 411 ) ,
   1003 	VLC_PACK( 5 , 0 , 412 ) ,
   1004 	VLC_PACK( 7 , 0 , 415 ) ,
   1005 	VLC_PACK( 7 , 0 , 414 ) ,
   1006 	VLC_PACK( 0 , 0 , 2 ) ,
   1007 	VLC_PACK( 2 , 1 , 3 ) ,
   1008 	VLC_PACK( 7 , 0 , 61 ) ,
   1009 	VLC_PACK( 7 , 0 , 29 ) ,
   1010 	VLC_PACK( 3 , 1 , 0 ) ,
   1011 	VLC_PACK( 7 , 0 , 219 ) ,
   1012 	VLC_PACK( 7 , 0 , 250 ) ,
   1013 	VLC_PACK( 2 , 2 , 4 ) ,
   1014 	VLC_PACK( 2 , 1 , 7 ) ,
   1015 	VLC_PACK( 7 , 0 , 374 ) ,
   1016 	VLC_PACK( 7 , 0 , 375 ) ,
   1017 	VLC_PACK( 3 , 2 , 0 ) ,
   1018 	VLC_PACK( 3 , 2 , 0 ) ,
   1019 	VLC_PACK( 7 , 0 , 409 ) ,
   1020 	VLC_PACK( 7 , 0 , 371 ) ,
   1021 	VLC_PACK( 3 , 1 , 0 ) ,
   1022 	VLC_PACK( 7 , 0 , 372 ) ,
   1023 	VLC_PACK( 7 , 0 , 373 ) ,
   1024 	VLC_PACK( 0 , 1 , 4 ) ,
   1025 	VLC_PACK( 0 , 0 , 24 ) ,
   1026 	VLC_PACK( 7 , 0 , 94 ) ,
   1027 	VLC_PACK( 7 , 0 , 62 ) ,
   1028 	VLC_PACK( 0 , 1 , 4 ) ,
   1029 	VLC_PACK( 0 , 0 , 18 ) ,
   1030 	VLC_PACK( 7 , 0 , 434 ) ,
   1031 	VLC_PACK( 7 , 0 , 433 ) ,
   1032 	VLC_PACK( 0 , 1 , 4 ) ,
   1033 	VLC_PACK( 0 , 0 , 12 ) ,
   1034 	VLC_PACK( 7 , 0 , 423 ) ,
   1035 	VLC_PACK( 7 , 0 , 422 ) ,
   1036 	VLC_PACK( 1 , 1 , 4 ) ,
   1037 	VLC_PACK( 0 , 0 , 6 ) ,
   1038 	VLC_PACK( 7 , 0 , 413 ) ,
   1039 	VLC_PACK( 7 , 0 , 412 ) ,
   1040 	VLC_PACK( 3 , 1 , 0 ) ,
   1041 	VLC_PACK( 7 , 0 , 408 ) ,
   1042 	VLC_PACK( 7 , 0 , 407 ) ,
   1043 	VLC_PACK( 7 , 0 , 411 ) ,
   1044 	VLC_PACK( 7 , 0 , 410 ) ,
   1045 	VLC_PACK( 7 , 0 , 420 ) ,
   1046 	VLC_PACK( 7 , 0 , 419 ) ,
   1047 	VLC_PACK( 7 , 0 , 428 ) ,
   1048 	VLC_PACK( 7 , 0 , 427 ) ,
   1049 	VLC_PACK( 7 , 0 , 437 ) ,
   1050 	VLC_PACK( 7 , 0 , 436 ) ,
   1051 	VLC_PACK( 7 , 0 , 222 ) ,
   1052 	VLC_PACK( 7 , 0 , 190 ) ,
   1053 /* B29_MVDs.out */
   1054 	VLC_PACK( 4 , 0 , 0 ) ,
   1055 	VLC_PACK( 5 , 0 , 1 ) ,
   1056 	VLC_PACK( 5 , 0 , 2 ) ,
   1057 	VLC_PACK( 5 , 0 , 3 ) ,
   1058 	VLC_PACK( 5 , 0 , 4 ) ,
   1059 	VLC_PACK( 5 , 0 , 5 ) ,
   1060 	VLC_PACK( 1 , 5 , 1 ) ,
   1061 	VLC_PACK( 5 , 0 , 6 ) ,
   1062 	VLC_PACK( 5 , 0 , 7 ) ,
   1063 	VLC_PACK( 5 , 0 , 8 ) ,
   1064 	VLC_PACK( 5 , 0 , 9 ) ,
   1065 	VLC_PACK( 5 , 0 , 10 ) ,
   1066 	VLC_PACK( 5 , 0 , 11 ) ,
   1067 	VLC_PACK( 1 , 3 , 1 ) ,
   1068 	VLC_PACK( 5 , 0 , 12 ) ,
   1069 	VLC_PACK( 5 , 0 , 13 ) ,
   1070 	VLC_PACK( 5 , 0 , 14 ) ,
   1071 	VLC_PACK( 5 , 0 , 15 ) ,
   1072 	VLC_PACK( 5 , 1 , 16 ) ,
   1073 /* B30_MVDs.out */
   1074 	VLC_PACK( 5 , 0 , 1 ) ,
   1075 	VLC_PACK( 5 , 0 , 2 ) ,
   1076 	VLC_PACK( 5 , 0 , 3 ) ,
   1077 	VLC_PACK( 5 , 0 , 4 ) ,
   1078 	VLC_PACK( 5 , 0 , 5 ) ,
   1079 	VLC_PACK( 5 , 0 , 6 ) ,
   1080 	VLC_PACK( 1 , 5 , 1 ) ,
   1081 	VLC_PACK( 5 , 0 , 7 ) ,
   1082 	VLC_PACK( 5 , 0 , 8 ) ,
   1083 	VLC_PACK( 5 , 0 , 9 ) ,
   1084 	VLC_PACK( 5 , 0 , 10 ) ,
   1085 	VLC_PACK( 5 , 0 , 11 ) ,
   1086 	VLC_PACK( 5 , 0 , 12 ) ,
   1087 	VLC_PACK( 1 , 2 , 1 ) ,
   1088 	VLC_PACK( 5 , 0 , 13 ) ,
   1089 	VLC_PACK( 5 , 0 , 14 ) ,
   1090 	VLC_PACK( 5 , 0 , 15 ) ,
   1091 	VLC_PACK( 5 , 1 , 16 ) ,
   1092 /* B31_conv_ratio.out */
   1093 	VLC_PACK( 4 , 0 , 1 ) ,
   1094 	VLC_PACK( 4 , 1 , 2 ) ,
   1095 	VLC_PACK( 4 , 1 , 4 ) ,
   1096 };
   1097 
   1098 
   1099 struct context_MPEG4_s {
   1100     struct context_DEC_s dec_ctx;
   1101     object_context_p obj_context; /* back reference */
   1102 
   1103     uint32_t profile;
   1104 
   1105     /* Picture parameters */
   1106     VAPictureParameterBufferMPEG4 *pic_params;
   1107     object_surface_p forward_ref_surface;
   1108     object_surface_p backward_ref_surface;
   1109 
   1110     uint32_t display_picture_width;    /* in pixels */
   1111     uint32_t display_picture_height;    /* in pixels */
   1112 
   1113     uint32_t coded_picture_width;    /* in pixels */
   1114     uint32_t coded_picture_height;    /* in pixels */
   1115 
   1116     uint32_t picture_width_mb;        /* in macroblocks */
   1117     uint32_t picture_height_mb;        /* in macroblocks */
   1118     uint32_t size_mb;                /* in macroblocks */
   1119 
   1120     uint32_t FEControl;
   1121     uint32_t FE_SPS0;
   1122     uint32_t FE_VOP_PPS0;
   1123     uint32_t FE_VOP_SPS0;
   1124     uint32_t FE_PICSH_PPS0;
   1125 
   1126     uint32_t BE_SPS0;
   1127     uint32_t BE_SPS1;
   1128     uint32_t BE_VOP_PPS0;
   1129     uint32_t BE_VOP_SPS0;
   1130     uint32_t BE_VOP_SPS1;
   1131     uint32_t BE_PICSH_PPS0;
   1132 
   1133     /* IQ Matrix */
   1134     uint32_t qmatrix_data[MAX_QUANT_TABLES][16];
   1135     int load_non_intra_quant_mat;
   1136     int load_intra_quant_mat;
   1137 
   1138     /* VLC packed data */
   1139     struct psb_buffer_s vlc_packed_table;
   1140 
   1141     /* FE state buffer */
   1142     struct psb_buffer_s preload_buffer;
   1143 
   1144     struct psb_buffer_s *data_partition_buffer0;
   1145     struct psb_buffer_s *data_partition_buffer1;
   1146 
   1147     uint32_t field_type;
   1148 };
   1149 
   1150 typedef struct context_MPEG4_s *context_MPEG4_p;
   1151 
   1152 #define INIT_CONTEXT_MPEG4    context_MPEG4_p ctx = (context_MPEG4_p) obj_context->format_data;
   1153 
   1154 #define SURFACE(id)    ((object_surface_p) object_heap_lookup( &ctx->obj_context->driver_data->surface_heap, id ))
   1155 
   1156 static const char *psb__debug_picture_coding_str(unsigned char vop_coding_type)
   1157 {
   1158     switch (vop_coding_type) {
   1159     case PICTURE_CODING_I:
   1160         return ("PICTURE_CODING_I");
   1161     case PICTURE_CODING_P:
   1162         return ("PICTURE_CODING_P");
   1163     case PICTURE_CODING_B:
   1164         return ("PICTURE_CODING_B");
   1165     case PICTURE_CODING_S:
   1166         return ("PICTURE_CODING_S");
   1167     }
   1168     return ("UNKNOWN!!!");
   1169 }
   1170 
   1171 
   1172 static void pnw_MPEG4_QueryConfigAttributes(
   1173     VAProfile profile,
   1174     VAEntrypoint entrypoint,
   1175     VAConfigAttrib *attrib_list,
   1176     int num_attribs)
   1177 {
   1178     int i;
   1179     drv_debug_msg(VIDEO_DEBUG_GENERAL, "pnw_MPEG4_QueryConfigAttributes\n");
   1180 
   1181     for (i = 0; i < num_attribs; i++) {
   1182         switch (attrib_list[i].type) {
   1183         case VAConfigAttribMaxPictureWidth:
   1184             if (entrypoint == VAEntrypointVLD) {
   1185                 if (profile == VAProfileMPEG4AdvancedSimple)
   1186                     attrib_list[i].value = HW_SUPPORTED_MAX_PICTURE_WIDTH_MPEG4;
   1187                 else if(profile == VAProfileH263Baseline)
   1188                     attrib_list[i].value = HW_SUPPORTED_MAX_PICTURE_WIDTH_H263;
   1189                 else
   1190                     attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED;
   1191             }
   1192             else
   1193                 attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED;
   1194             break;
   1195         case VAConfigAttribMaxPictureHeight:
   1196             if (entrypoint == VAEntrypointVLD) {
   1197                 if (profile == VAProfileMPEG4AdvancedSimple)
   1198                     attrib_list[i].value = HW_SUPPORTED_MAX_PICTURE_HEIGHT_MPEG4;
   1199                 else if(profile == VAProfileH263Baseline)
   1200                     attrib_list[i].value = HW_SUPPORTED_MAX_PICTURE_HEIGHT_H263;
   1201             }
   1202             else
   1203                 attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED;
   1204             break;
   1205         default:
   1206             break;
   1207         }
   1208     }
   1209 }
   1210 
   1211 static VAStatus pnw_MPEG4_ValidateConfig(
   1212     object_config_p obj_config)
   1213 {
   1214     int i;
   1215     /* Check all attributes */
   1216     for (i = 0; i < obj_config->attrib_count; i++) {
   1217         switch (obj_config->attrib_list[i].type) {
   1218         case VAConfigAttribRTFormat:
   1219             /* Ignore */
   1220             break;
   1221 
   1222         default:
   1223             return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED;
   1224         }
   1225     }
   1226 
   1227     return VA_STATUS_SUCCESS;
   1228 }
   1229 
   1230 static VAStatus psb__MPEG4_check_legal_picture(object_context_p obj_context, object_config_p obj_config)
   1231 {
   1232     VAStatus vaStatus = VA_STATUS_SUCCESS;
   1233 
   1234     CHECK_CONTEXT(obj_context);
   1235 
   1236     CHECK_CONFIG(obj_config);
   1237 
   1238     /* MSVDX decode capability for MPEG4:
   1239      *     SP@L3
   1240      *     ASP@L5
   1241      *
   1242      * Refer to the "MSVDX MPEG4 decode capability" table of "Poulsbo Media Software Overview".
   1243      */
   1244     switch (obj_config->profile) {
   1245     case VAProfileMPEG4Simple:
   1246     case VAProfileMPEG4AdvancedSimple:
   1247         if ((obj_context->picture_width <= 0) || (obj_context->picture_height <= 0)) {
   1248             vaStatus = VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED;
   1249         }
   1250         break;
   1251 
   1252     default:
   1253         vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
   1254         break;
   1255     }
   1256 
   1257     return vaStatus;
   1258 }
   1259 
   1260 static void pnw_MPEG4_DestroyContext(object_context_p obj_context);
   1261 static void psb__MPEG4_process_slice_data(context_DEC_p dec_ctx, VASliceParameterBufferBase *vld_slice_param);
   1262 static void psb__MPEG4_end_slice(context_DEC_p dec_ctx);
   1263 static void psb__MPEG4_begin_slice(context_DEC_p dec_ctx, VASliceParameterBufferBase *vld_slice_param);
   1264 static VAStatus pnw_MPEG4_process_buffer(context_DEC_p dec_ctx, object_buffer_p buffer);
   1265 
   1266 static VAStatus pnw_MPEG4_CreateContext(
   1267     object_context_p obj_context,
   1268     object_config_p obj_config)
   1269 {
   1270     VAStatus vaStatus = VA_STATUS_SUCCESS;
   1271     context_MPEG4_p ctx;
   1272     /* Validate flag */
   1273     /* Validate picture dimensions */
   1274     vaStatus = psb__MPEG4_check_legal_picture(obj_context, obj_config);
   1275     CHECK_VASTATUS();
   1276 
   1277     ctx = (context_MPEG4_p) calloc(1, sizeof(struct context_MPEG4_s));
   1278     CHECK_ALLOCATION(ctx);
   1279 
   1280     obj_context->format_data = (void*) ctx;
   1281     ctx->obj_context = obj_context;
   1282     ctx->pic_params = NULL;
   1283     ctx->load_non_intra_quant_mat = FALSE;
   1284     ctx->load_intra_quant_mat = FALSE;
   1285 
   1286     ctx->dec_ctx.begin_slice = psb__MPEG4_begin_slice;
   1287     ctx->dec_ctx.process_slice = psb__MPEG4_process_slice_data;
   1288     ctx->dec_ctx.end_slice = psb__MPEG4_end_slice;
   1289     ctx->dec_ctx.process_buffer = pnw_MPEG4_process_buffer;
   1290 
   1291     ctx->data_partition_buffer0 = NULL;
   1292     ctx->data_partition_buffer1 = NULL;
   1293 
   1294     switch (obj_config->profile) {
   1295     case VAProfileMPEG4Simple:
   1296         drv_debug_msg(VIDEO_DEBUG_GENERAL, "MPEG4_PROFILE_SIMPLE\n");
   1297         ctx->profile = MPEG4_PROFILE_SIMPLE;
   1298         break;
   1299 
   1300     case VAProfileMPEG4AdvancedSimple:
   1301         drv_debug_msg(VIDEO_DEBUG_GENERAL, "MPEG4_PROFILE_ASP\n");
   1302         ctx->profile = MPEG4_PROFILE_ASP;
   1303         break;
   1304 
   1305     default:
   1306         ASSERT(0 == 1);
   1307         vaStatus = VA_STATUS_ERROR_UNKNOWN;
   1308     }
   1309 
   1310     // TODO
   1311 
   1312     if (vaStatus == VA_STATUS_SUCCESS) {
   1313         vaStatus = psb_buffer_create(obj_context->driver_data,
   1314                                      FE_STATE_BUFFER_SIZE,
   1315                                      psb_bt_vpu_only,
   1316                                      &ctx->preload_buffer);
   1317         DEBUG_FAILURE;
   1318     }
   1319     ctx->dec_ctx.preload_buffer = &ctx->preload_buffer;
   1320 
   1321     if (vaStatus == VA_STATUS_SUCCESS) {
   1322         vaStatus = psb_buffer_create(obj_context->driver_data,
   1323                                      sizeof(gaui16mpeg4VlcTableDataPacked),
   1324                                      psb_bt_cpu_vpu,
   1325                                      &ctx->vlc_packed_table);
   1326         DEBUG_FAILURE;
   1327     }
   1328     if (vaStatus == VA_STATUS_SUCCESS) {
   1329         unsigned char *vlc_packed_data_address;
   1330         if (0 ==  psb_buffer_map(&ctx->vlc_packed_table, &vlc_packed_data_address)) {
   1331             memcpy(vlc_packed_data_address, gaui16mpeg4VlcTableDataPacked, sizeof(gaui16mpeg4VlcTableDataPacked));
   1332             psb_buffer_unmap(&ctx->vlc_packed_table);
   1333         } else {
   1334             vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
   1335             DEBUG_FAILURE;
   1336         }
   1337     }
   1338 
   1339     if (vaStatus == VA_STATUS_SUCCESS) {
   1340         vaStatus = vld_dec_CreateContext(&ctx->dec_ctx, obj_context);
   1341         DEBUG_FAILURE;
   1342     }
   1343 
   1344     ctx->field_type = 2;
   1345 
   1346     if (vaStatus != VA_STATUS_SUCCESS) {
   1347         pnw_MPEG4_DestroyContext(obj_context);
   1348     }
   1349 
   1350     return vaStatus;
   1351 }
   1352 
   1353 static void pnw_MPEG4_DestroyContext(
   1354     object_context_p obj_context)
   1355 {
   1356     INIT_CONTEXT_MPEG4
   1357     int i;
   1358 
   1359     vld_dec_DestroyContext(&ctx->dec_ctx);
   1360 
   1361     psb_buffer_destroy(&ctx->vlc_packed_table);
   1362     psb_buffer_destroy(&ctx->preload_buffer);
   1363 
   1364     if(ctx->data_partition_buffer0)
   1365         psb_buffer_destroy(ctx->data_partition_buffer0);
   1366 
   1367     if(ctx->data_partition_buffer1)
   1368         psb_buffer_destroy(ctx->data_partition_buffer1);
   1369 
   1370     ctx->data_partition_buffer0 = NULL;
   1371     ctx->data_partition_buffer1 = NULL;
   1372 
   1373     if (ctx->pic_params) {
   1374         free(ctx->pic_params);
   1375         ctx->pic_params = NULL;
   1376     }
   1377 
   1378     free(obj_context->format_data);
   1379     obj_context->format_data = NULL;
   1380 }
   1381 
   1382 static VAStatus psb__MPEG4_process_picture_param(context_MPEG4_p ctx, object_buffer_p obj_buffer)
   1383 {
   1384     VAStatus vaStatus;
   1385     object_surface_p obj_surface = ctx->obj_context->current_render_target;
   1386 
   1387     ASSERT(obj_buffer->type == VAPictureParameterBufferType);
   1388     ASSERT(obj_buffer->num_elements == 1);
   1389     ASSERT(obj_buffer->size == sizeof(VAPictureParameterBufferMPEG4));
   1390 
   1391     if ((obj_buffer->num_elements != 1) ||
   1392         (obj_buffer->size != sizeof(VAPictureParameterBufferMPEG4))) {
   1393         return VA_STATUS_ERROR_UNKNOWN;
   1394     }
   1395 
   1396     /* Transfer ownership of VAPictureParameterBufferMPEG4 data */
   1397     if (ctx->pic_params) {
   1398         free(ctx->pic_params);
   1399     }
   1400     ctx->pic_params = (VAPictureParameterBufferMPEG4 *) obj_buffer->buffer_data;
   1401     obj_buffer->buffer_data = NULL;
   1402     obj_buffer->size = 0;
   1403 
   1404 
   1405     /* Lookup surfaces for backward/forward references */
   1406     /* Lookup surfaces for backward/forward references */
   1407     switch (ctx->pic_params->vop_fields.bits.vop_coding_type) {
   1408     case PICTURE_CODING_I:
   1409         ctx->forward_ref_surface = NULL;
   1410         ctx->backward_ref_surface = NULL;
   1411         drv_debug_msg(VIDEO_DEBUG_GENERAL, "PICTURE_CODING_I\nTarget surface = %08x (%08x)\n", ctx->obj_context->current_render_target->psb_surface, ctx->obj_context->current_render_target->base.id);
   1412         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Forward ref  = NULL\n");
   1413         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Backward ref = NULL\n");
   1414         break;
   1415 
   1416     case PICTURE_CODING_P:
   1417         ctx->forward_ref_surface = SURFACE(ctx->pic_params->forward_reference_picture);
   1418         ctx->backward_ref_surface = NULL;
   1419 
   1420         if (ctx->pic_params->forward_reference_picture == VA_INVALID_SURFACE)
   1421             ctx->forward_ref_surface = NULL;
   1422         if (NULL == ctx->forward_ref_surface && ctx->pic_params->forward_reference_picture != VA_INVALID_SURFACE) {
   1423             return VA_STATUS_ERROR_INVALID_SURFACE;
   1424         }
   1425         drv_debug_msg(VIDEO_DEBUG_GENERAL, "PICTURE_CODING_P\nTarget surface = %08x (%08x)\n", ctx->obj_context->current_render_target->psb_surface, ctx->obj_context->current_render_target->base.id);
   1426         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Forward ref  = %08x (%08x)\n", (ctx->forward_ref_surface ? ctx->forward_ref_surface->psb_surface : 0), ctx->pic_params->forward_reference_picture);
   1427         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Backward ref = NULL\n");
   1428         break;
   1429 
   1430     case PICTURE_CODING_B:
   1431         ctx->forward_ref_surface = SURFACE(ctx->pic_params->forward_reference_picture);
   1432         ctx->backward_ref_surface = SURFACE(ctx->pic_params->backward_reference_picture);
   1433         if ((NULL == ctx->forward_ref_surface) ||
   1434             (NULL == ctx->backward_ref_surface)) {
   1435             return VA_STATUS_ERROR_INVALID_SURFACE;
   1436         }
   1437         drv_debug_msg(VIDEO_DEBUG_GENERAL, "PICTURE_CODING_B\nTarget surface = %08x (%08x)\n", ctx->obj_context->current_render_target->psb_surface, ctx->obj_context->current_render_target->base.id);
   1438         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Forward ref  = %08x (%08x)\n", ctx->forward_ref_surface->psb_surface, ctx->pic_params->forward_reference_picture);
   1439         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Backward ref = %08x (%08x)\n", ctx->backward_ref_surface->psb_surface, ctx->pic_params->backward_reference_picture);
   1440         break;
   1441 
   1442     case PICTURE_CODING_S:
   1443         ctx->forward_ref_surface = SURFACE(ctx->pic_params->forward_reference_picture);
   1444         ctx->backward_ref_surface = SURFACE(ctx->pic_params->backward_reference_picture);
   1445         drv_debug_msg(VIDEO_DEBUG_GENERAL, "PICTURE_CODING_S\nTarget surface = %08x (%08x)\n", ctx->obj_context->current_render_target->psb_surface, ctx->obj_context->current_render_target->base.id);
   1446         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Forward ref  = %08x (%08x)\n", ctx->forward_ref_surface ? ctx->forward_ref_surface->psb_surface : 0, ctx->pic_params->forward_reference_picture);
   1447         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Backward ref = %08x (%08x)\n", ctx->backward_ref_surface ? ctx->backward_ref_surface->psb_surface : 0, ctx->pic_params->backward_reference_picture);
   1448         break;
   1449 
   1450     default:
   1451         drv_debug_msg(VIDEO_DEBUG_ERROR, "Unhandled MPEG4 vop_coding_type '%d'\n", ctx->pic_params->vop_fields.bits.vop_coding_type);
   1452         return VA_STATUS_ERROR_UNKNOWN;
   1453     }
   1454 
   1455     if (NULL == ctx->forward_ref_surface) {
   1456         /* for mmu fault protection */
   1457         ctx->forward_ref_surface = ctx->obj_context->current_render_target;
   1458     }
   1459     if (NULL == ctx->backward_ref_surface) {
   1460         /* for mmu fault protection */
   1461         ctx->backward_ref_surface = ctx->obj_context->current_render_target;
   1462     }
   1463 
   1464     ctx->display_picture_width = ctx->pic_params->vop_width;
   1465     ctx->display_picture_height = ctx->pic_params->vop_height;
   1466     ctx->picture_width_mb = PIXELS_TO_MB(ctx->display_picture_width);
   1467     ctx->picture_height_mb = PIXELS_TO_MB(ctx->display_picture_height);
   1468     ctx->coded_picture_width = ctx->picture_width_mb * 16;
   1469     ctx->coded_picture_height = ctx->picture_height_mb * 16;
   1470     ctx->size_mb = ctx->picture_width_mb * ctx->picture_height_mb;
   1471 
   1472     if (obj_surface->share_info) {
   1473         obj_surface->share_info->coded_width = ctx->coded_picture_width;
   1474         obj_surface->share_info->coded_height = ctx->coded_picture_height;
   1475     }
   1476 
   1477     uint32_t mbInPic = ctx->picture_width_mb * ctx->picture_height_mb;
   1478 
   1479     mbInPic += 4;
   1480 
   1481     uint32_t colocated_size = ((mbInPic * 200) + 0xfff) & ~0xfff;
   1482 
   1483     vaStatus = vld_dec_allocate_colocated_buffer(&ctx->dec_ctx, ctx->obj_context->current_render_target, colocated_size);
   1484     CHECK_VASTATUS();
   1485 
   1486     vaStatus = vld_dec_allocate_colocated_buffer(&ctx->dec_ctx, ctx->forward_ref_surface, colocated_size);
   1487     CHECK_VASTATUS();
   1488 
   1489     ctx->FEControl = 0;
   1490     REGIO_WRITE_FIELD_LITE(ctx->FEControl ,
   1491                            MSVDX_VEC,
   1492                            CR_VEC_ENTDEC_FE_CONTROL,
   1493                            ENTDEC_FE_PROFILE,
   1494                            ctx->profile);    /* MPEG4 SP / ASP profile    */
   1495 
   1496     REGIO_WRITE_FIELD_LITE(ctx->FEControl ,
   1497                            MSVDX_VEC,
   1498                            CR_VEC_ENTDEC_FE_CONTROL,
   1499                            ENTDEC_FE_MODE,
   1500                            4);                                /* Set MPEG4 mode            */
   1501 
   1502     /* FE_SPS0                                                                        */
   1503     ctx->FE_SPS0 = 0;
   1504     REGIO_WRITE_FIELD_LITE(ctx->FE_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_SPS0, FE_VOP_WIDTH_IN_MBS_LESS_1,    ctx->picture_width_mb - 1);
   1505     REGIO_WRITE_FIELD_LITE(ctx->FE_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_SPS0, FE_SHORT_HEADER_FLAG,               ctx->pic_params->vol_fields.bits.short_video_header);
   1506     REGIO_WRITE_FIELD_LITE(ctx->FE_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_SPS0, FE_PROFILE,                    ctx->profile);
   1507 
   1508     /* FE_VOP_SPS0                                                                    */
   1509     ctx->FE_VOP_SPS0 = 0;
   1510     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_SPS0, FE_VOP_HEIGHT_IN_MBS_LESS_1, ctx->picture_height_mb - 1);
   1511     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_SPS0, QUANT_PRECISION,        ctx->pic_params->quant_precision);
   1512     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_SPS0, FE_NO_OF_GMC_WARPING_POINTS, ((ctx->pic_params->no_of_sprite_warping_points) ? 1 : 0));
   1513     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_SPS0, FE_GMC_ENABLE, (ctx->pic_params->vol_fields.bits.sprite_enable == GMC));
   1514     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_SPS0, REVERSIBLE_VLC,        ctx->pic_params->vol_fields.bits.reversible_vlc);
   1515     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_SPS0, FE_DATA_PARTITIONED,    ctx->pic_params->vol_fields.bits.data_partitioned);
   1516     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_SPS0, FE_INTERLACED,            ctx->pic_params->vol_fields.bits.interlaced);
   1517 
   1518     if (ctx->pic_params->vol_fields.bits.short_video_header) {
   1519         /* FE_PICSH_PPS0                                                            */
   1520         ctx->FE_PICSH_PPS0 = 0;
   1521         REGIO_WRITE_FIELD_LITE(ctx->FE_PICSH_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_PICSH_PPS0, NUM_MBS_IN_GOB,        ctx->pic_params->num_macroblocks_in_gob);
   1522         REGIO_WRITE_FIELD_LITE(ctx->FE_PICSH_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_PICSH_PPS0, NUM_GOBS_IN_VOP,        ctx->pic_params->num_gobs_in_vop);
   1523         REGIO_WRITE_FIELD_LITE(ctx->FE_PICSH_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_PICSH_PPS0, FE_PICSH_CODING_TYPE,    ctx->pic_params->vop_fields.bits.vop_coding_type);
   1524     }
   1525 
   1526     /* FE_VOP_PPS0 */
   1527     ctx->FE_VOP_PPS0 = 0;
   1528     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_PPS0, BACKWARD_REF_VOP_CODING_TYPE,    ctx->pic_params->vop_fields.bits.backward_reference_vop_coding_type);
   1529     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_PPS0, FE_FCODE_BACKWARD,                ctx->pic_params->vop_fcode_backward);
   1530     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_PPS0, FE_FCODE_FORWARD,                ctx->pic_params->vop_fcode_forward);
   1531     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_PPS0, INTRA_DC_VLC_THR,                ctx->pic_params->vop_fields.bits.intra_dc_vlc_thr);
   1532     REGIO_WRITE_FIELD_LITE(ctx->FE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_PPS0, FE_VOP_CODING_TYPE,              ctx->pic_params->vop_fields.bits.vop_coding_type);
   1533 
   1534     /* BE_SPS0                                                                        */
   1535     /* Common for VOPs and pictures with short header                                */
   1536     ctx->BE_SPS0 = 0;
   1537     REGIO_WRITE_FIELD_LITE(ctx->BE_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_SPS0, BE_SHORT_HEADER_FLAG,    ctx->pic_params->vol_fields.bits.short_video_header);
   1538     REGIO_WRITE_FIELD_LITE(ctx->BE_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_SPS0, BE_PROFILE,            ctx->profile);
   1539 
   1540     /* BE_SPS1                                                                        */
   1541     /* Common for VOPs and pictures with short header                                */
   1542     ctx->BE_SPS1 = 0;
   1543     REGIO_WRITE_FIELD_LITE(ctx->BE_SPS1, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_SPS1, BE_VOP_WIDTH_IN_MBS_LESS_1, ctx->picture_width_mb - 1);
   1544     REGIO_WRITE_FIELD_LITE(ctx->BE_SPS1, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_SPS1, VOP_HEIGHT_IN_MBS_LESS_1,   ctx->picture_height_mb - 1);
   1545 
   1546     if (0 == ctx->pic_params->vol_fields.bits.short_video_header) {
   1547         /* BE_VOP_SPS0                                                                */
   1548         ctx->BE_VOP_SPS0 = 0;
   1549         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_SPS0, QUANT_TYPE,     ctx->pic_params->vol_fields.bits.quant_type);
   1550         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_SPS0, OBMC_DISABLE,   ctx->pic_params->vol_fields.bits.obmc_disable);
   1551         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_SPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_SPS0, QUARTER_SAMPLE, ctx->pic_params->vol_fields.bits.quarter_sample);
   1552 
   1553         /* BE_VOP_SPS1                                                                */
   1554         ctx->BE_VOP_SPS1 = 0;
   1555         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_SPS1, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_SPS1, GMC_WARPING_ACCURACY,        ctx->pic_params->vol_fields.bits.sprite_warping_accuracy);
   1556         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_SPS1, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_SPS1, BE_NO_OF_GMC_WARPING_POINTS, ((ctx->pic_params->no_of_sprite_warping_points) ? 1 : 0));
   1557         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_SPS1, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_SPS1, BE_GMC_ENABLE, (ctx->pic_params->vol_fields.bits.sprite_enable == GMC));
   1558         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_SPS1, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_SPS1, BE_DATA_PARTITIONED,         ctx->pic_params->vol_fields.bits.data_partitioned);
   1559         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_SPS1, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_SPS1, BE_INTERLACED,               ctx->pic_params->vol_fields.bits.interlaced);
   1560 
   1561         /* BE_VOP_PPS0                                                                */
   1562         ctx->BE_VOP_PPS0 = 0;
   1563         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, BE_FCODE_BACKWARD,                ctx->pic_params->vop_fcode_backward);
   1564         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, BE_FCODE_FORWARD,                ctx->pic_params->vop_fcode_forward);
   1565         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, ALTERNATE_VERTICAL_SCAN_FLAG,    ctx->pic_params->vop_fields.bits.alternate_vertical_scan_flag);
   1566         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, TOP_FIELD_FIRST,                ctx->pic_params->vop_fields.bits.top_field_first);
   1567         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0,
   1568                                MSVDX_VEC_MPEG4,
   1569                                CR_VEC_MPEG4_BE_VOP_PPS0,
   1570                                ROUNDING_TYPE,
   1571                                ((PICTURE_CODING_I == ctx->pic_params->vop_fields.bits.vop_coding_type ||
   1572                                  PICTURE_CODING_B == ctx->pic_params->vop_fields.bits.vop_coding_type) ?
   1573                                 0 : ctx->pic_params->vop_fields.bits.vop_rounding_type));
   1574         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, BE_VOP_CODING_TYPE,                ctx->pic_params->vop_fields.bits.vop_coding_type);
   1575     } else {
   1576         /* BE_VOP_PPS0                                                                */
   1577         ctx->BE_VOP_PPS0 = 0;
   1578         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, BE_FCODE_FORWARD,                1);  // Always 1 in short header mode 6.3.5.2
   1579         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, ALTERNATE_VERTICAL_SCAN_FLAG,    ctx->pic_params->vop_fields.bits.alternate_vertical_scan_flag);
   1580         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, TOP_FIELD_FIRST,                ctx->pic_params->vop_fields.bits.top_field_first);
   1581         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, ROUNDING_TYPE,                     0);  // Always 0 in short header mode 6.3.5.2
   1582         REGIO_WRITE_FIELD_LITE(ctx->BE_VOP_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_PPS0, BE_VOP_CODING_TYPE,            ctx->pic_params->vop_fields.bits.vop_coding_type);
   1583 
   1584         /* BE_PICSH_PPS0                                                            */
   1585         ctx->BE_PICSH_PPS0 = 0;
   1586         REGIO_WRITE_FIELD_LITE(ctx->BE_PICSH_PPS0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_PICSH_PPS0, BE_PICSH_CODING_TYPE,         ctx->pic_params->vop_fields.bits.vop_coding_type);
   1587     }
   1588 
   1589     if(ctx->pic_params->vol_fields.bits.data_partitioned) {
   1590         if(!ctx->data_partition_buffer0) {
   1591             int size = 16 * ctx->size_mb;
   1592             ctx->data_partition_buffer0 = (psb_buffer_p) calloc(1, sizeof(struct psb_buffer_s));
   1593             CHECK_ALLOCATION(ctx->data_partition_buffer0);
   1594             size = (size + 0xfff) & (~0xfff);
   1595             vaStatus = psb_buffer_create(ctx->obj_context->driver_data, size, psb_bt_vpu_only, ctx->data_partition_buffer0);
   1596             CHECK_VASTATUS();
   1597         }
   1598         if(!ctx->data_partition_buffer1) {
   1599             int size = 16 * ctx->size_mb;
   1600             ctx->data_partition_buffer1 = (psb_buffer_p) calloc(1, sizeof(struct psb_buffer_s));
   1601             CHECK_ALLOCATION(ctx->data_partition_buffer1);
   1602             size = (size + 0xfff) & (~0xfff);
   1603             vaStatus = psb_buffer_create(ctx->obj_context->driver_data, size, psb_bt_vpu_only, ctx->data_partition_buffer1);
   1604             CHECK_VASTATUS();
   1605         }
   1606     }
   1607 
   1608     return VA_STATUS_SUCCESS;
   1609 }
   1610 
   1611 static void psb__MPEG4_convert_iq_matrix(uint32_t *dest32, unsigned char *src)
   1612 {
   1613     int i;
   1614     int *idx = scan0;
   1615     uint8_t *dest8 = (uint8_t*) dest32;
   1616 
   1617     for (i = 0; i < 64; i++) {
   1618         *dest8++ = src[*idx++];
   1619     }
   1620 }
   1621 
   1622 static VAStatus psb__MPEG4_process_iq_matrix(context_MPEG4_p ctx, object_buffer_p obj_buffer)
   1623 {
   1624     VAIQMatrixBufferMPEG4 *iq_matrix = (VAIQMatrixBufferMPEG4 *) obj_buffer->buffer_data;
   1625     ASSERT(obj_buffer->type == VAIQMatrixBufferType);
   1626     ASSERT(obj_buffer->num_elements == 1);
   1627     ASSERT(obj_buffer->size == sizeof(VAIQMatrixBufferMPEG4));
   1628 
   1629     if ((obj_buffer->num_elements != 1) ||
   1630         (obj_buffer->size != sizeof(VAIQMatrixBufferMPEG4))) {
   1631         return VA_STATUS_ERROR_UNKNOWN;
   1632     }
   1633 
   1634     if (iq_matrix->load_non_intra_quant_mat) {
   1635         psb__MPEG4_convert_iq_matrix(ctx->qmatrix_data[NONINTRA_LUMA_Q], iq_matrix->non_intra_quant_mat);
   1636     }
   1637     if (iq_matrix->load_intra_quant_mat) {
   1638         psb__MPEG4_convert_iq_matrix(ctx->qmatrix_data[INTRA_LUMA_Q], iq_matrix->intra_quant_mat);
   1639     }
   1640     ctx->load_non_intra_quant_mat = iq_matrix->load_non_intra_quant_mat;
   1641     ctx->load_intra_quant_mat = iq_matrix->load_intra_quant_mat;
   1642 
   1643     return VA_STATUS_SUCCESS;
   1644 }
   1645 
   1646 static void psb__MPEG4_write_qmatrices(context_MPEG4_p ctx)
   1647 {
   1648     psb_cmdbuf_p cmdbuf = ctx->obj_context->cmdbuf;
   1649     int i;
   1650 
   1651     // TODO: Verify that this is indeed the same as MPEG2
   1652 
   1653     /* Since we only decode 4:2:0 We only need to the Intra tables.
   1654     Chroma quant tables are only used in Mpeg 4:2:2 and 4:4:4.
   1655     The hardware wants non-intra followed by intra */
   1656     /* psb_cmdbuf_rendec_start_block( cmdbuf ); */
   1657     psb_cmdbuf_rendec_start(cmdbuf, REG_MSVDX_VEC_IQRAM_OFFSET);
   1658 
   1659     /* todo : optimisation here is to only load the need table */
   1660     if (ctx->load_non_intra_quant_mat) {
   1661         /*  NONINTRA_LUMA_Q --> REG_MSVDX_VEC_IQRAM_OFFSET + 0 */
   1662         for (i = 0; i < 16; i++) {
   1663             psb_cmdbuf_rendec_write(cmdbuf, ctx->qmatrix_data[NONINTRA_LUMA_Q][i]);
   1664         }
   1665     } else {
   1666         for (i = 0; i < 16; i++) {
   1667             psb_cmdbuf_rendec_write(cmdbuf, 0);
   1668         }
   1669     }
   1670     if (ctx->load_intra_quant_mat) {
   1671         /*  INTRA_LUMA_Q --> REG_MSVDX_VEC_IQRAM_OFFSET + (16*4) */
   1672         for (i = 0; i < 16; i++) {
   1673             psb_cmdbuf_rendec_write(cmdbuf, ctx->qmatrix_data[INTRA_LUMA_Q][i]);
   1674         }
   1675     } else {
   1676         for (i = 0; i < 16; i++) {
   1677             psb_cmdbuf_rendec_write(cmdbuf, 0);
   1678         }
   1679     }
   1680 
   1681     psb_cmdbuf_rendec_end(cmdbuf);
   1682     /* psb_cmdbuf_rendec_end_block( cmdbuf ); */
   1683 }
   1684 
   1685 /* Precalculated values */
   1686 #define ADDR0        (0x00005800)
   1687 #define ADDR1        (0x0001f828)
   1688 #define ADDR2        (0x0002b854)
   1689 #define ADDR3        (0x0002f85c)
   1690 #define ADDR4        (0x0004d089)
   1691 #define ADDR5        (0x0008f0aa)
   1692 #define ADDR6        (0x00149988)
   1693 #define ADDR7        (0x001d8b9e)
   1694 #define ADDR8        (0x000003c3)
   1695 #define WIDTH0        (0x09a596ed)
   1696 #define WIDTH1        (0x0006d6db)
   1697 #define OPCODE0        (0x50009a0a)
   1698 #define OPCODE1        (0x00000001)
   1699 
   1700 static void psb__MPEG4_write_VLC_tables(context_MPEG4_p ctx)
   1701 {
   1702     psb_cmdbuf_p cmdbuf = ctx->obj_context->cmdbuf;
   1703 
   1704     psb_cmdbuf_skip_start_block(cmdbuf, SKIP_ON_CONTEXT_SWITCH);
   1705     /* VLC Table */
   1706     /* Write a LLDMA Cmd to transfer VLD Table data */
   1707     psb_cmdbuf_dma_write_cmdbuf(cmdbuf, &ctx->vlc_packed_table, 0,
   1708                                   sizeof(gaui16mpeg4VlcTableDataPacked), 0,
   1709                                   DMA_TYPE_VLC_TABLE);
   1710 
   1711     /* Write the vec registers with the index data for each of the tables and then write    */
   1712     /* the actual table data.                                                                */
   1713     psb_cmdbuf_reg_start_block(cmdbuf, 0);
   1714     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR0),            ADDR0);
   1715     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR1),            ADDR1);
   1716     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR2),            ADDR2);
   1717     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR3),            ADDR3);
   1718     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR4),            ADDR4);
   1719     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR5),            ADDR5);
   1720     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR6),            ADDR6);
   1721     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR7),            ADDR7);
   1722     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_ADDR8),            ADDR8);
   1723     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_INITIAL_WIDTH0),    WIDTH0);
   1724     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_INITIAL_WIDTH1),    WIDTH1);
   1725     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_INITIAL_OPCODE0),    OPCODE0);
   1726     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_VLC_TABLE_INITIAL_OPCODE1),    OPCODE1);
   1727     psb_cmdbuf_reg_end_block(cmdbuf);
   1728 
   1729     psb_cmdbuf_skip_end_block(cmdbuf);
   1730 }
   1731 
   1732 static void psb__MPEG4_set_picture_params(context_MPEG4_p ctx, VASliceParameterBufferMPEG4 __maybe_unused * slice_param)
   1733 {
   1734     uint32_t cmd;
   1735     psb_cmdbuf_p cmdbuf = ctx->obj_context->cmdbuf;
   1736     psb_surface_p target_surface = ctx->obj_context->current_render_target->psb_surface;
   1737 
   1738     psb_buffer_p colocated_target_buffer = vld_dec_lookup_colocated_buffer(&ctx->dec_ctx, target_surface);
   1739     psb_buffer_p colocated_ref_buffer = vld_dec_lookup_colocated_buffer(&ctx->dec_ctx, ctx->forward_ref_surface->psb_surface); /* FIXME DE2.0 use backward ref surface */
   1740     ASSERT(colocated_target_buffer);
   1741     ASSERT(colocated_ref_buffer);
   1742 
   1743     /* psb_cmdbuf_rendec_start_block( cmdbuf ); */
   1744 
   1745     /* BE_PARAM_BASE_ADDR                                                            */
   1746     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC, MPEG4_CR_VEC_MPEG4_BE_PARAM_BASE_ADDR));
   1747     if (colocated_target_buffer) {
   1748         psb_cmdbuf_rendec_write_address(cmdbuf, colocated_target_buffer, 0);
   1749     } else {
   1750         /* This is an error */
   1751         psb_cmdbuf_rendec_write(cmdbuf, 0);
   1752     }
   1753     psb_cmdbuf_rendec_end(cmdbuf);
   1754 
   1755     /* PARAM_BASE_ADDRESS                                                            */
   1756     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC, MPEG4_CR_VEC_MPEG4_BE_COLPARAM_BASE_ADDR));
   1757     if (colocated_ref_buffer) {
   1758         psb_cmdbuf_rendec_write_address(cmdbuf, colocated_ref_buffer, 0);
   1759     } else {
   1760         /* This is an error */
   1761         psb_cmdbuf_rendec_write(cmdbuf, 0);
   1762     }
   1763     psb_cmdbuf_rendec_end(cmdbuf);
   1764 
   1765     vld_dec_setup_alternative_frame(ctx->obj_context);
   1766 
   1767     /* Send VDMC and VDEB commands                                                    */
   1768     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_CMDS, DISPLAY_PICTURE_SIZE));
   1769 
   1770     /* Display picture size cmd                                                        */
   1771     cmd = 0;
   1772     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, DISPLAY_PICTURE_SIZE, DISPLAY_PICTURE_HEIGHT, ctx->coded_picture_height - 1);
   1773     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, DISPLAY_PICTURE_SIZE, DISPLAY_PICTURE_WIDTH,  ctx->coded_picture_width - 1);
   1774     psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1775 
   1776     /* Coded picture size cmd                                                        */
   1777     cmd = 0;
   1778     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, CODED_PICTURE_SIZE, CODED_PICTURE_HEIGHT, ctx->coded_picture_height - 1);
   1779     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, CODED_PICTURE_SIZE, CODED_PICTURE_WIDTH,  ctx->coded_picture_width - 1);
   1780     psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1781 
   1782     /* Operating mode cmd                                                            */
   1783     cmd = 0;
   1784     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, OPERATING_MODE, CHROMA_INTERLEAVED, 0);                                 /* 0 = CbCr, 1 = CrCb        */
   1785     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, OPERATING_MODE, ROW_STRIDE,         ctx->obj_context->current_render_target->psb_surface->stride_mode);
   1786     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, OPERATING_MODE, CODEC_PROFILE,      ctx->profile); /* MPEG4 SP / ASP profile    */
   1787     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, OPERATING_MODE, CODEC_MODE,         4);                                 /* MPEG4                    */
   1788     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, OPERATING_MODE, ASYNC_MODE,         1);                                 /* VDMC only                */
   1789     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, OPERATING_MODE, CHROMA_FORMAT,      1);
   1790     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, OPERATING_MODE, INTERLACED,         ctx->pic_params->vol_fields.bits.interlaced);
   1791     psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1792     ctx->obj_context->operating_mode = cmd;
   1793 
   1794     drv_debug_msg(VIDEO_DEBUG_GENERAL, "    vop_coding_type = %s\n", psb__debug_picture_coding_str(ctx->pic_params->vop_fields.bits.vop_coding_type));
   1795     drv_debug_msg(VIDEO_DEBUG_GENERAL, "    backward ref vop_coding_type = %s\n", psb__debug_picture_coding_str(ctx->pic_params->vop_fields.bits.backward_reference_vop_coding_type));
   1796 
   1797     /* LUMA_RECONSTRUCTED_PICTURE_BASE_ADDRESSES                                    */
   1798     psb_cmdbuf_rendec_write_address(cmdbuf, &target_surface->buf, target_surface->buf.buffer_ofs);
   1799     /* CHROMA_RECONSTRUCTED_PICTURE_BASE_ADDRESSES                                    */
   1800     psb_cmdbuf_rendec_write_address(cmdbuf, &target_surface->buf, target_surface->buf.buffer_ofs + target_surface->chroma_offset);
   1801 
   1802     psb_cmdbuf_rendec_end(cmdbuf);
   1803 
   1804     /* Reference pictures base addresses                                            */
   1805     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_CMDS, REFERENCE_PICTURE_BASE_ADDRESSES));
   1806 
   1807 //drv_debug_msg(VIDEO_DEBUG_GENERAL, "Target surface = %08x\n", target_surface);
   1808 //drv_debug_msg(VIDEO_DEBUG_GENERAL, "Forward ref = %08x\n", ctx->forward_ref_surface->psb_surface);
   1809 //drv_debug_msg(VIDEO_DEBUG_GENERAL, "Backward ref = %08x\n", ctx->backward_ref_surface->psb_surface);
   1810 
   1811     /* forward reference picture */
   1812     /* LUMA_RECONSTRUCTED_PICTURE_BASE_ADDRESSES                                    */
   1813     psb_cmdbuf_rendec_write_address(cmdbuf, &ctx->forward_ref_surface->psb_surface->buf, ctx->forward_ref_surface->psb_surface->buf.buffer_ofs);
   1814     /* CHROMA_RECONSTRUCTED_PICTURE_BASE_ADDRESSES                                    */
   1815     psb_cmdbuf_rendec_write_address(cmdbuf, &ctx->forward_ref_surface->psb_surface->buf, ctx->forward_ref_surface->psb_surface->buf.buffer_ofs + ctx->forward_ref_surface->psb_surface->chroma_offset);
   1816 
   1817     /* backward reference picture */
   1818     /* LUMA_RECONSTRUCTED_PICTURE_BASE_ADDRESSES                                    */
   1819     psb_cmdbuf_rendec_write_address(cmdbuf, &ctx->backward_ref_surface->psb_surface->buf, ctx->backward_ref_surface->psb_surface->buf.buffer_ofs);
   1820     /* CHROMA_RECONSTRUCTED_PICTURE_BASE_ADDRESSES                                    */
   1821     psb_cmdbuf_rendec_write_address(cmdbuf, &ctx->backward_ref_surface->psb_surface->buf, ctx->backward_ref_surface->psb_surface->buf.buffer_ofs + ctx->backward_ref_surface->psb_surface->chroma_offset);
   1822 
   1823     psb_cmdbuf_rendec_end(cmdbuf);
   1824     /* psb_cmdbuf_rendec_end_block( cmdbuf ); */
   1825 }
   1826 
   1827 static void psb__MPEG4_set_backend_registers(context_MPEG4_p ctx, VASliceParameterBufferMPEG4 *slice_param)
   1828 {
   1829     psb_cmdbuf_p cmdbuf = ctx->obj_context->cmdbuf;
   1830     uint32_t cmd;
   1831     unsigned short width_mb = PIXELS_TO_MB(ctx->pic_params->vop_width);
   1832 
   1833     /* psb_cmdbuf_rendec_start_block( cmdbuf ); */
   1834 
   1835     /* Write Back-End EntDec registers                                                */
   1836     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC, MPEG4_CR_VEC_MPEG4_BE_SPS0));
   1837     /* BE_SPS0                                                                        */
   1838     /* Common for VOPs and pictures with short header                                */
   1839     psb_cmdbuf_rendec_write(cmdbuf, ctx->BE_SPS0);
   1840     /* BE_SPS1                                                                        */
   1841     /* Common for VOPs and pictures with short header                                */
   1842     psb_cmdbuf_rendec_write(cmdbuf, ctx->BE_SPS1);
   1843     psb_cmdbuf_rendec_end(cmdbuf);
   1844 
   1845     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC, MPEG4_CR_VEC_MPEG4_BE_VOP_SPS0));
   1846     if (0 == ctx->pic_params->vol_fields.bits.short_video_header) {
   1847         /* BE_VOP_SPS0                                                                */
   1848         psb_cmdbuf_rendec_write(cmdbuf, ctx->BE_VOP_SPS0);
   1849         /* BE_VOP_SPS1                                                                */
   1850         psb_cmdbuf_rendec_write(cmdbuf, ctx->BE_VOP_SPS1);
   1851         /* BE_VOP_PPS0                                                                */
   1852         psb_cmdbuf_rendec_write(cmdbuf, ctx->BE_VOP_PPS0);
   1853     } else { /* Short-header mode */
   1854         /* BE_VOP_SPS0 */
   1855         psb_cmdbuf_rendec_write(cmdbuf, 0);
   1856         /* BE_VOP_SPS1 */
   1857         psb_cmdbuf_rendec_write(cmdbuf, 0);
   1858         /* BE_VOP_PPS0                                                                */
   1859         psb_cmdbuf_rendec_write(cmdbuf, ctx->BE_VOP_PPS0);
   1860         /* BE_PICSH_PPS0                                                            */
   1861         psb_cmdbuf_rendec_write(cmdbuf, ctx->BE_PICSH_PPS0);
   1862     }
   1863     psb_cmdbuf_rendec_end(cmdbuf);
   1864 
   1865     if (0 == ctx->pic_params->vol_fields.bits.short_video_header) {
   1866         if ((GMC == ctx->pic_params->vol_fields.bits.sprite_enable) &&
   1867             (PICTURE_CODING_S == ctx->pic_params->vop_fields.bits.vop_coding_type)) {
   1868             psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC, MPEG4_CR_VEC_MPEG4_BE_GMC_X));
   1869 
   1870             /* TODO: GMC Motion Vectors */
   1871             /* It is still needed to specify the precision of the motion vectors (should they be in        */
   1872             /* half-sample, quarter-sample...?) and how much processing    is done on the firmware on        */
   1873             /* the values of the warping points.                                                        */
   1874 
   1875             // TODO: Which index to use?
   1876             int sprite_index = 0;
   1877             while (sprite_index < 3) {
   1878                 if (ctx->pic_params->sprite_trajectory_du[sprite_index] || ctx->pic_params->sprite_trajectory_dv[sprite_index])
   1879                     break;
   1880                 sprite_index++;
   1881             }
   1882             if (sprite_index >= 3)
   1883                 sprite_index = 0;
   1884 
   1885             /* BE_GMC_X                                                                */
   1886             cmd = 0;
   1887             REGIO_WRITE_FIELD_LITE(cmd, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_GMC_X, GMC_X, ctx->pic_params->sprite_trajectory_du[sprite_index] & 0x3FFF);
   1888             psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1889 
   1890             /* BE_GMC_Y                                                                */
   1891             cmd = 0;
   1892             REGIO_WRITE_FIELD_LITE(cmd, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_GMC_Y, GMC_Y, ctx->pic_params->sprite_trajectory_dv[sprite_index] & 0x3FFF);
   1893             psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1894 
   1895             psb_cmdbuf_rendec_end(cmdbuf);
   1896         }
   1897     }
   1898 
   1899     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC, MPEG4_CR_VEC_MPEG4_BE_SLICE0));
   1900 
   1901     /* BE_SLICE0                                                                    */
   1902     cmd = 0;
   1903     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_SLICE0, BE_FIRST_MB_IN_SLICE_Y, slice_param->macroblock_number / width_mb);
   1904     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_SLICE0, BE_FIRST_MB_IN_SLICE_X, slice_param->macroblock_number % width_mb);
   1905     psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1906 
   1907     /* CR_VEC_MPEG4_BE_VOP_TR                                                        */
   1908     cmd = 0;
   1909     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_TRB, BE_TRB, ctx->pic_params->TRB);
   1910     psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1911 
   1912     cmd = 0;
   1913     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_VOP_TRD, BE_TRD, ctx->pic_params->TRD);
   1914     psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1915 
   1916     psb_cmdbuf_rendec_end(cmdbuf);
   1917 
   1918 
   1919     /* Send Slice Data for every slice */
   1920     /* MUST be the last slice sent */
   1921     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_CMDS, SLICE_PARAMS));
   1922 
   1923     /* Slice params command                                                            */
   1924     cmd = 0;
   1925     REGIO_WRITE_FIELD_LITE(cmd,
   1926                            MSVDX_CMDS,
   1927                            SLICE_PARAMS,
   1928                            RND_CTL_BIT,
   1929                            ((PICTURE_CODING_I == ctx->pic_params->vop_fields.bits.vop_coding_type ||
   1930                              PICTURE_CODING_B == ctx->pic_params->vop_fields.bits.vop_coding_type) ?
   1931                             0 : ctx->pic_params->vop_fields.bits.vop_rounding_type));
   1932     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, SLICE_PARAMS, MODE_CONFIG,            ctx->pic_params->vol_fields.bits.sprite_warping_accuracy);
   1933     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, SLICE_PARAMS, SUBPEL_FILTER_MODE,    ctx->pic_params->vol_fields.bits.quarter_sample);
   1934     /* SP and ASP profiles don't support field coding in different VOPs */
   1935     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, SLICE_PARAMS, SLICE_FIELD_TYPE,   2);
   1936     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_CMDS, SLICE_PARAMS, SLICE_CODE_TYPE,    ctx->pic_params->vop_fields.bits.vop_coding_type);
   1937     psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1938 
   1939     psb_cmdbuf_rendec_end(cmdbuf);
   1940 
   1941     *ctx->dec_ctx.p_slice_params = cmd;
   1942 
   1943     /* CHUNK: Entdec back-end profile and level                                        */
   1944     psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC, CR_VEC_ENTDEC_BE_CONTROL));
   1945 
   1946     cmd = 0;
   1947     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_VEC, CR_VEC_ENTDEC_BE_CONTROL, ENTDEC_BE_PROFILE, ctx->profile);     /* MPEG4 SP / ASP profile*/
   1948     REGIO_WRITE_FIELD_LITE(cmd, MSVDX_VEC, CR_VEC_ENTDEC_BE_CONTROL, ENTDEC_BE_MODE,    4);             /* 4 - MPEG4             */
   1949     psb_cmdbuf_rendec_write(cmdbuf, cmd);
   1950 
   1951     psb_cmdbuf_rendec_end(cmdbuf);
   1952     /* psb_cmdbuf_rendec_end_block( cmdbuf ); */
   1953     if (ctx->pic_params->vol_fields.bits.data_partitioned)
   1954     {
   1955         /*set buffer pointer to store the parsed data-partition data */
   1956         psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_DATAPARTITION0_BASE_ADDR));
   1957         psb_cmdbuf_rendec_write_address(cmdbuf, ctx->data_partition_buffer0, ctx->data_partition_buffer0->buffer_ofs);
   1958         psb_cmdbuf_rendec_end(cmdbuf);
   1959 
   1960         psb_cmdbuf_rendec_start(cmdbuf, RENDEC_REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_BE_DATAPARTITION1_BASE_ADDR));
   1961         psb_cmdbuf_rendec_write_address(cmdbuf, ctx->data_partition_buffer1, ctx->data_partition_buffer1->buffer_ofs);
   1962         psb_cmdbuf_rendec_end(cmdbuf);
   1963    }
   1964 
   1965     /* Send IQ matrices to Rendec */
   1966     psb__MPEG4_write_qmatrices(ctx);
   1967 }
   1968 
   1969 static void psb__MPEG4_set_frontend_registers(context_MPEG4_p ctx, VASliceParameterBufferMPEG4 *slice_param)
   1970 {
   1971     psb_cmdbuf_p cmdbuf = ctx->obj_context->cmdbuf;
   1972     uint32_t FE_slice0;
   1973     unsigned short width_mb = PIXELS_TO_MB(ctx->pic_params->vop_width);
   1974 
   1975     psb_cmdbuf_reg_start_block(cmdbuf, 0);
   1976 
   1977     /* FE_SLICE0                                                                    */
   1978     FE_slice0 = 0;
   1979     REGIO_WRITE_FIELD_LITE(FE_slice0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_SLICE0, FE_VOP_QUANT,            slice_param->quant_scale);
   1980     REGIO_WRITE_FIELD_LITE(FE_slice0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_SLICE0, FE_FIRST_MB_IN_SLICE_Y, slice_param->macroblock_number / width_mb);
   1981     REGIO_WRITE_FIELD_LITE(FE_slice0, MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_SLICE0, FE_FIRST_MB_IN_SLICE_X, slice_param->macroblock_number % width_mb);
   1982 
   1983     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_SLICE0) , FE_slice0);
   1984 
   1985     /* Entdec Front-End controls*/
   1986     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC, CR_VEC_ENTDEC_FE_CONTROL) , ctx->FEControl);
   1987 
   1988     /* FE_SPS0                                                                        */
   1989     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_SPS0) , ctx->FE_SPS0);
   1990 
   1991     /* FE_VOP_SPS0                                                                    */
   1992     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_SPS0) , ctx->FE_VOP_SPS0);
   1993 
   1994 
   1995     if (ctx->pic_params->vol_fields.bits.short_video_header) {
   1996         /* FE_PICSH_PPS0                                                            */
   1997         psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_PICSH_PPS0) , ctx->FE_PICSH_PPS0);
   1998     }
   1999 
   2000     /* FE_VOP_PPS0 */
   2001     psb_cmdbuf_reg_set(cmdbuf, REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_VOP_PPS0) , ctx->FE_VOP_PPS0);
   2002 
   2003     psb_cmdbuf_reg_end_block(cmdbuf);
   2004 
   2005     if (ctx->pic_params->vol_fields.bits.data_partitioned)
   2006     {
   2007         /*set buffer pointer to store the parsed data-partition data */
   2008         psb_cmdbuf_reg_start_block(cmdbuf, 0);
   2009         psb_cmdbuf_reg_set_address(cmdbuf, REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_DATAPARTITION0_BASE_ADDR),
   2010                                    ctx->data_partition_buffer0, ctx->data_partition_buffer0->buffer_ofs);
   2011         psb_cmdbuf_reg_end_block(cmdbuf);
   2012 
   2013         psb_cmdbuf_reg_start_block(cmdbuf, 0);
   2014         psb_cmdbuf_reg_set_address(cmdbuf, REGISTER_OFFSET(MSVDX_VEC_MPEG4, CR_VEC_MPEG4_FE_DATAPARTITION1_BASE_ADDR),
   2015                                    ctx->data_partition_buffer1, ctx->data_partition_buffer1->buffer_ofs);
   2016         psb_cmdbuf_reg_end_block(cmdbuf);
   2017    }
   2018 }
   2019 
   2020 static void psb__MPEG4_begin_slice(context_DEC_p dec_ctx, VASliceParameterBufferBase *vld_slice_param)
   2021 {
   2022     VASliceParameterBufferMPEG4 *slice_param = (VASliceParameterBufferMPEG4 *) vld_slice_param;
   2023 
   2024     dec_ctx->bits_offset = slice_param->macroblock_offset;
   2025     /* dec_ctx->SR_flags = 0; */
   2026 }
   2027 
   2028 static void psb__MPEG4_process_slice_data(context_DEC_p dec_ctx, VASliceParameterBufferBase *vld_slice_param)
   2029 {
   2030     VASliceParameterBufferMPEG4 *slice_param = (VASliceParameterBufferMPEG4 *) vld_slice_param;
   2031     context_MPEG4_p ctx = (context_MPEG4_p)dec_ctx;
   2032 
   2033     psb__MPEG4_write_VLC_tables(ctx);
   2034     psb__MPEG4_set_picture_params(ctx, slice_param);
   2035     psb__MPEG4_set_frontend_registers(ctx, slice_param);
   2036     psb__MPEG4_set_backend_registers(ctx, slice_param);
   2037 }
   2038 
   2039 static void psb__MPEG4_end_slice(context_DEC_p dec_ctx)
   2040 {
   2041     context_MPEG4_p ctx = (context_MPEG4_p)dec_ctx;
   2042 
   2043 #ifdef PSBVIDEO_MSVDX_EC
   2044     if (ctx->obj_context->driver_data->ec_enabled)
   2045         ctx->obj_context->flags |= (FW_ERROR_DETECTION_AND_RECOVERY); /* FW_ERROR_DETECTION_AND_RECOVERY */
   2046 #endif
   2047 
   2048     ctx->obj_context->first_mb = 0;
   2049     ctx->obj_context->last_mb = ((ctx->picture_height_mb - 1) << 8) | (ctx->picture_width_mb - 1);
   2050     *(ctx->dec_ctx.slice_first_pic_last) = (ctx->obj_context->first_mb << 16) | (ctx->obj_context->last_mb);
   2051 }
   2052 
   2053 #ifdef PSBVIDEO_MSVDX_EC
   2054 static void psb__MPEG4_choose_ec_frames(context_MPEG4_p ctx)
   2055 {
   2056     if (ctx->pic_params == NULL)
   2057         return;
   2058     int is_inter = (ctx->pic_params->vop_fields.bits.vop_coding_type == PICTURE_CODING_P ||
   2059 		    ctx->pic_params->vop_fields.bits.vop_coding_type == PICTURE_CODING_B);
   2060 
   2061     ctx->obj_context->ec_target = NULL;
   2062 
   2063     /* choose forward ref frame as possible */
   2064     if (is_inter && ctx->forward_ref_surface)
   2065         ctx->obj_context->ec_target = ctx->forward_ref_surface;
   2066 
   2067     /* Otherwise we conceal from the previous I or P frame*/
   2068     if (!ctx->obj_context->ec_target)
   2069     {
   2070         ctx->obj_context->ec_target = ctx->obj_context->ec_candidate;
   2071     }
   2072 
   2073     if (ctx->pic_params->vop_fields.bits.vop_coding_type != PICTURE_CODING_B)
   2074     {
   2075         ctx->obj_context->ec_candidate = ctx->obj_context->current_render_target; /* in case the next frame is an I frame we will need this */
   2076     }
   2077     if (!ctx->obj_context->ec_target) {
   2078         ctx->obj_context->ec_target = ctx->obj_context->current_render_target;
   2079     }
   2080 }
   2081 #endif
   2082 
   2083 static VAStatus pnw_MPEG4_BeginPicture(
   2084     object_context_p obj_context)
   2085 {
   2086     INIT_CONTEXT_MPEG4
   2087 
   2088     if (ctx->pic_params) {
   2089         free(ctx->pic_params);
   2090         ctx->pic_params = NULL;
   2091     }
   2092     ctx->load_non_intra_quant_mat = FALSE;
   2093     ctx->load_intra_quant_mat = FALSE;
   2094 
   2095     return VA_STATUS_SUCCESS;
   2096 }
   2097 
   2098 static VAStatus pnw_MPEG4_process_buffer(
   2099     context_DEC_p dec_ctx,
   2100     object_buffer_p buffer)
   2101 {
   2102     VAStatus vaStatus = VA_STATUS_SUCCESS;
   2103     context_MPEG4_p ctx = (context_MPEG4_p)dec_ctx;
   2104     object_buffer_p obj_buffer = buffer;
   2105 
   2106     switch (obj_buffer->type) {
   2107     case VAPictureParameterBufferType:
   2108         drv_debug_msg(VIDEO_DEBUG_GENERAL, "pnw_MPEG4_RenderPicture got VAPictureParameterBuffer\n");
   2109         vaStatus = psb__MPEG4_process_picture_param(ctx, obj_buffer);
   2110         DEBUG_FAILURE;
   2111         break;
   2112 
   2113     case VAIQMatrixBufferType:
   2114         drv_debug_msg(VIDEO_DEBUG_GENERAL, "pnw_MPEG4_RenderPicture got VAIQMatrixBufferType\n");
   2115         vaStatus = psb__MPEG4_process_iq_matrix(ctx, obj_buffer);
   2116         DEBUG_FAILURE;
   2117         break;
   2118 
   2119     default:
   2120         vaStatus = VA_STATUS_ERROR_UNKNOWN;
   2121         DEBUG_FAILURE;
   2122     }
   2123 
   2124     return vaStatus;
   2125 }
   2126 
   2127 static VAStatus pnw_MPEG4_EndPicture(
   2128     object_context_p obj_context)
   2129 {
   2130     INIT_CONTEXT_MPEG4
   2131     psb_surface_p target_surface = ctx->obj_context->current_render_target->psb_surface;
   2132     psb_driver_data_p driver_data = obj_context->driver_data;
   2133     VAStatus vaStatus = VA_STATUS_SUCCESS;
   2134 
   2135 #ifdef PSBVIDEO_MSVDX_EC
   2136     /* Sent the HOST_BE_OPP command to detect slice error */
   2137     if (ctx->pic_params && ctx->pic_params->vol_fields.bits.interlaced)
   2138         driver_data->ec_enabled = 0;
   2139 
   2140     if (driver_data->ec_enabled) {
   2141         uint32_t rotation_flags = 0;
   2142         uint32_t ext_stride_a = 0;
   2143         object_surface_p ec_target;
   2144 
   2145         psb__MPEG4_choose_ec_frames(ctx);
   2146         ec_target = ctx->obj_context->ec_target;
   2147         REGIO_WRITE_FIELD_LITE(ext_stride_a, MSVDX_CMDS, EXTENDED_ROW_STRIDE, EXT_ROW_STRIDE, target_surface->stride / 64);
   2148 
   2149     /* FIXME ec ignor rotate condition */
   2150         if(ec_target) {
   2151 	    if (psb_context_get_next_cmdbuf(ctx->obj_context)) {
   2152                 vaStatus = VA_STATUS_ERROR_UNKNOWN;
   2153                 DEBUG_FAILURE;
   2154                 return vaStatus;
   2155             }
   2156 
   2157             if (psb_context_submit_host_be_opp(ctx->obj_context,
   2158                                           &target_surface->buf,
   2159                                           &ec_target->psb_surface->buf,
   2160                                           NULL,
   2161                                           ctx->picture_width_mb,
   2162                                           ctx->picture_height_mb,
   2163                                           rotation_flags,
   2164                                           ctx->field_type,
   2165                                           ext_stride_a,
   2166                                           target_surface->chroma_offset + target_surface->buf.buffer_ofs,
   2167                                           ec_target->psb_surface->chroma_offset + ec_target->psb_surface->buf.buffer_ofs)) {
   2168                   return VA_STATUS_ERROR_UNKNOWN;
   2169             }
   2170         }
   2171     }
   2172 #endif
   2173 
   2174     if (psb_context_flush_cmdbuf(ctx->obj_context)) {
   2175         return VA_STATUS_ERROR_UNKNOWN;
   2176     }
   2177 
   2178     if (ctx->pic_params) {
   2179         free(ctx->pic_params);
   2180         ctx->pic_params = NULL;
   2181     }
   2182 
   2183     return VA_STATUS_SUCCESS;
   2184 }
   2185 
   2186 struct format_vtable_s pnw_MPEG4_vtable = {
   2187 queryConfigAttributes:
   2188     pnw_MPEG4_QueryConfigAttributes,
   2189 validateConfig:
   2190     pnw_MPEG4_ValidateConfig,
   2191 createContext:
   2192     pnw_MPEG4_CreateContext,
   2193 destroyContext:
   2194     pnw_MPEG4_DestroyContext,
   2195 beginPicture:
   2196     pnw_MPEG4_BeginPicture,
   2197 renderPicture:
   2198     vld_dec_RenderPicture,
   2199 endPicture:
   2200     pnw_MPEG4_EndPicture
   2201 };
   2202