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