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  *    Fei Jiang <fei.jiang (at) intel.com>
     27  *
     28  */
     29 
     30 #include <va/va_backend.h>
     31 #include <va/va_backend_tpi.h>
     32 #include <va/va_backend_egl.h>
     33 #include <va/va_drmcommon.h>
     34 #include <stdlib.h>
     35 
     36 #include "psb_drv_video.h"
     37 #include "psb_drv_debug.h"
     38 #include "psb_buffer.h"
     39 #include "psb_cmdbuf.h"
     40 #include "psb_surface.h"
     41 #include "hwdefs/mem_io.h"
     42 #include "hwdefs/msvdx_offsets.h"
     43 #include "hwdefs/dma_api.h"
     44 #include "hwdefs/reg_io2.h"
     45 #include "hwdefs/msvdx_vec_reg_io2.h"
     46 #include "hwdefs/msvdx_vdmc_reg_io2.h"
     47 #include "hwdefs/msvdx_mtx_reg_io2.h"
     48 #include "hwdefs/msvdx_dmac_linked_list.h"
     49 #include "hwdefs/msvdx_rendec_mtx_slice_cntrl_reg_io2.h"
     50 #include "hwdefs/dxva_cmdseq_msg.h"
     51 #include "hwdefs/dxva_fw_ctrl.h"
     52 #include "hwdefs/fwrk_msg_mem_io.h"
     53 #include "hwdefs/dxva_msg.h"
     54 #include "hwdefs/msvdx_cmds_io2.h"
     55 
     56 #define PSB_VIDEO_DEBUG_FILE "/data/mediadrm/log"
     57 #define PSB_VIDEO_TRACE_FILE "/data/mediadrm/trace"
     58 #define PSB_VIDEO_DUMP_VABUF_FILE "/data/mediadrm/dump.va"
     59 #define PSB_VIDEO_DUMP_VABUF_VERBOSE_FILE "/data/mediadrm/dump.va.verbose"
     60 #define PSB_VIDEO_DUMP_YUVBUF_FILE "/data/mediadrm/dump.yuv"
     61 
     62 void psb__open_log(void)
     63 {
     64     char log_fn[1024] = {0};
     65     unsigned int suffix;
     66     char env_fn[1024] = {0};//used to get file name from psbvideo.conf, only to check if value is set
     67 
     68     if ((psb_video_debug_fp != NULL) && (psb_video_debug_fp != stderr)) {
     69         debug_fp_count++;
     70     } else {
     71         /* psb video info debug */
     72         if (psb_parse_config("PSB_VIDEO_DEBUG", &env_fn[0]) == 0) {
     73             strcpy(log_fn, PSB_VIDEO_DEBUG_FILE);
     74             drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
     75             suffix = 0xffff & ((unsigned int)time(NULL));
     76             snprintf(log_fn + strnlen(log_fn, 1024),
     77                      (1024 - 8 - strnlen(log_fn, 1024)),
     78                      ".%d.%d", getpid(), suffix);
     79             psb_video_debug_fp = fopen(log_fn, "w");
     80             if (psb_video_debug_fp == 0) {
     81                 drv_debug_msg(VIDEO_DEBUG_ERROR, "Log file %s open failed, reason %s, fall back to stderr\n",
     82                                    log_fn, strerror(errno));
     83                 psb_video_debug_fp = stderr;
     84             } else {
     85                 drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s open successfully\n", log_fn);
     86                 debug_fp_count++;
     87             }
     88 #ifdef ANDROID
     89             ALOGD("PSB_VIDEO_DEBUG is enabled.\n");
     90 #endif
     91         } else {
     92             psb_video_debug_fp = NULL;
     93         }
     94     }
     95 
     96     if(psb_parse_config("PSB_VIDEO_TRACE", &env_fn[0]) == 0) {
     97         strcpy(log_fn, PSB_VIDEO_TRACE_FILE);
     98         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
     99         unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
    100         time_t curtime;
    101 
    102         log_fn[1024 - 8] = '\0';
    103         if(strncmp(log_fn, "/dev/stdout", sizeof("/dev/stdout")) != 0)
    104             sprintf(log_fn + strlen(log_fn), ".%d", suffix);
    105         psb_video_trace_fp = fopen(log_fn, "w");
    106         if (psb_video_trace_fp == NULL)
    107             psb_video_trace_fp = stderr;
    108         time(&curtime);
    109         fprintf(psb_video_trace_fp, "---- %s\n---- Start Trace ----\n", ctime(&curtime));
    110         debug_dump_count = 0;
    111         g_hexdump_offset = 0;
    112 #ifdef ANDROID
    113         ALOGD("PSB_VIDEO_TRACE is enabled.\n");
    114 #endif
    115     } else {
    116         psb_video_trace_fp = NULL;
    117     }
    118 
    119     /* debug level include error, warning, general, init, entry, ...... */
    120     if(psb_parse_config("PSB_VIDEO_DEBUG_LEVEL", &env_fn[0]) == 0) {
    121         psb_video_debug_level = atoi(env_fn);
    122 #ifdef ANDROID
    123         ALOGD("psb_video_debug_level is %d parsed.\n", psb_video_debug_level);
    124 #endif
    125     } else {
    126         psb_video_debug_level = 0x1;
    127     }
    128 
    129     /* control debug output option, logcat output or print to file */
    130     if(psb_parse_config("PSB_VIDEO_DEBUG_OPTION", &env_fn[0]) == 0) {
    131         psb_video_debug_option = atoi(env_fn);
    132 #ifdef ANDROID
    133         ALOGD("psb_video_debug_option is %d parsed.\n", psb_video_debug_option);
    134 #endif
    135     } else {
    136         psb_video_debug_option = 0;
    137     }
    138 
    139     /* trace level include vabuf, cmdmsg buf, aux buffer, lldma */
    140     if(psb_parse_config("PSB_VIDEO_TRACE_LEVEL", &env_fn[0]) == 0) {
    141         psb_video_trace_level = atoi(env_fn);
    142 #ifdef ANDROID
    143         ALOGD("psb_video_trace_level is %d parsed.\n", psb_video_trace_level);
    144 #endif
    145     } else {
    146         psb_video_trace_level = 0;
    147     }
    148 
    149     /* control trace output option, logcat output or print to file */
    150     if(psb_parse_config("PSB_VIDEO_TRACE_OPTION", &env_fn[0]) == 0) {
    151         psb_video_trace_option = atoi(env_fn);
    152 #ifdef ANDROID
    153         ALOGD("psb_video_debug_option is %d parsed.\n", psb_video_trace_option);
    154 #endif
    155     } else {
    156         psb_video_trace_option = 0;
    157     }
    158 
    159     /* cmdbuf dump, every frame decoded cmdbuf dump to /data/ctrlAlloc%i.txt */
    160     if(psb_parse_config("PSB_VIDEO_DUMP_CMDBUF", &env_fn[0]) == 0) {
    161         if(strstr(env_fn, "true") != NULL)
    162             psb_video_dump_cmdbuf = TRUE;
    163         else
    164             psb_video_dump_cmdbuf = FALSE;
    165 #ifdef ANDROID
    166         ALOGD("PSB_VIDEO_DUMP_CMDBUF is %d.\n", psb_video_dump_cmdbuf);
    167 #endif
    168     } else {
    169         psb_video_dump_cmdbuf = FALSE;
    170     }
    171 
    172     /* psb video va buffers dump */
    173     if(psb_parse_config("PSB_VIDEO_DUMP_VABUF", &env_fn[0]) == 0) {
    174         strcpy(log_fn, PSB_VIDEO_DUMP_VABUF_FILE);
    175         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
    176         unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
    177         /* Make sure there is space left for suffix */
    178         log_fn[1024 - 12] = '\0';
    179         if(strncmp(log_fn, "/dev/stdout", sizeof("/dev/stdout")) != 0)
    180             snprintf(log_fn + strlen(log_fn), 11, ".%d", suffix);
    181         psb_dump_vabuf_fp = fopen(log_fn, "w");
    182 #ifdef ANDROID
    183         ALOGD("PSB_VIDEO_DUMP_VABUF is enabled.\n");
    184 #endif
    185     } else {
    186         psb_dump_vabuf_fp = NULL;
    187     }
    188 
    189     /* psb video va buffer verbose dump */
    190     if(psb_parse_config("PSB_VIDEO_DUMP_VABUF_VERBOSE", &env_fn[0]) == 0) {
    191         strcpy(log_fn, PSB_VIDEO_DUMP_VABUF_VERBOSE_FILE);
    192         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
    193         unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
    194         /* Make sure there is space left for suffix */
    195         log_fn[1024 - 12] = '\0';
    196         if(strncmp(log_fn, "/dev/stdout", sizeof("/dev/stdout")) != 0)
    197             snprintf(log_fn + strlen(log_fn), 11, ".%d", suffix);
    198         psb_dump_vabuf_verbose_fp = fopen(log_fn, "w");
    199 #ifdef ANDROID
    200         ALOGD("PSB_VIDEO_DUMP_VABUF_VERBOSE is enabled.\n");
    201 #endif
    202     } else {
    203         psb_dump_vabuf_verbose_fp = NULL;
    204     }
    205 
    206     /* dump decoded surface to a yuv file */
    207     if(psb_parse_config("PSB_VIDEO_DUMP_YUVBUF", &env_fn[0]) == 0) {
    208         strcpy(log_fn, PSB_VIDEO_DUMP_YUVBUF_FILE);
    209         drv_debug_msg(VIDEO_DEBUG_GENERAL, "Log file %s , force use %s\n", env_fn, log_fn);
    210         unsigned int suffix = 0xffff & ((unsigned int)time(NULL));
    211         /* Make sure there is space left for suffix */
    212         log_fn[1024 - 12] = '\0';
    213         if(strncmp(log_fn, "/dev/stdout", sizeof("/dev/stdout")) != 0)
    214             snprintf(log_fn + strlen(log_fn), 11, ".%d", suffix);
    215         psb_dump_yuvbuf_fp = fopen(log_fn, "ab");
    216 #ifdef ANDROID
    217         ALOGD("PSB_VIDEO_DUMP_YUVBUF is enabled.\n");
    218 #endif
    219     } else {
    220         psb_dump_yuvbuf_fp = NULL;
    221     }
    222 }
    223 
    224 void psb__close_log(void)
    225 {
    226     if ((psb_video_debug_fp != NULL) & (psb_video_debug_fp != stderr)) {
    227         debug_fp_count--;
    228         if (debug_fp_count == 0) {
    229             fclose(psb_video_debug_fp);
    230             psb_video_debug_fp = NULL;
    231         }
    232     }
    233 
    234     if(psb_video_trace_fp != NULL) {
    235         fclose(psb_video_trace_fp);
    236         psb_video_trace_fp = NULL;
    237     }
    238 
    239     if(psb_dump_vabuf_fp != NULL) {
    240         fclose(psb_dump_vabuf_fp);
    241         psb_dump_vabuf_fp = NULL;
    242     }
    243 
    244     if(psb_dump_vabuf_verbose_fp != NULL) {
    245         fclose(psb_dump_vabuf_verbose_fp);
    246         psb_dump_vabuf_verbose_fp = NULL;
    247     }
    248 
    249     if(psb_dump_yuvbuf_fp != NULL) {
    250         fclose(psb_dump_yuvbuf_fp);
    251         psb_dump_yuvbuf_fp = NULL;
    252     }
    253 
    254     return;
    255 }
    256 
    257 /*
    258  * read a config "env" for libva.conf or from environment setting
    259  * liva.conf has higher priority
    260  * return 0: the "env" is set, and the value is copied into env_value
    261  *        1: the env is not set
    262  */
    263 int psb_parse_config(char *env, char *env_value)
    264 {
    265     char *token, *value, *saveptr;
    266     char oneline[1024];
    267     FILE *fp = NULL;
    268     char *env_ptr;
    269 
    270     if (env == NULL)
    271         return 1;
    272 
    273     fp = fopen("/etc/psbvideo.conf", "r");
    274     while (fp && (fgets(oneline, 1024, fp) != NULL)) {
    275         if (strlen(oneline) == 1)
    276             continue;
    277         token = strtok_r(oneline, "=\n", &saveptr);
    278         value = strtok_r(NULL, "=\n", &saveptr);
    279 
    280         if (NULL == token || NULL == value)
    281             continue;
    282 
    283         if (strcmp(token, env) == 0) {
    284             if (env_value)
    285                 strcpy(env_value, value);
    286 
    287             fclose(fp);
    288 
    289             return 0;
    290         }
    291     }
    292     if (fp)
    293         fclose(fp);
    294 
    295     env_ptr = getenv(env);
    296     if (env_ptr) {
    297         if (env_value)
    298             strncpy(env_value, env_ptr, strlen(env_ptr));
    299 
    300         return 0;
    301     }
    302 
    303     return 1;
    304 }
    305 
    306 void drv_debug_msg(DEBUG_LEVEL debug_level, const char *msg, ...)
    307 {
    308     va_list args;
    309 
    310 #ifdef ANDROID
    311     if (debug_level == VIDEO_DEBUG_ERROR) {
    312         va_start(args, msg);
    313         char tag[128];
    314         (void)tag;
    315         sprintf(tag, "pvr_drv_video ");
    316         __android_log_vprint(ANDROID_LOG_ERROR, tag, msg, args);
    317         va_end(args);
    318     }
    319 
    320     if ((psb_video_debug_option & PRINT_TO_LOGCAT) && (debug_level & psb_video_debug_level)) {
    321         va_start(args, msg);
    322         char tag[128];
    323         (void)tag;
    324         if (psb_video_debug_option & THREAD_DEBUG)
    325             sprintf(tag, "pvr_drv_video[%d:0x%08lx]", getpid(), pthread_self());
    326         else
    327             sprintf(tag, "pvr_drv_video ");
    328         __android_log_vprint(ANDROID_LOG_DEBUG, tag, msg, args);
    329         va_end(args);
    330     }
    331 #endif
    332 
    333     if (!psb_video_debug_fp && (psb_video_debug_level & VIDEO_DEBUG_ERROR))
    334         psb_video_debug_fp = stderr;
    335     if (psb_video_debug_fp && (psb_video_debug_option & PRINT_TO_FILE) &&
    336             (debug_level & psb_video_debug_level)) {
    337         if (psb_video_debug_option & TIME_DEBUG)
    338             fprintf(psb_video_debug_fp, "TickCount - [0x%08lx], ",
    339                     GetTickCount());
    340         if (psb_video_debug_option & THREAD_DEBUG)
    341             fprintf(psb_video_debug_fp, "Thread - (%d:0x%08lx) ",
    342                     getpid(), pthread_self());
    343         va_start(args, msg);
    344         vfprintf(psb_video_debug_fp, msg, args);
    345         va_end(args);
    346         fflush(psb_video_debug_fp);
    347         //fsync(fileno(psb_video_debug_fp));
    348     }
    349 }
    350 
    351 int psb__dump_I420_buffers(
    352     psb_surface_p psb_surface,
    353     short __maybe_unused srcx,
    354     short srcy,
    355     unsigned short srcw,
    356     unsigned short srch)
    357 {
    358     unsigned char *mapped_buffer;
    359     unsigned char *mapped_buffer1, *mapped_buffer2;
    360 
    361     if (psb_dump_yuvbuf_fp) {
    362         psb_buffer_map(&psb_surface->buf, (unsigned char**)&mapped_buffer);
    363         if(mapped_buffer == NULL)
    364             return VA_STATUS_ERROR_INVALID_BUFFER;
    365 
    366         int j,k;
    367         mapped_buffer1 = mapped_buffer + psb_surface->stride * srcy;
    368         mapped_buffer2 = mapped_buffer + psb_surface->stride * (srch + srcy / 2);
    369         mapped_buffer = mapped_buffer2;
    370 
    371         for(j = 0; j < srch; ++j)
    372         {
    373             fwrite(mapped_buffer1,  srcw, 1, psb_dump_yuvbuf_fp);
    374             mapped_buffer1 += psb_surface->stride;
    375         }
    376 
    377          for(j = 0; j < srch /2; ++j) {
    378             for(k = 0; k < srcw; ++k) {
    379                 if((k%2) == 0)fwrite(mapped_buffer2, 1, 1, psb_dump_yuvbuf_fp);
    380 
    381                 mapped_buffer2++;
    382             }
    383             mapped_buffer2 += psb_surface->stride - srcw;
    384         }
    385 
    386         mapped_buffer2 = mapped_buffer;
    387         for(j = 0; j < srch /2; ++j)
    388         {
    389             for(k = 0; k < srcw; ++k)
    390             {
    391                 if((k % 2) == 1)
    392                     fwrite(mapped_buffer2, 1, 1, psb_dump_yuvbuf_fp);
    393                 mapped_buffer2++;
    394             }
    395             mapped_buffer2 += psb_surface->stride-srcw;
    396         }
    397 
    398         psb_buffer_unmap(&psb_surface->buf);
    399     }
    400 
    401     return 0;
    402 }
    403 
    404 int psb__dump_NV12_buffers(
    405     psb_surface_p psb_surface,
    406     short __maybe_unused srcx,
    407     short __maybe_unused srcy,
    408     unsigned short srcw,
    409     unsigned short srch)
    410 {
    411     unsigned char *mapped_buffer;
    412     unsigned char *mapped_start;
    413 
    414     if (psb_dump_yuvbuf_fp) {
    415         psb_buffer_map(&psb_surface->buf, (unsigned char **)&mapped_buffer);
    416         if(mapped_buffer == NULL)
    417             return VA_STATUS_ERROR_INVALID_BUFFER;
    418 
    419         int i;
    420         int row = srch;
    421 
    422         mapped_start = mapped_buffer;
    423         for(i = 0; i < row; ++i)
    424         {
    425             fwrite(mapped_buffer,  srcw, 1, psb_dump_yuvbuf_fp);
    426             mapped_buffer += psb_surface->stride;
    427         }
    428 
    429         mapped_buffer = mapped_start + psb_surface->chroma_offset;
    430         for(i = 0; i < row/2; ++i)
    431         {
    432             fwrite(mapped_buffer,  srcw, 1, psb_dump_yuvbuf_fp);
    433             mapped_buffer += psb_surface->stride;
    434         }
    435         psb_buffer_unmap(&psb_surface->buf);
    436     }
    437 
    438     return 0;
    439 }
    440 
    441 int psb_cmdbuf_dump(unsigned int *buffer, int byte_size)
    442 {
    443     static int c=0;
    444     static char pFileName[50];
    445 
    446     if (psb_video_dump_cmdbuf == FALSE)
    447         return 0;
    448 
    449     sprintf( pFileName , "/data/ctrlAlloc%i.txt", c++);
    450     FILE* pF = fopen(pFileName,"w");
    451     if(pF == NULL) {
    452         return 1;
    453     }
    454 
    455     int idx=0;
    456     unsigned int x;
    457     while( idx <  byte_size / 4 )
    458     {
    459         unsigned int cmd = buffer[idx++];
    460         fprintf( pF , "Command Word: %08X\n" , cmd  );
    461         switch( cmd&0xf0000000  )
    462         {
    463             case 0x70000000:
    464             {
    465                 fprintf( pF , "%04X 2NDPASSDEBLOCK\n" , (idx-1)*4  );
    466                 for( x=0;x< 5 ;x++)
    467                 {
    468                     fprintf( pF ,"\t\t%08X\n",
    469                         buffer[idx]        );
    470                     idx++;
    471 
    472                 }
    473 
    474                 break;
    475             }
    476             case 0x90000000:
    477             {
    478                 fprintf( pF , "%04X HEADER\n" , (idx-1)*4  );
    479                 for( x=0;x< 7 ;x++)
    480                 {
    481                     fprintf( pF ,"\t\t%08X\n",
    482                         buffer[idx]        );
    483                     idx++;
    484 
    485                 }
    486 
    487                 break;
    488             }
    489 
    490             case 0x10000000:
    491             {
    492                 fprintf( pF , "%04X CMD_REGVALPAIR_WRITE ( %08X )\n", (idx-1)*4 , cmd);
    493                 unsigned int addr = cmd&0xffff;
    494                 unsigned int count = (cmd>>16)&0xff;
    495                 for( x=0;x< count ;x++)
    496                 {
    497                     fprintf( pF ,"\t\t%08X %08X\n",
    498                         addr ,
    499                         buffer[idx]    );
    500                     idx+=1;
    501                     addr+=4;
    502 
    503                 }
    504                 break;
    505             }
    506 
    507             case 0x50000000:
    508             {
    509                 fprintf( pF , "%04X CMD_RENDEC_BLOCK( %08X )\n", (idx-1)*4 , cmd);
    510                 unsigned int  count    = (cmd>>16)&0x00ff;
    511                 unsigned int  uiAddr = (cmd &0xffff );            /* to do,  limit this */
    512 
    513                 for( x=0;x< count ;x++)
    514                 {
    515                     fprintf( pF ,"\t\t%08X %08X\n",
    516                         uiAddr ,
    517                         buffer[idx++]    );
    518                     uiAddr+= 4;
    519 
    520                 }
    521                 break;
    522             }
    523             case 0xd0000000:
    524             {
    525                 fprintf( pF , "%04X CMD_NEXT_SEG\n", (idx-1)*4 );
    526                 fprintf( pF , "wrong\n");
    527                 goto done;
    528 
    529                 break;
    530             }
    531             case 0xb0000000:
    532             {
    533                 fprintf( pF , "%04X SR SETUP %08x\n" , (idx-1)*4  , cmd );
    534                 for( x=0;x< 2 ;x++)
    535                 {
    536                     fprintf( pF ,"\t\t%08X\n",
    537                         buffer[idx]        );
    538                     idx++;
    539 
    540                 }
    541                 break;
    542             }
    543 
    544             case 0xf0000000:
    545             {
    546                 fprintf( pF , "%04X CMD_PARSE_HEADER %08x\n" , (idx-1)*4  , cmd );
    547                 for( x=0;x< 8 ;x++)
    548                 {
    549                     fprintf( pF ,"\t\t%08X\n",
    550                         buffer[idx]        );
    551                     idx++;
    552 
    553                 }
    554                 break;
    555             }
    556 
    557         case 0x60000000:
    558             goto done;
    559 
    560             default:
    561                 fprintf( pF , "%04X %08x\n" ,(idx-1)*4 , cmd);
    562 
    563 
    564         }
    565 
    566 
    567     }
    568 done:
    569     fclose( pF );
    570     return 0;
    571 
    572 }
    573 
    574 /********************* trace debug start *************************/
    575 
    576 void psb__trace_message(const char *msg, ...)
    577 {
    578     va_list args;
    579 
    580 #ifdef ANDROID
    581     if ((psb_video_trace_option & PRINT_TO_LOGCAT) && msg) {
    582         va_start(args, msg);
    583         char tag[128];
    584         (void)tag;
    585         sprintf(tag, "pvr_drv_video ");
    586         __android_log_vprint(ANDROID_LOG_DEBUG, tag, msg, args);
    587         va_end(args);
    588     }
    589 #endif
    590 
    591     if (psb_video_trace_fp && (psb_video_trace_option & PRINT_TO_FILE)) {
    592         if (msg) {
    593             va_start(args, msg);
    594             vfprintf(psb_video_trace_fp, msg, args);
    595             va_end(args);
    596         } else {
    597             fflush(psb_video_trace_fp);
    598             //fsync(fileno(psb_video_trace_fp));
    599         }
    600     }
    601 }
    602 
    603 void psb__debug_w(uint32_t val, char *fmt, uint32_t bit_to, uint32_t bit_from)
    604 {
    605     if (bit_to < 31) {
    606         val &= ~(0xffffffff << (bit_to + 1));
    607     }
    608     val = val >> bit_from;
    609     psb__trace_message(fmt, val);
    610 }
    611 
    612 #define DBH(fmt, arg...)        psb__trace_message(fmt, ##arg)
    613 #define DB(fmt, arg1, arg...)        psb__trace_message("[%08x] %08x = " fmt, ((unsigned char *) arg1) - cmd_start, *arg1, ##arg)
    614 
    615 /* See also MsvdxGpuSim() in msvdxgpu.c */
    616 void debug_dump_cmdbuf(uint32_t *cmd_idx, uint32_t cmd_size_in_bytes)
    617 {
    618     uint32_t cmd_size = cmd_size_in_bytes / sizeof(uint32_t);
    619     uint32_t *cmd_end = cmd_idx + cmd_size;
    620     unsigned char *cmd_start = (unsigned char *)cmd_idx;
    621     struct {
    622         unsigned int start;
    623         unsigned int end;
    624         char *name;
    625     } msvdx_regs[11] = {{0x00000000, 0x000003FF, "MTX_MTX"},
    626         {0x00000400, 0x0000047F, "VDMC_MTX"},
    627         {0x00000480, 0x000004FF, "VDEB_MTX"},
    628         {0x00000500, 0x000005FF, "DMAC_MTX"},
    629         {0x00000600, 0x000006FF, "SYS_MTX"},
    630         {0x00000700, 0x000007FF, "VEC_IQRAM_MTX"},
    631         {0x00000800, 0x00000FFF, "VEC_MTX"},
    632         {0x00001000, 0x00001FFF, "CMD_MTX"},
    633         {0x00002000, 0x00002FFF, "VEC_RAM_MTX"},
    634         {0x00003000, 0x00004FFF, "VEC_VLC_M"},
    635         {0x00005000, 0xFFFFFFFF, "OUT_OF_RANGE"}
    636     };
    637 
    638     DBH("CMD BUFFER [%08x] - [%08x], %08x bytes, %08x dwords\n", (uint32_t) cmd_idx, cmd_end, cmd_size_in_bytes, cmd_size);
    639     while (cmd_idx < cmd_end) {
    640         uint32_t cmd = *cmd_idx;
    641         /* What about CMD_MAGIC_BEGIN ?*/
    642 
    643         switch (cmd & CMD_MASK) {
    644         case CMD_NOP: {
    645             DB("CMD_NOPE\n", cmd_idx);
    646             cmd_idx++;
    647             break;
    648         }
    649         case CMD_REGVALPAIR_WRITE: {
    650             uint32_t count = (cmd & 0xfff0000) >> 16;
    651             uint32_t reg = cmd & 0xffff;
    652             DB("CMD_REGVALPAIR_WRITE count = 0x%08x\n", cmd_idx, count);
    653             cmd_idx++;
    654 
    655             while (count--) {
    656                 int i;
    657                 for (i = 0; i < 10; i++) {
    658                     if ((reg >= msvdx_regs[i].start) &&
    659                         (reg <= msvdx_regs[i].end))
    660                         break;
    661                 }
    662                 psb__trace_message("%s_%04x\n", msvdx_regs[i].name, reg);
    663                 reg += 4;
    664                 DB("value\n", cmd_idx);
    665                 cmd_idx++;
    666             }
    667             break;
    668         }
    669         case CMD_RENDEC_WRITE: {
    670             uint32_t encoding;
    671             uint32_t count = (cmd & CMD_RENDEC_COUNT_MASK) >> CMD_RENDEC_COUNT_SHIFT;
    672             DB("CMD_RENDEC_WRITE count = %08x\n", cmd_idx, count);
    673             cmd_idx++;
    674 
    675             DB("RENDEC_SL_HDR\n", cmd_idx);
    676             cmd_idx++;
    677 
    678             DB("RENDEC_SL_NULL\n", cmd_idx);
    679             cmd_idx++;
    680 
    681             do {
    682                 uint32_t chk_hdr = *cmd_idx;
    683                 count = 1 + ((chk_hdr & 0x07FF0000) >> 16);
    684                 uint32_t start_address = (chk_hdr & 0x0000FFF0) >> 4;
    685                 encoding = (chk_hdr & 0x07);
    686                 if ((count == 1) && (encoding == 7)) {
    687                     count = 0;
    688                     DB("SLICE_SEPARATOR\n", cmd_idx);
    689                 } else {
    690                     DB("RENDEC_CK_HDR #symbols = %d address = %08x encoding = %01x\n", cmd_idx, count, start_address, encoding);
    691                 }
    692                 cmd_idx++;
    693 
    694                 while (count && (count < 0x1000)) {
    695                     DB("value\n", cmd_idx);
    696                     cmd_idx++;
    697 
    698                     count -= 2;
    699                 }
    700             } while (encoding != 0x07);
    701 
    702             break;
    703         }
    704         case CMD_RENDEC_BLOCK: {
    705             uint32_t count = (cmd & 0xff0000) >> 16;
    706             uint32_t rendec = cmd & 0xffff;
    707             DB("CMD_RENDEC_BLOCK count = 0x%08x\n", cmd_idx, count);
    708             cmd_idx++;
    709 
    710             while (count--) {
    711                 psb__trace_message("%04x\n", rendec);
    712                 rendec += 4;
    713                 DB("value\n", cmd_idx);
    714                 cmd_idx++;
    715             }
    716             break;
    717         }
    718 
    719         case CMD_COMPLETION: {
    720             if (*cmd_idx == PSB_RELOC_MAGIC) {
    721                 DB("CMD_(S)LLDMA (assumed)\n", cmd_idx);
    722                 cmd_idx++;
    723 
    724             } else {
    725                 DB("CMD_COMPLETION\n", cmd_idx);
    726                 cmd_idx++;
    727 
    728 //              DB("interrupt\n", cmd_idx);
    729 //              cmd_idx++;
    730             }
    731             break;
    732         }
    733         case CMD_HEADER: {
    734             uint32_t context = cmd & CMD_HEADER_CONTEXT_MASK;
    735             DB("CMD_HEADER context = %08x\n", cmd_idx, context);
    736             cmd_idx++;
    737             DB("StatusBufferAddress\n", cmd_idx);
    738             cmd_idx++;
    739             DB("PreloadSave\n", cmd_idx);
    740             cmd_idx++;
    741             DB("PreloadRestore\n", cmd_idx);
    742             cmd_idx++;
    743             break;
    744         }
    745         case CMD_CONDITIONAL_SKIP: {
    746             DB("CMD_CONDITIONAL_SKIP\n", cmd_idx);
    747             cmd_idx++;
    748             DB("vlc table address\n", cmd_idx);
    749             break;
    750         }
    751         case CMD_CTRL_ALLOC_HEADER: {
    752             psb__trace_message("CMD_CTRL_ALLOC_HEADER count = 0x%08x\n", sizeof(CTRL_ALLOC_HEADER));
    753             uint32_t count = sizeof(CTRL_ALLOC_HEADER)/4;
    754             while (count) {
    755                     DB("value\n", cmd_idx);
    756                     cmd_idx++;
    757                     count--;
    758             }
    759             break;
    760         }
    761         case CMD_LLDMA: {
    762             DB("CMD_LLDMA\n", cmd_idx);
    763             cmd_idx++;
    764             break;
    765         }
    766         case CMD_SR_SETUP: {
    767             DB("CMD_SR_SETUP\n", cmd_idx);
    768             cmd_idx++;
    769             DB("offset in bits\n", cmd_idx);
    770             cmd_idx++;
    771             DB("size in bytes\n", cmd_idx);
    772             cmd_idx++;
    773             break;
    774         }
    775         case CMD_SLLDMA: {
    776             DB("CMD_SLLDMA\n", cmd_idx);
    777             cmd_idx++;
    778             break;
    779         }
    780         case CMD_DMA: {
    781             DB("CMD_DMA\n", cmd_idx);
    782             cmd_idx++;
    783             DB("cmd dma address\n", cmd_idx);
    784             break;
    785         }
    786         default:
    787             if (*cmd_idx == PSB_RELOC_MAGIC) {
    788                 DB("CMD_(S)LLDMA (assumed)\n", cmd_idx);
    789                 cmd_idx++;
    790 
    791             } else {
    792                 DB("*** Unknown command ***\n", cmd_idx);
    793                 cmd_idx++;
    794             }
    795             break;
    796         } /* switch */
    797     } /* while */
    798 }
    799 
    800 /********************* trace debug end *************************/
    801 
    802 /********************* dump buffer when flush cmdbuf - start *************************/
    803 void psb__debug_schedule_hexdump(const char *name, psb_buffer_p buf, uint32_t offset, uint32_t size)
    804 {
    805     ASSERT(debug_dump_count < MAX_DUMP_COUNT);
    806     debug_dump_name[debug_dump_count] = name;
    807     debug_dump_buf[debug_dump_count] = buf;
    808     debug_dump_offset[debug_dump_count] = offset;
    809     debug_dump_size[debug_dump_count] = size;
    810     debug_dump_count++;
    811 }
    812 
    813 static void psb__hexdump2(unsigned char *p, int offset, int size)
    814 {
    815     if (offset + size > 8)
    816         size = 8 - offset;
    817     psb__trace_message("[%04x]", g_hexdump_offset);
    818     g_hexdump_offset += offset;
    819     g_hexdump_offset += size;
    820     while (offset-- > 0) {
    821         psb__trace_message(" --");
    822     }
    823     while (size-- > 0) {
    824         psb__trace_message(" %02x", *p++);
    825     }
    826     psb__trace_message("\n");
    827 }
    828 
    829 void psb__hexdump(unsigned char *addr, int size)
    830 {
    831     unsigned char *p = (unsigned char *) addr;
    832 
    833     int offset = g_hexdump_offset % 8;
    834     g_hexdump_offset -= offset;
    835     if (offset) {
    836         psb__hexdump2(p, offset, size);
    837         size -= 8 - offset;
    838         p += 8 - offset;
    839     }
    840 
    841     while (1) {
    842         if (size < 8) {
    843             if (size > 0) {
    844                 psb__hexdump2(p, 0, size);
    845             }
    846             return;
    847         }
    848         psb__trace_message("[%04x] %02x %02x %02x %02x %02x %02x %02x %02x\n", g_hexdump_offset, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
    849         p += 8;
    850         size -= 8;
    851         g_hexdump_offset += 8;
    852     }
    853 }
    854 /********************* dump buffer when flush cmdbuf - end*************************/
    855 
    856 int  psb__dump_va_buffers(object_buffer_p obj_buffer)
    857 {
    858     unsigned int j,k;
    859     unsigned char *mapped_buffer;
    860     int print_num;
    861 
    862     if(psb_dump_vabuf_fp) {
    863         fprintf(psb_dump_vabuf_fp, "%s", buffer_type_to_string(obj_buffer->type));
    864         print_num = fprintf(psb_dump_vabuf_fp, "BUFF SIZE :%d	NUMELEMENTS:%d BUFF INFO:\n", obj_buffer->size, obj_buffer->num_elements);
    865 
    866         switch(obj_buffer->type) {
    867             case VAPictureParameterBufferType:
    868             case VAIQMatrixBufferType:
    869             case VASliceParameterBufferType:
    870                 j=0;
    871                 for(k=0;k < obj_buffer->size;++k)
    872                     print_num = fprintf(psb_dump_vabuf_fp,"0x%02x ,",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    873                     fprintf(psb_dump_vabuf_fp,"\n ");
    874                 break;
    875 
    876             case VASliceGroupMapBufferType:
    877             case VABitPlaneBufferType:
    878                 psb_buffer_map(obj_buffer->psb_buffer, (unsigned char **)&mapped_buffer);
    879                 if(mapped_buffer == NULL)
    880                     return VA_STATUS_ERROR_INVALID_BUFFER;
    881 
    882                 for(j=0; j<obj_buffer->size;++j) {
    883                     if(j%16 == 0) fprintf(psb_dump_vabuf_fp,"\n");
    884                     for(k=0;k < obj_buffer->num_elements;++k)
    885                         fprintf(psb_dump_vabuf_fp,"0x%02x   ",*((unsigned char *)(mapped_buffer+obj_buffer->num_elements*j+k)));
    886                 }
    887 
    888                 psb_buffer_unmap(obj_buffer->psb_buffer);
    889                 break;
    890 
    891             case VASliceDataBufferType:
    892             case VAProtectedSliceDataBufferType:
    893                 fprintf(psb_dump_vabuf_fp,"first 256 bytes:\n");
    894                 psb_buffer_map(obj_buffer->psb_buffer, (unsigned char **)&mapped_buffer);
    895                 if (!mapped_buffer)
    896                     break;
    897                 for(j=0; j<256;++j) {
    898                     if(j%16 == 0) fprintf(psb_dump_vabuf_fp,"\n");
    899                     for(k=0;k < obj_buffer->num_elements;++k)
    900                         fprintf(psb_dump_vabuf_fp,"0x%02x   ",*((unsigned char *)(mapped_buffer+obj_buffer->num_elements*j+k)));
    901                 }
    902                 psb_buffer_unmap(obj_buffer->psb_buffer);
    903                 break;
    904 
    905             default:
    906                 break;
    907 
    908         }
    909         fprintf(psb_dump_vabuf_fp, "\n");
    910         fflush(psb_dump_vabuf_fp);
    911         fsync(fileno(psb_dump_vabuf_fp));
    912     }
    913 
    914     return 0;
    915 }
    916 
    917 int  psb__dump_va_buffers_verbose(object_buffer_p obj_buffer)
    918 {
    919     unsigned int j,k;
    920     unsigned char *mapped_buffer;
    921     if(psb_dump_vabuf_verbose_fp) {
    922         fprintf(psb_dump_vabuf_verbose_fp, "%s", buffer_type_to_string(obj_buffer->type));
    923         fprintf(psb_dump_vabuf_verbose_fp, "BUFF SIZE :%d	NUMELEMENTS:%d BUFF INFO:\n", obj_buffer->size, obj_buffer->num_elements);
    924         switch(obj_buffer->type) {
    925             case VAPictureParameterBufferType:
    926                 for(j=0; j < 340; j = j+20) {
    927                     if(j==0) fprintf(psb_dump_vabuf_verbose_fp,"\nCurrPic:\n");
    928                     else fprintf(psb_dump_vabuf_verbose_fp,"\nReferenceFrames%d\n", j / 20);
    929                     fprintf(psb_dump_vabuf_verbose_fp,"picture_id:");
    930                     for(k=0;k < 4;++k)
    931                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    932                         fprintf(psb_dump_vabuf_verbose_fp,"    frame_idx:");
    933                     for(k=4;k < 8;++k)
    934                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    935                         fprintf(psb_dump_vabuf_verbose_fp,"    flags:");
    936                     for(k=8;k < 12;++k)
    937                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    938                         fprintf(psb_dump_vabuf_verbose_fp,"    TopFieldOrderCnt:");
    939                     for(k=12;k < 16;++k)
    940                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    941                         fprintf(psb_dump_vabuf_verbose_fp,"    BottomFieldOrderCnt:");
    942                     for(k=16;k < 20;++k)
    943                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    944                 }
    945                 j=340;k=0;
    946                 fprintf(psb_dump_vabuf_verbose_fp,"\npicture_width_in_mbs_minus1:");
    947                 for(k=0;k < 2;++k)
    948                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    949                 j=342;k=0;
    950                 fprintf(psb_dump_vabuf_verbose_fp, "\npicture_height_in_mbs_minus1:");
    951                 for(k=0;k < 2;++k)
    952                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    953                 j=344;k=0;
    954                 fprintf(psb_dump_vabuf_verbose_fp,  "\nbit_depth_luma_minus8:");
    955                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    956                 j=345;k=0;
    957                 fprintf(psb_dump_vabuf_verbose_fp, "\nbit_depth_chroma_minus8:");
    958                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    959                 j=346;k=0;
    960                 fprintf(psb_dump_vabuf_verbose_fp, "\nnum_ref_frames:");
    961                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    962                 j=348;k=0;
    963                 fprintf(psb_dump_vabuf_verbose_fp,"\nseq_fields_value:");
    964                 for(k=0;k < 4;++k)
    965                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    966                 j=352;k=0;
    967                 fprintf(psb_dump_vabuf_verbose_fp,"\nnum_slice_groups_minus1:");
    968                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    969                 j=353;k=0;
    970                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_group_map_type:");
    971                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    972                 j=354;k=0;
    973                 fprintf(psb_dump_vabuf_verbose_fp, "\nslice_group_change_rate_minus1:");
    974                 for(k=0;k < 2;++k)
    975                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    976                 j=356;k=0;
    977                 fprintf(psb_dump_vabuf_verbose_fp,"\npic_init_qp_minus26:");
    978                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    979                 j=357;k=0;
    980                 fprintf(psb_dump_vabuf_verbose_fp,"\npic_init_qs_minus26:");
    981                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    982                 j=358;k=0;
    983                 fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_qp_index_offset:");
    984                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    985                 j=359;k=0;
    986                 fprintf(psb_dump_vabuf_verbose_fp, "\nsecond_chroma_qp_index_offset:");
    987                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    988                 j=360;k=0;
    989                 fprintf(psb_dump_vabuf_verbose_fp,"\npic_fields_value:");
    990                 for(k=0;k < 4;++k)
    991                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    992                 j=364;k=0;
    993                 fprintf(psb_dump_vabuf_verbose_fp,"\nframe_num:");
    994                 for(k=0;k < 2;++k)
    995                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
    996                 break;
    997 
    998             case VAIQMatrixBufferType:
    999                 for(j=0;j<96;j=j+16) {
   1000                     fprintf(psb_dump_vabuf_verbose_fp,"\nScalingList4x4_%d:", j/16);
   1001                     for(k=0; k<16;++k) {
   1002                         if(k%4 == 0) fprintf(psb_dump_vabuf_verbose_fp, "\n");
   1003                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x   ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1004                     }
   1005                 }
   1006                 for(j=96;j<224;j=j+64) {
   1007                     fprintf(psb_dump_vabuf_verbose_fp,"\nScalingList4x4_%d:",( j-96)/64);
   1008                     for(k=0; k<64;++k) {
   1009                         if(k%8 == 0) fprintf(psb_dump_vabuf_verbose_fp, "\n");
   1010                         fprintf(psb_dump_vabuf_verbose_fp, "0x%02x   ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1011                     }
   1012                 }
   1013                 break;
   1014 
   1015             case VASliceParameterBufferType:
   1016                 j=0;k=0;
   1017                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_data_size:");
   1018                 for(k=0;k < 4;++k)
   1019                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1020                 j=4;k=0;
   1021                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_data_offset:");
   1022                 for(k=0;k < 4;++k)
   1023                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1024                 j=8;k=0;
   1025                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_data_flag:");
   1026                 for(k=0;k < 4;++k)
   1027                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1028                 j=12;k=0;
   1029                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_data_bit_offset:");
   1030                 for(k=0;k < 2;++k)
   1031                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1032                 j=14;k=0;
   1033                 fprintf(psb_dump_vabuf_verbose_fp,"\nfirst_mb_in_slice:");
   1034                 for(k=0;k < 2;++k)
   1035                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1036                 j=16;k=0;
   1037                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_type:");
   1038                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1039                 j=17;k=0;
   1040                 fprintf(psb_dump_vabuf_verbose_fp,"\ndirect_spatial_mv_pred_flag:");
   1041                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1042                 j=18;k=0;
   1043                 fprintf(psb_dump_vabuf_verbose_fp,  "\nnum_ref_idx_l0_active_minus1:");
   1044                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1045                 j=19;k=0;
   1046                 fprintf(psb_dump_vabuf_verbose_fp, "\nnum_ref_idx_l1_active_minus1:");
   1047                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1048                 j=20;k=0;
   1049                 fprintf(psb_dump_vabuf_verbose_fp,"\ncabac_init_idc:");
   1050                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1051                 j=21;k=0;
   1052                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_qp_delta:");
   1053                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1054                 j=22;k=0;
   1055                 fprintf(psb_dump_vabuf_verbose_fp, "\ndisable_deblocking_filter_idc:");
   1056                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1057                 j=23;k=0;
   1058                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_alpha_c0_offset_div2:");
   1059                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1060                 j=24;k=0;
   1061                 fprintf(psb_dump_vabuf_verbose_fp,"\nslice_beta_offset_div2:");
   1062                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1063                 for(j=28; j < 668; j = j+20) {
   1064                     fprintf(psb_dump_vabuf_verbose_fp,"\nRefPicList0 ListIndex=%d\n", (j -28)/ 20);
   1065                     fprintf(psb_dump_vabuf_verbose_fp,"picture_id:");
   1066                     for(k=0;k < 4;++k)
   1067                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1068                         fprintf(psb_dump_vabuf_verbose_fp,"   frame_idx:");
   1069                     for(k=4;k < 8;++k)
   1070                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1071                         fprintf(psb_dump_vabuf_verbose_fp,"   flags:");
   1072                     for(k=8;k < 12;++k)
   1073                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1074                         fprintf(psb_dump_vabuf_verbose_fp,"   TopFieldOrderCnt:");
   1075                     for(k=12;k < 16;++k)
   1076                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1077                         fprintf(psb_dump_vabuf_verbose_fp,"   BottomFieldOrderCnt:");
   1078                     for(k=16;k < 20;++k)
   1079                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1080                     }
   1081                 for(j=668; j < 1308; j = j+20) {
   1082                     fprintf(psb_dump_vabuf_verbose_fp,"\nRefPicList1 ListIndex=%d\n", (j -668)/ 20);
   1083                     fprintf(psb_dump_vabuf_verbose_fp,"picture_id:");
   1084                     for(k=0;k < 4;++k)
   1085                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1086                         fprintf(psb_dump_vabuf_verbose_fp,"   frame_idx:");
   1087                     for(k=4;k < 8;++k)
   1088                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1089                         fprintf(psb_dump_vabuf_verbose_fp,"   flags:");
   1090                     for(k=8;k < 12;++k)
   1091                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1092                         fprintf(psb_dump_vabuf_verbose_fp,"   TopFieldOrderCnt:");
   1093                     for(k=12;k < 16;++k)
   1094                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1095                         fprintf(psb_dump_vabuf_verbose_fp,"   BottomFieldOrderCnt:");
   1096                     for(k=16;k < 20;++k)
   1097                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1098                     }
   1099                 j=1308;k=0;
   1100                 fprintf(psb_dump_vabuf_verbose_fp,"\nluma_log2_weight_denom:");
   1101                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1102 j=1309;k=0;
   1103                 fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_log2_weight_denom:");
   1104                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1105                 j=1310;k=0;
   1106                 fprintf(psb_dump_vabuf_verbose_fp,"\nluma_weight_l0_flag:");
   1107                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1108                 j=1312;k=0;
   1109                 fprintf(psb_dump_vabuf_verbose_fp,"\nluma_weight_l0:");
   1110                 for(j=1312;j<1376;j=j+2) {
   1111                     if((j-1312)%16 == 0)fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1112                     fprintf(psb_dump_vabuf_verbose_fp,"     :");
   1113                     for(k=0;k < 2;++k)
   1114                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1115                 }
   1116                 fprintf(psb_dump_vabuf_verbose_fp,"\nluma_offset_l0:");
   1117                 for(j=1376;j<1440;j=j+2) {
   1118                     if((j-1376)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1119                     fprintf(psb_dump_vabuf_verbose_fp,"     ");
   1120                     for(k=0;k < 2;++k)
   1121                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1122                 }
   1123                 j=1440;k=0;
   1124                 fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_weight_l0_flag:");
   1125                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1126                 j=1442;k=0;
   1127                 fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_weight_l0:");
   1128                 for(j=1442;j<1570;j=j+4) {
   1129                     if((j-1442)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1130                     fprintf(psb_dump_vabuf_verbose_fp,"     ");
   1131                     for(k=0;k < 2;++k)
   1132                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1133                         fprintf(psb_dump_vabuf_verbose_fp," , ");
   1134                     for(k=2;k < 4;++k)
   1135                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1136 
   1137                 }
   1138 
   1139                 fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_offset_l0:");
   1140                 for(j=1570;j<1698;j=j+4) {
   1141                     if((j-1570)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1142                     fprintf(psb_dump_vabuf_verbose_fp,"     ");
   1143                     for(k=0;k < 2;++k)
   1144                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1145                         fprintf(psb_dump_vabuf_verbose_fp," , ");
   1146                     for(k=2;k < 4;++k)
   1147                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1148                 }
   1149                 j=1698;k=0;
   1150                 fprintf(psb_dump_vabuf_verbose_fp,"\nluma_weight_l1_flag:");
   1151                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1152                 fprintf(psb_dump_vabuf_verbose_fp,"\nluma_weight_l1:");
   1153                 for(j=1700;j<1764;j=j+2) {
   1154                     if((j-1700)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1155                     fprintf(psb_dump_vabuf_verbose_fp,"     ");
   1156                     for(k=0;k < 2;++k)
   1157                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1158                 }
   1159                 fprintf(psb_dump_vabuf_verbose_fp,"\nluma_offset_l1:");
   1160                 for(j=1764;j<1828;j=j+2) {
   1161                     if((j-1764)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1162                     fprintf(psb_dump_vabuf_verbose_fp,"     ");
   1163                     for(k=0;k < 2;++k)
   1164                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1165                 }
   1166                 j=1828;k=0;
   1167                 fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_weight_l1_flag:");
   1168                 fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1169                 fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_weight_l1:");
   1170                 for(j=1830;j<1958;j=j+4) {
   1171                     if((j-1830)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1172                     fprintf(psb_dump_vabuf_verbose_fp,"     ");
   1173                     for(k=0;k < 2;++k)
   1174                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1175                         fprintf(psb_dump_vabuf_verbose_fp," , ");
   1176                     for(k=2;k < 4;++k)
   1177                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1178                 }
   1179                 fprintf(psb_dump_vabuf_verbose_fp,"\nchroma_offset_l1:");
   1180                 for(j=1958;j<2086;j=j+4) {
   1181                     if((j-1958)%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1182                     fprintf(psb_dump_vabuf_verbose_fp,"     ");
   1183                     for(k=0;k < 2;++k)
   1184                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1185                         fprintf(psb_dump_vabuf_verbose_fp," , ");
   1186                     for(k=2;k < 4;++k)
   1187                     fprintf(psb_dump_vabuf_verbose_fp,"0x%02x ",*((unsigned char *)(obj_buffer->buffer_data+obj_buffer->num_elements*j+k)));
   1188                 }
   1189                 break;
   1190 
   1191             case VASliceGroupMapBufferType:
   1192                 psb_buffer_map(obj_buffer->psb_buffer, (unsigned char **)&mapped_buffer);
   1193                 if(mapped_buffer == NULL)
   1194                     return VA_STATUS_ERROR_INVALID_BUFFER;
   1195 
   1196                 for(j=0; j<obj_buffer->size;++j) {
   1197                     if(j%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1198                     for(k=0;k < obj_buffer->num_elements;++k)
   1199                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x   ",*((unsigned char *)(mapped_buffer+obj_buffer->num_elements*j+k)));
   1200                 }
   1201                 psb_buffer_unmap(obj_buffer->psb_buffer);
   1202                 break;
   1203 
   1204             case VASliceDataBufferType:
   1205             case VAProtectedSliceDataBufferType:
   1206                 fprintf(psb_dump_vabuf_verbose_fp,"first 256 bytes:\n");
   1207                 psb_buffer_map(obj_buffer->psb_buffer,(unsigned char **)&mapped_buffer);
   1208                 if(mapped_buffer == NULL)
   1209                     return VA_STATUS_ERROR_INVALID_BUFFER;
   1210                 for(j=0; j<256;++j) {
   1211                     if(j%16 == 0) fprintf(psb_dump_vabuf_verbose_fp,"\n");
   1212                     for(k=0;k < obj_buffer->num_elements;++k)
   1213                         fprintf(psb_dump_vabuf_verbose_fp,"0x%02x   ",*((unsigned char *)(mapped_buffer+obj_buffer->num_elements*j+k)));
   1214                 }
   1215                 psb_buffer_unmap(obj_buffer->psb_buffer);
   1216                 break;
   1217             default:
   1218                 break;
   1219 
   1220             }
   1221         fprintf(psb_dump_vabuf_verbose_fp, "\n");
   1222         fflush(psb_dump_vabuf_verbose_fp);
   1223         fsync(fileno(psb_dump_vabuf_verbose_fp));
   1224     }
   1225     return 0;
   1226 }
   1227 
   1228