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