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