OSDN Git Service

Fix tracing index allocation issue
[android-x86/hardware-intel-common-libva.git] / va / va_trace.c
1
2 /*
3  * Copyright (c) 2009-2011 Intel Corporation. All Rights Reserved.
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
26 #define _GNU_SOURCE 1
27 #include "sysdeps.h"
28 #include "va.h"
29 #include "va_enc_h264.h"
30 #include "va_backend.h"
31 #include "va_internal.h"
32 #include "va_trace.h"
33 #include "va_enc_h264.h"
34 #include "va_enc_jpeg.h"
35 #include "va_enc_vp8.h"
36 #include "va_dec_jpeg.h"
37 #include "va_dec_vp8.h"
38 #include "va_dec_vp9.h"
39 #include "va_dec_hevc.h"
40 #include "va_str.h"
41 #include "va_vpp.h"
42 #include <assert.h>
43 #include <stdarg.h>
44 #include <stdlib.h>
45 #include <stdio.h>
46 #include <string.h>
47 #include <dlfcn.h>
48 #include <unistd.h>
49 #include <sys/types.h>
50 #include <sys/stat.h>
51 #include <sys/syscall.h>
52 #include <pthread.h>
53 #include <unistd.h>
54 #include <time.h>
55 #include <errno.h>
56
57 /*
58  * Env. to debug some issue, e.g. the decode/encode issue in a video conference scenerio:
59  * .LIBVA_TRACE=log_file: general VA parameters saved into log_file
60  * .LIBVA_TRACE_BUFDATA: dump all VA data buffer into log_file
61  * .LIBVA_TRACE_CODEDBUF=coded_clip_file: save the coded clip into file coded_clip_file
62  * .LIBVA_TRACE_SURFACE=yuv_file: save surface YUV into file yuv_file. Use file name to determine
63  *                                decode/encode or jpeg surfaces
64  * .LIBVA_TRACE_SURFACE_GEOMETRY=WIDTHxHEIGHT+XOFF+YOFF: only save part of surface context into file
65  *                                due to storage bandwidth limitation
66  */
67
68 /* global settings */
69
70 /* LIBVA_TRACE */
71 int va_trace_flag = 0;
72
73 #define MAX_TRACE_CTX_NUM   64
74 #define TRACE_CTX_ID_MASK      (MAX_TRACE_CTX_NUM - 1)
75
76 #define MAX_TRACE_THREAD_NUM   64
77
78 #define MAX_TRACE_BUF_INFO_HASH_SIZE     1024 // 1<<10
79 #define MAX_TRACE_BUF_INFO_HASH_LEVEL    3
80 #define TRACE_BUF_INFO_HASH_ID_MASK         (MAX_TRACE_BUF_INFO_HASH_SIZE - 1)
81
82 struct trace_buf_info {
83     int valid;
84
85     VABufferID buf_id;
86     VAContextID ctx_id;
87 };
88
89 struct trace_buf_manager {
90     struct trace_buf_info *pbuf_info[MAX_TRACE_BUF_INFO_HASH_LEVEL];
91 };
92
93 struct trace_log_file {
94     pid_t thread_id;
95     int used;
96
97     char *fn_log;
98     FILE *fp_log;
99 };
100
101 struct trace_log_files_manager {
102     int num;
103
104     struct trace_log_file log_file[MAX_TRACE_THREAD_NUM];
105 };
106
107 /* per context settings */
108 struct trace_context {
109     struct trace_log_file *plog_file;
110     struct trace_log_file *plog_file_list[MAX_TRACE_THREAD_NUM];
111
112     /* LIBVA_TRACE_CODEDBUF */
113     FILE *trace_fp_codedbuf; /* save the encode result into a file */
114     char *trace_codedbuf_fn; /* file name */
115
116     /* LIBVA_TRACE_SURFACE */
117     FILE *trace_fp_surface; /* save the surface YUV into a file */
118     char *trace_surface_fn; /* file name */
119
120     VAContextID  trace_context; /* current context */
121     
122     VASurfaceID  trace_rendertarget; /* current render target */
123     VAProfile trace_profile; /* current profile for buffers */
124     VAEntrypoint trace_entrypoint; /* current entrypoint */
125     
126     unsigned int trace_frame_no; /* current frame NO */
127     unsigned int trace_slice_no; /* current slice NO */
128     unsigned int trace_slice_size; /* current slice buffer size */
129
130     unsigned int trace_surface_width; /* surface dumping geometry */
131     unsigned int trace_surface_height;
132     unsigned int trace_surface_xoff;
133     unsigned int trace_surface_yoff;
134
135     unsigned int trace_frame_width; /* current frame width */
136     unsigned int trace_frame_height; /* current frame height */
137
138     unsigned int pts; /* IVF header information */
139
140     pid_t created_thd_id;
141 };
142
143 struct trace_config_info {
144     int valid;
145     VAConfigID config_id;
146
147     VAProfile trace_profile;
148     VAEntrypoint trace_entrypoint;
149
150     pid_t created_thd_id;
151 };
152
153 struct va_trace {
154     struct trace_context *ptra_ctx[MAX_TRACE_CTX_NUM + 1];
155     int context_num;
156     struct trace_buf_manager buf_manager;
157     struct trace_log_files_manager log_files_manager;
158     struct trace_config_info config_info[MAX_TRACE_CTX_NUM];
159
160     char *fn_log_env;
161     char *fn_codedbuf_env;
162     char *fn_surface_env;
163
164     pthread_mutex_t resource_mutex;
165     pthread_mutex_t context_mutex;
166     VADisplay dpy;
167 };
168
169 #define LOCK_RESOURCE(pva_trace)                                    \
170     if(pva_trace)                                                   \
171         pthread_mutex_lock(&pva_trace->resource_mutex)
172
173 #define UNLOCK_RESOURCE(pva_trace)                                  \
174     if(pva_trace)                                                   \
175         pthread_mutex_unlock(&pva_trace->resource_mutex)
176
177 #define LOCK_CONTEXT(pva_trace)                                     \
178         if(pva_trace)                                               \
179             pthread_mutex_lock(&pva_trace->context_mutex)
180
181 #define UNLOCK_CONTEXT(pva_trace)                                   \
182         if(pva_trace)                                               \
183             pthread_mutex_unlock(&pva_trace->context_mutex)
184
185 #define DPY2TRACECTX(dpy, context, buf_id)                                  \
186     struct va_trace *pva_trace = NULL;                                      \
187     struct trace_context *trace_ctx = NULL;                                 \
188     int ctx_id = context;                                                   \
189                                                                             \
190     pva_trace = (struct va_trace *)(((VADisplayContextP)dpy)->vatrace);     \
191     if(!pva_trace)                                                          \
192         return;                                                             \
193                                                                             \
194     if(ctx_id == VA_INVALID_ID) {                                           \
195         if(buf_id != VA_INVALID_ID)                                         \
196             ctx_id = get_ctx_by_buf(pva_trace, buf_id);                     \
197         else                                                                \
198             return;                                                         \
199     }                                                                       \
200                                                                             \
201     if (ctx_id != VA_INVALID_ID) {                                          \
202         int temp_idx = get_valid_ctx_idx(pva_trace, ctx_id);                \
203         if(temp_idx < MAX_TRACE_CTX_NUM)                                    \
204             trace_ctx = pva_trace->ptra_ctx[temp_idx];                      \
205     }                                                                       \
206                                                                             \
207     if(!trace_ctx                                                           \
208         || trace_ctx->trace_context != context) {                           \
209         return;                                                             \
210     }                                                                       \
211     refresh_log_file(pva_trace, trace_ctx)
212
213 #define DPY2TRACE_VIRCTX(dpy)                                               \
214     struct va_trace *pva_trace = NULL;                                      \
215     struct trace_context *trace_ctx = NULL;                                 \
216                                                                             \
217     pva_trace = (struct va_trace *)(((VADisplayContextP)dpy)->vatrace);     \
218     if(!pva_trace)                                                          \
219         return;                                                             \
220                                                                             \
221     LOCK_CONTEXT(pva_trace);                                                \
222     trace_ctx = pva_trace->ptra_ctx[MAX_TRACE_CTX_NUM];                     \
223     if(!trace_ctx) {                                                        \
224         UNLOCK_CONTEXT(pva_trace);                                          \
225         return;                                                             \
226     }                                                                       \
227     refresh_log_file(pva_trace, trace_ctx)
228
229 #define DPY2TRACE_VIRCTX_EXIT(pva_trace)                                \
230     UNLOCK_CONTEXT(pva_trace)
231
232 #define TRACE_FUNCNAME(idx)    va_TraceMsg(trace_ctx, "==========%s\n", __func__); 
233
234 #define TRACE_NEWLINE() do { \
235     va_TracePrint(trace_ctx, "\n"); \
236     va_TraceMsg(trace_ctx, "") ; \
237 } while (0)
238
239
240 VAStatus vaBufferInfo(
241     VADisplay dpy,
242     VAContextID context,        /* in */
243     VABufferID buf_id,          /* in */
244     VABufferType *type,         /* out */
245     unsigned int *size,         /* out */
246     unsigned int *num_elements  /* out */
247     );
248
249 VAStatus vaLockSurface(VADisplay dpy,
250                        VASurfaceID surface,
251                        unsigned int *fourcc, /* following are output argument */
252                        unsigned int *luma_stride,
253                        unsigned int *chroma_u_stride,
254                        unsigned int *chroma_v_stride,
255                        unsigned int *luma_offset,
256                        unsigned int *chroma_u_offset,
257                        unsigned int *chroma_v_offset,
258                        unsigned int *buffer_name,
259                        void **buffer 
260                        );
261
262 VAStatus vaUnlockSurface(VADisplay dpy,
263                          VASurfaceID surface
264                          );
265
266 static int get_valid_config_idx(
267     struct va_trace *pva_trace,
268     VAConfigID config_id)
269 {
270     struct trace_config_info *pconfig_info;
271     int idx = MAX_TRACE_CTX_NUM;
272
273     LOCK_RESOURCE(pva_trace);
274
275     for (idx = 0;idx < MAX_TRACE_CTX_NUM;idx++) {
276         if (pva_trace->config_info[idx].valid &&
277             pva_trace->config_info[idx].config_id == config_id)
278             break;
279     }
280
281     UNLOCK_RESOURCE(pva_trace);
282
283     return idx;
284 }
285
286 static void add_trace_config_info(
287     struct va_trace *pva_trace,
288     VAConfigID config_id,
289     VAProfile profile,
290     VAEntrypoint entrypoint)
291 {
292     struct trace_config_info *pconfig_info;
293     int idx = 0;
294     pid_t thd_id = syscall(__NR_gettid);
295
296     LOCK_RESOURCE(pva_trace);
297
298     for (idx = 0;idx < MAX_TRACE_CTX_NUM;idx++) {
299         if (!pva_trace->config_info[idx].valid ||
300             pva_trace->config_info[idx].config_id == config_id)
301             break;
302     }
303
304     if (idx < MAX_TRACE_CTX_NUM) {
305         pconfig_info = &pva_trace->config_info[idx];
306
307         pconfig_info->valid = 1;
308         pconfig_info->config_id = config_id;
309         pconfig_info->trace_profile = profile;
310         pconfig_info->trace_entrypoint = entrypoint;
311         pconfig_info->created_thd_id = thd_id;
312     }
313
314     UNLOCK_RESOURCE(pva_trace);
315 }
316
317 static void delete_trace_config_info(
318     struct va_trace *pva_trace,
319     VAConfigID config_id)
320 {
321     struct trace_config_info *pconfig_info;
322     int idx = 0;
323
324     LOCK_RESOURCE(pva_trace);
325
326     for (idx = 0;idx < MAX_TRACE_CTX_NUM;idx++) {
327         if (pva_trace->config_info[idx].valid &&
328             pva_trace->config_info[idx].config_id == config_id)
329             break;
330     }
331
332     if (idx < MAX_TRACE_CTX_NUM) {
333         pconfig_info = &pva_trace->config_info[idx];
334
335         pconfig_info->valid = 0;
336         pconfig_info->config_id = -1;
337     }
338
339     UNLOCK_RESOURCE(pva_trace);
340 }
341
342 static VAContextID get_ctx_by_buf(
343     struct va_trace *pva_trace,
344     VABufferID buf_id)
345 {
346     struct trace_buf_manager *pbuf_mgr = &pva_trace->buf_manager;
347     struct trace_buf_info *pbuf_info = pbuf_mgr->pbuf_info[0];
348     VAContextID context = VA_INVALID_ID;
349     int i = 0, idx = 0;
350
351     LOCK_RESOURCE(pva_trace);
352
353     idx = buf_id & TRACE_BUF_INFO_HASH_ID_MASK;
354     for(i = 0;i < MAX_TRACE_BUF_INFO_HASH_LEVEL;i++) {
355         pbuf_info = pbuf_mgr->pbuf_info[i];
356         if(!pbuf_info)
357             break;
358
359         if(pbuf_info[idx].valid
360             && pbuf_info[idx].buf_id == buf_id) {
361             context = pbuf_info[idx].ctx_id;
362             break;
363         }
364     }
365
366     UNLOCK_RESOURCE(pva_trace);
367
368     return context;
369 }
370
371 static void add_trace_buf_info(
372     struct va_trace *pva_trace,
373     VAContextID context,
374     VABufferID buf_id)
375 {
376     struct trace_buf_manager *pbuf_mgr = &pva_trace->buf_manager;
377     struct trace_buf_info *pbuf_info = NULL;
378     int i = 0, idx = 0;
379
380     LOCK_RESOURCE(pva_trace);
381
382     idx = buf_id & TRACE_BUF_INFO_HASH_ID_MASK;
383     for(i = 0;i < MAX_TRACE_BUF_INFO_HASH_LEVEL;i++) {
384         pbuf_info = pbuf_mgr->pbuf_info[i];
385         if(!pbuf_info) {
386             pbuf_info = (struct trace_buf_info *)calloc(
387                 sizeof(struct trace_buf_info) * MAX_TRACE_BUF_INFO_HASH_SIZE,
388                 1);
389             if(!pbuf_info)
390                 break;
391
392             pbuf_mgr->pbuf_info[i] = pbuf_info;
393         }
394
395         if(pbuf_info[idx].valid
396             && pbuf_info[idx].buf_id != buf_id)
397             continue;
398
399         pbuf_info[idx].buf_id = buf_id;
400         pbuf_info[idx].ctx_id = context;
401         pbuf_info[idx].valid = 1;
402         break;
403     }
404
405     if(i >= MAX_TRACE_BUF_INFO_HASH_LEVEL)
406         va_errorMessage(pva_trace->dpy, "Add buf info failed\n");
407
408     UNLOCK_RESOURCE(pva_trace);
409 }
410
411 static void delete_trace_buf_info(
412     struct va_trace *pva_trace,
413     VABufferID buf_id)
414 {
415     struct trace_buf_manager *pbuf_mgr = &pva_trace->buf_manager;
416     struct trace_buf_info *pbuf_info = NULL;
417     int i = 0, idx = 0;
418
419     LOCK_RESOURCE(pva_trace);
420
421     idx = buf_id & TRACE_BUF_INFO_HASH_ID_MASK;
422     for(i = 0;i < MAX_TRACE_BUF_INFO_HASH_LEVEL;i++) {
423         pbuf_info = pbuf_mgr->pbuf_info[i];
424         if(!pbuf_info)
425             break;
426
427         if(pbuf_info[idx].valid
428             && pbuf_info[idx].buf_id == buf_id) {
429             pbuf_info[idx].valid = 0;
430             break;
431         }
432     }
433
434     UNLOCK_RESOURCE(pva_trace);
435 }
436
437 /*
438 static void delete_trace_all_context_buf(
439     struct va_trace *pva_trace,
440     VAContextID context)
441 {
442     struct trace_buf_manager *pbuf_mgr = &pva_trace->buf_manager;
443     struct trace_buf_info *pbuf_info = NULL;
444     int i = 0, j = 0;
445
446     LOCK_RESOURCE(pva_trace);
447
448     for(i = 0;i < MAX_TRACE_BUF_INFO_HASH_LEVEL;i++) {
449         pbuf_info = pbuf_mgr->pbuf_info[i];
450         if(!pbuf_info)
451             break;
452
453         for(j = 0;j < MAX_TRACE_BUF_INFO_HASH_SIZE;j++)
454             if(pbuf_info[j].valid
455                 && pbuf_info[j].ctx_id == context)
456                 pbuf_info[j].valid = 0;
457     }
458
459     UNLOCK_RESOURCE(pva_trace);
460 }
461 */
462
463 static int get_free_ctx_idx(
464     struct va_trace *pva_trace,
465     VAContextID context)
466 {
467     int idx;
468
469     LOCK_RESOURCE(pva_trace);
470
471     for (idx = 0;idx < MAX_TRACE_CTX_NUM;idx++)
472         if (!pva_trace->ptra_ctx[idx] ||
473             pva_trace->ptra_ctx[idx]->trace_context == context)
474             break;
475
476     UNLOCK_RESOURCE(pva_trace);
477
478     return idx;
479 }
480
481 static int get_valid_ctx_idx(
482     struct va_trace *pva_trace,
483     VAContextID context)
484 {
485     int idx;
486
487     LOCK_RESOURCE(pva_trace);
488
489     for (idx = 0;idx < MAX_TRACE_CTX_NUM;idx++)
490         if (pva_trace->ptra_ctx[idx] &&
491             pva_trace->ptra_ctx[idx]->trace_context == context)
492             break;
493
494     UNLOCK_RESOURCE(pva_trace);
495
496     return idx;
497 }
498
499 static void FILE_NAME_SUFFIX(
500     char *env_value,
501     int max_size,
502     char *suffix_str,
503     unsigned int suffix_handle)
504 {
505     int tmp = strnlen(env_value, max_size);
506     int left = max_size - tmp;
507     struct timeval tv;
508     int size = 0;
509
510     if (suffix_str)
511         size = strlen(suffix_str);
512
513     if(left < (size + 8 + 10))
514         return;
515
516     if(gettimeofday(&tv, NULL) == 0) {
517         sprintf(env_value + tmp,
518             ".%02d%02d%02d.",
519             (unsigned int)(tv.tv_sec/3600)%24,
520             (unsigned int)(tv.tv_sec/60)%60,
521             (unsigned int)tv.tv_sec%60);
522
523         tmp += 8;
524         left -= 8;
525     }
526
527     if(suffix_str) {
528         strcat(env_value + tmp,
529             suffix_str);
530
531         tmp += size;
532         left -= size;
533     }
534
535     if(suffix_handle) {
536         sprintf(env_value + tmp,
537             "0x%08x",
538             suffix_handle);
539     }
540 }
541
542 static int open_tracing_specil_file(
543     struct va_trace *pva_trace,
544     struct trace_context *ptra_ctx,
545     int type) // 0: codedbuf, 1: surface
546 {
547     char *fn_env = type == 0 ?
548         pva_trace->fn_codedbuf_env : pva_trace->fn_surface_env;
549     char env_value[1024];
550     FILE *fp = NULL;
551
552     strncpy(env_value, fn_env, 1024);
553     env_value[1023] = '\0';
554     FILE_NAME_SUFFIX(env_value, 1024,
555         "ctx-", (unsigned int)ptra_ctx->trace_context);
556
557     fn_env = strdup(env_value);
558     if(!fn_env)
559         return -1;
560
561     fp = fopen(fn_env, "w");
562     if(!fp) {
563         free(fn_env);
564
565         return -1;
566     }
567
568     if(type == 0) {
569         ptra_ctx->trace_codedbuf_fn = fn_env;
570         ptra_ctx->trace_fp_codedbuf = fp;
571         va_infoMessage(pva_trace->dpy, "LIBVA_TRACE_CODEDBUF is on, save codedbuf into %s\n",
572             fn_env);
573     }
574     else {
575         ptra_ctx->trace_surface_fn = fn_env;
576         ptra_ctx->trace_fp_surface = fp;
577         va_infoMessage(pva_trace->dpy, "LIBVA_TRACE_SURFACE is on, save surface into %s\n",
578             fn_env);
579     }
580
581     return 0;
582 }
583
584 static int open_tracing_log_file(
585     struct va_trace *pva_trace,
586     struct trace_log_file *plog_file,
587     pid_t thd_id)
588 {
589     FILE *pfp = NULL;
590     int new_fn_flag = 0;
591
592     if(plog_file->used && plog_file->thread_id != thd_id) {
593         va_errorMessage(pva_trace->dpy, "Try to open a busy log file occupied by other thread\n");
594
595         return -1;
596     }
597
598     if(plog_file->thread_id != thd_id) {
599         char env_value[1024];
600
601         strncpy(env_value, pva_trace->fn_log_env, 1024);
602         env_value[1023] = '\0';
603         FILE_NAME_SUFFIX(env_value, 1024,
604             "thd-", (unsigned int)thd_id);
605
606         if(plog_file->fn_log)
607             free(plog_file->fn_log);
608
609         plog_file->fn_log = strdup(env_value);
610         if(!plog_file->fn_log)
611             goto FAIL;
612
613         new_fn_flag = 1;
614     }
615
616     if(!plog_file->used) {
617         if(new_fn_flag)
618             pfp = fopen(plog_file->fn_log, "w");
619         else
620             pfp = fopen(plog_file->fn_log, "a");
621
622         if(!pfp)
623             goto FAIL;
624
625         va_infoMessage(pva_trace->dpy, "%s %s for the thread 0x%08x\n",
626             new_fn_flag ? "Open new log file" : "Append to log file",
627             plog_file->fn_log, thd_id);
628
629         plog_file->fp_log = pfp;
630         plog_file->thread_id = thd_id;
631     }
632
633     plog_file->used++;
634     return 0;
635
636 FAIL:
637     if(plog_file->fn_log) {
638         free(plog_file->fn_log);
639         plog_file->fn_log = NULL;
640     }
641
642     return -1;
643 }
644
645 static int get_log_file_idx_by_thd(
646     struct trace_log_files_manager *plog_files_mgr,
647     pid_t thd_id)
648 {
649     struct trace_log_file *plog_file = plog_files_mgr->log_file;
650     int first_free_idx = MAX_TRACE_THREAD_NUM;
651     int i = 0;
652
653     for(i = 0;i < MAX_TRACE_THREAD_NUM;i++) {
654         if(plog_file[i].thread_id == thd_id)
655             break;
656         else if(!plog_file[i].used &&
657             first_free_idx >= MAX_TRACE_THREAD_NUM)
658             first_free_idx = i;
659     }
660
661     if(i >= MAX_TRACE_THREAD_NUM)
662         i = first_free_idx;
663
664     return i;
665 }
666
667 static struct trace_log_file *start_tracing2log_file(
668     struct va_trace *pva_trace)
669 {
670     struct trace_log_files_manager *plog_files_mgr = NULL;
671     struct trace_log_file *plog_file = NULL;
672     pid_t thd_id = syscall(__NR_gettid);
673     int i = 0;
674
675     LOCK_RESOURCE(pva_trace);
676
677     plog_files_mgr = &pva_trace->log_files_manager;
678     i = get_log_file_idx_by_thd(plog_files_mgr, thd_id);
679     if(i < MAX_TRACE_THREAD_NUM) {
680         plog_file = &plog_files_mgr->log_file[i];
681         if(open_tracing_log_file(pva_trace, plog_file, thd_id) < 0) {
682             plog_file = NULL;
683         }
684     }
685
686     UNLOCK_RESOURCE(pva_trace);
687     return plog_file;
688 }
689
690 static void stop_tracing2log_file(
691     struct va_trace *pva_trace,
692     struct trace_log_file *plog_file)
693 {
694     LOCK_RESOURCE(pva_trace);
695
696     if(--plog_file->used <= 0) {
697         if(plog_file->fp_log) {
698             fclose(plog_file->fp_log);
699             plog_file->fp_log = NULL;
700         }
701     }
702
703     UNLOCK_RESOURCE(pva_trace);
704 }
705
706 static void refresh_log_file(
707     struct va_trace *pva_trace,
708     struct trace_context *ptra_ctx)
709 {
710     struct trace_log_file *plog_file = NULL;
711     pid_t thd_id = syscall(__NR_gettid);
712     int i = 0;
713
714     plog_file = ptra_ctx->plog_file;
715     if(plog_file && plog_file->thread_id != thd_id) {
716         plog_file = start_tracing2log_file(pva_trace);
717         if(plog_file) {
718             int first_free_idx = -1;
719
720             ptra_ctx->plog_file = plog_file;
721
722             for(i = 0;i < MAX_TRACE_THREAD_NUM;i++) {
723                 if(!ptra_ctx->plog_file_list[i]){
724                     if(first_free_idx < 0)
725                         first_free_idx = i;
726                 }
727                 else if(ptra_ctx->plog_file_list[i]->thread_id == thd_id)
728                     break;
729             }
730
731             if(i > MAX_TRACE_THREAD_NUM
732                 && first_free_idx >= 0)
733                 ptra_ctx->plog_file_list[first_free_idx] = plog_file;
734         }
735     }
736 }
737
738 void va_TraceInit(VADisplay dpy)
739 {
740     char env_value[1024];
741     struct va_trace *pva_trace = calloc(sizeof(struct va_trace), 1);
742     struct trace_context *trace_ctx = calloc(sizeof(struct trace_context), 1);
743
744     if (pva_trace == NULL || trace_ctx == NULL) {
745         free(pva_trace);
746         free(trace_ctx);
747
748         return;
749     }
750
751     pva_trace->dpy = dpy;
752
753     pthread_mutex_init(&pva_trace->resource_mutex, NULL);
754     pthread_mutex_init(&pva_trace->context_mutex, NULL);
755
756     if (va_parseConfig("LIBVA_TRACE", &env_value[0]) == 0) {
757         pva_trace->fn_log_env = strdup(env_value);
758         trace_ctx->plog_file = start_tracing2log_file(pva_trace);
759         if(trace_ctx->plog_file) {
760             trace_ctx->plog_file_list[0] = trace_ctx->plog_file;
761             va_trace_flag = VA_TRACE_FLAG_LOG;
762
763             va_infoMessage(dpy, "LIBVA_TRACE is on, save log into %s\n",
764                 trace_ctx->plog_file->fn_log);
765         }
766         else
767             va_errorMessage(dpy, "Open file %s failed (%s)\n", env_value, strerror(errno));
768     }
769
770     /* may re-get the global settings for multiple context */
771     if ((va_trace_flag & VA_TRACE_FLAG_LOG) && (va_parseConfig("LIBVA_TRACE_BUFDATA", NULL) == 0)) {
772         va_trace_flag |= VA_TRACE_FLAG_BUFDATA;
773
774         va_infoMessage(dpy, "LIBVA_TRACE_BUFDATA is on, dump buffer into log file\n");
775     }
776
777     /* per-context setting */
778     if (va_parseConfig("LIBVA_TRACE_CODEDBUF", &env_value[0]) == 0) {
779         pva_trace->fn_codedbuf_env = strdup(env_value);
780         va_trace_flag |= VA_TRACE_FLAG_CODEDBUF;
781     }
782
783     if (va_parseConfig("LIBVA_TRACE_SURFACE", &env_value[0]) == 0) {
784         pva_trace->fn_surface_env = strdup(env_value);
785
786         /* for surface data dump, it is time-consume, and may
787          * cause some side-effect, so only trace the needed surfaces
788          * to trace encode surface, set the trace file name to sth like *enc*
789          * to trace decode surface, set the trace file name to sth like *dec*
790          * if no dec/enc in file name, set both
791          */
792         if (strstr(env_value, "dec"))
793             va_trace_flag |= VA_TRACE_FLAG_SURFACE_DECODE;
794         if (strstr(env_value, "enc"))
795             va_trace_flag |= VA_TRACE_FLAG_SURFACE_ENCODE;
796         if (strstr(env_value, "jpeg") || strstr(env_value, "jpg"))
797             va_trace_flag |= VA_TRACE_FLAG_SURFACE_JPEG;
798
799         if (va_parseConfig("LIBVA_TRACE_SURFACE_GEOMETRY", &env_value[0]) == 0) {
800             char *p = env_value, *q;
801
802             trace_ctx->trace_surface_width = strtod(p, &q);
803             p = q+1; /* skip "x" */
804             trace_ctx->trace_surface_height = strtod(p, &q);
805             p = q+1; /* skip "+" */
806             trace_ctx->trace_surface_xoff = strtod(p, &q);
807             p = q+1; /* skip "+" */
808             trace_ctx->trace_surface_yoff = strtod(p, &q);
809
810             va_infoMessage(dpy, "LIBVA_TRACE_SURFACE_GEOMETRY is on, only dump surface %dx%d+%d+%d content\n",
811                            trace_ctx->trace_surface_width,
812                            trace_ctx->trace_surface_height,
813                            trace_ctx->trace_surface_xoff,
814                            trace_ctx->trace_surface_yoff);
815         }
816     }
817
818     trace_ctx->trace_context = VA_INVALID_ID;
819     pva_trace->ptra_ctx[MAX_TRACE_CTX_NUM] = trace_ctx;
820
821     ((VADisplayContextP)dpy)->vatrace = (void *)pva_trace;
822
823     if(!va_trace_flag)
824         va_TraceEnd(dpy);
825 }
826
827 void va_TraceEnd(VADisplay dpy)
828 {
829     struct va_trace *pva_trace = NULL;
830     int i = 0;
831
832     pva_trace = (struct va_trace *)(((VADisplayContextP)dpy)->vatrace);
833     if(!pva_trace)
834         return;
835
836     if(pva_trace->fn_log_env)
837         free(pva_trace->fn_log_env);
838
839     if(pva_trace->fn_codedbuf_env)
840         free(pva_trace->fn_codedbuf_env);
841
842     if(pva_trace->fn_surface_env)
843         free(pva_trace->fn_surface_env);
844
845     for(i = 0;i < MAX_TRACE_BUF_INFO_HASH_LEVEL;i++)
846         if(pva_trace->buf_manager.pbuf_info[i])
847             free(pva_trace->buf_manager.pbuf_info[i]);
848
849     for(i = 0;i < MAX_TRACE_THREAD_NUM;i++) {
850         struct trace_log_file *plog_file = NULL;
851
852         if(pva_trace->log_files_manager.num <= 0)
853             break;
854
855         plog_file = &pva_trace->log_files_manager.log_file[i];
856         if(plog_file) {
857             if(plog_file->fn_log)
858                 free(plog_file->fn_log);
859
860             if(plog_file->fp_log)
861                 fclose(plog_file->fp_log);
862
863             pva_trace->log_files_manager.num--;
864         }
865     }
866
867     for(i = 0;i < MAX_TRACE_CTX_NUM;i++) {
868         struct trace_context *trace_ctx = NULL;
869
870         if(pva_trace->context_num <= 0)
871             break;
872
873         trace_ctx = pva_trace->ptra_ctx[i];
874         if(trace_ctx) {
875             if(trace_ctx->trace_codedbuf_fn)
876                 free(trace_ctx->trace_codedbuf_fn);
877
878             if(trace_ctx->trace_fp_codedbuf)
879                 fclose(trace_ctx->trace_fp_codedbuf);
880
881             if(trace_ctx->trace_surface_fn)
882                 free(trace_ctx->trace_surface_fn);
883
884             if(trace_ctx->trace_fp_surface)
885                 fclose(trace_ctx->trace_fp_surface);
886
887             free(pva_trace->ptra_ctx[i]);
888             pva_trace->context_num--;
889         }
890     }
891     free(pva_trace->ptra_ctx[MAX_TRACE_CTX_NUM]);
892
893     pva_trace->dpy = NULL;
894     free(pva_trace);
895     ((VADisplayContextP)dpy)->vatrace = NULL;
896 }
897
898 static void va_TraceVPrint(struct trace_context *trace_ctx, const char *msg, va_list args)
899 {
900     FILE *fp = NULL;
901
902     if (!(va_trace_flag & VA_TRACE_FLAG_LOG)
903         || !trace_ctx->plog_file)
904         return;
905
906     fp = trace_ctx->plog_file->fp_log;
907     if (msg)  {
908         vfprintf(fp, msg, args);
909     } else
910         fflush(fp);
911 }
912
913 static void va_TracePrint(struct trace_context *trace_ctx, const char *msg, ...)
914 {
915     va_list args;
916     va_start(args, msg);
917     va_TraceVPrint(trace_ctx, msg, args);
918     va_end(args);
919 }
920
921 static void va_TraceMsg(struct trace_context *trace_ctx, const char *msg, ...)
922 {
923     va_list args;
924     struct timeval tv;
925
926     if (!msg) {
927         va_TracePrint(trace_ctx, msg);
928         return;
929     }
930
931     if (gettimeofday(&tv, NULL) == 0)
932         va_TracePrint(trace_ctx, "[%04d.%06d]",
933             (unsigned int)tv.tv_sec & 0xffff, (unsigned int)tv.tv_usec);
934
935     if(trace_ctx->trace_context != VA_INVALID_ID)
936         va_TracePrint(trace_ctx,
937             "[ctx 0x%08x]", trace_ctx->trace_context);
938     else
939         va_TracePrint(trace_ctx, "[ctx       none]");
940
941     va_start(args, msg);
942     va_TraceVPrint(trace_ctx, msg, args);
943     va_end(args);
944 }
945
946 static void va_TraceSurface(VADisplay dpy, VAContextID context)
947 {
948     unsigned int i;
949     unsigned int fourcc; /* following are output argument */
950     unsigned int luma_stride;
951     unsigned int chroma_u_stride;
952     unsigned int chroma_v_stride;
953     unsigned int luma_offset;
954     unsigned int chroma_u_offset;
955     unsigned int chroma_v_offset;
956     unsigned int buffer_name;
957     void *buffer = NULL;
958     unsigned char *Y_data, *UV_data, *tmp;
959     VAStatus va_status;
960     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
961
962     if (!trace_ctx->trace_fp_surface)
963         return;
964
965     va_TraceMsg(trace_ctx, "==========dump surface data in file %s\n", trace_ctx->trace_surface_fn);
966
967     va_TraceMsg(trace_ctx, NULL);
968
969     va_status = vaLockSurface(
970         dpy,
971         trace_ctx->trace_rendertarget,
972         &fourcc,
973         &luma_stride, &chroma_u_stride, &chroma_v_stride,
974         &luma_offset, &chroma_u_offset, &chroma_v_offset,
975         &buffer_name, &buffer);
976
977     if (va_status != VA_STATUS_SUCCESS) {
978         va_TraceMsg(trace_ctx, "Error:vaLockSurface failed\n");
979         return;
980     }
981
982     va_TraceMsg(trace_ctx, "\tfourcc = 0x%08x\n", fourcc);
983     va_TraceMsg(trace_ctx, "\twidth = %d\n", trace_ctx->trace_frame_width);
984     va_TraceMsg(trace_ctx, "\theight = %d\n", trace_ctx->trace_frame_height);
985     va_TraceMsg(trace_ctx, "\tluma_stride = %d\n", luma_stride);
986     va_TraceMsg(trace_ctx, "\tchroma_u_stride = %d\n", chroma_u_stride);
987     va_TraceMsg(trace_ctx, "\tchroma_v_stride = %d\n", chroma_v_stride);
988     va_TraceMsg(trace_ctx, "\tluma_offset = %d\n", luma_offset);
989     va_TraceMsg(trace_ctx, "\tchroma_u_offset = %d\n", chroma_u_offset);
990     va_TraceMsg(trace_ctx, "\tchroma_v_offset = %d\n", chroma_v_offset);
991
992     if (buffer == NULL) {
993         va_TraceMsg(trace_ctx, "Error:vaLockSurface return NULL buffer\n");
994         va_TraceMsg(trace_ctx, NULL);
995
996         vaUnlockSurface(dpy, trace_ctx->trace_rendertarget);
997         return;
998     }
999     va_TraceMsg(trace_ctx, "\tbuffer location = 0x%08x\n", buffer);
1000     va_TraceMsg(trace_ctx, NULL);
1001
1002     Y_data = (unsigned char*)buffer;
1003     UV_data = (unsigned char*)buffer + chroma_u_offset;
1004
1005     tmp = Y_data + luma_stride * trace_ctx->trace_surface_yoff;
1006     for (i=0; i<trace_ctx->trace_surface_height; i++) {
1007         fwrite(tmp + trace_ctx->trace_surface_xoff,
1008                trace_ctx->trace_surface_width,
1009                1, trace_ctx->trace_fp_surface);
1010         
1011         tmp += luma_stride;
1012     }
1013     tmp = UV_data + chroma_u_stride * trace_ctx->trace_surface_yoff / 2;
1014     if (fourcc == VA_FOURCC_NV12) {
1015         for (i=0; i<trace_ctx->trace_surface_height/2; i++) {
1016             fwrite(tmp + trace_ctx->trace_surface_xoff,
1017                    trace_ctx->trace_surface_width,
1018                    1, trace_ctx->trace_fp_surface);
1019             
1020             tmp += chroma_u_stride;
1021         }
1022     }
1023
1024     fflush(trace_ctx->trace_fp_surface);
1025
1026     vaUnlockSurface(dpy, trace_ctx->trace_rendertarget);
1027
1028     va_TraceMsg(trace_ctx, NULL);
1029 }
1030
1031
1032 void va_TraceInitialize (
1033     VADisplay dpy,
1034     int *major_version,     /* out */
1035     int *minor_version      /* out */
1036 )
1037 {
1038     DPY2TRACE_VIRCTX(dpy);
1039     TRACE_FUNCNAME(idx);
1040     DPY2TRACE_VIRCTX_EXIT(pva_trace);
1041 }
1042
1043 void va_TraceTerminate (
1044     VADisplay dpy
1045 )
1046 {
1047     DPY2TRACE_VIRCTX(dpy);
1048     TRACE_FUNCNAME(idx);
1049     va_TraceMsg(trace_ctx, NULL);
1050     DPY2TRACE_VIRCTX_EXIT(pva_trace);
1051 }
1052
1053
1054 void va_TraceCreateConfig(
1055     VADisplay dpy,
1056     VAProfile profile, 
1057     VAEntrypoint entrypoint, 
1058     VAConfigAttrib *attrib_list,
1059     int num_attribs,
1060     VAConfigID *config_id /* out */
1061 )
1062 {
1063     int i;
1064
1065     DPY2TRACE_VIRCTX(dpy);
1066
1067     TRACE_FUNCNAME(idx);
1068     
1069     va_TraceMsg(trace_ctx, "\tprofile = %d\n", profile);
1070     va_TraceMsg(trace_ctx, "\tentrypoint = %d\n", entrypoint);
1071     va_TraceMsg(trace_ctx, "\tnum_attribs = %d\n", num_attribs);
1072     if (attrib_list) {
1073         for (i = 0; i < num_attribs; i++) {
1074             va_TraceMsg(trace_ctx, "\t\tattrib_list[%d].type = 0x%08x\n", i, attrib_list[i].type);
1075             va_TraceMsg(trace_ctx, "\t\tattrib_list[%d].value = 0x%08x\n", i, attrib_list[i].value);
1076         }
1077     }
1078     va_TraceMsg(trace_ctx, NULL);
1079
1080     add_trace_config_info(pva_trace, *config_id, profile, entrypoint);
1081
1082     DPY2TRACE_VIRCTX_EXIT(pva_trace);
1083 }
1084
1085 void va_TraceDestroyConfig (
1086     VADisplay dpy,
1087     VAConfigID config_id
1088 )
1089 {
1090     DPY2TRACE_VIRCTX(dpy);
1091
1092     TRACE_FUNCNAME(idx);
1093
1094     va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config_id);
1095     va_TraceMsg(trace_ctx, NULL);
1096
1097     delete_trace_config_info(pva_trace, config_id);
1098
1099     DPY2TRACE_VIRCTX_EXIT(pva_trace);
1100 }
1101
1102 static void va_TraceSurfaceAttributes(
1103     struct trace_context *trace_ctx,
1104     VASurfaceAttrib    *attrib_list,
1105     unsigned int       *num_attribs
1106 )
1107 {
1108     int i, num;
1109     VASurfaceAttrib *p;
1110     
1111     if (!attrib_list || !num_attribs)
1112         return;
1113     
1114     p = attrib_list;
1115     num = *num_attribs;
1116     if (num > VASurfaceAttribCount)
1117         num = VASurfaceAttribCount;
1118
1119     for (i=0; i<num; i++) {
1120         int type = p->value.type;
1121         
1122         va_TraceMsg(trace_ctx, "\tattrib_list[%i] =\n", i);
1123         
1124         va_TraceMsg(trace_ctx, "\t\ttype = %d\n", p->type);
1125         va_TraceMsg(trace_ctx, "\t\tflags = %d\n", p->flags);
1126         va_TraceMsg(trace_ctx, "\t\tvalue.type = %d\n", type);
1127         switch (type) {
1128         case VAGenericValueTypeInteger:
1129             va_TraceMsg(trace_ctx, "\t\tvalue.value.i = 0x%08x\n", p->value.value.i);
1130             break;
1131         case VAGenericValueTypeFloat:
1132             va_TraceMsg(trace_ctx, "\t\tvalue.value.f = %f\n", p->value.value.f);
1133             break;
1134         case VAGenericValueTypePointer:
1135             va_TraceMsg(trace_ctx, "\t\tvalue.value.p = %p\n", p->value.value.p);
1136             if ((p->type == VASurfaceAttribExternalBufferDescriptor) && p->value.value.p) {
1137                 VASurfaceAttribExternalBuffers *tmp = (VASurfaceAttribExternalBuffers *) p->value.value.p;
1138                 int j;
1139                 
1140                 va_TraceMsg(trace_ctx, "\t\t--VASurfaceAttribExternalBufferDescriptor\n");
1141                 va_TraceMsg(trace_ctx, "\t\t  pixel_format=0x%08x\n", tmp->pixel_format);
1142                 va_TraceMsg(trace_ctx, "\t\t  width=%d\n", tmp->width);
1143                 va_TraceMsg(trace_ctx, "\t\t  height=%d\n", tmp->height);
1144                 va_TraceMsg(trace_ctx, "\t\t  data_size=%d\n", tmp->data_size);
1145                 va_TraceMsg(trace_ctx, "\t\t  num_planes=%d\n", tmp->num_planes);
1146                 va_TraceMsg(trace_ctx, "\t\t  pitches[4]=%d %d %d %d\n",
1147                             tmp->pitches[0], tmp->pitches[1], tmp->pitches[2], tmp->pitches[3]);
1148                 va_TraceMsg(trace_ctx, "\t\t  offsets[4]=%d %d %d %d\n",
1149                             tmp->offsets[0], tmp->offsets[1], tmp->offsets[2], tmp->offsets[3]);
1150                 va_TraceMsg(trace_ctx, "\t\t  flags=0x%08x\n", tmp->flags);
1151                 va_TraceMsg(trace_ctx, "\t\t  num_buffers=0x%08x\n", tmp->num_buffers);
1152                 va_TraceMsg(trace_ctx, "\t\t  buffers=%p\n", tmp->buffers);
1153                 for (j = 0; j < tmp->num_buffers; j++) {
1154                     va_TraceMsg(trace_ctx, "\t\t\tbuffers[%d]=%p\n", j, tmp->buffers[j]);
1155                 }
1156             }
1157             break;
1158         case VAGenericValueTypeFunc:
1159             va_TraceMsg(trace_ctx, "\t\tvalue.value.fn = %p\n", p->value.value.fn);
1160             break;
1161         default:
1162             break;
1163         }
1164
1165         p++;
1166     }
1167 }
1168
1169 void va_TraceCreateSurfaces(
1170     VADisplay dpy,
1171     int width,
1172     int height,
1173     int format,
1174     int num_surfaces,
1175     VASurfaceID *surfaces,    /* out */
1176     VASurfaceAttrib    *attrib_list,
1177     unsigned int        num_attribs
1178 )
1179 {
1180     int i;
1181     DPY2TRACE_VIRCTX(dpy);
1182
1183     TRACE_FUNCNAME(idx);
1184     
1185     va_TraceMsg(trace_ctx, "\twidth = %d\n", width);
1186     va_TraceMsg(trace_ctx, "\theight = %d\n", height);
1187     va_TraceMsg(trace_ctx, "\tformat = %d\n", format);
1188     va_TraceMsg(trace_ctx, "\tnum_surfaces = %d\n", num_surfaces);
1189
1190     if (surfaces) {
1191         for (i = 0; i < num_surfaces; i++)
1192             va_TraceMsg(trace_ctx, "\t\tsurfaces[%d] = 0x%08x\n", i, surfaces[i]);
1193     }
1194     
1195     va_TraceSurfaceAttributes(trace_ctx, attrib_list, &num_attribs);
1196
1197     va_TraceMsg(trace_ctx, NULL);
1198
1199     DPY2TRACE_VIRCTX_EXIT(pva_trace);
1200 }
1201
1202 void va_TraceDestroySurfaces(
1203     VADisplay dpy,
1204     VASurfaceID *surface_list,
1205     int num_surfaces
1206 )
1207 {
1208     int i;
1209     DPY2TRACE_VIRCTX(dpy);
1210
1211     TRACE_FUNCNAME(idx);
1212
1213     if (surface_list) {
1214         for (i = 0; i < num_surfaces; i++)
1215             va_TraceMsg(trace_ctx, "\t\tsurfaces[%d] = 0x%08x\n", i, surface_list[i]);
1216     }
1217     
1218     va_TraceMsg(trace_ctx, NULL);
1219
1220     DPY2TRACE_VIRCTX_EXIT(pva_trace);
1221 }
1222
1223
1224 static void internal_TraceUpdateContext (
1225     struct va_trace *pva_trace,
1226     int tra_ctx_idx,
1227     struct trace_context *new_trace_ctx,
1228     VAContextID context,
1229     int destroy_flag
1230 )
1231 {
1232     struct trace_context *trace_ctx = NULL;
1233     int i = 0, delete = 1;
1234     pid_t thd_id = syscall(__NR_gettid);
1235
1236     if(tra_ctx_idx >= MAX_TRACE_CTX_NUM)
1237         return;
1238
1239     LOCK_RESOURCE(pva_trace);
1240
1241     trace_ctx = pva_trace->ptra_ctx[tra_ctx_idx];
1242     if(trace_ctx) {
1243         if(!new_trace_ctx &&
1244             trace_ctx->created_thd_id != thd_id
1245             && !destroy_flag) {
1246             delete = 0;
1247         }
1248         else {
1249             pva_trace->context_num--;
1250             pva_trace->ptra_ctx[tra_ctx_idx] = NULL;
1251         }
1252     }
1253
1254     if(new_trace_ctx) {
1255         new_trace_ctx->created_thd_id = thd_id;
1256         pva_trace->ptra_ctx[tra_ctx_idx] = new_trace_ctx;
1257         pva_trace->context_num++;
1258     }
1259
1260     UNLOCK_RESOURCE(pva_trace);
1261
1262     if(trace_ctx && delete) {
1263         for(i = 0;i < MAX_TRACE_THREAD_NUM;i++)
1264             if(trace_ctx->plog_file_list[i])
1265                 stop_tracing2log_file(pva_trace, trace_ctx->plog_file_list[i]);
1266
1267         if(trace_ctx->trace_codedbuf_fn)
1268             free(trace_ctx->trace_codedbuf_fn);
1269
1270         if(trace_ctx->trace_fp_codedbuf)
1271             fclose(trace_ctx->trace_fp_codedbuf);
1272
1273         if(trace_ctx->trace_surface_fn)
1274             free(trace_ctx->trace_surface_fn);
1275
1276         if(trace_ctx->trace_fp_surface)
1277             fclose(trace_ctx->trace_fp_surface);
1278
1279         //delete_trace_all_context_buf(pva_trace, context);
1280
1281         free(trace_ctx);
1282     }
1283 }
1284
1285 void va_TraceCreateContext(
1286     VADisplay dpy,
1287     VAConfigID config_id,
1288     int picture_width,
1289     int picture_height,
1290     int flag,
1291     VASurfaceID *render_targets,
1292     int num_render_targets,
1293     VAContextID *context        /* out */
1294 )
1295 {
1296     struct va_trace *pva_trace = NULL;
1297     struct trace_context *trace_ctx = NULL;
1298     int tra_ctx_id = 0;
1299     int encode = 0, decode = 0, jpeg = 0;
1300     int i;
1301
1302     pva_trace = (struct va_trace *)(((VADisplayContextP)dpy)->vatrace);
1303     if(!context
1304         || *context == VA_INVALID_ID
1305         || !pva_trace) {
1306         va_errorMessage(dpy, "Invalid context id 0x%08x\n",
1307                 context == NULL ? 0 : (int)*context);
1308         return;
1309     }
1310
1311     LOCK_CONTEXT(pva_trace);
1312
1313     tra_ctx_id = get_free_ctx_idx(pva_trace, *context);
1314     if(tra_ctx_id >= MAX_TRACE_CTX_NUM) {
1315         va_errorMessage(dpy, "Can't get trace context for ctx 0x%08x\n",
1316                 *context);
1317         
1318         goto FAIL;
1319     }
1320
1321     trace_ctx = calloc(sizeof(struct trace_context), 1);
1322     if(trace_ctx == NULL) {
1323         va_errorMessage(dpy, "Allocate trace context failed for ctx 0x%08x\n",
1324                 *context);
1325         
1326         goto FAIL;
1327     }
1328
1329     i = get_valid_config_idx(pva_trace, config_id);
1330     if(i >= MAX_TRACE_CTX_NUM) {
1331         va_errorMessage(dpy, "Can't get trace config id for ctx 0x%08x cfg %x\n",
1332                 *context, config_id);
1333
1334         goto FAIL;
1335     }
1336     trace_ctx->trace_profile = pva_trace->config_info[i].trace_profile;
1337     trace_ctx->trace_entrypoint = pva_trace->config_info[i].trace_entrypoint;
1338
1339     if(va_trace_flag & VA_TRACE_FLAG_LOG) {
1340         trace_ctx->plog_file = start_tracing2log_file(pva_trace);
1341         if(!trace_ctx->plog_file) {
1342             va_errorMessage(dpy, "Can't get trace log file for ctx 0x%08x\n",
1343                     *context);
1344
1345             goto FAIL;
1346         }
1347         else
1348             va_infoMessage(dpy, "Save context 0x%08x into log file %s\n", *context,
1349                 trace_ctx->plog_file->fn_log);
1350
1351         trace_ctx->plog_file_list[0] = trace_ctx->plog_file;
1352     }
1353
1354     trace_ctx->trace_context = *context;
1355     TRACE_FUNCNAME(idx);
1356     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x va_trace_flag 0x%x\n", *context, va_trace_flag);
1357     va_TraceMsg(trace_ctx, "\tprofile = %d entrypoint = %d\n", trace_ctx->trace_profile,
1358         trace_ctx->trace_entrypoint);
1359     va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config_id);
1360     va_TraceMsg(trace_ctx, "\twidth = %d\n", picture_width);
1361     va_TraceMsg(trace_ctx, "\theight = %d\n", picture_height);
1362     va_TraceMsg(trace_ctx, "\tflag = 0x%08x\n", flag);
1363     va_TraceMsg(trace_ctx, "\tnum_render_targets = %d\n", num_render_targets);
1364     if (render_targets) {
1365         for (i=0; i<num_render_targets; i++)
1366             va_TraceMsg(trace_ctx, "\t\trender_targets[%d] = 0x%08x\n", i, render_targets[i]);
1367     }
1368
1369     trace_ctx->trace_frame_no = 0;
1370     trace_ctx->trace_slice_no = 0;
1371
1372     trace_ctx->trace_frame_width = picture_width;
1373     trace_ctx->trace_frame_height = picture_height;
1374
1375     if (trace_ctx->trace_surface_width == 0)
1376         trace_ctx->trace_surface_width = picture_width;
1377     if (trace_ctx->trace_surface_height == 0)
1378         trace_ctx->trace_surface_height = picture_height;
1379
1380     /* avoid to create so many empty files */
1381     encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
1382     decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
1383     jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
1384     if ((encode && (va_trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE)) ||
1385         (decode && (va_trace_flag & VA_TRACE_FLAG_SURFACE_DECODE)) ||
1386         (jpeg && (va_trace_flag & VA_TRACE_FLAG_SURFACE_JPEG))) {
1387         if(open_tracing_specil_file(pva_trace, trace_ctx, 1) < 0) {
1388             va_errorMessage(dpy, "Open surface fail failed for ctx 0x%08x\n", *context);
1389
1390             va_trace_flag &= ~(VA_TRACE_FLAG_SURFACE);
1391         }
1392     }
1393
1394     if (encode && (va_trace_flag & VA_TRACE_FLAG_CODEDBUF)) {
1395         if(open_tracing_specil_file(pva_trace, trace_ctx, 0) < 0) {
1396             va_errorMessage(dpy, "Open codedbuf fail failed for ctx 0x%08x\n", *context);
1397
1398             va_trace_flag &= ~(VA_TRACE_FLAG_CODEDBUF);
1399         }
1400     }
1401
1402     internal_TraceUpdateContext(pva_trace, tra_ctx_id, trace_ctx, *context, 0);
1403
1404     UNLOCK_CONTEXT(pva_trace);
1405     return;
1406
1407 FAIL:
1408     internal_TraceUpdateContext(pva_trace, tra_ctx_id, NULL, *context, 1);
1409
1410     UNLOCK_CONTEXT(pva_trace);
1411
1412     if(trace_ctx)
1413         free(trace_ctx);
1414 }
1415
1416 void va_TraceDestroyContext (
1417     VADisplay dpy,
1418     VAContextID context
1419 )
1420 {
1421     struct va_trace *pva_trace = NULL;
1422     struct trace_context *trace_ctx = NULL;
1423     int ctx_id = 0;
1424
1425     pva_trace = (struct va_trace *)(((VADisplayContextP)dpy)->vatrace);
1426
1427     if(!pva_trace)
1428         return;
1429
1430     LOCK_CONTEXT(pva_trace);
1431
1432     ctx_id = get_valid_ctx_idx(pva_trace, context);
1433     if(ctx_id < MAX_TRACE_CTX_NUM) {
1434         trace_ctx = pva_trace->ptra_ctx[ctx_id];
1435
1436         if(trace_ctx) {
1437             refresh_log_file(pva_trace, trace_ctx);
1438
1439             internal_TraceUpdateContext(pva_trace,
1440                 get_valid_ctx_idx(pva_trace, context),
1441                 NULL, context, 0);
1442         }
1443     }
1444
1445     UNLOCK_CONTEXT(pva_trace);
1446 }
1447
1448 void va_TraceCreateMFContext (
1449     VADisplay dpy,
1450     VAMFContextID *mf_context    /* out */
1451 )
1452 {
1453     DPY2TRACECTX(dpy, VA_INVALID_ID, VA_INVALID_ID);
1454     TRACE_FUNCNAME(idx);
1455     if (mf_context) {
1456         va_TraceMsg(trace_ctx, "\tmf_context = 0x%08x\n", *mf_context);
1457         trace_ctx->trace_context = *mf_context;
1458     } else
1459         trace_ctx->trace_context = VA_INVALID_ID;
1460 }
1461
1462 void va_TraceMFAddContext (
1463     VADisplay dpy,
1464     VAMFContextID mf_context,
1465     VAContextID context
1466 )
1467 {
1468     DPY2TRACECTX(dpy, mf_context, VA_INVALID_ID);
1469
1470     TRACE_FUNCNAME(idx);
1471     va_TraceMsg(trace_ctx, "\tmf_context = 0x%08x\n", mf_context);
1472     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
1473 }
1474
1475 void va_TraceMFReleaseContext (
1476     VADisplay dpy,
1477     VAMFContextID mf_context,
1478     VAContextID context
1479 )
1480 {
1481     DPY2TRACECTX(dpy, mf_context, VA_INVALID_ID);
1482
1483     TRACE_FUNCNAME(idx);
1484     va_TraceMsg(trace_ctx, "\tmf_context = 0x%08x\n", mf_context);
1485     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
1486 }
1487
1488 void va_TraceMFSubmit (
1489     VADisplay dpy,
1490     VAMFContextID mf_context,
1491     VAContextID *contexts,
1492     int num_contexts
1493 )
1494 {
1495     int i;
1496
1497     DPY2TRACECTX(dpy, mf_context, VA_INVALID_ID);
1498
1499     TRACE_FUNCNAME(idx);
1500     va_TraceMsg(trace_ctx, "\tmf_context = 0x%08x\n", mf_context);
1501
1502     for(i = 0; i < num_contexts; i++){
1503         va_TraceMsg(trace_ctx, "\t\tcontext[%d] = 0x%08x\n", i, contexts[i]);
1504     }
1505 }
1506
1507 void va_TraceCreateBuffer (
1508     VADisplay dpy,
1509     VAContextID context,        /* in */
1510     VABufferType type,          /* in */
1511     unsigned int size,          /* in */
1512     unsigned int num_elements,  /* in */
1513     void *data,                 /* in */
1514     VABufferID *buf_id          /* out */
1515 )
1516 {
1517     if (!buf_id || *buf_id == VA_INVALID_ID)
1518         return;
1519
1520     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1521
1522     add_trace_buf_info(pva_trace, context, *buf_id);
1523
1524     /* only trace CodedBuffer */
1525     if (type != VAEncCodedBufferType)
1526         return;
1527
1528     TRACE_FUNCNAME(idx);
1529     va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", vaBufferTypeStr(type));
1530     if (buf_id)
1531         va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", *buf_id);
1532     va_TraceMsg(trace_ctx, "\tsize=%u\n", size);
1533     va_TraceMsg(trace_ctx, "\tnum_elements=%u\n", num_elements);
1534     
1535     va_TraceMsg(trace_ctx, NULL);
1536 }
1537
1538 void va_TraceDestroyBuffer (
1539     VADisplay dpy,
1540     VABufferID buf_id    /* in */
1541 )
1542 {
1543     VABufferType type;
1544     unsigned int size;
1545     unsigned int num_elements;
1546
1547     if (buf_id == VA_INVALID_ID)
1548         return;
1549
1550     DPY2TRACECTX(dpy, VA_INVALID_ID, buf_id);
1551
1552     vaBufferInfo(dpy, trace_ctx->trace_context, buf_id, &type, &size, &num_elements);    
1553
1554     delete_trace_buf_info(pva_trace, buf_id);
1555
1556     /* only trace CodedBuffer */
1557     if (type != VAEncCodedBufferType)
1558         return;
1559
1560     TRACE_FUNCNAME(idx);
1561     va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", vaBufferTypeStr(type));
1562     va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", buf_id);
1563     va_TraceMsg(trace_ctx, "\tsize=%u\n", size);
1564     va_TraceMsg(trace_ctx, "\tnum_elements=%u\n", num_elements);
1565     
1566     va_TraceMsg(trace_ctx, NULL);
1567 }
1568
1569
1570 static void mem_put_le16(char *mem, unsigned int val)
1571 {
1572     mem[0] = val;
1573     mem[1] = val>>8;
1574 }
1575
1576 static void mem_put_le32(char *mem, unsigned int val)
1577 {
1578     mem[0] = val;
1579     mem[1] = val>>8;
1580     mem[2] = val>>16;
1581     mem[3] = val>>24;
1582 }
1583
1584 static void va_TraceCodedBufferIVFHeader(struct trace_context *trace_ctx, void **pbuf)
1585 {
1586     VACodedBufferSegment *buf_list;
1587     unsigned int frame_length = 0;
1588     char header[32];
1589
1590     buf_list = (VACodedBufferSegment *)(*pbuf);
1591
1592     if (ftell(trace_ctx->trace_fp_codedbuf) == 0) { /* write ivf header */
1593         header[0] = 'D';
1594         header[1] = 'K';
1595         header[2] = 'I';
1596         header[3] = 'F';
1597         mem_put_le16(header+4,  0);                     /* version */
1598         mem_put_le16(header+6,  32);                    /* headersize */
1599         mem_put_le32(header+8,  0x30385056);            /* headersize */
1600         /* write width and height of the first rc_param to IVF file header */
1601         mem_put_le16(header+12, trace_ctx->trace_frame_width);  /* width */
1602         mem_put_le16(header+14, trace_ctx->trace_frame_height); /* height */
1603         mem_put_le32(header+16, 30);            /* rate */
1604         mem_put_le32(header+20, 1);                     /* scale */
1605         mem_put_le32(header+24, 0xffffffff);            /* length */
1606         mem_put_le32(header+28, 0);                     /* unused */
1607         fwrite(header, 1, 32, trace_ctx->trace_fp_codedbuf);
1608     }
1609
1610     /* write frame header */
1611     while (buf_list != NULL) {
1612         frame_length += buf_list->size;
1613         buf_list = (VACodedBufferSegment *) buf_list->next;
1614     }
1615     mem_put_le32(header, frame_length);
1616     mem_put_le32(header+4, trace_ctx->pts&0xFFFFFFFF);
1617     mem_put_le32(header+8, 0);
1618     fwrite(header, 1, 12, trace_ctx->trace_fp_codedbuf);
1619     trace_ctx->pts++;
1620
1621     fflush(trace_ctx->trace_fp_codedbuf);
1622 }
1623
1624 void va_TraceMapBuffer (
1625     VADisplay dpy,
1626     VABufferID buf_id,    /* in */
1627     void **pbuf           /* out */
1628 )
1629 {
1630     VABufferType type;
1631     unsigned int size;
1632     unsigned int num_elements;
1633     
1634     VACodedBufferSegment *buf_list;
1635     int i = 0;
1636
1637     DPY2TRACECTX(dpy, VA_INVALID_ID, buf_id);
1638
1639     vaBufferInfo(dpy, trace_ctx->trace_context, buf_id, &type, &size, &num_elements);    
1640
1641     /* only trace CodedBuffer */
1642     if (type != VAEncCodedBufferType)
1643         return;
1644
1645     TRACE_FUNCNAME(idx);
1646     va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", buf_id);
1647     va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", vaBufferTypeStr(type));
1648     if ((pbuf == NULL) || (*pbuf == NULL))
1649         return;
1650
1651     if (trace_ctx->trace_profile == VAProfileVP8Version0_3) {
1652         va_TraceMsg(trace_ctx, "\tAdd IVF header information\n");
1653         va_TraceCodedBufferIVFHeader(trace_ctx, pbuf);
1654     }
1655
1656     buf_list = (VACodedBufferSegment *)(*pbuf);
1657     while (buf_list != NULL) {
1658         va_TraceMsg(trace_ctx, "\tCodedbuf[%d] =\n", i++);
1659         
1660         va_TraceMsg(trace_ctx, "\t   size = %u\n", buf_list->size);
1661         va_TraceMsg(trace_ctx, "\t   bit_offset = %u\n", buf_list->bit_offset);
1662         va_TraceMsg(trace_ctx, "\t   status = 0x%08x\n", buf_list->status);
1663         va_TraceMsg(trace_ctx, "\t   reserved = 0x%08x\n", buf_list->reserved);
1664         va_TraceMsg(trace_ctx, "\t   buf = 0x%08x\n", buf_list->buf);
1665
1666         if (trace_ctx->trace_fp_codedbuf) {
1667             va_TraceMsg(trace_ctx, "\tDump the content to file\n");
1668             fwrite(buf_list->buf, buf_list->size, 1, trace_ctx->trace_fp_codedbuf);
1669
1670             fflush(trace_ctx->trace_fp_codedbuf);
1671         }
1672         
1673         buf_list = buf_list->next;
1674     }
1675     va_TraceMsg(trace_ctx, NULL);
1676 }
1677
1678 static void va_TraceVABuffers(
1679     VADisplay dpy,
1680     VAContextID context,
1681     VABufferID buffer,
1682     VABufferType type,
1683     unsigned int size,
1684     unsigned int num_elements,
1685     void *pbuf
1686 )
1687 {
1688     unsigned int i;
1689     unsigned char *p = pbuf;
1690     FILE *fp = NULL;
1691
1692     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1693     
1694     va_TracePrint(trace_ctx, "--%s\n", vaBufferTypeStr(type));
1695
1696     if(trace_ctx->plog_file)
1697         fp = trace_ctx->plog_file->fp_log;
1698
1699     if ((va_trace_flag & VA_TRACE_FLAG_BUFDATA) && fp) {
1700         for (i=0; i<size; i++) {
1701             unsigned char value =  p[i];
1702
1703             if (i==0)
1704                 fprintf(fp, "\t\t0x%04x:", i);
1705             else if ((i%16) == 0)
1706                 fprintf(fp, "\n\t\t0x%04x:", i);
1707
1708             fprintf(fp, " %02x", value);
1709         }
1710         fprintf(fp, "\n");
1711     }
1712     
1713     va_TraceMsg(trace_ctx, NULL);
1714
1715     return;
1716 }
1717
1718
1719 static void va_TraceVAPictureParameterBufferMPEG2(
1720     VADisplay dpy,
1721     VAContextID context,
1722     VABufferID buffer,
1723     VABufferType type,
1724     unsigned int size,
1725     unsigned int num_elements,
1726     void *data)
1727 {
1728     VAPictureParameterBufferMPEG2 *p=(VAPictureParameterBufferMPEG2 *)data;
1729     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1730
1731     va_TraceMsg(trace_ctx,"VAPictureParameterBufferMPEG2\n");
1732
1733     va_TraceMsg(trace_ctx,"\thorizontal size= %d\n", p->horizontal_size);
1734     va_TraceMsg(trace_ctx,"\tvertical size= %d\n", p->vertical_size);
1735     va_TraceMsg(trace_ctx,"\tforward reference picture= %d\n", p->forward_reference_picture);
1736     va_TraceMsg(trace_ctx,"\tbackward reference picture= %d\n", p->backward_reference_picture);
1737     va_TraceMsg(trace_ctx,"\tpicture coding type= %d\n", p->picture_coding_type);
1738     va_TraceMsg(trace_ctx,"\tf mode= %d\n", p->f_code);
1739
1740     va_TraceMsg(trace_ctx,"\tpicture coding extension = %d\n", p->picture_coding_extension.value);
1741     va_TraceMsg(trace_ctx,"\tintra_dc_precision= %d\n", p->picture_coding_extension.bits.intra_dc_precision);
1742     va_TraceMsg(trace_ctx,"\tpicture_structure= %d\n", p->picture_coding_extension.bits.picture_structure);
1743     va_TraceMsg(trace_ctx,"\ttop_field_first= %d\n", p->picture_coding_extension.bits.top_field_first);
1744     va_TraceMsg(trace_ctx,"\tframe_pred_frame_dct= %d\n", p->picture_coding_extension.bits.frame_pred_frame_dct);
1745     va_TraceMsg(trace_ctx,"\tconcealment_motion_vectors= %d\n", p->picture_coding_extension.bits.concealment_motion_vectors);
1746     va_TraceMsg(trace_ctx,"\tq_scale_type= %d\n", p->picture_coding_extension.bits.q_scale_type);
1747     va_TraceMsg(trace_ctx,"\tintra_vlc_format= %d\n", p->picture_coding_extension.bits.intra_vlc_format);
1748     va_TraceMsg(trace_ctx,"\talternate_scan= %d\n", p->picture_coding_extension.bits.alternate_scan);
1749     va_TraceMsg(trace_ctx,"\trepeat_first_field= %d\n", p->picture_coding_extension.bits.repeat_first_field);
1750     va_TraceMsg(trace_ctx,"\tprogressive_frame= %d\n", p->picture_coding_extension.bits.progressive_frame);
1751     va_TraceMsg(trace_ctx,"\tis_first_field= %d\n", p->picture_coding_extension.bits.is_first_field);
1752     va_TraceMsg(trace_ctx, NULL);
1753
1754     return;
1755 }
1756
1757
1758 static void va_TraceVAIQMatrixBufferMPEG2(
1759     VADisplay dpy,
1760     VAContextID context,
1761     VABufferID buffer,
1762     VABufferType type,
1763     unsigned int size,
1764     unsigned int num_elements,
1765     void *data)
1766 {
1767     VAIQMatrixBufferMPEG2 *p=(VAIQMatrixBufferMPEG2 *)data;
1768     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1769
1770     va_TraceMsg(trace_ctx,"VAIQMatrixBufferMPEG2\n");
1771
1772     va_TraceMsg(trace_ctx,"\tload_intra_quantiser_matrix = %d\n", p->load_intra_quantiser_matrix);
1773     va_TraceMsg(trace_ctx,"\tload_non_intra_quantiser_matrix = %d\n", p->load_non_intra_quantiser_matrix);
1774     va_TraceMsg(trace_ctx,"\tload_chroma_intra_quantiser_matrix = %d\n", p->load_chroma_intra_quantiser_matrix);
1775     va_TraceMsg(trace_ctx,"\tload_chroma_non_intra_quantiser_matrix = %d\n", p->load_chroma_non_intra_quantiser_matrix);
1776     va_TraceMsg(trace_ctx,"\tintra_quantiser_matrix = %d\n", p->intra_quantiser_matrix);
1777     va_TraceMsg(trace_ctx,"\tnon_intra_quantiser_matrix = %d\n", p->non_intra_quantiser_matrix);
1778     va_TraceMsg(trace_ctx,"\tchroma_intra_quantiser_matrix = %d\n", p->chroma_intra_quantiser_matrix);
1779     va_TraceMsg(trace_ctx,"\tchroma_non_intra_quantiser_matrix = %d\n", p->chroma_non_intra_quantiser_matrix);
1780     va_TraceMsg(trace_ctx, NULL);
1781
1782     return;
1783 }
1784
1785
1786 static void va_TraceVASliceParameterBufferMPEG2(
1787     VADisplay dpy,
1788     VAContextID context,
1789     VABufferID buffer,
1790     VABufferType type,
1791     unsigned int size,
1792     unsigned int num_elements,
1793     void *data)
1794 {
1795     VASliceParameterBufferMPEG2 *p=(VASliceParameterBufferMPEG2 *)data;
1796
1797     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1798
1799     trace_ctx->trace_slice_no++;
1800     
1801     trace_ctx->trace_slice_size = p->slice_data_size;
1802
1803     va_TraceMsg(trace_ctx,"VASliceParameterBufferMPEG2\n");
1804
1805     va_TraceMsg(trace_ctx,"\tslice_data_size = %d\n", p->slice_data_size);
1806     va_TraceMsg(trace_ctx,"\tslice_data_offset = %d\n", p->slice_data_offset);
1807     va_TraceMsg(trace_ctx,"\tslice_data_flag = %d\n", p->slice_data_flag);
1808     va_TraceMsg(trace_ctx,"\tmacroblock_offset = %d\n", p->macroblock_offset);
1809     va_TraceMsg(trace_ctx,"\tslice_horizontal_position = %d\n", p->slice_horizontal_position);
1810     va_TraceMsg(trace_ctx,"\tslice_vertical_position = %d\n", p->slice_vertical_position);
1811     va_TraceMsg(trace_ctx,"\tquantiser_scale_code = %d\n", p->quantiser_scale_code);
1812     va_TraceMsg(trace_ctx,"\tintra_slice_flag = %d\n", p->intra_slice_flag);
1813     va_TraceMsg(trace_ctx, NULL);
1814
1815     return;
1816 }
1817
1818 static void va_TraceVAPictureParameterBufferJPEG(
1819     VADisplay dpy,
1820     VAContextID context,
1821     VABufferID buffer,
1822     VABufferType type,
1823     unsigned int size,
1824     unsigned int num_elements,
1825     void *data)
1826 {
1827     int i;
1828     VAPictureParameterBufferJPEGBaseline *p=(VAPictureParameterBufferJPEGBaseline *)data;
1829     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1830
1831     va_TraceMsg(trace_ctx,"*VAPictureParameterBufferJPEG\n");
1832     va_TraceMsg(trace_ctx,"\tpicture_width = %u\n", p->picture_width);
1833     va_TraceMsg(trace_ctx,"\tpicture_height = %u\n", p->picture_height);
1834     va_TraceMsg(trace_ctx,"\tcomponents = \n");
1835     for (i = 0; i < p->num_components && i < 255; ++i) {
1836         va_TraceMsg(trace_ctx,"\t\t[%d] component_id = %u\n", i, p->components[i].component_id);
1837         va_TraceMsg(trace_ctx,"\t\t[%d] h_sampling_factor = %u\n", i, p->components[i].h_sampling_factor);
1838         va_TraceMsg(trace_ctx,"\t\t[%d] v_sampling_factor = %u\n", i, p->components[i].v_sampling_factor);
1839         va_TraceMsg(trace_ctx,"\t\t[%d] quantiser_table_selector = %u\n", i, p->components[i].quantiser_table_selector);
1840     }
1841 }
1842
1843 static void va_TraceVAIQMatrixBufferJPEG(
1844     VADisplay dpy,
1845     VAContextID context,
1846     VABufferID buffer,
1847     VABufferType type,
1848     unsigned int size,
1849     unsigned int num_elements,
1850     void *data)
1851 {
1852     int i, j;
1853     static char tmp[1024];
1854     VAIQMatrixBufferJPEGBaseline *p=(VAIQMatrixBufferJPEGBaseline *)data;
1855     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1856     va_TraceMsg(trace_ctx,"*VAIQMatrixParameterBufferJPEG\n");
1857     va_TraceMsg(trace_ctx,"\tload_quantiser_table =\n");
1858     for (i = 0; i < 4; ++i) {
1859         va_TraceMsg(trace_ctx,"\t\t[%d] = %u\n", i, p->load_quantiser_table[i]);
1860     }
1861     va_TraceMsg(trace_ctx,"\tquantiser_table =\n");
1862     for (i = 0; i < 4; ++i) {
1863         memset(tmp, 0, sizeof tmp);
1864         for (j = 0; j < 64; ++j) {
1865             sprintf(tmp + strlen(tmp), "%u ", p->quantiser_table[i][j]);
1866         }
1867         va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
1868     }
1869 }
1870
1871 static void va_TraceVASliceParameterBufferJPEG(
1872     VADisplay dpy,
1873     VAContextID context,
1874     VABufferID buffer,
1875     VABufferType type,
1876     unsigned int size,
1877     unsigned int num_elements,
1878     void *data)
1879 {
1880     int i;
1881     VASliceParameterBufferJPEGBaseline *p=(VASliceParameterBufferJPEGBaseline *)data;
1882     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1883     va_TraceMsg(trace_ctx,"*VASliceParameterBufferJPEG\n");
1884     va_TraceMsg(trace_ctx,"\tslice_data_size = %u\n", p->slice_data_size);
1885     va_TraceMsg(trace_ctx,"\tslice_data_offset = %u\n", p->slice_data_offset);
1886     va_TraceMsg(trace_ctx,"\tslice_data_flag = %u\n", p->slice_data_flag);
1887     va_TraceMsg(trace_ctx,"\tslice_horizontal_position = %u\n", p->slice_horizontal_position);
1888     va_TraceMsg(trace_ctx,"\tslice_vertical_position = %u\n", p->slice_vertical_position);
1889     va_TraceMsg(trace_ctx,"\tcomponents = \n");
1890     for (i = 0; i < p->num_components && i < 4; ++i) {
1891         va_TraceMsg(trace_ctx,"\t\t[%d] component_selector = %u\n", i, p->components[i].component_selector);
1892         va_TraceMsg(trace_ctx,"\t\t[%d] dc_table_selector = %u\n", i, p->components[i].dc_table_selector);
1893         va_TraceMsg(trace_ctx,"\t\t[%d] ac_table_selector = %u\n", i, p->components[i].ac_table_selector);
1894     }
1895     va_TraceMsg(trace_ctx,"\trestart_interval = %u\n", p->restart_interval);
1896     va_TraceMsg(trace_ctx,"\tnum_mcus = %u\n", p->num_mcus);
1897 }
1898
1899 static void va_TraceVAHuffmanTableBufferJPEG(
1900     VADisplay dpy,
1901     VAContextID context,
1902     VABufferID buffer,
1903     VABufferType type,
1904     unsigned int size,
1905     unsigned int num_elements,
1906     void *data)
1907 {
1908     int i, j;
1909     static char tmp[1024];
1910     VAHuffmanTableBufferJPEGBaseline *p=(VAHuffmanTableBufferJPEGBaseline *)data;
1911     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1912     va_TraceMsg(trace_ctx,"*VAHuffmanTableBufferJPEG\n");
1913
1914     for (i = 0; i < 2; ++i) {
1915         va_TraceMsg(trace_ctx,"\tload_huffman_table[%d] =%u\n", i, p->load_huffman_table[i]);
1916         va_TraceMsg(trace_ctx,"\thuffman_table[%d] =\n", i);
1917         memset(tmp, 0, sizeof tmp);
1918         for (j = 0; j < 16; ++j) {
1919             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].num_dc_codes[j]);
1920         }
1921         va_TraceMsg(trace_ctx,"\t\tnum_dc_codes =%s\n", tmp);
1922         memset(tmp, 0, sizeof tmp);
1923         for (j = 0; j < 12; ++j) {
1924             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].dc_values[j]);
1925         }
1926         va_TraceMsg(trace_ctx,"\t\tdc_values =%s\n", tmp);
1927         memset(tmp, 0, sizeof tmp);
1928         for (j = 0; j < 16; ++j) {
1929             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].num_ac_codes[j]);
1930         }
1931         va_TraceMsg(trace_ctx,"\t\tnum_ac_codes =%s\n", tmp);
1932         memset(tmp, 0, sizeof tmp);
1933         for (j = 0; j < 162; ++j) {
1934             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].ac_values[j]);
1935         }
1936         va_TraceMsg(trace_ctx,"\t\tac_values =%s\n", tmp);
1937         memset(tmp, 0, sizeof tmp);
1938         for (j = 0; j < 2; ++j) {
1939             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].pad[j]);
1940         }
1941         va_TraceMsg(trace_ctx,"\t\tpad =%s\n", tmp);
1942     }
1943 }
1944
1945 static void va_TraceVAPictureParameterBufferMPEG4(
1946     VADisplay dpy,
1947     VAContextID context,
1948     VABufferID buffer,
1949     VABufferType type,
1950     unsigned int size,
1951     unsigned int num_elements,
1952     void *data)
1953 {
1954     int i;
1955     VAPictureParameterBufferMPEG4 *p=(VAPictureParameterBufferMPEG4 *)data;
1956     
1957     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
1958
1959     va_TraceMsg(trace_ctx,"*VAPictureParameterBufferMPEG4\n");
1960     va_TraceMsg(trace_ctx,"\tvop_width = %d\n", p->vop_width);
1961     va_TraceMsg(trace_ctx,"\tvop_height = %d\n", p->vop_height);
1962     va_TraceMsg(trace_ctx,"\tforward_reference_picture = %d\n", p->forward_reference_picture);
1963     va_TraceMsg(trace_ctx,"\tbackward_reference_picture = %d\n", p->backward_reference_picture);
1964     va_TraceMsg(trace_ctx,"\tvol_fields value = %d\n", p->vol_fields.value);
1965     va_TraceMsg(trace_ctx,"\tshort_video_header= %d\n", p->vol_fields.bits.short_video_header);
1966     va_TraceMsg(trace_ctx,"\tchroma_format= %d\n", p->vol_fields.bits.chroma_format);
1967     va_TraceMsg(trace_ctx,"\tinterlaced= %d\n", p->vol_fields.bits.interlaced);
1968     va_TraceMsg(trace_ctx,"\tobmc_disable= %d\n", p->vol_fields.bits.obmc_disable);
1969     va_TraceMsg(trace_ctx,"\tsprite_enable= %d\n", p->vol_fields.bits.sprite_enable);
1970     va_TraceMsg(trace_ctx,"\tsprite_warping_accuracy= %d\n", p->vol_fields.bits.sprite_warping_accuracy);
1971     va_TraceMsg(trace_ctx,"\tquant_type= %d\n", p->vol_fields.bits.quant_type);
1972     va_TraceMsg(trace_ctx,"\tquarter_sample= %d\n", p->vol_fields.bits.quarter_sample);
1973     va_TraceMsg(trace_ctx,"\tdata_partitioned= %d\n", p->vol_fields.bits.data_partitioned);
1974     va_TraceMsg(trace_ctx,"\treversible_vlc= %d\n", p->vol_fields.bits.reversible_vlc);
1975     va_TraceMsg(trace_ctx,"\tresync_marker_disable= %d\n", p->vol_fields.bits.resync_marker_disable);
1976     va_TraceMsg(trace_ctx,"\tno_of_sprite_warping_points = %d\n", p->no_of_sprite_warping_points);
1977     va_TraceMsg(trace_ctx,"\tsprite_trajectory_du =");
1978     for(i=0;i<3;i++)
1979         va_TraceMsg(trace_ctx,"\t%d", p->sprite_trajectory_du[i]);
1980
1981     va_TraceMsg(trace_ctx,"\n");
1982     va_TraceMsg(trace_ctx,"\tsprite_trajectory_dv =");
1983     for(i=0;i<3;i++)
1984         va_TraceMsg(trace_ctx,"\t%d", p->sprite_trajectory_dv[i]);
1985     va_TraceMsg(trace_ctx,"\n");
1986     va_TraceMsg(trace_ctx,"\tvop_fields value = %d\n", p->vop_fields.value);
1987     va_TraceMsg(trace_ctx,"\tvop_coding_type= %d\n", p->vop_fields.bits.vop_coding_type);
1988     va_TraceMsg(trace_ctx,"\tbackward_reference_vop_coding_type= %d\n", p->vop_fields.bits.backward_reference_vop_coding_type);
1989     va_TraceMsg(trace_ctx,"\tvop_rounding_type= %d\n", p->vop_fields.bits.vop_rounding_type);
1990     va_TraceMsg(trace_ctx,"\tintra_dc_vlc_thr= %d\n", p->vop_fields.bits.intra_dc_vlc_thr);
1991     va_TraceMsg(trace_ctx,"\ttop_field_first= %d\n", p->vop_fields.bits.top_field_first);
1992     va_TraceMsg(trace_ctx,"\talternate_vertical_scan_flag= %d\n", p->vop_fields.bits.alternate_vertical_scan_flag);
1993     va_TraceMsg(trace_ctx,"\tvop_fcode_forward = %d\n", p->vop_fcode_forward);
1994     va_TraceMsg(trace_ctx,"\tvop_fcode_backward = %d\n", p->vop_fcode_backward);
1995     va_TraceMsg(trace_ctx,"\tnum_gobs_in_vop = %d\n", p->num_gobs_in_vop);
1996     va_TraceMsg(trace_ctx,"\tnum_macroblocks_in_gob = %d\n", p->num_macroblocks_in_gob);
1997     va_TraceMsg(trace_ctx,"\tTRB = %d\n", p->TRB);
1998     va_TraceMsg(trace_ctx,"\tTRD = %d\n", p->TRD);
1999     va_TraceMsg(trace_ctx, NULL);
2000
2001     return;
2002 }
2003
2004
2005 static void va_TraceVAIQMatrixBufferMPEG4(
2006     VADisplay dpy,
2007     VAContextID context,
2008     VABufferID buffer,
2009     VABufferType type,
2010     unsigned int size,
2011     unsigned int num_elements,
2012     void *data)
2013 {
2014     int i;
2015     VAIQMatrixBufferMPEG4 *p=(VAIQMatrixBufferMPEG4 *)data;
2016     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2017
2018     va_TraceMsg(trace_ctx,"VAIQMatrixBufferMPEG4\n");
2019
2020     va_TraceMsg(trace_ctx,"\tload_intra_quant_mat = %d\n", p->load_intra_quant_mat);
2021     va_TraceMsg(trace_ctx,"\tload_non_intra_quant_mat = %d\n", p->load_non_intra_quant_mat);
2022     va_TraceMsg(trace_ctx,"\tintra_quant_mat =\n");
2023     for(i=0;i<64;i++)
2024         va_TraceMsg(trace_ctx,"\t\t%d\n", p->intra_quant_mat[i]);
2025
2026     va_TraceMsg(trace_ctx,"\tnon_intra_quant_mat =\n");
2027     for(i=0;i<64;i++)
2028         va_TraceMsg(trace_ctx,"\t\t%d\n", p->non_intra_quant_mat[i]);
2029     va_TraceMsg(trace_ctx, NULL);
2030
2031     return;
2032 }
2033
2034 static void va_TraceVAEncSequenceParameterBufferMPEG4(
2035     VADisplay dpy,
2036     VAContextID context,
2037     VABufferID buffer,
2038     VABufferType type,
2039     unsigned int size,
2040     unsigned int num_elements,
2041     void *data)
2042 {
2043     VAEncSequenceParameterBufferMPEG4 *p = (VAEncSequenceParameterBufferMPEG4 *)data;
2044     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2045     
2046     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferMPEG4\n");
2047     
2048     va_TraceMsg(trace_ctx, "\tprofile_and_level_indication = %d\n", p->profile_and_level_indication);
2049     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
2050     va_TraceMsg(trace_ctx, "\tvideo_object_layer_width = %d\n", p->video_object_layer_width);
2051     va_TraceMsg(trace_ctx, "\tvideo_object_layer_height = %d\n", p->video_object_layer_height);
2052     va_TraceMsg(trace_ctx, "\tvop_time_increment_resolution = %d\n", p->vop_time_increment_resolution);
2053     va_TraceMsg(trace_ctx, "\tfixed_vop_rate = %d\n", p->fixed_vop_rate);
2054     va_TraceMsg(trace_ctx, "\tfixed_vop_time_increment = %d\n", p->fixed_vop_time_increment);
2055     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2056     va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate);
2057     va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
2058     va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
2059     va_TraceMsg(trace_ctx, NULL);
2060
2061     return;
2062 }
2063
2064 static void va_TraceVAEncPictureParameterBufferMPEG4(
2065     VADisplay dpy,
2066     VAContextID context,
2067     VABufferID buffer,
2068     VABufferType type,
2069     unsigned int size,
2070     unsigned int num_elements,
2071     void *data)
2072 {
2073     VAEncPictureParameterBufferMPEG4 *p = (VAEncPictureParameterBufferMPEG4 *)data;
2074     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2075     
2076     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferMPEG4\n");
2077     va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture);
2078     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2079     va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", p->coded_buf);
2080     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2081     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2082     va_TraceMsg(trace_ctx, "\tmodulo_time_base = %d\n", p->modulo_time_base);
2083     va_TraceMsg(trace_ctx, "\tvop_time_increment = %d\n", p->vop_time_increment);
2084     va_TraceMsg(trace_ctx, "\tpicture_type = %d\n", p->picture_type);
2085     va_TraceMsg(trace_ctx, NULL);
2086
2087     return;
2088 }
2089
2090
2091 static void va_TraceVASliceParameterBufferMPEG4(
2092     VADisplay dpy,
2093     VAContextID context,
2094     VABufferID buffer,
2095     VABufferType type,
2096     unsigned int size,
2097     unsigned int num_elements,
2098     void *data)
2099 {
2100     VASliceParameterBufferMPEG4 *p=(VASliceParameterBufferMPEG4 *)data;
2101     
2102     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2103
2104     trace_ctx->trace_slice_no++;
2105
2106     trace_ctx->trace_slice_size = p->slice_data_size;
2107
2108     va_TraceMsg(trace_ctx,"VASliceParameterBufferMPEG4\n");
2109
2110     va_TraceMsg(trace_ctx,"\tslice_data_size = %d\n", p->slice_data_size);
2111     va_TraceMsg(trace_ctx,"\tslice_data_offset = %d\n", p->slice_data_offset);
2112     va_TraceMsg(trace_ctx,"\tslice_data_flag = %d\n", p->slice_data_flag);
2113     va_TraceMsg(trace_ctx,"\tmacroblock_offset = %d\n", p->macroblock_offset);
2114     va_TraceMsg(trace_ctx,"\tmacroblock_number = %d\n", p->macroblock_number);
2115     va_TraceMsg(trace_ctx,"\tquant_scale = %d\n", p->quant_scale);
2116     va_TraceMsg(trace_ctx, NULL);
2117
2118     return;
2119 }
2120
2121
2122 static inline void va_TraceFlagIfNotZero(
2123     struct trace_context *trace_ctx,
2124     const char *name,   /* in */
2125     unsigned int flag   /* in */
2126 )
2127 {
2128     if (flag != 0) {
2129         va_TraceMsg(trace_ctx, "%s = %x\n", name, flag);
2130     }
2131 }
2132
2133
2134 static void va_TraceVAPictureParameterBufferHEVC(
2135     VADisplay dpy,
2136     VAContextID context,
2137     VABufferID buffer,
2138     VABufferType type,
2139     unsigned int size,
2140     unsigned int num_elements,
2141     void *data)
2142 {
2143     int i;
2144     VAPictureParameterBufferHEVC *p = (VAPictureParameterBufferHEVC*)data;
2145
2146     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2147
2148     va_TracePrint(trace_ctx, "VAPictureParameterBufferHEVC\n");
2149
2150     va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
2151     va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %d\n", p->CurrPic.pic_order_cnt);
2152     va_TraceMsg(trace_ctx, "\tCurrPic.flags = %d\n", p->CurrPic.flags);
2153
2154     va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags:\n");
2155     for (i = 0; i < 15; i++)
2156     {
2157         if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) &&
2158             ((p->ReferenceFrames[i].flags & VA_PICTURE_HEVC_INVALID) == 0)) {
2159             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x\n",
2160                         p->ReferenceFrames[i].picture_id,
2161                         p->ReferenceFrames[i].pic_order_cnt,
2162                         p->ReferenceFrames[i].flags);
2163         } else
2164             va_TraceMsg(trace_ctx, "\t\tinv-inv-inv-inv-inv\n");
2165     }
2166     va_TraceMsg(trace_ctx, "\n");
2167
2168     va_TraceMsg(trace_ctx, "\tpic_width_in_luma_samples = %d\n", p->pic_width_in_luma_samples);
2169     va_TraceMsg(trace_ctx, "\tpic_height_in_luma_samples = %d\n", p->pic_height_in_luma_samples);
2170     va_TraceMsg(trace_ctx, "\tpic_fields = %d\n", p->pic_fields.value);
2171
2172     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->pic_fields.bits.chroma_format_idc);
2173     va_TraceMsg(trace_ctx, "\tseparate_colour_plane_flag = %d\n", p->pic_fields.bits.separate_colour_plane_flag);
2174     va_TraceMsg(trace_ctx, "\tpcm_enabled_flag = %d\n", p->pic_fields.bits.pcm_enabled_flag);
2175     va_TraceMsg(trace_ctx, "\tscaling_list_enabled_flag = %d\n", p->pic_fields.bits.scaling_list_enabled_flag);
2176     va_TraceMsg(trace_ctx, "\ttransform_skip_enabled_flag = %d\n", p->pic_fields.bits.transform_skip_enabled_flag);
2177     va_TraceMsg(trace_ctx, "\tamp_enabled_flag = %d\n", p->pic_fields.bits.amp_enabled_flag);
2178     va_TraceMsg(trace_ctx, "\tstrong_intra_smoothing_enabled_flag = %d\n", p->pic_fields.bits.strong_intra_smoothing_enabled_flag);
2179     va_TraceMsg(trace_ctx, "\tsign_data_hiding_enabled_flag = %d\n", p->pic_fields.bits.sign_data_hiding_enabled_flag);
2180     va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag);
2181     va_TraceMsg(trace_ctx, "\tcu_qp_delta_enabled_flag = %d\n", p->pic_fields.bits.cu_qp_delta_enabled_flag);
2182     va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag);
2183     va_TraceMsg(trace_ctx, "\tweighted_bipred_flag = %d\n", p->pic_fields.bits.weighted_bipred_flag);
2184     va_TraceMsg(trace_ctx, "\ttransquant_bypass_enabled_flag = %d\n", p->pic_fields.bits.transquant_bypass_enabled_flag);
2185     va_TraceMsg(trace_ctx, "\ttiles_enabled_flag = %d\n", p->pic_fields.bits.tiles_enabled_flag);
2186     va_TraceMsg(trace_ctx, "\tentropy_coding_sync_enabled_flag = %d\n", p->pic_fields.bits.entropy_coding_sync_enabled_flag);
2187     va_TraceMsg(trace_ctx, "\tpps_loop_filter_across_slices_enabled_flag = %d\n", p->pic_fields.bits.pps_loop_filter_across_slices_enabled_flag);
2188     va_TraceMsg(trace_ctx, "\tloop_filter_across_tiles_enabled_flag = %d\n", p->pic_fields.bits.loop_filter_across_tiles_enabled_flag);
2189     va_TraceMsg(trace_ctx, "\tpcm_loop_filter_disabled_flag = %d\n", p->pic_fields.bits.pcm_loop_filter_disabled_flag);
2190     va_TraceMsg(trace_ctx, "\tNoPicReorderingFlag = %d\n", p->pic_fields.bits.NoPicReorderingFlag);
2191     va_TraceMsg(trace_ctx, "\tNoBiPredFlag = %d\n", p->pic_fields.bits.NoBiPredFlag);
2192     va_TraceMsg(trace_ctx, "\tReservedBits = %d\n", p->pic_fields.bits.ReservedBits);
2193
2194     va_TraceMsg(trace_ctx, "\tsps_max_dec_pic_buffering_minus1 = %d\n", p->sps_max_dec_pic_buffering_minus1);
2195     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8);
2196     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8);
2197     va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_luma_minus1 = %d\n", p->pcm_sample_bit_depth_luma_minus1);
2198     va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_chroma_minus1 = %d\n", p->pcm_sample_bit_depth_chroma_minus1);
2199     va_TraceMsg(trace_ctx, "\tlog2_min_luma_coding_block_size_minus3 = %d\n", p->log2_min_luma_coding_block_size_minus3);
2200     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_luma_coding_block_size = %d\n", p->log2_diff_max_min_luma_coding_block_size);
2201     va_TraceMsg(trace_ctx, "\tlog2_min_transform_block_size_minus2 = %d\n", p->log2_min_transform_block_size_minus2);
2202     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_transform_block_size = %d\n", p->log2_diff_max_min_transform_block_size);
2203     va_TraceMsg(trace_ctx, "\tlog2_min_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_min_pcm_luma_coding_block_size_minus3);
2204     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_pcm_luma_coding_block_size = %d\n", p->log2_diff_max_min_pcm_luma_coding_block_size);
2205     va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_intra = %d\n", p->max_transform_hierarchy_depth_intra);
2206     va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_inter = %d\n", p->max_transform_hierarchy_depth_inter);
2207     va_TraceMsg(trace_ctx, "\tinit_qp_minus26 = %d\n", p->init_qp_minus26);
2208     va_TraceMsg(trace_ctx, "\tdiff_cu_qp_delta_depth = %d\n", p->diff_cu_qp_delta_depth);
2209     va_TraceMsg(trace_ctx, "\tpps_cb_qp_offset = %d\n", p->pps_cb_qp_offset);
2210     va_TraceMsg(trace_ctx, "\tpps_cr_qp_offset = %d\n", p->pps_cr_qp_offset);
2211     va_TraceMsg(trace_ctx, "\tlog2_parallel_merge_level_minus2 = %d\n", p->log2_parallel_merge_level_minus2);
2212     va_TraceMsg(trace_ctx, "\tnum_tile_columns_minus1 = %d\n", p->num_tile_columns_minus1);
2213     va_TraceMsg(trace_ctx, "\tnum_tile_rows_minus1 = %d\n", p->num_tile_rows_minus1);
2214
2215     va_TraceMsg(trace_ctx, "\tcolumn_width_minus1[19]=\n");
2216     va_TraceMsg(trace_ctx, "");
2217     for (i = 0; i < 19; i++) {
2218         va_TracePrint(trace_ctx, "\t%d", p->column_width_minus1[i]);
2219         if ((i + 1) % 8 == 0)
2220             TRACE_NEWLINE();
2221     }
2222     va_TracePrint(trace_ctx, "\n");
2223     va_TraceMsg(trace_ctx, "\trow_height_minus1[21]=\n");
2224     va_TraceMsg(trace_ctx, "");
2225     for (i = 0; i < 21; i++) {
2226         va_TracePrint(trace_ctx, "\t%d", p->row_height_minus1[i]);
2227         if ((i + 1) % 8 == 0)
2228             TRACE_NEWLINE();
2229     }
2230     va_TracePrint(trace_ctx, "\n");
2231
2232     va_TraceMsg(trace_ctx, "\tslice_parsing_fields = %d\n", p->slice_parsing_fields.value);
2233     va_TraceMsg(trace_ctx, "\tlists_modification_present_flag = %d\n", p->slice_parsing_fields.bits.lists_modification_present_flag);
2234     va_TraceMsg(trace_ctx, "\tlong_term_ref_pics_present_flag = %d\n", p->slice_parsing_fields.bits.long_term_ref_pics_present_flag);
2235     va_TraceMsg(trace_ctx, "\tsps_temporal_mvp_enabled_flag = %d\n", p->slice_parsing_fields.bits.sps_temporal_mvp_enabled_flag);
2236     va_TraceMsg(trace_ctx, "\tcabac_init_present_flag = %d\n", p->slice_parsing_fields.bits.cabac_init_present_flag);
2237     va_TraceMsg(trace_ctx, "\toutput_flag_present_flag = %d\n", p->slice_parsing_fields.bits.output_flag_present_flag);
2238     va_TraceMsg(trace_ctx, "\tdependent_slice_segments_enabled_flag = %d\n", p->slice_parsing_fields.bits.dependent_slice_segments_enabled_flag);
2239     va_TraceMsg(trace_ctx, "\tpps_slice_chroma_qp_offsets_present_flag = %d\n", p->slice_parsing_fields.bits.pps_slice_chroma_qp_offsets_present_flag);
2240     va_TraceMsg(trace_ctx, "\tsample_adaptive_offset_enabled_flag = %d\n", p->slice_parsing_fields.bits.sample_adaptive_offset_enabled_flag);
2241     va_TraceMsg(trace_ctx, "\tdeblocking_filter_override_enabled_flag = %d\n", p->slice_parsing_fields.bits.deblocking_filter_override_enabled_flag);
2242     va_TraceMsg(trace_ctx, "\tpps_disable_deblocking_filter_flag = %d\n", p->slice_parsing_fields.bits.pps_disable_deblocking_filter_flag);
2243     va_TraceMsg(trace_ctx, "\tslice_segment_header_extension_present_flag = %d\n", p->slice_parsing_fields.bits.slice_segment_header_extension_present_flag);
2244     va_TraceMsg(trace_ctx, "\tRapPicFlag = %d\n", p->slice_parsing_fields.bits.RapPicFlag);
2245     va_TraceMsg(trace_ctx, "\tIdrPicFlag = %d\n", p->slice_parsing_fields.bits.IdrPicFlag);
2246     va_TraceMsg(trace_ctx, "\tIntraPicFlag = %d\n", p->slice_parsing_fields.bits.IntraPicFlag);
2247     va_TraceMsg(trace_ctx, "\tReservedBits = %d\n", p->slice_parsing_fields.bits.ReservedBits);
2248
2249     va_TraceMsg(trace_ctx, "\tlog2_max_pic_order_cnt_lsb_minus4 = %d\n", p->log2_max_pic_order_cnt_lsb_minus4);
2250     va_TraceMsg(trace_ctx, "\tnum_short_term_ref_pic_sets = %d\n", p->num_short_term_ref_pic_sets);
2251     va_TraceMsg(trace_ctx, "\tnum_long_term_ref_pic_sps = %d\n", p->num_long_term_ref_pic_sps);
2252     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_default_active_minus1 = %d\n", p->num_ref_idx_l0_default_active_minus1);
2253     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_default_active_minus1 = %d\n", p->num_ref_idx_l1_default_active_minus1);
2254     va_TraceMsg(trace_ctx, "\tpps_beta_offset_div2 = %d\n", p->pps_beta_offset_div2);
2255     va_TraceMsg(trace_ctx, "\tpps_tc_offset_div2 = %d\n", p->pps_tc_offset_div2);
2256     va_TraceMsg(trace_ctx, "\tnum_extra_slice_header_bits = %d\n", p->num_extra_slice_header_bits);
2257     va_TraceMsg(trace_ctx, "\tst_rps_bits = %d\n", p->st_rps_bits);
2258
2259     return;
2260 }
2261
2262 static void va_TraceVASliceParameterBufferHEVC(
2263     VADisplay dpy,
2264     VAContextID context,
2265     VABufferID buffer,
2266     VABufferType type,
2267     unsigned int size,
2268     unsigned int num_elements,
2269     void *data)
2270 {
2271     int i,j;
2272     VASliceParameterBufferHEVC* p = (VASliceParameterBufferHEVC*)data;
2273
2274     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2275
2276     trace_ctx->trace_slice_no++;
2277     trace_ctx->trace_slice_size = p->slice_data_size;
2278
2279     va_TracePrint(trace_ctx, "VASliceParameterBufferHEVC\n");
2280     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
2281     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
2282     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
2283     va_TraceMsg(trace_ctx, "\tslice_data_byte_offset = %d\n", p->slice_data_byte_offset);
2284     va_TraceMsg(trace_ctx, "\tslice_segment_address = %d\n", p->slice_segment_address);
2285
2286     va_TraceMsg(trace_ctx, "\tRefPicList[2][15]=\n");
2287     va_TraceMsg(trace_ctx, "");
2288     for (i = 0; i < 2; i++) {
2289         for (j = 0; j < 15; j++) {
2290             va_TracePrint(trace_ctx, "\t%d", p->RefPicList[i][j]);
2291             if ((j + 1) % 8 == 0)
2292                 TRACE_NEWLINE();
2293         }
2294         TRACE_NEWLINE();
2295     }
2296
2297     va_TracePrint(trace_ctx, "\tLongSliceFlags.value = %d\n", p->LongSliceFlags.value);
2298     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.LastSliceOfPic = %d\n", p->LongSliceFlags.fields.LastSliceOfPic);
2299     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.dependent_slice_segment_flag = %d\n", p->LongSliceFlags.fields.dependent_slice_segment_flag);
2300     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_type = %d\n", p->LongSliceFlags.fields.slice_type);
2301     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.color_plane_id = %d\n", p->LongSliceFlags.fields.color_plane_id);
2302     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_sao_luma_flag = %d\n", p->LongSliceFlags.fields.slice_sao_luma_flag);
2303     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_sao_chroma_flag = %d\n", p->LongSliceFlags.fields.slice_sao_chroma_flag);
2304     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.mvd_l1_zero_flag = %d\n", p->LongSliceFlags.fields.mvd_l1_zero_flag);
2305     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.cabac_init_flag = %d\n", p->LongSliceFlags.fields.cabac_init_flag);
2306     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_temporal_mvp_enabled_flag = %d\n", p->LongSliceFlags.fields.slice_temporal_mvp_enabled_flag);
2307     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_deblocking_filter_disabled_flag = %d\n", p->LongSliceFlags.fields.slice_deblocking_filter_disabled_flag);
2308     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.collocated_from_l0_flag = %d\n", p->LongSliceFlags.fields.collocated_from_l0_flag);
2309     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_loop_filter_across_slices_enabled_flag = %d\n", p->LongSliceFlags.fields.slice_loop_filter_across_slices_enabled_flag);
2310     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.reserved = %d\n", p->LongSliceFlags.fields.reserved);
2311
2312     va_TraceMsg(trace_ctx, "\tcollocated_ref_idx = %d\n", p->collocated_ref_idx);
2313
2314     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
2315     va_TraceMsg(trace_ctx, "\tslice_cb_qp_offset = %d\n", p->slice_cb_qp_offset);
2316     va_TraceMsg(trace_ctx, "\tslice_cr_qp_offset = %d\n", p->slice_cr_qp_offset);
2317     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
2318     va_TraceMsg(trace_ctx, "\tslice_tc_offset_div2 = %d\n", p->slice_tc_offset_div2);
2319     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
2320     va_TraceMsg(trace_ctx, "\tdelta_chroma_log2_weight_denom = %d\n", p->delta_chroma_log2_weight_denom);
2321
2322     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
2323     for (i = 0; i <=  p->num_ref_idx_l0_active_minus1; i++) {
2324         va_TraceMsg(trace_ctx, "\t% d ", p->delta_luma_weight_l0[i]);
2325         va_TracePrint(trace_ctx, "\t% d ", p->luma_offset_l0[i]);
2326         va_TracePrint(trace_ctx, "\t% d ", p->delta_chroma_weight_l0[i][0]);
2327         va_TracePrint(trace_ctx, "\t% d ", p->delta_chroma_weight_l0[i][1]);
2328         va_TracePrint(trace_ctx, "\t% d ", p->ChromaOffsetL0[i][0]);
2329         va_TracePrint(trace_ctx, "\t% d ", p->ChromaOffsetL0[i][1]);
2330         va_TracePrint(trace_ctx, "\n");
2331     }
2332
2333     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
2334     for (i = 0; i <=  p->num_ref_idx_l1_active_minus1; i++) {
2335         va_TraceMsg(trace_ctx, "\t% d ", p->delta_luma_weight_l1[i]);
2336         va_TracePrint(trace_ctx, "\t% d ", p->luma_offset_l1[i]);
2337         va_TracePrint(trace_ctx, "\t% d ", p->delta_chroma_weight_l1[i][0]);
2338         va_TracePrint(trace_ctx, "\t% d ", p->delta_chroma_weight_l1[i][1]);
2339         va_TracePrint(trace_ctx, "\t% d ", p->ChromaOffsetL1[i][0]);
2340         va_TracePrint(trace_ctx, "\t% d ", p->ChromaOffsetL1[i][1]);
2341         va_TracePrint(trace_ctx, "\n");
2342     }
2343
2344     va_TraceMsg(trace_ctx, "\tfive_minus_max_num_merge_cand = %d\n", p->five_minus_max_num_merge_cand);
2345
2346     va_TraceMsg(trace_ctx, NULL);
2347 }
2348
2349 static void va_TraceVAIQMatrixBufferHEVC(
2350     VADisplay dpy,
2351     VAContextID context,
2352     VABufferID buffer,
2353     VABufferType type,
2354     unsigned int size,
2355     unsigned int num_elements,
2356     void *data
2357 )
2358 {
2359     int i, j;
2360     VAIQMatrixBufferHEVC* p = (VAIQMatrixBufferHEVC* )data;
2361
2362     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2363
2364     va_TracePrint(trace_ctx, "VAIQMatrixBufferHEVC\n");
2365
2366     va_TraceMsg(trace_ctx, "\tScalingList4x4[6][16]=\n");
2367     va_TraceMsg(trace_ctx, "");
2368     for (i = 0; i < 6; i++) {
2369         for (j = 0; j < 16; j++) {
2370             va_TracePrint(trace_ctx, "\t%d\t", p->ScalingList4x4[i][j]);
2371             if ((j + 1) % 8 == 0)
2372                 TRACE_NEWLINE();
2373         }
2374     }
2375
2376     va_TracePrint(trace_ctx, "\tScalingList8x8[6][64]=\n");
2377     va_TraceMsg(trace_ctx, "");
2378     for (i = 0; i < 6; i++) {
2379         for (j = 0; j < 64; j++) {
2380             va_TracePrint(trace_ctx, "\t%d", p->ScalingList8x8[i][j]);
2381             if ((j + 1) % 8 == 0)
2382                 TRACE_NEWLINE();
2383         }
2384     }
2385
2386     va_TracePrint(trace_ctx, "\tScalingList16x16[6][64]=\n");
2387     va_TraceMsg(trace_ctx, "");
2388     for (i = 0; i < 6; i++) {
2389         for (j = 0; j < 64; j++) {
2390             va_TracePrint(trace_ctx, "\t%d", p->ScalingList16x16[i][j]);
2391             if ((j + 1) % 8 == 0)
2392                 TRACE_NEWLINE();
2393         }
2394     }
2395
2396     va_TracePrint(trace_ctx, "\tScalingList32x32[2][64]=\n");
2397     va_TraceMsg(trace_ctx, "");
2398     for (i = 0; i < 2; i++) {
2399         for (j = 0; j < 64; j++) {
2400             va_TracePrint(trace_ctx, "\t%d", p->ScalingList32x32[i][j]);
2401             if ((j + 1) % 8 == 0)
2402                 TRACE_NEWLINE();
2403         }
2404     }
2405
2406     va_TracePrint(trace_ctx, "\tScalingListDC16x16[6]=\n");
2407     va_TraceMsg(trace_ctx, "");
2408     for (j = 0; j < 6; j++) {
2409         va_TracePrint(trace_ctx, "\t%d", p->ScalingListDC16x16[j]);
2410     }
2411     va_TracePrint(trace_ctx, "\n");
2412     va_TraceMsg(trace_ctx, "\tScalingListDC32x32[2]=\n");
2413     va_TraceMsg(trace_ctx, "");
2414     for (j = 0; j < 2; j++) {
2415         va_TracePrint(trace_ctx, "\t%d", p->ScalingListDC32x32[j]);
2416     }
2417     va_TracePrint(trace_ctx, "\n");
2418
2419     va_TraceMsg(trace_ctx, NULL);
2420 }
2421
2422 static void va_TraceVAEncSequenceParameterBufferHEVC(
2423     VADisplay dpy,
2424     VAContextID context,
2425     VABufferID buffer,
2426     VABufferType type,
2427     unsigned int size,
2428     unsigned int num_elements,
2429     void *data)
2430 {
2431     VAEncSequenceParameterBufferHEVC *p = (VAEncSequenceParameterBufferHEVC *)data;
2432
2433     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2434
2435     if(!p)
2436         return;
2437
2438     va_TracePrint(trace_ctx, "\t--VAEncSequenceParameterBufferHEVC\n");
2439
2440     va_TraceMsg(trace_ctx, "\tgeneral_profile_idc = %d\n", p->general_profile_idc);
2441     va_TraceMsg(trace_ctx, "\tgeneral_level_idc = %d\n", p->general_level_idc);
2442     va_TraceMsg(trace_ctx, "\tgeneral_tier_flag = %d\n", p->general_tier_flag);
2443     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
2444     va_TraceMsg(trace_ctx, "\tintra_idr_period = %d\n", p->intra_idr_period);
2445     va_TraceMsg(trace_ctx, "\tip_period = %d\n", p->ip_period);
2446     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2447     va_TraceMsg(trace_ctx, "\tpic_width_in_luma_samples = %d\n", p->pic_width_in_luma_samples);
2448     va_TraceMsg(trace_ctx, "\tpic_height_in_luma_samples = %d\n", p->pic_height_in_luma_samples);
2449     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc);
2450     va_TraceMsg(trace_ctx, "\tseparate_colour_plane_flag = %d\n", p->seq_fields.bits.separate_colour_plane_flag);
2451     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->seq_fields.bits.bit_depth_luma_minus8);
2452     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->seq_fields.bits.bit_depth_chroma_minus8);
2453     va_TraceMsg(trace_ctx, "\tscaling_list_enabled_flag = %d\n", p->seq_fields.bits.scaling_list_enabled_flag);
2454     va_TraceMsg(trace_ctx, "\tstrong_intra_smoothing_enabled_flag = %d\n", p->seq_fields.bits.strong_intra_smoothing_enabled_flag);
2455     va_TraceMsg(trace_ctx, "\tamp_enabled_flag = %d\n", p->seq_fields.bits.amp_enabled_flag);
2456     va_TraceMsg(trace_ctx, "\tsample_adaptive_offset_enabled_flag = %d\n", p->seq_fields.bits.sample_adaptive_offset_enabled_flag);
2457     va_TraceMsg(trace_ctx, "\tpcm_enabled_flag = %d\n", p->seq_fields.bits.pcm_enabled_flag);
2458     va_TraceMsg(trace_ctx, "\tpcm_loop_filter_disabled_flag = %d\n", p->seq_fields.bits.pcm_loop_filter_disabled_flag);
2459     va_TraceMsg(trace_ctx, "\tsps_temporal_mvp_enabled_flag = %d\n", p->seq_fields.bits.sps_temporal_mvp_enabled_flag);
2460     va_TraceMsg(trace_ctx, "\treserved_bits = %d\n", p->seq_fields.bits.reserved_bits);
2461     va_TraceMsg(trace_ctx, "\tlog2_min_luma_coding_block_size_minus3 = %d\n", p->log2_min_luma_coding_block_size_minus3);
2462     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_luma_coding_block_size = %d\n", p->log2_diff_max_min_luma_coding_block_size);
2463     va_TraceMsg(trace_ctx, "\tlog2_min_transform_block_size_minus2 = %d\n", p->log2_min_transform_block_size_minus2);
2464     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_transform_block_size = %d\n", p->log2_diff_max_min_transform_block_size);
2465     va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_inter = %d\n", p->max_transform_hierarchy_depth_inter);
2466     va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_intra = %d\n", p->max_transform_hierarchy_depth_intra);
2467     va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_luma_minus1 = %d\n", p->pcm_sample_bit_depth_luma_minus1);
2468     va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_chroma_minus1 = %d\n", p->pcm_sample_bit_depth_chroma_minus1);
2469     va_TraceMsg(trace_ctx, "\tlog2_min_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_min_pcm_luma_coding_block_size_minus3);
2470     va_TraceMsg(trace_ctx, "\tlog2_max_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_max_pcm_luma_coding_block_size_minus3);
2471     va_TraceMsg(trace_ctx, "\tvui_parameters_present_flag = %d\n", p->vui_parameters_present_flag);
2472     va_TraceMsg(trace_ctx, "\taspect_ratio_info_present_flag = %d\n", p->vui_fields.bits.aspect_ratio_info_present_flag);
2473     va_TraceMsg(trace_ctx, "\tneutral_chroma_indication_flag = %d\n", p->vui_fields.bits.neutral_chroma_indication_flag);
2474     va_TraceMsg(trace_ctx, "\tfield_seq_flag = %d\n", p->vui_fields.bits.field_seq_flag);
2475     va_TraceMsg(trace_ctx, "\tvui_timing_info_present_flag = %d\n", p->vui_fields.bits.vui_timing_info_present_flag);
2476     va_TraceMsg(trace_ctx, "\tbitstream_restriction_flag = %d\n", p->vui_fields.bits.bitstream_restriction_flag);
2477     va_TraceMsg(trace_ctx, "\ttiles_fixed_structure_flag = %d\n", p->vui_fields.bits.tiles_fixed_structure_flag);
2478     va_TraceMsg(trace_ctx, "\tmotion_vectors_over_pic_boundaries_flag = %d\n", p->vui_fields.bits.motion_vectors_over_pic_boundaries_flag);
2479     va_TraceMsg(trace_ctx, "\trestricted_ref_pic_lists_flag = %d\n", p->vui_fields.bits.restricted_ref_pic_lists_flag);
2480     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_horizontal = %d\n", p->vui_fields.bits.log2_max_mv_length_horizontal);
2481     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_vertical = %d\n", p->vui_fields.bits.log2_max_mv_length_vertical);
2482     va_TraceMsg(trace_ctx, "\taspect_ratio_idc = %d\n", p->aspect_ratio_idc);
2483     va_TraceMsg(trace_ctx, "\tsar_width = %d\n", p->sar_width);
2484     va_TraceMsg(trace_ctx, "\tsar_height = %d\n", p->sar_height);
2485     va_TraceMsg(trace_ctx, "\tvui_num_units_in_tick = %d\n", p->vui_num_units_in_tick);
2486     va_TraceMsg(trace_ctx, "\tvui_time_scale = %d\n", p->vui_time_scale);
2487     va_TraceMsg(trace_ctx, "\tmin_spatial_segmentation_idc = %d\n", p->min_spatial_segmentation_idc);
2488     va_TraceMsg(trace_ctx, "\tmax_bytes_per_pic_denom = %d\n", p->max_bytes_per_pic_denom);
2489     va_TraceMsg(trace_ctx, "\tmax_bits_per_min_cu_denom = %d\n", p->max_bits_per_min_cu_denom);
2490
2491     return;
2492 }
2493
2494 static void va_TraceVAEncPictureParameterBufferHEVC(
2495     VADisplay dpy,
2496     VAContextID context,
2497     VABufferID buffer,
2498     VABufferType type,
2499     unsigned int size,
2500     unsigned int num_elements,
2501     void *data)
2502 {
2503     int i;
2504     VAEncPictureParameterBufferHEVC *p = (VAEncPictureParameterBufferHEVC *)data;
2505
2506     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2507
2508     if(!p)
2509         return;
2510
2511     va_TracePrint(trace_ctx, "\t--VAEncPictureParameterBufferHEVC\n");
2512
2513     va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.picture_id = %d\n", p->decoded_curr_pic.picture_id);
2514     va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.pic_order_cnt = %d\n", p->decoded_curr_pic.pic_order_cnt);
2515     va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.flags = %d\n", p->decoded_curr_pic.flags);
2516
2517     for(i = 0; i < 15; i ++)
2518     {
2519         va_TraceMsg(trace_ctx, "\treference_frames[%d].picture_id = %d\n", i, p->reference_frames[i].picture_id);
2520         va_TraceMsg(trace_ctx, "\treference_frames[%d].pic_order_cnt = %d\n", i, p->reference_frames[i].pic_order_cnt);
2521         va_TraceMsg(trace_ctx, "\treference_frames[%d].flags = %d\n", i, p->reference_frames[i].flags);
2522     }
2523
2524     va_TraceMsg(trace_ctx, "\tcoded_buf = %d\n", p->coded_buf);
2525     va_TraceMsg(trace_ctx, "\tcollocated_ref_pic_index = %d\n", p->collocated_ref_pic_index);
2526     va_TraceMsg(trace_ctx, "\tlast_picture = %d\n", p->last_picture);
2527     va_TraceMsg(trace_ctx, "\tpic_init_qp = %d\n", p->pic_init_qp);
2528     va_TraceMsg(trace_ctx, "\tdiff_cu_qp_delta_depth = %d\n", p->diff_cu_qp_delta_depth);
2529     va_TraceMsg(trace_ctx, "\tpps_cb_qp_offset = %d\n", p->pps_cb_qp_offset);
2530     va_TraceMsg(trace_ctx, "\tpps_cr_qp_offset = %d\n", p->pps_cr_qp_offset);
2531     va_TraceMsg(trace_ctx, "\tnum_tile_columns_minus1 = %d\n", p->num_tile_columns_minus1);
2532     va_TraceMsg(trace_ctx, "\tnum_tile_rows_minus1 = %d\n", p->num_tile_rows_minus1);
2533
2534     for(i = 0; i < 19; i ++)
2535     {
2536         va_TraceMsg(trace_ctx, "\tcolumn_width_minus1[%d] = %d\n", i, p->column_width_minus1[i]);
2537     }
2538
2539     for(i = 0; i < 21; i ++)
2540     {
2541         va_TraceMsg(trace_ctx, "\trow_height_minus1[%d] = %d\n", i, p->row_height_minus1[i]);
2542     }
2543
2544     va_TraceMsg(trace_ctx, "\tlog2_parallel_merge_level_minus2 = %d\n", p->log2_parallel_merge_level_minus2);
2545     va_TraceMsg(trace_ctx, "\tctu_max_bitsize_allowed = %d\n", p->ctu_max_bitsize_allowed);
2546     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_default_active_minus1 = %d\n", p->num_ref_idx_l0_default_active_minus1);
2547     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_default_active_minus1 = %d\n", p->num_ref_idx_l1_default_active_minus1);
2548     va_TraceMsg(trace_ctx, "\tslice_pic_parameter_set_id = %d\n", p->slice_pic_parameter_set_id);
2549     va_TraceMsg(trace_ctx, "\tnal_unit_type = %d\n", p->nal_unit_type);
2550     va_TraceMsg(trace_ctx, "\tidr_pic_flag = %d\n", p->pic_fields.bits.idr_pic_flag);
2551     va_TraceMsg(trace_ctx, "\tcoding_type = %d\n", p->pic_fields.bits.coding_type);
2552     va_TraceMsg(trace_ctx, "\treference_pic_flag = %d\n", p->pic_fields.bits.reference_pic_flag);
2553     va_TraceMsg(trace_ctx, "\tdependent_slice_segments_enabled_flag = %d\n", p->pic_fields.bits.dependent_slice_segments_enabled_flag);
2554     va_TraceMsg(trace_ctx, "\tsign_data_hiding_enabled_flag = %d\n", p->pic_fields.bits.sign_data_hiding_enabled_flag);
2555     va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag);
2556     va_TraceMsg(trace_ctx, "\ttransform_skip_enabled_flag = %d\n", p->pic_fields.bits.transform_skip_enabled_flag);
2557     va_TraceMsg(trace_ctx, "\tcu_qp_delta_enabled_flag = %d\n", p->pic_fields.bits.cu_qp_delta_enabled_flag);
2558     va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag);
2559     va_TraceMsg(trace_ctx, "\tweighted_bipred_flag = %d\n", p->pic_fields.bits.weighted_bipred_flag);
2560     va_TraceMsg(trace_ctx, "\ttransquant_bypass_enabled_flag = %d\n", p->pic_fields.bits.transquant_bypass_enabled_flag);
2561     va_TraceMsg(trace_ctx, "\ttiles_enabled_flag = %d\n", p->pic_fields.bits.tiles_enabled_flag);
2562     va_TraceMsg(trace_ctx, "\tentropy_coding_sync_enabled_flag = %d\n", p->pic_fields.bits.entropy_coding_sync_enabled_flag);
2563     va_TraceMsg(trace_ctx, "\tloop_filter_across_tiles_enabled_flag = %d\n", p->pic_fields.bits.loop_filter_across_tiles_enabled_flag);
2564     va_TraceMsg(trace_ctx, "\tpps_loop_filter_across_slices_enabled_flag = %d\n", p->pic_fields.bits.pps_loop_filter_across_slices_enabled_flag);
2565     va_TraceMsg(trace_ctx, "\tscaling_list_data_present_flag = %d\n", p->pic_fields.bits.scaling_list_data_present_flag);
2566     va_TraceMsg(trace_ctx, "\tscreen_content_flag = %d\n", p->pic_fields.bits.screen_content_flag);
2567     va_TraceMsg(trace_ctx, "\tenable_gpu_weighted_prediction = %d\n", p->pic_fields.bits.enable_gpu_weighted_prediction);
2568     va_TraceMsg(trace_ctx, "\tno_output_of_prior_pics_flag = %d\n", p->pic_fields.bits.no_output_of_prior_pics_flag);
2569     va_TraceMsg(trace_ctx, "\treserved = %d\n", p->pic_fields.bits.reserved);
2570
2571     return;
2572 }
2573
2574 static void va_TraceVAEncSliceParameterBufferHEVC(
2575     VADisplay dpy,
2576     VAContextID context,
2577     VABufferID buffer,
2578     VABufferType type,
2579     unsigned int size,
2580     unsigned int num_elements,
2581     void *data)
2582 {
2583     int i;
2584     VAEncSliceParameterBufferHEVC *p = (VAEncSliceParameterBufferHEVC *)data;
2585
2586     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2587
2588     if(!p)
2589         return;
2590
2591     va_TracePrint(trace_ctx, "\t--VAEncSliceParameterBufferHEVC\n");
2592
2593     va_TraceMsg(trace_ctx, "\tslice_segment_address = %d\n", p->slice_segment_address);
2594     va_TraceMsg(trace_ctx, "\tnum_ctu_in_slice = %d\n", p->num_ctu_in_slice);
2595     va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type);
2596     va_TraceMsg(trace_ctx, "\tslice_pic_parameter_set_id = %d\n", p->slice_pic_parameter_set_id);
2597     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
2598     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
2599
2600     for(i = 0; i < 15; i ++)
2601     {
2602         va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].picture_id = %d\n", i, p->ref_pic_list0[i].picture_id);
2603         va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].pic_order_cnt = %d\n", i, p->ref_pic_list0[i].pic_order_cnt);
2604         va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].flags = %d\n", i, p->ref_pic_list0[i].flags);
2605         va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].picture_id = %d\n", i, p->ref_pic_list1[i].picture_id);
2606         va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].pic_order_cnt = %d\n", i, p->ref_pic_list1[i].pic_order_cnt);
2607         va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].flags = %d\n", i, p->ref_pic_list1[i].flags);
2608     }
2609
2610     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
2611     va_TraceMsg(trace_ctx, "\tdelta_chroma_log2_weight_denom = %d\n", p->delta_chroma_log2_weight_denom);
2612
2613     for(i = 0; i < 15; i ++)
2614     {
2615         va_TraceMsg(trace_ctx, "\tdelta_luma_weight_l0[%d] = %d\n", i, p->delta_luma_weight_l0[i]);
2616         va_TraceMsg(trace_ctx, "\tdelta_luma_weight_l1[%d] = %d\n", i, p->delta_luma_weight_l1[i]);
2617     }
2618
2619     for(i = 0; i < 15; i ++)
2620     {
2621         va_TraceMsg(trace_ctx, "\tluma_offset_l0[%d] = %d\n", i, p->luma_offset_l0[i]);
2622         va_TraceMsg(trace_ctx, "\tluma_offset_l1[%d] = %d\n", i, p->luma_offset_l1[i]);
2623     }
2624
2625     for(i = 0; i < 15; i ++)
2626     {
2627         va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l0[%d][0] = %d\n", i, p->delta_chroma_weight_l0[i][0]);
2628         va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l0[%d][1] = %d\n", i, p->delta_chroma_weight_l0[i][1]);
2629         va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l1[%d][0] = %d\n", i, p->delta_chroma_weight_l1[i][0]);
2630         va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l1[%d][1] = %d\n", i, p->delta_chroma_weight_l1[i][1]);
2631     }
2632
2633     for(i = 0; i < 15; i ++)
2634     {
2635         va_TraceMsg(trace_ctx, "\tchroma_offset_l0[%d][0] = %d\n", i, p->chroma_offset_l0[i][0]);
2636         va_TraceMsg(trace_ctx, "\tchroma_offset_l0[%d][1] = %d\n", i, p->chroma_offset_l0[i][1]);
2637         va_TraceMsg(trace_ctx, "\tchroma_offset_l1[%d][0] = %d\n", i, p->chroma_offset_l1[i][0]);
2638         va_TraceMsg(trace_ctx, "\tchroma_offset_l1[%d][1] = %d\n", i, p->chroma_offset_l1[i][1]);
2639     }
2640
2641     va_TraceMsg(trace_ctx, "\tmax_num_merge_cand = %d\n", p->max_num_merge_cand);
2642     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
2643     va_TraceMsg(trace_ctx, "\tslice_cb_qp_offset = %d\n", p->slice_cb_qp_offset);
2644     va_TraceMsg(trace_ctx, "\tslice_cr_qp_offset = %d\n", p->slice_cr_qp_offset);
2645     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
2646     va_TraceMsg(trace_ctx, "\tslice_tc_offset_div2 = %d\n", p->slice_tc_offset_div2);
2647     va_TraceMsg(trace_ctx, "\tlast_slice_of_pic_flag = %d\n", p->slice_fields.bits.last_slice_of_pic_flag);
2648     va_TraceMsg(trace_ctx, "\tdependent_slice_segment_flag = %d\n", p->slice_fields.bits.dependent_slice_segment_flag);
2649     va_TraceMsg(trace_ctx, "\tcolour_plane_id = %d\n", p->slice_fields.bits.colour_plane_id);
2650     va_TraceMsg(trace_ctx, "\tslice_temporal_mvp_enabled_flag = %d\n", p->slice_fields.bits.slice_temporal_mvp_enabled_flag);
2651     va_TraceMsg(trace_ctx, "\tslice_sao_luma_flag = %d\n", p->slice_fields.bits.slice_sao_luma_flag);
2652     va_TraceMsg(trace_ctx, "\tslice_sao_chroma_flag = %d\n", p->slice_fields.bits.slice_sao_chroma_flag);
2653     va_TraceMsg(trace_ctx, "\tnum_ref_idx_active_override_flag = %d\n", p->slice_fields.bits.num_ref_idx_active_override_flag);
2654     va_TraceMsg(trace_ctx, "\tmvd_l1_zero_flag = %d\n", p->slice_fields.bits.mvd_l1_zero_flag);
2655     va_TraceMsg(trace_ctx, "\tcabac_init_flag = %d\n", p->slice_fields.bits.cabac_init_flag);
2656     va_TraceMsg(trace_ctx, "\tslice_deblocking_filter_disabled_flag = %d\n", p->slice_fields.bits.slice_deblocking_filter_disabled_flag);
2657     va_TraceMsg(trace_ctx, "\tslice_loop_filter_across_slices_enabled_flag = %d\n", p->slice_fields.bits.slice_loop_filter_across_slices_enabled_flag);
2658     va_TraceMsg(trace_ctx, "\tcollocated_from_l0_flag = %d\n", p->slice_fields.bits.collocated_from_l0_flag);
2659
2660     return;
2661 }
2662
2663 static void va_TraceVAPictureParameterBufferH264(
2664     VADisplay dpy,
2665     VAContextID context,
2666     VABufferID buffer,
2667     VABufferType type,
2668     unsigned int size,
2669     unsigned int num_elements,
2670     void *data)
2671 {
2672     int i;
2673     VAPictureParameterBufferH264 *p = (VAPictureParameterBufferH264*)data;
2674     
2675     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2676
2677     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferH264\n");
2678
2679     va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
2680     va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %u\n", p->CurrPic.frame_idx);
2681     va_TraceMsg(trace_ctx, "\tCurrPic.flags = 0x%08x\n", p->CurrPic.flags);
2682     va_TraceMsg(trace_ctx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrderCnt);
2683     va_TraceMsg(trace_ctx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFieldOrderCnt);
2684
2685     va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags:\n");
2686     for (i = 0; i < 16; i++)
2687     {
2688         if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) &&
2689             ((p->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID) == 0)) {
2690             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08u-0x%08x\n",
2691                         p->ReferenceFrames[i].TopFieldOrderCnt,
2692                         p->ReferenceFrames[i].BottomFieldOrderCnt,
2693                         p->ReferenceFrames[i].picture_id,
2694                         p->ReferenceFrames[i].frame_idx,
2695                         p->ReferenceFrames[i].flags);
2696         } else
2697             break;
2698     }
2699     va_TraceMsg(trace_ctx, "\tpicture_width_in_mbs_minus1 = %d\n", p->picture_width_in_mbs_minus1);
2700     va_TraceMsg(trace_ctx, "\tpicture_height_in_mbs_minus1 = %d\n", p->picture_height_in_mbs_minus1);
2701     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8);
2702     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8);
2703     va_TraceMsg(trace_ctx, "\tnum_ref_frames = %d\n", p->num_ref_frames);
2704     va_TraceMsg(trace_ctx, "\tseq fields = %d\n", p->seq_fields.value);
2705     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc);
2706     va_TraceMsg(trace_ctx, "\tresidual_colour_transform_flag = %d\n", p->seq_fields.bits.residual_colour_transform_flag);
2707     va_TraceMsg(trace_ctx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mbs_only_flag);
2708     va_TraceMsg(trace_ctx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits.mb_adaptive_frame_field_flag);
2709     va_TraceMsg(trace_ctx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.direct_8x8_inference_flag);
2710     va_TraceMsg(trace_ctx, "\tMinLumaBiPredSize8x8 = %d\n", p->seq_fields.bits.MinLumaBiPredSize8x8);
2711     va_TraceMsg(trace_ctx, "\tpic_init_qp_minus26 = %d\n", p->pic_init_qp_minus26);
2712     va_TraceMsg(trace_ctx, "\tpic_init_qs_minus26 = %d\n", p->pic_init_qs_minus26);
2713     va_TraceMsg(trace_ctx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offset);
2714     va_TraceMsg(trace_ctx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_qp_index_offset);
2715     va_TraceMsg(trace_ctx, "\tpic_fields = 0x%03x\n", p->pic_fields.value);
2716     va_TraceFlagIfNotZero(trace_ctx, "\t\tentropy_coding_mode_flag", p->pic_fields.bits.entropy_coding_mode_flag);
2717     va_TraceFlagIfNotZero(trace_ctx, "\t\tweighted_pred_flag", p->pic_fields.bits.weighted_pred_flag);
2718     va_TraceFlagIfNotZero(trace_ctx, "\t\tweighted_bipred_idc", p->pic_fields.bits.weighted_bipred_idc);
2719     va_TraceFlagIfNotZero(trace_ctx, "\t\ttransform_8x8_mode_flag", p->pic_fields.bits.transform_8x8_mode_flag);
2720     va_TraceFlagIfNotZero(trace_ctx, "\t\tfield_pic_flag", p->pic_fields.bits.field_pic_flag);
2721     va_TraceFlagIfNotZero(trace_ctx, "\t\tconstrained_intra_pred_flag", p->pic_fields.bits.constrained_intra_pred_flag);
2722     va_TraceFlagIfNotZero(trace_ctx, "\t\tpic_order_present_flag", p->pic_fields.bits.pic_order_present_flag);
2723     va_TraceFlagIfNotZero(trace_ctx, "\t\tdeblocking_filter_control_present_flag", p->pic_fields.bits.deblocking_filter_control_present_flag);
2724     va_TraceFlagIfNotZero(trace_ctx, "\t\tredundant_pic_cnt_present_flag", p->pic_fields.bits.redundant_pic_cnt_present_flag);
2725     va_TraceFlagIfNotZero(trace_ctx, "\t\treference_pic_flag", p->pic_fields.bits.reference_pic_flag);
2726     va_TraceMsg(trace_ctx, "\tframe_num = %d\n", p->frame_num);
2727     va_TraceMsg(trace_ctx, NULL);
2728
2729     return;
2730 }
2731
2732 static void va_TraceVASliceParameterBufferH264(
2733     VADisplay dpy,
2734     VAContextID context,
2735     VABufferID buffer,
2736     VABufferType type,
2737     unsigned int size,
2738     unsigned int num_elements,
2739     void *data)
2740 {
2741     int i;
2742     VASliceParameterBufferH264* p = (VASliceParameterBufferH264*)data;
2743     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2744
2745     trace_ctx->trace_slice_no++;
2746     trace_ctx->trace_slice_size = p->slice_data_size;
2747
2748     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferH264\n");
2749     va_TraceMsg(trace_ctx, "\tslice_data_size = %u\n", p->slice_data_size);
2750     va_TraceMsg(trace_ctx, "\tslice_data_offset = %u\n", p->slice_data_offset);
2751     va_TraceMsg(trace_ctx, "\tslice_data_flag = 0x%08x\n", p->slice_data_flag);
2752     va_TraceMsg(trace_ctx, "\tslice_data_bit_offset = %d\n", p->slice_data_bit_offset);
2753     va_TraceMsg(trace_ctx, "\tfirst_mb_in_slice = %d\n", p->first_mb_in_slice);
2754     va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type);
2755     va_TraceMsg(trace_ctx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_mv_pred_flag);
2756     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
2757     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
2758     va_TraceMsg(trace_ctx, "\tcabac_init_idc = %d\n", p->cabac_init_idc);
2759     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
2760     va_TraceMsg(trace_ctx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_deblocking_filter_idc);
2761     va_TraceMsg(trace_ctx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_offset_div2);
2762     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
2763
2764     va_TraceMsg(trace_ctx, "\tRefPicList0 =\n");
2765     for (i = 0; i < 32; i++) {
2766         if ((p->RefPicList0[i].picture_id != VA_INVALID_SURFACE) &&
2767             ((p->RefPicList0[i].flags & VA_PICTURE_H264_INVALID) == 0))
2768         va_TraceMsg(trace_ctx, "%08d-%08d-0x%08x-%08d-0x%08x\n", p->RefPicList0[i].TopFieldOrderCnt, p->RefPicList0[i].BottomFieldOrderCnt, p->RefPicList0[i].picture_id, p->RefPicList0[i].frame_idx,  p->RefPicList0[i].flags);
2769         else
2770             break;
2771     }
2772     va_TraceMsg(trace_ctx, "\tRefPicList1 =\n");
2773     for (i = 0; i < 32; i++) {
2774         if ((p->RefPicList1[i].picture_id != VA_INVALID_SURFACE) &&
2775             ((p->RefPicList1[i].flags & VA_PICTURE_H264_INVALID) == 0))
2776             va_TraceMsg(trace_ctx, "%08d-%08d-0x%08x-%08d-0x%08x\n", p->RefPicList1[i].TopFieldOrderCnt, p->RefPicList1[i].BottomFieldOrderCnt, p->RefPicList1[i].picture_id, p->RefPicList1[i].frame_idx, p->RefPicList1[i].flags);
2777         else
2778             break;
2779     }
2780
2781     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
2782     va_TraceMsg(trace_ctx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_denom);
2783     va_TraceMsg(trace_ctx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag);
2784
2785     for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
2786         va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
2787             p->luma_weight_l0[i],
2788             p->luma_offset_l0[i]);
2789     }
2790
2791
2792     va_TraceMsg(trace_ctx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag);
2793
2794     for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
2795         va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
2796             p->chroma_weight_l0[i][0],
2797             p->chroma_offset_l0[i][0],
2798             p->chroma_weight_l0[i][1],
2799             p->chroma_offset_l0[i][1]);
2800     }
2801
2802
2803     va_TraceMsg(trace_ctx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag);
2804
2805     for (i = 0; (i <=  p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
2806         va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
2807             p->luma_weight_l1[i],
2808             p->luma_offset_l1[i]);
2809     }
2810
2811
2812     va_TraceMsg(trace_ctx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag);
2813
2814     for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
2815         va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
2816             p->chroma_weight_l1[i][0],
2817             p->chroma_offset_l1[i][0],
2818             p->chroma_weight_l1[i][1],
2819             p->chroma_offset_l1[i][1]);
2820
2821     }
2822     va_TraceMsg(trace_ctx, NULL);
2823 }
2824
2825 static void va_TraceVAIQMatrixBufferH264(
2826     VADisplay dpy,
2827     VAContextID context,
2828     VABufferID buffer,
2829     VABufferType type,
2830     unsigned int size,
2831     unsigned int num_elements,
2832     void *data
2833 )
2834 {
2835     int i, j;
2836     VAIQMatrixBufferH264* p = (VAIQMatrixBufferH264* )data;
2837     FILE *fp = NULL;
2838
2839     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2840
2841     if(trace_ctx->plog_file)
2842         fp = trace_ctx->plog_file->fp_log;
2843
2844     va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferH264\n");
2845
2846     va_TraceMsg(trace_ctx, "\tScalingList4x4[6][16]=\n");
2847     for (i = 0; i < 6; i++) {
2848         for (j = 0; j < 16; j++) {
2849             if (fp) {
2850                 fprintf(fp, "\t%d", p->ScalingList4x4[i][j]);
2851                 if ((j + 1) % 8 == 0)
2852                     fprintf(fp, "\n");
2853             }
2854         }
2855     }
2856
2857     va_TraceMsg(trace_ctx, "\tScalingList8x8[2][64]=\n");
2858     for (i = 0; i < 2; i++) {
2859         for (j = 0; j < 64; j++) {
2860             if (fp) {
2861                 fprintf(fp,"\t%d", p->ScalingList8x8[i][j]);
2862                 if ((j + 1) % 8 == 0)
2863                     fprintf(fp, "\n");
2864             }
2865         }
2866     }
2867
2868     va_TraceMsg(trace_ctx, NULL);
2869 }
2870
2871
2872
2873 static void va_TraceVAEncSequenceParameterBufferH264(
2874     VADisplay dpy,
2875     VAContextID context,
2876     VABufferID buffer,
2877     VABufferType type,
2878     unsigned int size,
2879     unsigned int num_elements,
2880     void *data)
2881 {
2882     VAEncSequenceParameterBufferH264 *p = (VAEncSequenceParameterBufferH264 *)data;
2883     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2884     unsigned int i;
2885
2886     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH264\n");
2887
2888     va_TraceMsg(trace_ctx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id);
2889     va_TraceMsg(trace_ctx, "\tlevel_idc = %d\n", p->level_idc);
2890     va_TraceMsg(trace_ctx, "\tintra_period = %u\n", p->intra_period);
2891     va_TraceMsg(trace_ctx, "\tintra_idr_period = %u\n", p->intra_idr_period);
2892     va_TraceMsg(trace_ctx, "\tip_period = %u\n", p->ip_period);
2893     va_TraceMsg(trace_ctx, "\tbits_per_second = %u\n", p->bits_per_second);
2894     va_TraceMsg(trace_ctx, "\tmax_num_ref_frames = %u\n", p->max_num_ref_frames);
2895     va_TraceMsg(trace_ctx, "\tpicture_width_in_mbs = %d\n", p->picture_width_in_mbs);
2896     va_TraceMsg(trace_ctx, "\tpicture_height_in_mbs = %d\n", p->picture_height_in_mbs);
2897     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc);
2898     va_TraceMsg(trace_ctx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mbs_only_flag);
2899     va_TraceMsg(trace_ctx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits.mb_adaptive_frame_field_flag);
2900     va_TraceMsg(trace_ctx, "\tseq_scaling_matrix_present_flag = %d\n", p->seq_fields.bits.seq_scaling_matrix_present_flag);
2901     va_TraceMsg(trace_ctx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.direct_8x8_inference_flag);
2902     va_TraceMsg(trace_ctx, "\tlog2_max_frame_num_minus4 = %d\n", p->seq_fields.bits.log2_max_frame_num_minus4);
2903     va_TraceMsg(trace_ctx, "\tpic_order_cnt_type = %d\n", p->seq_fields.bits.pic_order_cnt_type);
2904     va_TraceMsg(trace_ctx, "\tlog2_max_pic_order_cnt_lsb_minus4 = %d\n", p->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4);
2905     va_TraceMsg(trace_ctx, "\tdelta_pic_order_always_zero_flag = %d\n", p->seq_fields.bits.delta_pic_order_always_zero_flag);
2906     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8);
2907     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8);
2908     va_TraceMsg(trace_ctx, "\tnum_ref_frames_in_pic_order_cnt_cycle = %d\n", p->num_ref_frames_in_pic_order_cnt_cycle);
2909     va_TraceMsg(trace_ctx, "\toffset_for_non_ref_pic = %d\n", p->offset_for_non_ref_pic);
2910     va_TraceMsg(trace_ctx, "\toffset_for_top_to_bottom_field = %d\n", p->offset_for_top_to_bottom_field);
2911     for(i = 0; (i < p->max_num_ref_frames) && (i < 32); ++i)
2912         va_TraceMsg(trace_ctx, "\toffset_for_ref_frame[%d] = %d\n", i, p->offset_for_ref_frame[i]);
2913     va_TraceMsg(trace_ctx, "\tframe_cropping_flag = %d\n", p->frame_cropping_flag);
2914     va_TraceMsg(trace_ctx, "\tframe_crop_left_offset = %u\n", p->frame_crop_left_offset);
2915     va_TraceMsg(trace_ctx, "\tframe_crop_right_offset = %u\n", p->frame_crop_right_offset);
2916     va_TraceMsg(trace_ctx, "\tframe_crop_top_offset = %u\n", p->frame_crop_top_offset);
2917     va_TraceMsg(trace_ctx, "\tframe_crop_bottom_offset = %u\n", p->frame_crop_bottom_offset);
2918     va_TraceMsg(trace_ctx, "\tvui_parameters_present_flag = %d\n", p->vui_parameters_present_flag);
2919     va_TraceMsg(trace_ctx, "\taspect_ratio_info_present_flag = %d\n", p->vui_fields.bits.aspect_ratio_info_present_flag);
2920     va_TraceMsg(trace_ctx, "\ttiming_info_present_flag = %d\n", p->vui_fields.bits.timing_info_present_flag);
2921     va_TraceMsg(trace_ctx, "\tbitstream_restriction_flag = %d\n", p->vui_fields.bits.bitstream_restriction_flag);
2922     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_horizontal = %d\n", p->vui_fields.bits.log2_max_mv_length_horizontal);
2923     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_vertical = %d\n", p->vui_fields.bits.log2_max_mv_length_vertical);
2924     va_TraceMsg(trace_ctx, "\taspect_ratio_idc = %d\n", p->aspect_ratio_idc);
2925     va_TraceMsg(trace_ctx, "\tsar_width = %u\n", p->sar_width);
2926     va_TraceMsg(trace_ctx, "\tsar_height = %u\n", p->sar_height);
2927     va_TraceMsg(trace_ctx, "\tnum_units_in_tick = %u\n", p->num_units_in_tick);
2928     va_TraceMsg(trace_ctx, "\ttime_scale = %u\n", p->time_scale);
2929
2930     va_TraceMsg(trace_ctx, NULL);
2931
2932     return;
2933 }
2934
2935
2936 static void va_TraceVAEncPictureParameterBufferH264(
2937     VADisplay dpy,
2938     VAContextID context,
2939     VABufferID buffer,
2940     VABufferType type,
2941     unsigned int size,
2942     unsigned int num_elements,
2943     void *data)
2944 {
2945     VAEncPictureParameterBufferH264 *p = (VAEncPictureParameterBufferH264 *)data;
2946     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
2947     int i;
2948
2949     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH264\n");
2950
2951     va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
2952     va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %u\n", p->CurrPic.frame_idx);
2953     va_TraceMsg(trace_ctx, "\tCurrPic.flags = 0x%08x\n", p->CurrPic.flags);
2954     va_TraceMsg(trace_ctx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrderCnt);
2955     va_TraceMsg(trace_ctx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFieldOrderCnt);
2956     va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
2957     for (i = 0; i < 16; i++)
2958     {
2959         if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) &&
2960             ((p->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID) == 0)) {
2961             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08u-0x%08x\n",
2962                         p->ReferenceFrames[i].TopFieldOrderCnt,
2963                         p->ReferenceFrames[i].BottomFieldOrderCnt,
2964                         p->ReferenceFrames[i].picture_id,
2965                         p->ReferenceFrames[i].frame_idx,
2966                         p->ReferenceFrames[i].flags
2967                         );
2968         } else
2969             break;
2970     }
2971     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2972     va_TraceMsg(trace_ctx, "\tpic_parameter_set_id = %d\n", p->pic_parameter_set_id);
2973     va_TraceMsg(trace_ctx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id);
2974     va_TraceMsg(trace_ctx, "\tlast_picture = 0x%08x\n", p->last_picture);
2975     va_TraceMsg(trace_ctx, "\tframe_num = %d\n", p->frame_num);
2976     va_TraceMsg(trace_ctx, "\tpic_init_qp = %d\n", p->pic_init_qp);
2977     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
2978     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
2979     va_TraceMsg(trace_ctx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offset);
2980     va_TraceMsg(trace_ctx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_qp_index_offset);
2981     va_TraceMsg(trace_ctx, "\tpic_fields = 0x%03x\n", p->pic_fields.value);
2982     va_TraceMsg(trace_ctx, "\tidr_pic_flag = %d\n", p->pic_fields.bits.idr_pic_flag);
2983     va_TraceMsg(trace_ctx, "\treference_pic_flag = %d\n", p->pic_fields.bits.reference_pic_flag);
2984     va_TraceMsg(trace_ctx, "\tentropy_coding_mode_flag = %d\n", p->pic_fields.bits.entropy_coding_mode_flag);
2985     va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag);
2986     va_TraceMsg(trace_ctx, "\tweighted_bipred_idc = %d\n", p->pic_fields.bits.weighted_bipred_idc);
2987     va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag);
2988     va_TraceMsg(trace_ctx, "\ttransform_8x8_mode_flag = %d\n", p->pic_fields.bits.transform_8x8_mode_flag);
2989     va_TraceMsg(trace_ctx, "\tdeblocking_filter_control_present_flag = %d\n", p->pic_fields.bits.deblocking_filter_control_present_flag);
2990     va_TraceMsg(trace_ctx, "\tredundant_pic_cnt_present_flag = %d\n", p->pic_fields.bits.redundant_pic_cnt_present_flag);
2991     va_TraceMsg(trace_ctx, "\tpic_order_present_flag = %d\n", p->pic_fields.bits.pic_order_present_flag);
2992     va_TraceMsg(trace_ctx, "\tpic_scaling_matrix_present_flag = %d\n", p->pic_fields.bits.pic_scaling_matrix_present_flag);
2993
2994     va_TraceMsg(trace_ctx, NULL);
2995
2996     return;
2997 }
2998
2999 static void va_TraceVAEncSliceParameterBuffer(
3000     VADisplay dpy,
3001     VAContextID context,
3002     VABufferID buffer,
3003     VABufferType type,
3004     unsigned int size,
3005     unsigned int num_elements,
3006     void *data)
3007 {
3008     VAEncSliceParameterBuffer* p = (VAEncSliceParameterBuffer*)data;
3009     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3010     
3011     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBuffer\n");
3012     
3013     va_TraceMsg(trace_ctx, "\tstart_row_number = %d\n", p->start_row_number);
3014     va_TraceMsg(trace_ctx, "\tslice_height = %d\n", p->slice_height);
3015     va_TraceMsg(trace_ctx, "\tslice_flags.is_intra = %d\n", p->slice_flags.bits.is_intra);
3016     va_TraceMsg(trace_ctx, "\tslice_flags.disable_deblocking_filter_idc = %d\n", p->slice_flags.bits.disable_deblocking_filter_idc);
3017     va_TraceMsg(trace_ctx, "\tslice_flags.uses_long_term_ref = %d\n", p->slice_flags.bits.uses_long_term_ref);
3018     va_TraceMsg(trace_ctx, "\tslice_flags.is_long_term_ref = %d\n", p->slice_flags.bits.is_long_term_ref);
3019     va_TraceMsg(trace_ctx, NULL);
3020
3021     return;
3022 }
3023
3024 static void va_TraceVAEncSliceParameterBufferH264(
3025     VADisplay dpy,
3026     VAContextID context,
3027     VABufferID buffer,
3028     VABufferType type,
3029     unsigned int size,
3030     unsigned int num_elements,
3031     void *data)
3032 {
3033     VAEncSliceParameterBufferH264* p = (VAEncSliceParameterBufferH264*)data;
3034     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3035     int i;
3036
3037     if (!p)
3038         return;
3039     
3040     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferH264\n");
3041     va_TraceMsg(trace_ctx, "\tmacroblock_address = %u\n", p->macroblock_address);
3042     va_TraceMsg(trace_ctx, "\tnum_macroblocks = %u\n", p->num_macroblocks);
3043     va_TraceMsg(trace_ctx, "\tmacroblock_info = %08x\n", p->macroblock_info);
3044     va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type);
3045     va_TraceMsg(trace_ctx, "\tpic_parameter_set_id = %d\n", p->pic_parameter_set_id);
3046     va_TraceMsg(trace_ctx, "\tidr_pic_id = %d\n", p->idr_pic_id);
3047     va_TraceMsg(trace_ctx, "\tpic_order_cnt_lsb = %d\n", p->pic_order_cnt_lsb);
3048     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt_bottom = %d\n", p->delta_pic_order_cnt_bottom);
3049     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt[0] = %d\n", p->delta_pic_order_cnt[0]);
3050     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt[1] = %d\n", p->delta_pic_order_cnt[1]);
3051     va_TraceMsg(trace_ctx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_mv_pred_flag);
3052     va_TraceMsg(trace_ctx, "\tnum_ref_idx_active_override_flag = %d\n", p->num_ref_idx_active_override_flag);
3053     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
3054     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
3055
3056     va_TraceMsg(trace_ctx, "\tRefPicList0 (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
3057
3058     
3059     
3060     for (i = 0; i < 32; i++) {
3061         if ((p->RefPicList0[i].picture_id != VA_INVALID_SURFACE) &&
3062             ((p->RefPicList0[i].flags & VA_PICTURE_H264_INVALID) == 0))
3063             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08x\n",
3064                         p->RefPicList0[i].TopFieldOrderCnt,
3065                         p->RefPicList0[i].BottomFieldOrderCnt,
3066                         p->RefPicList0[i].picture_id,
3067                         p->RefPicList0[i].frame_idx,
3068                         p->RefPicList0[i].flags);
3069         else
3070             break;
3071     }
3072     
3073     va_TraceMsg(trace_ctx, "\tRefPicList1 (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
3074     for (i = 0; i < 32; i++) {
3075         if ((p->RefPicList1[i].picture_id != VA_INVALID_SURFACE) &&
3076             ((p->RefPicList1[i].flags & VA_PICTURE_H264_INVALID) == 0))
3077             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08d\n",
3078                         p->RefPicList1[i].TopFieldOrderCnt,
3079                         p->RefPicList1[i].BottomFieldOrderCnt,
3080                         p->RefPicList1[i].picture_id,
3081                         p->RefPicList1[i].frame_idx,
3082                         p->RefPicList1[i].flags
3083                         );
3084         else
3085             break;
3086     }
3087     
3088     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
3089     va_TraceMsg(trace_ctx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_denom);
3090     va_TraceMsg(trace_ctx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag);
3091     if (p->luma_weight_l0_flag) {
3092         for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
3093             va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
3094                         p->luma_weight_l0[i],
3095                         p->luma_offset_l0[i]);
3096         }
3097     }
3098
3099     va_TraceMsg(trace_ctx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag);
3100     if (p->chroma_weight_l0_flag) {
3101         for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
3102             va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
3103                         p->chroma_weight_l0[i][0],
3104                         p->chroma_offset_l0[i][0],
3105                         p->chroma_weight_l0[i][1],
3106                         p->chroma_offset_l0[i][1]);
3107         }
3108     }
3109
3110     va_TraceMsg(trace_ctx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag);
3111     if (p->luma_weight_l1_flag) {
3112         for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
3113             va_TraceMsg(trace_ctx, "\t\t%d\t\t%d\n",
3114                         p->luma_weight_l1[i],
3115                         p->luma_offset_l1[i]);
3116         }
3117     }
3118
3119     va_TraceMsg(trace_ctx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag);
3120     if (p->chroma_weight_l1_flag && p->num_ref_idx_l1_active_minus1 < 32) {
3121         for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
3122             va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
3123                         p->chroma_weight_l1[i][0],
3124                         p->chroma_offset_l1[i][0],
3125                         p->chroma_weight_l1[i][1],
3126                         p->chroma_offset_l1[i][1]);
3127         }
3128     }
3129     va_TraceMsg(trace_ctx, NULL);
3130
3131     va_TraceMsg(trace_ctx, "\tcabac_init_idc = %d\n", p->cabac_init_idc);
3132     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
3133     va_TraceMsg(trace_ctx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_deblocking_filter_idc);
3134     va_TraceMsg(trace_ctx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_offset_div2);
3135     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
3136     va_TraceMsg(trace_ctx, NULL);
3137
3138     return;
3139 }
3140
3141
3142 static void va_TraceVAEncPackedHeaderParameterBufferType(
3143     VADisplay dpy,
3144     VAContextID context,
3145     VABufferID buffer,
3146     VABufferType type,
3147     unsigned int size,
3148     unsigned int num_elements,
3149     void *data)
3150 {
3151     VAEncPackedHeaderParameterBuffer* p = (VAEncPackedHeaderParameterBuffer*)data;
3152     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3153
3154     if (!p)
3155         return;
3156     va_TraceMsg(trace_ctx, "\t--VAEncPackedHeaderParameterBuffer\n");
3157     va_TraceMsg(trace_ctx, "\ttype = 0x%08x\n", p->type);
3158     va_TraceMsg(trace_ctx, "\tbit_length = %d\n", p->bit_length);
3159     va_TraceMsg(trace_ctx, "\thas_emulation_bytes = %d\n", p->has_emulation_bytes);
3160     va_TraceMsg(trace_ctx, NULL);
3161
3162     return;
3163 }
3164
3165 static void va_TraceVAEncMiscParameterBuffer(
3166     VADisplay dpy,
3167     VAContextID context,
3168     VABufferID buffer,
3169     VABufferType type,
3170     unsigned int size,
3171     unsigned int num_elements,
3172     void *data)
3173 {
3174     VAEncMiscParameterBuffer* tmp = (VAEncMiscParameterBuffer*)data;
3175     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3176     
3177     switch (tmp->type) {
3178     case VAEncMiscParameterTypeFrameRate:
3179     {
3180         VAEncMiscParameterFrameRate *p = (VAEncMiscParameterFrameRate *)tmp->data;
3181         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterFrameRate\n");
3182         va_TraceMsg(trace_ctx, "\tframerate = %d\n", p->framerate);
3183         
3184         break;
3185     }
3186     case VAEncMiscParameterTypeRateControl:
3187     {
3188         VAEncMiscParameterRateControl *p = (VAEncMiscParameterRateControl *)tmp->data;
3189
3190         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterRateControl\n");
3191         va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
3192         va_TraceMsg(trace_ctx, "\ttarget_percentage = %d\n", p->target_percentage);
3193         va_TraceMsg(trace_ctx, "\twindow_size = %d\n", p->window_size);
3194         va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
3195         va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
3196         va_TraceMsg(trace_ctx, "\tbasic_unit_size = %d\n", p->basic_unit_size);
3197         va_TraceMsg(trace_ctx, "\trc_flags.reset = %d \n", p->rc_flags.bits.reset);
3198         va_TraceMsg(trace_ctx, "\trc_flags.disable_frame_skip = %d\n", p->rc_flags.bits.disable_frame_skip);
3199         va_TraceMsg(trace_ctx, "\trc_flags.disable_bit_stuffing = %d\n", p->rc_flags.bits.disable_bit_stuffing);
3200         va_TraceMsg(trace_ctx, "\trc_flags.mb_rate_control = %d\n", p->rc_flags.bits.mb_rate_control);
3201         va_TraceMsg(trace_ctx, "\trc_flags.temporal_id = %d\n", p->rc_flags.bits.temporal_id);
3202         break;
3203     }
3204     case VAEncMiscParameterTypeMaxSliceSize:
3205     {
3206         VAEncMiscParameterMaxSliceSize *p = (VAEncMiscParameterMaxSliceSize *)tmp->data;
3207         
3208         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxSliceSize\n");
3209         va_TraceMsg(trace_ctx, "\tmax_slice_size = %d\n", p->max_slice_size);
3210         break;
3211     }
3212     case VAEncMiscParameterTypeAIR:
3213     {
3214         VAEncMiscParameterAIR *p = (VAEncMiscParameterAIR *)tmp->data;
3215         
3216         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterAIR\n");
3217         va_TraceMsg(trace_ctx, "\tair_num_mbs = %d\n", p->air_num_mbs);
3218         va_TraceMsg(trace_ctx, "\tair_threshold = %d\n", p->air_threshold);
3219         va_TraceMsg(trace_ctx, "\tair_auto = %d\n", p->air_auto);
3220         break;
3221     }
3222     case VAEncMiscParameterTypeHRD:
3223     {
3224         VAEncMiscParameterHRD *p = (VAEncMiscParameterHRD *)tmp->data;
3225
3226         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterHRD\n");
3227         va_TraceMsg(trace_ctx, "\tinitial_buffer_fullness = %d\n", p->initial_buffer_fullness);
3228         va_TraceMsg(trace_ctx, "\tbuffer_size = %d\n", p->buffer_size);
3229         break;
3230     }
3231     case VAEncMiscParameterTypeMaxFrameSize:
3232     {
3233         VAEncMiscParameterBufferMaxFrameSize *p = (VAEncMiscParameterBufferMaxFrameSize *)tmp->data;
3234
3235         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxFrameSize\n");
3236         va_TraceMsg(trace_ctx, "\tmax_frame_size = %d\n", p->max_frame_size);
3237         break;
3238     }
3239     case VAEncMiscParameterTypeQualityLevel:
3240     {
3241         VAEncMiscParameterBufferQualityLevel *p = (VAEncMiscParameterBufferQualityLevel *)tmp->data;
3242
3243         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterBufferQualityLevel\n");
3244         va_TraceMsg(trace_ctx, "\tquality_level = %d\n", p->quality_level);
3245         break;
3246     }
3247     default:
3248         va_TraceMsg(trace_ctx, "Unknown VAEncMiscParameterBuffer(type = %d):\n", tmp->type);
3249         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, data);
3250         break;
3251     }
3252     va_TraceMsg(trace_ctx, NULL);
3253
3254     return;
3255 }
3256
3257
3258 static void va_TraceVAPictureParameterBufferVC1(
3259     VADisplay dpy,
3260     VAContextID context,
3261     VABufferID buffer,
3262     VABufferType type,
3263     unsigned int size,
3264     unsigned int num_elements,
3265     void *data
3266 )
3267 {
3268     VAPictureParameterBufferVC1* p = (VAPictureParameterBufferVC1*)data;
3269     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3270     
3271     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVC1\n");
3272     
3273     va_TraceMsg(trace_ctx, "\tforward_reference_picture = 0x%08x\n", p->forward_reference_picture);
3274     va_TraceMsg(trace_ctx, "\tbackward_reference_picture = 0x%08x\n", p->backward_reference_picture);
3275     va_TraceMsg(trace_ctx, "\tinloop_decoded_picture = 0x%08x\n", p->inloop_decoded_picture);
3276     
3277     va_TraceMsg(trace_ctx, "\tpulldown = %d\n", p->sequence_fields.bits.pulldown);
3278     va_TraceMsg(trace_ctx, "\tinterlace = %d\n", p->sequence_fields.bits.interlace);
3279     va_TraceMsg(trace_ctx, "\ttfcntrflag = %d\n", p->sequence_fields.bits.tfcntrflag);
3280     va_TraceMsg(trace_ctx, "\tfinterpflag = %d\n", p->sequence_fields.bits.finterpflag);
3281     va_TraceMsg(trace_ctx, "\tpsf = %d\n", p->sequence_fields.bits.psf);
3282     va_TraceMsg(trace_ctx, "\tmultires = %d\n", p->sequence_fields.bits.multires);
3283     va_TraceMsg(trace_ctx, "\toverlap = %d\n", p->sequence_fields.bits.overlap);
3284     va_TraceMsg(trace_ctx, "\tsyncmarker = %d\n", p->sequence_fields.bits.syncmarker);
3285     va_TraceMsg(trace_ctx, "\trangered = %d\n", p->sequence_fields.bits.rangered);
3286     va_TraceMsg(trace_ctx, "\tmax_b_frames = %d\n", p->sequence_fields.bits.max_b_frames);
3287     va_TraceMsg(trace_ctx, "\tprofile = %d\n", p->sequence_fields.bits.profile);
3288     va_TraceMsg(trace_ctx, "\tcoded_width = %d\n", p->coded_width);
3289     va_TraceMsg(trace_ctx, "\tcoded_height = %d\n", p->coded_height);
3290     va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry);
3291     va_TraceMsg(trace_ctx, "\tbroken_link = %d\n", p->entrypoint_fields.bits.broken_link);
3292     va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry);
3293     va_TraceMsg(trace_ctx, "\tpanscan_flag = %d\n", p->entrypoint_fields.bits.panscan_flag);
3294     va_TraceMsg(trace_ctx, "\tloopfilter = %d\n", p->entrypoint_fields.bits.loopfilter);
3295     va_TraceMsg(trace_ctx, "\tconditional_overlap_flag = %d\n", p->conditional_overlap_flag);
3296     va_TraceMsg(trace_ctx, "\tfast_uvmc_flag = %d\n", p->fast_uvmc_flag);
3297     va_TraceMsg(trace_ctx, "\trange_mapping_luma_flag = %d\n", p->range_mapping_fields.bits.luma_flag);
3298     va_TraceMsg(trace_ctx, "\trange_mapping_luma = %d\n", p->range_mapping_fields.bits.luma);
3299     va_TraceMsg(trace_ctx, "\trange_mapping_chroma_flag = %d\n", p->range_mapping_fields.bits.chroma_flag);
3300     va_TraceMsg(trace_ctx, "\trange_mapping_chroma = %d\n", p->range_mapping_fields.bits.chroma);
3301     va_TraceMsg(trace_ctx, "\tb_picture_fraction = %d\n", p->b_picture_fraction);
3302     va_TraceMsg(trace_ctx, "\tcbp_table = %d\n", p->cbp_table);
3303     va_TraceMsg(trace_ctx, "\tmb_mode_table = %d\n", p->mb_mode_table);
3304     va_TraceMsg(trace_ctx, "\trange_reduction_frame = %d\n", p->range_reduction_frame);
3305     va_TraceMsg(trace_ctx, "\trounding_control = %d\n", p->rounding_control);
3306     va_TraceMsg(trace_ctx, "\tpost_processing = %d\n", p->post_processing);
3307     va_TraceMsg(trace_ctx, "\tpicture_resolution_index = %d\n", p->picture_resolution_index);
3308     va_TraceMsg(trace_ctx, "\tluma_scale = %d\n", p->luma_scale);
3309     va_TraceMsg(trace_ctx, "\tluma_shift = %d\n", p->luma_shift);
3310     va_TraceMsg(trace_ctx, "\tpicture_type = %d\n", p->picture_fields.bits.picture_type);
3311     va_TraceMsg(trace_ctx, "\tframe_coding_mode = %d\n", p->picture_fields.bits.frame_coding_mode);
3312     va_TraceMsg(trace_ctx, "\ttop_field_first = %d\n", p->picture_fields.bits.top_field_first);
3313     va_TraceMsg(trace_ctx, "\tis_first_field = %d\n", p->picture_fields.bits.is_first_field);
3314     va_TraceMsg(trace_ctx, "\tintensity_compensation = %d\n", p->picture_fields.bits.intensity_compensation);
3315     va_TraceMsg(trace_ctx, "\tmv_type_mb = %d\n", p->raw_coding.flags.mv_type_mb);
3316     va_TraceMsg(trace_ctx, "\tdirect_mb = %d\n", p->raw_coding.flags.direct_mb);
3317     va_TraceMsg(trace_ctx, "\tskip_mb = %d\n", p->raw_coding.flags.skip_mb);
3318     va_TraceMsg(trace_ctx, "\tfield_tx = %d\n", p->raw_coding.flags.field_tx);
3319     va_TraceMsg(trace_ctx, "\tforward_mb = %d\n", p->raw_coding.flags.forward_mb);
3320     va_TraceMsg(trace_ctx, "\tac_pred = %d\n", p->raw_coding.flags.ac_pred);
3321     va_TraceMsg(trace_ctx, "\toverflags = %d\n", p->raw_coding.flags.overflags);
3322     va_TraceMsg(trace_ctx, "\tbp_mv_type_mb = %d\n", p->bitplane_present.flags.bp_mv_type_mb);
3323     va_TraceMsg(trace_ctx, "\tbp_direct_mb = %d\n", p->bitplane_present.flags.bp_direct_mb);
3324     va_TraceMsg(trace_ctx, "\tbp_skip_mb = %d\n", p->bitplane_present.flags.bp_skip_mb);
3325     va_TraceMsg(trace_ctx, "\tbp_field_tx = %d\n", p->bitplane_present.flags.bp_field_tx);
3326     va_TraceMsg(trace_ctx, "\tbp_forward_mb = %d\n", p->bitplane_present.flags.bp_forward_mb);
3327     va_TraceMsg(trace_ctx, "\tbp_ac_pred = %d\n", p->bitplane_present.flags.bp_ac_pred);
3328     va_TraceMsg(trace_ctx, "\tbp_overflags = %d\n", p->bitplane_present.flags.bp_overflags);
3329     va_TraceMsg(trace_ctx, "\treference_distance_flag = %d\n", p->reference_fields.bits.reference_distance_flag);
3330     va_TraceMsg(trace_ctx, "\treference_distance = %d\n", p->reference_fields.bits.reference_distance);
3331     va_TraceMsg(trace_ctx, "\tnum_reference_pictures = %d\n", p->reference_fields.bits.num_reference_pictures);
3332     va_TraceMsg(trace_ctx, "\treference_field_pic_indicator = %d\n", p->reference_fields.bits.reference_field_pic_indicator);
3333     va_TraceMsg(trace_ctx, "\tmv_mode = %d\n", p->mv_fields.bits.mv_mode);
3334     va_TraceMsg(trace_ctx, "\tmv_mode2 = %d\n", p->mv_fields.bits.mv_mode2);
3335     va_TraceMsg(trace_ctx, "\tmv_table = %d\n", p->mv_fields.bits.mv_table);
3336     va_TraceMsg(trace_ctx, "\ttwo_mv_block_pattern_table = %d\n", p->mv_fields.bits.two_mv_block_pattern_table);
3337     va_TraceMsg(trace_ctx, "\tfour_mv_switch = %d\n", p->mv_fields.bits.four_mv_switch);
3338     va_TraceMsg(trace_ctx, "\tfour_mv_block_pattern_table = %d\n", p->mv_fields.bits.four_mv_block_pattern_table);
3339     va_TraceMsg(trace_ctx, "\textended_mv_flag = %d\n", p->mv_fields.bits.extended_mv_flag);
3340     va_TraceMsg(trace_ctx, "\textended_mv_range = %d\n", p->mv_fields.bits.extended_mv_range);
3341     va_TraceMsg(trace_ctx, "\textended_dmv_flag = %d\n", p->mv_fields.bits.extended_dmv_flag);
3342     va_TraceMsg(trace_ctx, "\textended_dmv_range = %d\n", p->mv_fields.bits.extended_dmv_range);
3343     va_TraceMsg(trace_ctx, "\tdquant = %d\n", p->pic_quantizer_fields.bits.dquant);
3344     va_TraceMsg(trace_ctx, "\tquantizer = %d\n", p->pic_quantizer_fields.bits.quantizer);
3345     va_TraceMsg(trace_ctx, "\thalf_qp = %d\n", p->pic_quantizer_fields.bits.half_qp);
3346     va_TraceMsg(trace_ctx, "\tpic_quantizer_scale = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_scale);
3347     va_TraceMsg(trace_ctx, "\tpic_quantizer_type = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_type);
3348     va_TraceMsg(trace_ctx, "\tdq_frame = %d\n", p->pic_quantizer_fields.bits.dq_frame);
3349     va_TraceMsg(trace_ctx, "\tdq_profile = %d\n", p->pic_quantizer_fields.bits.dq_profile);
3350     va_TraceMsg(trace_ctx, "\tdq_sb_edge = %d\n", p->pic_quantizer_fields.bits.dq_sb_edge);
3351     va_TraceMsg(trace_ctx, "\tdq_db_edge = %d\n", p->pic_quantizer_fields.bits.dq_db_edge);
3352     va_TraceMsg(trace_ctx, "\tdq_binary_level = %d\n", p->pic_quantizer_fields.bits.dq_binary_level);
3353     va_TraceMsg(trace_ctx, "\talt_pic_quantizer = %d\n", p->pic_quantizer_fields.bits.alt_pic_quantizer);
3354     va_TraceMsg(trace_ctx, "\tvariable_sized_transform_flag = %d\n", p->transform_fields.bits.variable_sized_transform_flag);
3355     va_TraceMsg(trace_ctx, "\tmb_level_transform_type_flag = %d\n", p->transform_fields.bits.mb_level_transform_type_flag);
3356     va_TraceMsg(trace_ctx, "\tframe_level_transform_type = %d\n", p->transform_fields.bits.frame_level_transform_type);
3357     va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx1 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx1);
3358     va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx2 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx2);
3359     va_TraceMsg(trace_ctx, "\tintra_transform_dc_table = %d\n", p->transform_fields.bits.intra_transform_dc_table);
3360     va_TraceMsg(trace_ctx, NULL);
3361 }
3362
3363 static void va_TraceVASliceParameterBufferVC1(
3364     VADisplay dpy,
3365     VAContextID context,
3366     VABufferID buffer,
3367     VABufferType type,
3368     unsigned int size,
3369     unsigned int num_elements,
3370     void* data
3371 )
3372 {
3373     VASliceParameterBufferVC1 *p = (VASliceParameterBufferVC1*)data;
3374     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3375
3376     trace_ctx->trace_slice_no++;
3377     trace_ctx->trace_slice_size = p->slice_data_size;
3378
3379     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVC1\n");
3380     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
3381     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
3382     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
3383     va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
3384     va_TraceMsg(trace_ctx, "\tslice_vertical_position = %d\n", p->slice_vertical_position);
3385     va_TraceMsg(trace_ctx, NULL);
3386 }
3387
3388 static void va_TraceVAPictureParameterBufferVP8(
3389     VADisplay dpy,
3390     VAContextID context,
3391     VABufferID buffer,
3392     VABufferType type,
3393     unsigned int size,
3394     unsigned int num_elements,
3395     void *data)
3396 {
3397     char tmp[1024];
3398     VAPictureParameterBufferVP8 *p = (VAPictureParameterBufferVP8 *)data;
3399     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3400     int i,j;
3401
3402     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVP8\n");
3403
3404     va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
3405     va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
3406     va_TraceMsg(trace_ctx, "\tlast_ref_frame = %x\n", p->last_ref_frame);
3407     va_TraceMsg(trace_ctx, "\tgolden_ref_frame = %x\n", p->golden_ref_frame);
3408     va_TraceMsg(trace_ctx, "\talt_ref_frame = %x\n", p->alt_ref_frame);
3409     va_TraceMsg(trace_ctx, "\tout_of_loop_frame = %x\n", p->out_of_loop_frame);
3410
3411     va_TraceMsg(trace_ctx, "\tkey_frame = %d\n", p->pic_fields.bits.key_frame);
3412     va_TraceMsg(trace_ctx, "\tversion = %d\n", p->pic_fields.bits.version);
3413     va_TraceMsg(trace_ctx, "\tsegmentation_enabled = %d\n", p->pic_fields.bits.segmentation_enabled);
3414     va_TraceMsg(trace_ctx, "\tupdate_mb_segmentation_map = %d\n", p->pic_fields.bits.update_mb_segmentation_map);
3415     va_TraceMsg(trace_ctx, "\tupdate_segment_feature_data = %d\n", p->pic_fields.bits.update_segment_feature_data);
3416     va_TraceMsg(trace_ctx, "\tfilter_type = %d\n", p->pic_fields.bits.filter_type);
3417     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->pic_fields.bits.sharpness_level);
3418     va_TraceMsg(trace_ctx, "\tloop_filter_adj_enable = %d\n", p->pic_fields.bits.loop_filter_adj_enable);
3419     va_TraceMsg(trace_ctx, "\tmode_ref_lf_delta_update = %d\n", p->pic_fields.bits.mode_ref_lf_delta_update);
3420     va_TraceMsg(trace_ctx, "\tsign_bias_golden = %d\n", p->pic_fields.bits.sign_bias_golden);
3421     va_TraceMsg(trace_ctx, "\tsign_bias_alternate = %d\n", p->pic_fields.bits.sign_bias_alternate);
3422     va_TraceMsg(trace_ctx, "\tmb_no_coeff_skip = %d\n", p->pic_fields.bits.mb_no_coeff_skip);
3423     va_TraceMsg(trace_ctx, "\tloop_filter_disable = %d\n", p->pic_fields.bits.loop_filter_disable);
3424
3425     va_TraceMsg(trace_ctx, "\tmb_segment_tree_probs: 0x%2x, 0x%2x, 0x%2x\n",
3426         p->mb_segment_tree_probs[0], p->mb_segment_tree_probs[1], p->mb_segment_tree_probs[2]);
3427
3428     va_TraceMsg(trace_ctx, "\tloop_filter_level: %d, %d, %d, %d\n",
3429         p->loop_filter_level[0], p->loop_filter_level[1], p->loop_filter_level[2], p->loop_filter_level[3]);
3430
3431     va_TraceMsg(trace_ctx, "\tloop_filter_deltas_ref_frame: %d, %d, %d, %d\n",
3432         p->loop_filter_deltas_ref_frame[0], p->loop_filter_deltas_ref_frame[1], p->loop_filter_deltas_ref_frame[2], p->loop_filter_deltas_ref_frame[3]);
3433
3434     va_TraceMsg(trace_ctx, "\tloop_filter_deltas_mode: %d, %d, %d, %d\n",
3435         p->loop_filter_deltas_mode[0], p->loop_filter_deltas_mode[1], p->loop_filter_deltas_mode[2], p->loop_filter_deltas_mode[3]);
3436
3437     va_TraceMsg(trace_ctx, "\tprob_skip_false = %2x\n", p->prob_skip_false);
3438     va_TraceMsg(trace_ctx, "\tprob_intra = %2x\n", p->prob_intra);
3439     va_TraceMsg(trace_ctx, "\tprob_last = %2x\n", p->prob_last);
3440     va_TraceMsg(trace_ctx, "\tprob_gf = %2x\n", p->prob_gf);
3441
3442     va_TraceMsg(trace_ctx, "\ty_mode_probs: 0x%2x, 0x%2x, 0x%2x, 0x%2x\n",
3443         p->y_mode_probs[0], p->y_mode_probs[1], p->y_mode_probs[2], p->y_mode_probs[3]);
3444
3445     va_TraceMsg(trace_ctx, "\tuv_mode_probs: 0x%2x, 0x%2x, 0x%2x\n",
3446         p->uv_mode_probs[0], p->uv_mode_probs[1], p->uv_mode_probs[2]);
3447
3448     va_TraceMsg(trace_ctx, "\tmv_probs[2][19]:\n");
3449     for(i = 0; i<2; ++i) {
3450         memset(tmp, 0, sizeof tmp);
3451         for (j=0; j<19; j++)
3452             sprintf(tmp + strlen(tmp), "%2x ", p->mv_probs[i][j]);
3453         va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
3454     }
3455
3456     va_TraceMsg(trace_ctx, "\tbool_coder_ctx: range = %02x, value = %02x, count = %d\n",
3457         p->bool_coder_ctx.range, p->bool_coder_ctx.value, p->bool_coder_ctx.count);
3458
3459     va_TraceMsg(trace_ctx, NULL);
3460
3461     return;
3462 }
3463
3464 static void va_TraceVASliceParameterBufferVP8(
3465     VADisplay dpy,
3466     VAContextID context,
3467     VABufferID buffer,
3468     VABufferType type,
3469     unsigned int size,
3470     unsigned int num_elements,
3471     void *data)
3472 {
3473     VASliceParameterBufferVP8 *p = (VASliceParameterBufferVP8 *)data;
3474     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3475     int i;
3476
3477     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVP8\n");
3478
3479     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
3480     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
3481     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
3482     va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
3483     va_TraceMsg(trace_ctx, "\tnum_of_partitions = %d\n", p->num_of_partitions);
3484
3485     for(i = 0; i<9; ++i)
3486         va_TraceMsg(trace_ctx, "\tpartition_size[%d] = %d\n", i, p->partition_size[i]);
3487
3488     va_TraceMsg(trace_ctx, NULL);
3489
3490     return;
3491 }
3492
3493 static void va_TraceVAIQMatrixBufferVP8(
3494     VADisplay dpy,
3495     VAContextID context,
3496     VABufferID buffer,
3497     VABufferType type,
3498     unsigned int size,
3499     unsigned int num_elements,
3500     void *data)
3501 {
3502     char tmp[1024];
3503     VAIQMatrixBufferVP8 *p = (VAIQMatrixBufferVP8 *)data;
3504     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3505     int i,j;
3506
3507     va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferVP8\n");
3508
3509     va_TraceMsg(trace_ctx, "\tquantization_index[4][6]=\n");
3510     for (i = 0; i < 4; i++) {
3511         memset(tmp, 0, sizeof tmp);
3512         for (j = 0; j < 6; j++)
3513             sprintf(tmp + strlen(tmp), "%4x, ", p->quantization_index[i][j]);
3514         va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
3515     }
3516
3517     va_TraceMsg(trace_ctx, NULL);
3518
3519     return;
3520 }
3521 static void va_TraceVAProbabilityBufferVP8(
3522     VADisplay dpy,
3523     VAContextID context,
3524     VABufferID buffer,
3525     VABufferType type,
3526     unsigned int size,
3527     unsigned int num_elements,
3528     void *data)
3529 {
3530     char tmp[1024];
3531     VAProbabilityDataBufferVP8 *p = (VAProbabilityDataBufferVP8 *)data;
3532     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3533     int i,j,k,l;
3534
3535     va_TraceMsg(trace_ctx, "\t--VAProbabilityDataBufferVP8\n");
3536
3537     for (i = 0; i < 4; i++)
3538         for (j = 0; j < 8; j++) {
3539             memset(tmp, 0, sizeof tmp);
3540             for (k=0; k<3; k++)
3541                 for (l=0; l<11; l++)
3542                     sprintf(tmp + strlen(tmp), "%2x, ", p->dct_coeff_probs[i][j][k][l]);
3543             va_TraceMsg(trace_ctx,"\t\t[%d, %d] = %s\n", i, j, tmp);
3544         }
3545
3546     va_TraceMsg(trace_ctx, NULL);
3547
3548     return;
3549 }
3550
3551 static void va_TraceVAEncSequenceParameterBufferVP8(
3552     VADisplay dpy,
3553     VAContextID context,
3554     VABufferID buffer,
3555     VABufferType type,
3556     unsigned int size,
3557     unsigned int num_elements,
3558     void *data)
3559 {
3560     VAEncSequenceParameterBufferVP8 *p = (VAEncSequenceParameterBufferVP8 *)data;
3561     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3562     int i;
3563
3564     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferVP8\n");
3565
3566     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
3567     va_TraceMsg(trace_ctx, "\terror_resilient = %d\n", p->error_resilient);
3568     va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
3569     va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
3570     va_TraceMsg(trace_ctx, "\tframe_height_scale = %d\n", p->frame_height_scale);
3571     va_TraceMsg(trace_ctx, "\tframe_width_scale = %d\n", p->frame_width_scale);
3572     va_TraceMsg(trace_ctx, "\tkf_auto = %d\n", p->kf_auto);
3573     va_TraceMsg(trace_ctx, "\tkf_max_dist = %d\n", p->kf_max_dist);
3574     va_TraceMsg(trace_ctx, "\tkf_min_dist = %d\n", p->kf_min_dist);
3575     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
3576
3577     for(i = 0; i<4; ++i)
3578         va_TraceMsg(trace_ctx, "\treference_frames[%d] = 0x%08x\n", i, p->reference_frames[i]);
3579
3580     va_TraceMsg(trace_ctx, NULL);
3581
3582     return;
3583 }
3584
3585 static void va_TraceVAEncSequenceParameterBufferVP9(
3586     VADisplay dpy,
3587     VAContextID context,
3588     VABufferID buffer,
3589     VABufferType type,
3590     unsigned int size,
3591     unsigned int num_elements,
3592     void *data)
3593 {
3594     VAEncSequenceParameterBufferVP9 *p = (VAEncSequenceParameterBufferVP9 *)data;
3595     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3596
3597     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferVP9\n");
3598
3599     va_TraceMsg(trace_ctx, "\tmax_frame_height = %d\n", p->max_frame_height);
3600     va_TraceMsg(trace_ctx, "\tmax_frame_width = %d\n", p->max_frame_width);
3601     va_TraceMsg(trace_ctx, "\tkf_auto = %d\n", p->kf_auto);
3602     va_TraceMsg(trace_ctx, "\tkf_min_dist = %d\n", p->kf_min_dist);
3603     va_TraceMsg(trace_ctx, "\tkf_max_dist = %d\n", p->kf_max_dist);
3604     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
3605     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
3606
3607     va_TraceMsg(trace_ctx, NULL);
3608
3609     return;
3610 }
3611
3612 static void va_TraceVAPictureParameterBufferVP9(
3613     VADisplay dpy,
3614     VAContextID context,
3615     VABufferID buffer,
3616     VABufferType type,
3617     unsigned int size,
3618     unsigned int num_elements,
3619     void *data)
3620 {
3621     VADecPictureParameterBufferVP9 *p = (VADecPictureParameterBufferVP9 *)data;
3622     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3623     int i;
3624
3625     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVP9\n");
3626
3627     va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
3628     va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
3629     va_TraceMsg(trace_ctx, "\treference_frames[8] =\n");
3630     for (i = 0; i < 8; i++) {
3631         va_TraceMsg(trace_ctx, "\t\t0x%x\n", p->reference_frames[i]);
3632     }
3633     va_TraceMsg(trace_ctx, "\tsubsampling_x = %d\n", p->pic_fields.bits.subsampling_x);
3634     va_TraceMsg(trace_ctx, "\tsubsampling_y = %d\n", p->pic_fields.bits.subsampling_y);
3635     va_TraceMsg(trace_ctx, "\tframe_type = %d\n",    p->pic_fields.bits.frame_type);
3636     va_TraceMsg(trace_ctx, "\tshow_frame = %d\n",    p->pic_fields.bits.show_frame);
3637     va_TraceMsg(trace_ctx, "\terror_resilient_mode = %d\n", p->pic_fields.bits.error_resilient_mode);
3638     va_TraceMsg(trace_ctx, "\tintra_only = %d\n", p->pic_fields.bits.intra_only);
3639     va_TraceMsg(trace_ctx, "\tallow_high_precision_mv = %d\n", p->pic_fields.bits.allow_high_precision_mv);
3640     va_TraceMsg(trace_ctx, "\tmcomp_filter_type = %d\n", p->pic_fields.bits.mcomp_filter_type);
3641     va_TraceMsg(trace_ctx, "\tframe_parallel_decoding_mode = %d\n", p->pic_fields.bits.frame_parallel_decoding_mode);
3642     va_TraceMsg(trace_ctx, "\treset_frame_context = %d\n", p->pic_fields.bits.reset_frame_context);
3643     va_TraceMsg(trace_ctx, "\trefresh_frame_context = %d\n", p->pic_fields.bits.refresh_frame_context);
3644     va_TraceMsg(trace_ctx, "\tframe_context_idx = %d\n", p->pic_fields.bits.frame_context_idx);
3645     va_TraceMsg(trace_ctx, "\tsegmentation_enabled = %d\n", p->pic_fields.bits.segmentation_enabled);
3646     va_TraceMsg(trace_ctx, "\tsegmentation_temporal_update = %d\n", p->pic_fields.bits.segmentation_temporal_update);
3647     va_TraceMsg(trace_ctx, "\tsegmentation_update_map = %d\n", p->pic_fields.bits.segmentation_update_map);
3648     va_TraceMsg(trace_ctx, "\tlast_ref_frame = %d\n", p->pic_fields.bits.last_ref_frame);
3649     va_TraceMsg(trace_ctx, "\tlast_ref_frame_sign_bias = %d\n",    p->pic_fields.bits.last_ref_frame_sign_bias);
3650     va_TraceMsg(trace_ctx, "\tgolden_ref_frame = %d\n",    p->pic_fields.bits.golden_ref_frame);
3651     va_TraceMsg(trace_ctx, "\tgolden_ref_frame_sign_bias = %d\n", p->pic_fields.bits.golden_ref_frame_sign_bias);
3652     va_TraceMsg(trace_ctx, "\talt_ref_frame = %d\n", p->pic_fields.bits.alt_ref_frame);
3653     va_TraceMsg(trace_ctx, "\talt_ref_frame_sign_bias = %d\n", p->pic_fields.bits.alt_ref_frame_sign_bias);
3654     va_TraceMsg(trace_ctx, "\tlossless_flag = %d\n", p->pic_fields.bits.lossless_flag);
3655
3656     va_TraceMsg(trace_ctx, "\tfilter_level = %d\n", p->filter_level);
3657     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level);
3658     va_TraceMsg(trace_ctx, "\tlog2_tile_rows = %d\n", p->log2_tile_rows);
3659     va_TraceMsg(trace_ctx, "\tlog2_tile_columns = %d\n", p->log2_tile_columns);
3660     va_TraceMsg(trace_ctx, "\tframe_header_length_in_bytes = %d\n", p->frame_header_length_in_bytes);
3661     va_TraceMsg(trace_ctx, "\tfirst_partition_size = %d\n", p->first_partition_size);
3662
3663     va_TraceMsg(trace_ctx, "\tmb_segment_tree_probs[7]: [0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x]\n",
3664                 p->mb_segment_tree_probs[0], p->mb_segment_tree_probs[1],
3665                 p->mb_segment_tree_probs[2], p->mb_segment_tree_probs[3],
3666                 p->mb_segment_tree_probs[4], p->mb_segment_tree_probs[5],
3667                 p->mb_segment_tree_probs[6]);
3668
3669     va_TraceMsg(trace_ctx, "\tsegment_pred_probs[3]: [0x%02x, 0x%02x, 0x%02x]\n", p->segment_pred_probs[0], p->segment_pred_probs[1], p->segment_pred_probs[2]);
3670
3671     va_TraceMsg(trace_ctx, "\tprofile = %d\n", p->profile);
3672
3673     va_TraceMsg(trace_ctx, NULL);
3674
3675     return;
3676 }
3677
3678 static void va_TraceVAEncPictureParameterBufferVP8(
3679     VADisplay dpy,
3680     VAContextID context,
3681     VABufferID buffer,
3682     VABufferType type,
3683     unsigned int size,
3684     unsigned int num_elements,
3685     void *data)
3686 {
3687     VAEncPictureParameterBufferVP8 *p = (VAEncPictureParameterBufferVP8 *)data;
3688     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3689     int i;
3690
3691     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferVP8\n");
3692     va_TraceMsg(trace_ctx, "\treconstructed_frame = 0x%08x\n", p->reconstructed_frame);
3693     va_TraceMsg(trace_ctx, "\tref_last_frame = 0x%08x\n", p->ref_last_frame);
3694     va_TraceMsg(trace_ctx, "\tref_gf_frame = 0x%08x\n", p->ref_gf_frame);
3695     va_TraceMsg(trace_ctx, "\tref_arf_frame = 0x%08x\n", p->ref_arf_frame);
3696     va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", p->coded_buf);
3697
3698     va_TraceMsg(trace_ctx, "\tref_flags.bits.force_kf = %d\n", p->ref_flags.bits.force_kf);
3699     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_last = %d\n", p->ref_flags.bits.no_ref_last);
3700     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_gf = %d\n", p->ref_flags.bits.no_ref_gf);
3701     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = %d\n", p->ref_flags.bits.no_ref_arf);
3702     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = 0x%08x\n", p->ref_flags.bits.reserved);
3703     
3704     va_TraceMsg(trace_ctx, "\tpic_flags.bits.frame_type = %d\n", p->pic_flags.bits.frame_type);
3705     va_TraceMsg(trace_ctx, "\tpic_flags.bits.version = %d\n", p->pic_flags.bits.version);
3706     va_TraceMsg(trace_ctx, "\tpic_flags.bits.show_frame = %d\n", p->pic_flags.bits.show_frame);
3707     va_TraceMsg(trace_ctx, "\tpic_flags.bits.color_space = %d\n", p->pic_flags.bits.color_space);
3708     va_TraceMsg(trace_ctx, "\tpic_flags.bits.recon_filter_type = %d\n", p->pic_flags.bits.recon_filter_type);
3709     va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_type = %d\n", p->pic_flags.bits.loop_filter_type);
3710     va_TraceMsg(trace_ctx, "\tpic_flags.bits.auto_partitions = %d\n", p->pic_flags.bits.auto_partitions);
3711     va_TraceMsg(trace_ctx, "\tpic_flags.bits.num_token_partitions = %d\n", p->pic_flags.bits.num_token_partitions);
3712     va_TraceMsg(trace_ctx, "\tpic_flags.bits.clamping_type = %d\n", p->pic_flags.bits.clamping_type);
3713     va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_enabled = %d\n", p->pic_flags.bits.segmentation_enabled);
3714     va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_mb_segmentation_map = %d\n", p->pic_flags.bits.update_mb_segmentation_map);
3715     va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_segment_feature_data = %d\n", p->pic_flags.bits.update_segment_feature_data);
3716     va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_adj_enable = %d\n", p->pic_flags.bits.loop_filter_adj_enable);
3717     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_entropy_probs = %d\n", p->pic_flags.bits.refresh_entropy_probs);
3718     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_golden_frame = %d\n", p->pic_flags.bits.refresh_golden_frame);
3719     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_alternate_frame = %d\n", p->pic_flags.bits.refresh_alternate_frame);
3720     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_last = %d\n", p->pic_flags.bits.refresh_last);
3721     va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_golden = %d\n", p->pic_flags.bits.copy_buffer_to_golden);
3722     va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_alternate = %d\n", p->pic_flags.bits.copy_buffer_to_alternate);
3723
3724     va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_golden = %d\n", p->pic_flags.bits.sign_bias_golden);
3725     va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_alternate = %d\n", p->pic_flags.bits.sign_bias_alternate);
3726     va_TraceMsg(trace_ctx, "\tpic_flags.bits.mb_no_coeff_skip = %d\n", p->pic_flags.bits.mb_no_coeff_skip);
3727     va_TraceMsg(trace_ctx, "\tpic_flags.bits.forced_lf_adjustment = %d\n", p->pic_flags.bits.forced_lf_adjustment);
3728     va_TraceMsg(trace_ctx, "\tpic_flags.bits.reserved = %d\n", p->pic_flags.bits.reserved);
3729
3730     for(i=0;i<4;i++)
3731        va_TraceMsg(trace_ctx, "\tloop_filter_level[%d] = %d\n", i, p->loop_filter_level[i]);
3732     for(i=0;i<4;i++)
3733        va_TraceMsg(trace_ctx, "\tref_lf_delta[%d] = %d\n", i, p->ref_lf_delta[i]);
3734     for(i=0;i<4;i++)
3735        va_TraceMsg(trace_ctx, "\tmode_lf_delta[%d] = %d\n", i, p->mode_lf_delta[i]);
3736
3737     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level);
3738     va_TraceMsg(trace_ctx, "\tclamp_qindex_high = %d\n", p->clamp_qindex_high);
3739     va_TraceMsg(trace_ctx, "\tclamp_qindex_low = %d\n", p->clamp_qindex_low);
3740
3741     va_TraceMsg(trace_ctx, NULL);
3742
3743     return;
3744 }
3745
3746 static void va_TraceVAEncPictureParameterBufferVP9(
3747     VADisplay dpy,
3748     VAContextID context,
3749     VABufferID buffer,
3750     VABufferType type,
3751     unsigned int size,
3752     unsigned int num_elements,
3753     void *data)
3754 {
3755     VAEncPictureParameterBufferVP9 *p = (VAEncPictureParameterBufferVP9 *)data;
3756     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3757     int i;
3758
3759     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferVP9\n");
3760     va_TraceMsg(trace_ctx, "\tframe_width_src = %d\n", p->frame_width_src);
3761     va_TraceMsg(trace_ctx, "\tframe_height_src = %d\n", p->frame_height_src);
3762     va_TraceMsg(trace_ctx, "\tframe_width_dst = %d\n", p->frame_width_dst);
3763     va_TraceMsg(trace_ctx, "\tframe_height_dst = %d\n", p->frame_height_dst);
3764     va_TraceMsg(trace_ctx, "\treconstructed_frame = 0x%08x\n", p->reconstructed_frame);
3765
3766     for(i=0;i<8;i++)
3767        va_TraceMsg(trace_ctx, "\treference_frames[%d] = 0x%08x\n", i, p->reference_frames[i]);
3768
3769     va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%x\n", p->coded_buf);
3770
3771     va_TraceMsg(trace_ctx, "\tref_flags.bits.force_kf = %d\n", p->ref_flags.bits.force_kf);
3772     va_TraceMsg(trace_ctx, "\tref_flags.bits.ref_frame_ctrl_l0 = %d\n", p->ref_flags.bits.ref_frame_ctrl_l0);
3773     va_TraceMsg(trace_ctx, "\tref_flags.bits.ref_frame_ctrl_l1 = %d\n", p->ref_flags.bits.ref_frame_ctrl_l1);
3774     va_TraceMsg(trace_ctx, "\tref_flags.bits.ref_last_idx = %d\n", p->ref_flags.bits.ref_last_idx);
3775     va_TraceMsg(trace_ctx, "\tref_flags.bits.ref_last_sign_bias = %d\n", p->ref_flags.bits.ref_last_sign_bias);
3776     va_TraceMsg(trace_ctx, "\tref_flags.bits.ref_gf_idx = %d\n", p->ref_flags.bits.ref_gf_idx);
3777     va_TraceMsg(trace_ctx, "\tref_flags.bits.ref_gf_sign_bias = %d\n", p->ref_flags.bits.ref_gf_sign_bias);
3778     va_TraceMsg(trace_ctx, "\tref_flags.bits.ref_arf_idx = %d\n", p->ref_flags.bits.ref_arf_idx);
3779     va_TraceMsg(trace_ctx, "\tref_flags.bits.ref_arf_sign_bias = %d\n", p->ref_flags.bits.ref_arf_sign_bias);
3780     va_TraceMsg(trace_ctx, "\tref_flags.bits.temporal_id = %d\n", p->ref_flags.bits.temporal_id);
3781     va_TraceMsg(trace_ctx, "\tref_flags.bits.reserved = %d\n", p->ref_flags.bits.reserved);
3782
3783     va_TraceMsg(trace_ctx, "\tpic_flags.bits.frame_type = %d\n", p->pic_flags.bits.frame_type);
3784     va_TraceMsg(trace_ctx, "\tpic_flags.bits.show_frame = %d\n", p->pic_flags.bits.show_frame);
3785     va_TraceMsg(trace_ctx, "\tpic_flags.bits.error_resilient_mode = %d\n", p->pic_flags.bits.error_resilient_mode);
3786     va_TraceMsg(trace_ctx, "\tpic_flags.bits.intra_only = %d\n", p->pic_flags.bits.intra_only);
3787     va_TraceMsg(trace_ctx, "\tpic_flags.bits.allow_high_precision_mv = %d\n", p->pic_flags.bits.allow_high_precision_mv);
3788
3789     va_TraceMsg(trace_ctx, "\tpic_flags.bits.mcomp_filter_type = %d\n", p->pic_flags.bits.mcomp_filter_type);
3790     va_TraceMsg(trace_ctx, "\tpic_flags.bits.frame_parallel_decoding_mode = %d\n", p->pic_flags.bits.frame_parallel_decoding_mode);
3791     va_TraceMsg(trace_ctx, "\tpic_flags.bits.reset_frame_context = %d\n", p->pic_flags.bits.reset_frame_context);
3792     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_frame_context = %d\n", p->pic_flags.bits.refresh_frame_context);
3793     va_TraceMsg(trace_ctx, "\tpic_flags.bits.frame_context_idx = %d\n", p->pic_flags.bits.frame_context_idx);
3794     va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_enabled = %d\n", p->pic_flags.bits.segmentation_enabled);
3795     va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_temporal_update = %d\n", p->pic_flags.bits.segmentation_temporal_update);
3796     va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_update_map = %d\n", p->pic_flags.bits.segmentation_update_map);
3797     va_TraceMsg(trace_ctx, "\tpic_flags.bits.lossless_mode = %d\n", p->pic_flags.bits.lossless_mode);
3798     va_TraceMsg(trace_ctx, "\tpic_flags.bits.comp_prediction_mode = %d\n", p->pic_flags.bits.comp_prediction_mode);
3799     va_TraceMsg(trace_ctx, "\tpic_flags.bits.auto_segmentation = %d\n", p->pic_flags.bits.auto_segmentation);
3800     va_TraceMsg(trace_ctx, "\tpic_flags.bits.super_frame_flag = %d\n", p->pic_flags.bits.super_frame_flag);
3801     va_TraceMsg(trace_ctx, "\tpic_flags.bits.reserved = %d\n", p->pic_flags.bits.reserved);
3802
3803     va_TraceMsg(trace_ctx, "\trefresh_frame_flags = %d\n", p->refresh_frame_flags);
3804     va_TraceMsg(trace_ctx, "\tluma_ac_qindex = %d\n", p->luma_ac_qindex);
3805     va_TraceMsg(trace_ctx, "\tluma_dc_qindex_delta = %d\n", p->luma_dc_qindex_delta);
3806     va_TraceMsg(trace_ctx, "\tchroma_ac_qindex_delta = %d\n", p->chroma_ac_qindex_delta);
3807     va_TraceMsg(trace_ctx, "\tchroma_dc_qindex_delta = %d\n", p->chroma_dc_qindex_delta);
3808     va_TraceMsg(trace_ctx, "\tfilter_level = %d\n", p->filter_level);
3809     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level);
3810
3811     for(i=0;i<4;i++)
3812        va_TraceMsg(trace_ctx, "\tref_lf_delta[%d] = %d\n", i, p->ref_lf_delta[i]);
3813     for(i=0;i<2;i++)
3814        va_TraceMsg(trace_ctx, "\tmode_lf_delta[%d] = %d\n", i, p->mode_lf_delta[i]);
3815
3816
3817     va_TraceMsg(trace_ctx, "\tbit_offset_ref_lf_delta = %d\n", p->bit_offset_ref_lf_delta);
3818     va_TraceMsg(trace_ctx, "\tbit_offset_mode_lf_delta = %d\n", p->bit_offset_mode_lf_delta);
3819     va_TraceMsg(trace_ctx, "\tbit_offset_lf_level = %d\n", p->bit_offset_lf_level);
3820     va_TraceMsg(trace_ctx, "\tbit_offset_qindex = %d\n", p->bit_offset_qindex);
3821     va_TraceMsg(trace_ctx, "\tbit_offset_first_partition_size = %d\n", p->bit_offset_first_partition_size);
3822     va_TraceMsg(trace_ctx, "\tbit_offset_segmentation = %d\n", p->bit_offset_segmentation);
3823     va_TraceMsg(trace_ctx, "\tbit_size_segmentation = %d\n", p->bit_size_segmentation);
3824     va_TraceMsg(trace_ctx, "\tlog2_tile_rows = %d\n", p->log2_tile_rows);
3825     va_TraceMsg(trace_ctx, "\tlog2_tile_columns = %d\n", p->log2_tile_columns);
3826     va_TraceMsg(trace_ctx, "\tskip_frame_flag = %d\n", p->skip_frame_flag);
3827     va_TraceMsg(trace_ctx, "\tnumber_skip_frames = %d\n", p->number_skip_frames);
3828     va_TraceMsg(trace_ctx, "\tskip_frames_size = %d\n", p->skip_frames_size);
3829
3830     va_TraceMsg(trace_ctx, NULL);
3831
3832     return;
3833 }
3834
3835 static void va_TraceVASliceParameterBufferVP9(
3836     VADisplay dpy,
3837     VAContextID context,
3838     VABufferID buffer,
3839     VABufferType type,
3840     unsigned int size,
3841     unsigned int num_elements,
3842     void *data)
3843 {
3844
3845     VASliceParameterBufferVP9 *p = (VASliceParameterBufferVP9 *)data;
3846     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3847     int i, j;
3848
3849     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVP9\n");
3850
3851     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
3852     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
3853     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
3854
3855     for (i = 0; i < 8; i++) {
3856         VASegmentParameterVP9* seg = p->seg_param + i;
3857         va_TraceMsg(trace_ctx, "\tseg_param[%d] = \n",  i);
3858         va_TraceMsg(trace_ctx, "\t\tsegment_reference_enabled = %d\n", seg->segment_flags.fields.segment_reference_enabled);
3859         va_TraceMsg(trace_ctx, "\t\tsegment_reference = %d\n", seg->segment_flags.fields.segment_reference);
3860         va_TraceMsg(trace_ctx, "\t\tsegment_reference_skipped = %d\n", seg->segment_flags.fields.segment_reference_skipped);
3861         va_TraceMsg(trace_ctx, "\t\tfilter_level[4][2] = \n");
3862         for (j  = 0; j < 4; j++) {
3863             va_TraceMsg(trace_ctx, "\t\t\t[%3d, %3d]\n", seg->filter_level[j][0], seg->filter_level[j][1]);
3864         }
3865         va_TraceMsg(trace_ctx, "\t\tluma_ac_quant_scale = %d\n", seg->luma_ac_quant_scale);
3866         va_TraceMsg(trace_ctx, "\t\tluma_dc_quant_scale = %d\n", seg->luma_dc_quant_scale);
3867         va_TraceMsg(trace_ctx, "\t\tchroma_ac_quant_scale = %d\n", seg->chroma_ac_quant_scale);
3868         va_TraceMsg(trace_ctx, "\t\tchroma_dc_quant_scale = %d\n", seg->chroma_dc_quant_scale);
3869     }
3870
3871     va_TraceMsg(trace_ctx, NULL);
3872
3873     return;
3874 }
3875
3876 void va_TraceBeginPicture(
3877     VADisplay dpy,
3878     VAContextID context,
3879     VASurfaceID render_target
3880 )
3881 {
3882     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3883
3884     TRACE_FUNCNAME(idx);
3885
3886     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
3887     va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", render_target);
3888     va_TraceMsg(trace_ctx, "\tframe_count  = #%d\n", trace_ctx->trace_frame_no);
3889     va_TraceMsg(trace_ctx, NULL);
3890
3891     trace_ctx->trace_rendertarget = render_target; /* for surface data dump after vaEndPicture */
3892
3893     trace_ctx->trace_frame_no++;
3894     trace_ctx->trace_slice_no = 0;
3895 }
3896
3897 static void va_TraceMPEG2Buf(
3898     VADisplay dpy,
3899     VAContextID context,
3900     VABufferID buffer,
3901     VABufferType type,
3902     unsigned int size,
3903     unsigned int num_elements,
3904     void *pbuf
3905 )
3906 {
3907     switch (type) {
3908     case VAPictureParameterBufferType:
3909         va_TraceVAPictureParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
3910         break;
3911     case VAIQMatrixBufferType:
3912         va_TraceVAIQMatrixBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
3913         break;
3914     case VABitPlaneBufferType:
3915         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3916         break;
3917     case VASliceGroupMapBufferType:
3918         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3919         break;
3920     case VASliceParameterBufferType:
3921         va_TraceVASliceParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
3922         break;
3923     case VASliceDataBufferType:
3924         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3925         break;
3926     case VAMacroblockParameterBufferType:
3927         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3928         break;
3929     case VAResidualDataBufferType:
3930         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3931         break;
3932     case VADeblockingParameterBufferType:
3933         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3934         break;
3935     case VAImageBufferType:
3936         break;
3937     case VAProtectedSliceDataBufferType:
3938         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3939         break;
3940     case VAEncCodedBufferType:
3941         break;
3942     case VAEncSequenceParameterBufferType:
3943         break;
3944     case VAEncPictureParameterBufferType:
3945         break;
3946     case VAEncSliceParameterBufferType:
3947         break;
3948     default:
3949         break;
3950     }
3951 }
3952
3953 static void va_TraceVAEncSequenceParameterBufferH263(
3954     VADisplay dpy,
3955     VAContextID context,
3956     VABufferID buffer,
3957     VABufferType type,
3958     unsigned int size,
3959     unsigned int num_elements,
3960     void *data)
3961 {
3962     VAEncSequenceParameterBufferH263 *p = (VAEncSequenceParameterBufferH263 *)data;
3963     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3964     
3965     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH263\n");
3966     
3967     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
3968     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
3969     va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate);
3970     va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
3971     va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
3972     va_TraceMsg(trace_ctx, NULL);
3973
3974     return;
3975 }
3976
3977
3978 static void va_TraceVAEncPictureParameterBufferH263(
3979     VADisplay dpy,
3980     VAContextID context,
3981     VABufferID buffer,
3982     VABufferType type,
3983     unsigned int size,
3984     unsigned int num_elements,
3985     void *data)
3986 {
3987     VAEncPictureParameterBufferH263 *p = (VAEncPictureParameterBufferH263 *)data;
3988     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
3989     
3990     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH263\n");
3991     va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture);
3992     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
3993     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
3994     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
3995     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
3996     va_TraceMsg(trace_ctx, "\tpicture_type = 0x%08x\n", p->picture_type);
3997     va_TraceMsg(trace_ctx, NULL);
3998
3999     return;
4000 }
4001
4002 static void va_TraceVAEncPictureParameterBufferJPEG(
4003     VADisplay dpy,
4004     VAContextID context,
4005     VABufferID buffer,
4006     VABufferType type,
4007     unsigned int size,
4008     unsigned int num_elements,
4009     void *data)
4010 {
4011     VAEncPictureParameterBufferJPEG *p = (VAEncPictureParameterBufferJPEG *)data;
4012     int i;
4013     
4014     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4015     
4016     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferJPEG\n");
4017     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
4018     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
4019     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
4020     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
4021     va_TraceMsg(trace_ctx, "\tpic_flags.bits.profile = %d\n", p->pic_flags.bits.profile);
4022     va_TraceMsg(trace_ctx, "\tpic_flags.bits.progressive = %d\n", p->pic_flags.bits.profile);
4023     va_TraceMsg(trace_ctx, "\tpic_flags.bits.huffman = %d\n", p->pic_flags.bits.huffman);
4024     va_TraceMsg(trace_ctx, "\tpic_flags.bits.interleaved = %d\n", p->pic_flags.bits.interleaved);
4025     va_TraceMsg(trace_ctx, "\tpic_flags.bits.differential = %d\n", p->pic_flags.bits.differential);
4026     va_TraceMsg(trace_ctx, "\tsample_bit_depth = %d\n", p->sample_bit_depth);
4027     va_TraceMsg(trace_ctx, "\tnum_scan = %d\n", p->num_scan);
4028     va_TraceMsg(trace_ctx, "\tnum_components = %d\n", p->num_components);
4029     for (i=0; i<p->num_components; i++)
4030         va_TraceMsg(trace_ctx, "\tcomponent_id[%d] = %d\n", i, p->component_id[i]);
4031
4032     if (p->quality > 0)
4033         va_TraceMsg(trace_ctx, "\tquality = %d\n", p->quality);
4034     else
4035         va_TraceMsg(trace_ctx, "\tquantiser_table_selector[] = %d %d %d %d\n",
4036                     p->quantiser_table_selector[0],
4037                     p->quantiser_table_selector[1],
4038                     p->quantiser_table_selector[2],
4039                     p->quantiser_table_selector[3]);
4040
4041     va_TraceMsg(trace_ctx, NULL);
4042
4043     return;
4044 }
4045
4046 static void va_TraceVAEncQMatrixBufferJPEG(
4047     VADisplay dpy,
4048     VAContextID context,
4049     VABufferID buffer,
4050     VABufferType type,
4051     unsigned int size,
4052     unsigned int num_elements,
4053     void *data)
4054 {
4055     VAQMatrixBufferJPEG *p = (VAQMatrixBufferJPEG *)data;
4056     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4057     
4058     va_TraceMsg(trace_ctx, "\t--VAQMatrixBufferJPEG\n");
4059     va_TraceMsg(trace_ctx, "\tload_lum_quantiser_matrix = %d", p->load_lum_quantiser_matrix);
4060     if (p->load_lum_quantiser_matrix) {
4061         int i;
4062         for (i = 0; i < 64; i++) {
4063             if ((i % 8) == 0)
4064                 va_TraceMsg(trace_ctx, "\n\t");
4065             va_TraceMsg(trace_ctx, "\t0x%02x", p->lum_quantiser_matrix[i]);
4066         }
4067         va_TraceMsg(trace_ctx, "\n");
4068     }
4069     va_TraceMsg(trace_ctx, "\tload_chroma_quantiser_matrix = %08x\n", p->load_chroma_quantiser_matrix);
4070     if (p->load_chroma_quantiser_matrix) {
4071         int i;
4072         for (i = 0; i < 64; i++) {
4073             if ((i % 8) == 0)
4074                 va_TraceMsg(trace_ctx, "\n\t");
4075             va_TraceMsg(trace_ctx, "\t0x%02x", p->chroma_quantiser_matrix[i]);
4076         }
4077         va_TraceMsg(trace_ctx, "\n");
4078     }
4079     
4080     va_TraceMsg(trace_ctx, NULL);
4081     
4082     return;
4083 }
4084
4085
4086 static void va_TraceVAEncSliceParameterBufferJPEG(
4087     VADisplay dpy,
4088     VAContextID context,
4089     VABufferID buffer,
4090     VABufferType type,
4091     unsigned int size,
4092     unsigned int num_elements,
4093     void *data)
4094 {
4095     VAEncSliceParameterBufferJPEG *p = (VAEncSliceParameterBufferJPEG *)data;
4096     int i;
4097     
4098     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4099     
4100     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferJPEG\n");
4101     va_TraceMsg(trace_ctx, "\trestart_interval = 0x%04x\n", p->restart_interval);
4102     va_TraceMsg(trace_ctx, "\tnum_components = 0x%08x\n", p->num_components);
4103     for (i=0; i<4; i++) {
4104         va_TraceMsg(trace_ctx, "\tcomponents[%i] =\n ");
4105         va_TraceMsg(trace_ctx, "\t\tcomponent_selector = %d\n", p->components[i].component_selector);
4106         va_TraceMsg(trace_ctx, "\t\tdc_table_selector = %d\n", p->components[i].dc_table_selector);
4107         va_TraceMsg(trace_ctx, "\t\tac_table_selector = %d\n", p->components[i].ac_table_selector);
4108     }
4109     
4110     va_TraceMsg(trace_ctx, NULL);
4111     
4112     return;
4113 }
4114
4115
4116 static void va_TraceH263Buf(
4117     VADisplay dpy,
4118     VAContextID context,
4119     VABufferID buffer,
4120     VABufferType type,
4121     unsigned int size,
4122     unsigned int num_elements,
4123     void *pbuf
4124 )
4125 {
4126     switch (type) {
4127     case VAPictureParameterBufferType:/* print MPEG4 buffer */
4128         va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
4129         break;
4130     case VAIQMatrixBufferType:/* print MPEG4 buffer */
4131         va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
4132         break;
4133     case VABitPlaneBufferType:/* print MPEG4 buffer */
4134         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4135         break;
4136     case VASliceGroupMapBufferType:
4137         break;
4138     case VASliceParameterBufferType:/* print MPEG4 buffer */
4139         va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
4140         break;
4141     case VASliceDataBufferType:
4142         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4143         break;
4144     case VAMacroblockParameterBufferType:
4145         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4146         break;
4147     case VAResidualDataBufferType:
4148         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4149         break;
4150     case VADeblockingParameterBufferType:
4151         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4152         break;
4153     case VAImageBufferType:
4154         break;
4155     case VAProtectedSliceDataBufferType:
4156         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4157         break;
4158     case VAEncCodedBufferType:
4159         break;
4160     case VAEncSequenceParameterBufferType:
4161         va_TraceVAEncSequenceParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
4162         break;
4163     case VAEncPictureParameterBufferType:
4164         va_TraceVAEncPictureParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
4165         break;
4166     case VAEncSliceParameterBufferType:
4167         va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
4168         break;
4169     case VAEncPackedHeaderParameterBufferType:
4170         va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
4171         break;
4172     default:
4173         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4174         break;
4175     }
4176 }
4177
4178
4179 static void va_TraceJPEGBuf(
4180     VADisplay dpy,
4181     VAContextID context,
4182     VABufferID buffer,
4183     VABufferType type,
4184     unsigned int size,
4185     unsigned int num_elements,
4186     void *pbuf
4187 )
4188 {
4189     switch (type) {
4190     case VABitPlaneBufferType:
4191     case VASliceGroupMapBufferType:
4192     case VASliceDataBufferType:
4193     case VAMacroblockParameterBufferType:
4194     case VAResidualDataBufferType:
4195     case VADeblockingParameterBufferType:
4196     case VAImageBufferType:
4197     case VAProtectedSliceDataBufferType:
4198     case VAEncCodedBufferType:
4199     case VAEncSequenceParameterBufferType:
4200         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4201         break;
4202     case VAEncSliceParameterBufferType:
4203         va_TraceVAEncSliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
4204         break;
4205     case VAPictureParameterBufferType:
4206         va_TraceVAPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
4207         break;
4208     case VAIQMatrixBufferType:
4209         va_TraceVAIQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
4210         break;
4211     case VASliceParameterBufferType:
4212         va_TraceVASliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
4213         break;
4214     case VAHuffmanTableBufferType:
4215         va_TraceVAHuffmanTableBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
4216         break;
4217     case VAEncPictureParameterBufferType:
4218         va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
4219         break;
4220     case VAQMatrixBufferType:
4221         va_TraceVAEncQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
4222         break;
4223     default:
4224         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4225         break;
4226     }
4227 }
4228
4229 static void va_TraceMPEG4Buf(
4230     VADisplay dpy,
4231     VAContextID context,
4232     VABufferID buffer,
4233     VABufferType type,
4234     unsigned int size,
4235     unsigned int num_elements,
4236     void *pbuf
4237 )
4238 {
4239     switch (type) {
4240     case VAPictureParameterBufferType:
4241         va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
4242         break;
4243     case VAIQMatrixBufferType:
4244         va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
4245         break;
4246     case VABitPlaneBufferType:
4247         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4248         break;
4249     case VASliceGroupMapBufferType:
4250         break;
4251     case VASliceParameterBufferType:
4252         va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
4253         break;
4254     case VASliceDataBufferType:
4255         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4256         break;
4257     case VAMacroblockParameterBufferType:
4258         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4259         break;
4260     case VAResidualDataBufferType:
4261         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4262         break;
4263     case VADeblockingParameterBufferType:
4264         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4265         break;
4266     case VAImageBufferType:
4267         break;
4268     case VAProtectedSliceDataBufferType:
4269         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4270         break;
4271     case VAEncCodedBufferType:
4272         break;
4273     case VAEncSequenceParameterBufferType:
4274         va_TraceVAEncSequenceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
4275         break;
4276     case VAEncPictureParameterBufferType:
4277         va_TraceVAEncPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
4278         break;
4279     case VAEncSliceParameterBufferType:
4280         va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
4281         break;
4282     default:
4283         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4284         break;
4285     }
4286 }
4287
4288 static void va_TraceHEVCBuf(
4289     VADisplay dpy,
4290     VAContextID context,
4291     VABufferID buffer,
4292     VABufferType type,
4293     unsigned int size,
4294     unsigned int num_elements,
4295     void *pbuf
4296 )
4297 {
4298     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4299
4300     switch (type) {
4301         case VAPictureParameterBufferType:
4302             va_TraceVAPictureParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
4303             break;
4304         case VASliceParameterBufferType:
4305             va_TraceVASliceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
4306             break;
4307         case VAIQMatrixBufferType:
4308             va_TraceVAIQMatrixBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
4309             break;
4310         case VAEncSequenceParameterBufferType:
4311             va_TraceVAEncSequenceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
4312             break;
4313         case VAEncPictureParameterBufferType:
4314             va_TraceVAEncPictureParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
4315             break;
4316         case VAEncSliceParameterBufferType:
4317             va_TraceVAEncSliceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
4318             break;
4319         case VAEncMiscParameterBufferType:
4320             va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
4321             break;
4322         default:
4323             va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4324             break;
4325     }
4326 }
4327
4328 static void va_TraceH264Buf(
4329     VADisplay dpy,
4330     VAContextID context,
4331     VABufferID buffer,
4332     VABufferType type,
4333     unsigned int size,
4334     unsigned int num_elements,
4335     void *pbuf
4336 )
4337 {
4338     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4339     
4340     switch (type) {
4341     case VAPictureParameterBufferType:
4342         va_TraceVAPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
4343         break;
4344     case VAIQMatrixBufferType:
4345         va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
4346         break;
4347     case VABitPlaneBufferType:
4348         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
4349         break;
4350     case VASliceGroupMapBufferType:
4351         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4352         break;
4353     case VASliceParameterBufferType:
4354         va_TraceVASliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
4355         break;
4356     case VASliceDataBufferType:
4357         va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
4358         break;
4359     case VAMacroblockParameterBufferType:
4360         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
4361         break;
4362     case VAResidualDataBufferType:
4363         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
4364         break;
4365     case VADeblockingParameterBufferType:
4366         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4367         break;
4368     case VAImageBufferType:
4369         break;
4370     case VAProtectedSliceDataBufferType:
4371         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4372         break;
4373     case VAEncCodedBufferType:
4374         break;
4375     case VAEncSequenceParameterBufferType:
4376         va_TraceVAEncSequenceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
4377         break;
4378     case VAEncPictureParameterBufferType:
4379         va_TraceVAEncPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
4380         break;
4381     case VAEncSliceParameterBufferType:
4382         if (size == sizeof(VAEncSliceParameterBuffer))
4383             va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
4384         else
4385             va_TraceVAEncSliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
4386         break;
4387     case VAEncPackedHeaderParameterBufferType:
4388         va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
4389         break;
4390         
4391     case VAEncMiscParameterBufferType:
4392         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
4393         break;
4394     default:
4395         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4396         break;
4397     }
4398 }
4399
4400 static void va_TraceVP8Buf(
4401     VADisplay dpy,
4402     VAContextID context,
4403     VABufferID buffer,
4404     VABufferType type,
4405     unsigned int size,
4406     unsigned int num_elements,
4407     void *pbuf
4408 )
4409 {
4410     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4411
4412     switch (type) {
4413     case VAPictureParameterBufferType:
4414         va_TraceVAPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
4415         break;
4416     case VAIQMatrixBufferType:
4417         va_TraceVAIQMatrixBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
4418         break;
4419     case VAQMatrixBufferType:
4420         break;
4421     case VABitPlaneBufferType:
4422         break;
4423     case VASliceGroupMapBufferType:
4424         break;
4425     case VASliceParameterBufferType:
4426         va_TraceVASliceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
4427         break;
4428     case VASliceDataBufferType:
4429         break;
4430     case VAProbabilityBufferType:
4431         va_TraceVAProbabilityBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
4432         break;
4433     case VAMacroblockParameterBufferType:
4434         break;
4435     case VAResidualDataBufferType:
4436         break;
4437     case VADeblockingParameterBufferType:
4438         break;
4439     case VAImageBufferType:
4440         break;
4441     case VAProtectedSliceDataBufferType:
4442         break;
4443     case VAEncCodedBufferType:
4444         break;
4445     case VAEncSequenceParameterBufferType:
4446         va_TraceVAEncSequenceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
4447         break;
4448     case VAEncPictureParameterBufferType:
4449         va_TraceVAEncPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
4450         break;
4451     case VAEncSliceParameterBufferType:
4452         break;
4453     case VAEncPackedHeaderParameterBufferType:
4454         break;
4455     case VAEncMiscParameterBufferType:
4456         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
4457         break;
4458     default:
4459         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4460         break;
4461     }
4462 }
4463
4464 static void va_TraceVP9Buf(
4465     VADisplay dpy,
4466     VAContextID context,
4467     VABufferID buffer,
4468     VABufferType type,
4469     unsigned int size,
4470     unsigned int num_elements,
4471     void *pbuf
4472 )
4473 {
4474     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4475
4476     switch (type) {
4477     case VAPictureParameterBufferType:
4478         va_TraceVAPictureParameterBufferVP9(dpy, context, buffer, type, size, num_elements, pbuf);
4479         break;
4480     case VAEncSequenceParameterBufferType:
4481         va_TraceVAEncSequenceParameterBufferVP9(dpy, context, buffer, type, size, num_elements, pbuf);
4482         break;
4483     case VAEncPictureParameterBufferType:
4484         va_TraceVAEncPictureParameterBufferVP9(dpy, context, buffer, type, size, num_elements, pbuf);
4485         break;
4486     case VASliceParameterBufferType:
4487         va_TraceVASliceParameterBufferVP9(dpy, context, buffer, type, size, num_elements, pbuf);
4488         break;
4489     case VAEncMiscParameterBufferType:
4490         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
4491         break;
4492     default:
4493         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4494         break;
4495     }
4496 }
4497
4498 static void va_TraceVC1Buf(
4499     VADisplay dpy,
4500     VAContextID context,
4501     VABufferID buffer,
4502     VABufferType type,
4503     unsigned int size,
4504     unsigned int num_elements,
4505     void *pbuf
4506 )
4507 {
4508     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4509
4510     switch (type) {
4511     case VAPictureParameterBufferType:
4512         va_TraceVAPictureParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
4513         break;
4514     case VAIQMatrixBufferType:
4515         break;
4516     case VABitPlaneBufferType:
4517         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4518         break;
4519     case VASliceGroupMapBufferType:
4520         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4521         break;
4522     case VASliceParameterBufferType:
4523         va_TraceVASliceParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
4524         break;
4525     case VASliceDataBufferType:
4526         va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
4527         break;
4528     case VAMacroblockParameterBufferType:
4529         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4530         break;
4531     case VAResidualDataBufferType:
4532         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4533         break;
4534     case VADeblockingParameterBufferType:
4535         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4536         break;
4537     case VAImageBufferType:
4538         break;
4539     case VAProtectedSliceDataBufferType:
4540         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4541         break;
4542     case VAEncCodedBufferType:
4543         break;
4544     case VAEncSequenceParameterBufferType:
4545         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4546         break;
4547     case VAEncPictureParameterBufferType:
4548         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4549         break;
4550     case VAEncSliceParameterBufferType:
4551         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4552         break;
4553     default:
4554         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4555         break;
4556     }
4557 }
4558
4559 static void
4560 va_TraceProcFilterParameterBufferDeinterlacing(
4561     VADisplay dpy,
4562     VAContextID context,
4563     VAProcFilterParameterBufferBase *base
4564 )
4565 {
4566     VAProcFilterParameterBufferDeinterlacing *deint = (VAProcFilterParameterBufferDeinterlacing *)base;
4567
4568     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4569
4570     va_TraceMsg(trace_ctx, "\t    type = %d\n", deint->type);
4571     va_TraceMsg(trace_ctx, "\t    algorithm = %d\n", deint->algorithm);
4572     va_TraceMsg(trace_ctx, "\t    flags = %d\n", deint->flags);
4573 }
4574
4575 static void
4576 va_TraceProcFilterParameterBufferColorBalance(
4577     VADisplay dpy,
4578     VAContextID context,
4579     VAProcFilterParameterBufferBase *base
4580 )
4581 {
4582     VAProcFilterParameterBufferColorBalance *color_balance = (VAProcFilterParameterBufferColorBalance *)base;
4583
4584     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4585
4586     va_TraceMsg(trace_ctx, "\t    type = %d\n", color_balance->type);
4587     va_TraceMsg(trace_ctx, "\t    attrib = %d\n", color_balance->attrib);
4588     va_TraceMsg(trace_ctx, "\t    value = %f\n", color_balance->value);
4589 }
4590
4591 static void
4592 va_TraceProcFilterParameterBufferBase(
4593     VADisplay dpy,
4594     VAContextID context,
4595     VAProcFilterParameterBufferBase *base
4596 )
4597 {
4598     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4599
4600     va_TraceMsg(trace_ctx, "\t    type = %d\n", base->type);
4601 }
4602
4603 static void
4604 va_TraceProcFilterParameterBuffer(
4605     VADisplay dpy,
4606     VAContextID context,
4607     VABufferID *filters,
4608     unsigned int num_filters
4609 )
4610 {
4611     VABufferType type;
4612     unsigned int size;
4613     unsigned int num_elements;
4614     VAProcFilterParameterBufferBase *base_filter = NULL;
4615     int i;
4616
4617     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4618
4619     if (num_filters == 0 || filters == NULL) {
4620         va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
4621         va_TraceMsg(trace_ctx, "\t  filters = %p\n", filters);
4622         return;
4623     }
4624
4625     va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
4626
4627     /* get buffer type information */
4628     for (i = 0; i < num_filters; i++) {
4629         vaBufferInfo(dpy, context, filters[i], &type, &size, &num_elements);
4630
4631         if (type != VAProcFilterParameterBufferType) {
4632             va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x (INVALID)\n", i, filters[i]);
4633             return;
4634         } else {
4635             va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x\n", i, filters[i]);
4636         }
4637
4638         base_filter = NULL;
4639         vaMapBuffer(dpy, filters[i], (void **)&base_filter);
4640
4641         if (base_filter == NULL) {
4642             vaUnmapBuffer(dpy, filters[i]);
4643             return;
4644         }
4645
4646         switch (base_filter->type) {
4647         case VAProcFilterDeinterlacing:
4648             va_TraceProcFilterParameterBufferDeinterlacing(dpy,
4649                                                            context,
4650                                                            base_filter);
4651             break;
4652         case VAProcFilterColorBalance:
4653             va_TraceProcFilterParameterBufferColorBalance(dpy,
4654                                                           context,
4655                                                           base_filter);
4656             break;
4657         default:
4658             va_TraceProcFilterParameterBufferBase(dpy,
4659                                                   context,
4660                                                   base_filter);
4661             break;
4662         }
4663
4664         vaUnmapBuffer(dpy, filters[i]);
4665     }
4666 }
4667
4668 static void
4669 va_TraceVAProcPipelineParameterBuffer(
4670     VADisplay dpy,
4671     VAContextID context,
4672     VABufferID buffer,
4673     VABufferType type,
4674     unsigned int size,
4675     unsigned int num_elements,
4676     void *data
4677 )
4678 {
4679     VAProcPipelineParameterBuffer *p = (VAProcPipelineParameterBuffer *)data;
4680     int i;
4681
4682     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4683
4684     va_TraceMsg(trace_ctx, "\t--VAProcPipelineParameterBuffer\n");
4685
4686     va_TraceMsg(trace_ctx, "\t  surface = 0x%08x\n", p->surface);
4687
4688     if (p->surface_region) {
4689         va_TraceMsg(trace_ctx, "\t  surface_region\n");
4690         va_TraceMsg(trace_ctx, "\t    x = %d\n", p->surface_region->x);
4691         va_TraceMsg(trace_ctx, "\t    y = %d\n", p->surface_region->y);
4692         va_TraceMsg(trace_ctx, "\t    width = %d\n", p->surface_region->width);
4693         va_TraceMsg(trace_ctx, "\t    height = %d\n", p->surface_region->height);
4694     } else {
4695         va_TraceMsg(trace_ctx, "\t  surface_region = (NULL)\n");
4696     }
4697
4698     va_TraceMsg(trace_ctx, "\t  surface_color_standard = %d\n", p->surface_color_standard);
4699
4700     if (p->output_region) {
4701         va_TraceMsg(trace_ctx, "\t  output_region\n");
4702         va_TraceMsg(trace_ctx, "\t    x = %d\n", p->output_region->x);
4703         va_TraceMsg(trace_ctx, "\t    y = %d\n", p->output_region->y);
4704         va_TraceMsg(trace_ctx, "\t    width = %d\n", p->output_region->width);
4705         va_TraceMsg(trace_ctx, "\t    height = %d\n", p->output_region->height);
4706     } else {
4707         va_TraceMsg(trace_ctx, "\t  output_region = (NULL)\n");
4708     }
4709
4710     va_TraceMsg(trace_ctx, "\t  output_background_color = 0x%08x\n", p->output_background_color);
4711     va_TraceMsg(trace_ctx, "\t  output_color_standard = %d\n", p->output_color_standard);
4712     va_TraceMsg(trace_ctx, "\t  pipeline_flags = 0x%08x\n", p->pipeline_flags);
4713     va_TraceMsg(trace_ctx, "\t  filter_flags = 0x%08x\n", p->filter_flags);
4714
4715     va_TraceProcFilterParameterBuffer(dpy, context, p->filters, p->num_filters);
4716
4717     va_TraceMsg(trace_ctx, "\t  num_forward_references = 0x%08x\n", p->num_forward_references);
4718
4719     if (p->num_forward_references) {
4720         va_TraceMsg(trace_ctx, "\t  forward_references\n");
4721
4722         if (p->forward_references) {
4723             /* only dump the first 5 forward references */
4724             for (i = 0; i < p->num_forward_references && i < 5; i++) {
4725                 va_TraceMsg(trace_ctx, "\t    forward_references[%d] = 0x%08x\n", i, p->forward_references[i]);
4726             }
4727         } else {
4728             for (i = 0; i < p->num_forward_references && i < 5; i++) {
4729                 va_TraceMsg(trace_ctx, "\t    forward_references[%d] = (NULL)\n", i);
4730             }
4731         }
4732     }
4733
4734     va_TraceMsg(trace_ctx, "\t  num_backward_references = 0x%08x\n", p->num_backward_references);
4735
4736     if (p->num_backward_references) {
4737         va_TraceMsg(trace_ctx, "\t  backward_references\n");
4738
4739         if (p->backward_references) {
4740             /* only dump the first 5 backward references */
4741             for (i = 0; i < p->num_backward_references && i < 5; i++) {
4742                 va_TraceMsg(trace_ctx, "\t    backward_references[%d] = 0x%08x\n", i, p->backward_references[i]);
4743             }
4744         } else {
4745             for (i = 0; i < p->num_backward_references && i < 5; i++) {
4746                 va_TraceMsg(trace_ctx, "\t    backward_references[%d] = (NULL)\n", i);
4747             }
4748         }
4749     }
4750
4751     /* FIXME: add other info later */
4752
4753     va_TraceMsg(trace_ctx, NULL);
4754 }
4755
4756 static void
4757 va_TraceNoneBuf(
4758     VADisplay dpy,
4759     VAContextID context,
4760     VABufferID buffer,
4761     VABufferType type,
4762     unsigned int size,
4763     unsigned int num_elements,
4764     void *pbuf
4765 )
4766 {
4767     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4768
4769     switch (type) {
4770     case VAProcPipelineParameterBufferType:
4771         va_TraceVAProcPipelineParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
4772         break;
4773     default:
4774         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
4775         break;
4776     }
4777 }
4778
4779 void va_TraceRenderPicture(
4780     VADisplay dpy,
4781     VAContextID context,
4782     VABufferID *buffers,
4783     int num_buffers
4784 )
4785 {
4786     VABufferType type;
4787     unsigned int size;
4788     unsigned int num_elements;
4789     int i;
4790     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4791
4792     TRACE_FUNCNAME(idx);
4793     
4794     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
4795     va_TraceMsg(trace_ctx, "\tnum_buffers = %d\n", num_buffers);
4796     if (buffers == NULL)
4797         return;
4798     
4799     for (i = 0; i < num_buffers; i++) {
4800         unsigned char *pbuf = NULL;
4801         unsigned int j;
4802         
4803         /* get buffer type information */
4804         vaBufferInfo(dpy, context, buffers[i], &type, &size, &num_elements);
4805
4806         va_TraceMsg(trace_ctx, "\t---------------------------\n");
4807         va_TraceMsg(trace_ctx, "\tbuffers[%d] = 0x%08x\n", i, buffers[i]);
4808         va_TraceMsg(trace_ctx, "\t  type = %s\n", vaBufferTypeStr(type));
4809         va_TraceMsg(trace_ctx, "\t  size = %d\n", size);
4810         va_TraceMsg(trace_ctx, "\t  num_elements = %d\n", num_elements);
4811
4812         vaMapBuffer(dpy, buffers[i], (void **)&pbuf);
4813         if (pbuf == NULL)
4814             continue;
4815         
4816         switch (trace_ctx->trace_profile) {
4817         case VAProfileMPEG2Simple:
4818         case VAProfileMPEG2Main:
4819             for (j=0; j<num_elements; j++) {
4820                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
4821                 va_TraceMPEG2Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4822             }
4823             break;
4824         case VAProfileMPEG4Simple:
4825         case VAProfileMPEG4AdvancedSimple:
4826         case VAProfileMPEG4Main:
4827             for (j=0; j<num_elements; j++) {
4828                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
4829                 va_TraceMPEG4Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4830             }
4831             break;
4832         case VAProfileH264Main:
4833         case VAProfileH264High:
4834         case VAProfileH264ConstrainedBaseline:
4835             for (j=0; j<num_elements; j++) {
4836                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
4837                 
4838                 va_TraceH264Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4839             }
4840             break;
4841         case VAProfileVC1Simple:
4842         case VAProfileVC1Main:
4843         case VAProfileVC1Advanced:
4844             for (j=0; j<num_elements; j++) {
4845                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
4846                 
4847                 va_TraceVC1Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4848             }
4849             break;
4850         case VAProfileH263Baseline:
4851             for (j=0; j<num_elements; j++) {
4852                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
4853                 
4854                 va_TraceH263Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4855             }
4856             break;
4857         case VAProfileJPEGBaseline:
4858             for (j=0; j<num_elements; j++) {
4859                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
4860                 
4861                 va_TraceJPEGBuf (dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4862             }
4863             break;
4864
4865         case VAProfileNone:
4866             for (j=0; j<num_elements; j++) {
4867                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
4868
4869                 va_TraceNoneBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4870             }
4871             break;
4872
4873         case VAProfileVP8Version0_3:
4874             for (j=0; j<num_elements; j++) {
4875                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
4876
4877                 va_TraceVP8Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4878             }
4879             break;
4880
4881         case VAProfileHEVCMain:
4882         case VAProfileHEVCMain10:
4883             for (j=0; j<num_elements; j++) {
4884                 va_TraceMsg(trace_ctx, "\telement[%d] = ", j);
4885
4886                 va_TraceHEVCBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4887             }
4888             break;
4889         case VAProfileVP9Profile0:
4890             for (j=0; j<num_elements; j++) {
4891                 va_TraceMsg(trace_ctx, "\telement[%d] = \n", j);
4892
4893                 va_TraceVP9Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
4894             }
4895             break;
4896         default:
4897             break;
4898         }
4899
4900         vaUnmapBuffer(dpy, buffers[i]);
4901     }
4902
4903     va_TraceMsg(trace_ctx, NULL);
4904 }
4905
4906 void va_TraceEndPicture(
4907     VADisplay dpy,
4908     VAContextID context,
4909     int endpic_done
4910 )
4911 {
4912     int encode, decode, jpeg;
4913     DPY2TRACECTX(dpy, context, VA_INVALID_ID);
4914
4915     TRACE_FUNCNAME(idx);
4916
4917     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
4918     va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", trace_ctx->trace_rendertarget);
4919
4920     /* avoid to create so many empty files */
4921     encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
4922     decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
4923     jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
4924
4925     /* trace encode source surface, can do it before HW completes rendering */
4926     if ((encode && (va_trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE))||
4927         (jpeg && (va_trace_flag & VA_TRACE_FLAG_SURFACE_JPEG)))
4928         va_TraceSurface(dpy, context);
4929     
4930     /* trace decoded surface, do it after HW completes rendering */
4931     if (decode && ((va_trace_flag & VA_TRACE_FLAG_SURFACE_DECODE))) {
4932         vaSyncSurface(dpy, trace_ctx->trace_rendertarget);
4933         va_TraceSurface(dpy, context);
4934     }
4935
4936     va_TraceMsg(trace_ctx, NULL);
4937 }
4938
4939
4940 void va_TraceSyncSurface(
4941     VADisplay dpy,
4942     VASurfaceID render_target
4943 )
4944 {
4945     DPY2TRACE_VIRCTX(dpy);
4946
4947     TRACE_FUNCNAME(idx);
4948
4949     va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target);
4950     va_TraceMsg(trace_ctx, NULL);
4951
4952     DPY2TRACE_VIRCTX_EXIT(pva_trace);
4953 }
4954
4955 void va_TraceQuerySurfaceAttributes(
4956     VADisplay           dpy,
4957     VAConfigID          config,
4958     VASurfaceAttrib    *attrib_list,
4959     unsigned int       *num_attribs
4960 )
4961 {
4962     DPY2TRACE_VIRCTX(dpy);
4963
4964     TRACE_FUNCNAME(idx);
4965     va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config);
4966     va_TraceSurfaceAttributes(trace_ctx, attrib_list, num_attribs);
4967     
4968     va_TraceMsg(trace_ctx, NULL);
4969
4970     DPY2TRACE_VIRCTX_EXIT(pva_trace);
4971 }
4972
4973
4974 void va_TraceQuerySurfaceStatus(
4975     VADisplay dpy,
4976     VASurfaceID render_target,
4977     VASurfaceStatus *status    /* out */
4978 )
4979 {
4980     DPY2TRACE_VIRCTX(dpy);
4981
4982     TRACE_FUNCNAME(idx);
4983
4984     va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target);
4985     if (status)
4986         va_TraceMsg(trace_ctx, "\tstatus = 0x%08x\n", *status);
4987     va_TraceMsg(trace_ctx, NULL);
4988
4989     DPY2TRACE_VIRCTX_EXIT(pva_trace);
4990 }
4991
4992
4993 void va_TraceQuerySurfaceError(
4994     VADisplay dpy,
4995     VASurfaceID surface,
4996     VAStatus error_status,
4997     void **error_info       /*out*/
4998 )
4999 {
5000     DPY2TRACE_VIRCTX(dpy);
5001
5002     TRACE_FUNCNAME(idx);
5003     va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
5004     va_TraceMsg(trace_ctx, "\terror_status = 0x%08x\n", error_status);
5005     if (error_info && (error_status == VA_STATUS_ERROR_DECODING_ERROR)) {
5006         VASurfaceDecodeMBErrors *p = *error_info;
5007         while (p && (p->status != -1)) {
5008             va_TraceMsg(trace_ctx, "\t\tstatus = %d\n", p->status);
5009             va_TraceMsg(trace_ctx, "\t\tstart_mb = %d\n", p->start_mb);
5010             va_TraceMsg(trace_ctx, "\t\tend_mb = %d\n", p->end_mb);
5011             p++; /* next error record */
5012         }
5013     }
5014     va_TraceMsg(trace_ctx, NULL);
5015
5016     DPY2TRACE_VIRCTX_EXIT(pva_trace);
5017 }
5018
5019 void va_TraceMaxNumDisplayAttributes (
5020     VADisplay dpy,
5021     int number
5022 )
5023 {
5024     DPY2TRACE_VIRCTX(dpy);
5025
5026     TRACE_FUNCNAME(idx);
5027     
5028     va_TraceMsg(trace_ctx, "\tmax_display_attributes = %d\n", number);
5029     va_TraceMsg(trace_ctx, NULL);
5030
5031     DPY2TRACE_VIRCTX_EXIT(pva_trace);
5032 }
5033
5034 void va_TraceQueryDisplayAttributes (
5035     VADisplay dpy,
5036     VADisplayAttribute *attr_list,    /* out */
5037     int *num_attributes               /* out */
5038 )
5039 {
5040     int i;
5041
5042     if (attr_list == NULL || num_attributes == NULL)
5043         return;
5044
5045     DPY2TRACE_VIRCTX(dpy);
5046
5047     TRACE_FUNCNAME(idx);
5048     va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", *num_attributes);
5049     
5050     for (i=0; i<*num_attributes; i++) {
5051         va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n", i);
5052         va_TraceMsg(trace_ctx, "\t  type = 0x%08x\n", attr_list[i].type);
5053         va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
5054         va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
5055         va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
5056         va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
5057     }
5058     va_TraceMsg(trace_ctx, NULL);
5059
5060     DPY2TRACE_VIRCTX_EXIT(pva_trace);
5061 }
5062
5063
5064 static void va_TraceDisplayAttributes (
5065     struct trace_context *trace_ctx,
5066     VADisplayAttribute *attr_list,
5067     int num_attributes
5068 )
5069 {
5070     int i;
5071
5072     if (attr_list == NULL)
5073         return;
5074
5075     va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", num_attributes);
5076
5077     for (i=0; i<num_attributes; i++) {
5078         va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n", i);
5079         va_TraceMsg(trace_ctx, "\t  type = 0x%08x\n", attr_list[i].type);
5080         va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
5081         va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
5082         va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
5083         va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
5084     }
5085     va_TraceMsg(trace_ctx, NULL);
5086 }
5087
5088
5089 void va_TraceGetDisplayAttributes (
5090     VADisplay dpy,
5091     VADisplayAttribute *attr_list,
5092     int num_attributes
5093 )
5094 {
5095     DPY2TRACE_VIRCTX(dpy);
5096
5097     TRACE_FUNCNAME(idx);
5098
5099     va_TraceDisplayAttributes (trace_ctx, attr_list, num_attributes);
5100
5101     DPY2TRACE_VIRCTX_EXIT(pva_trace);
5102 }
5103
5104 void va_TraceSetDisplayAttributes (
5105     VADisplay dpy,
5106     VADisplayAttribute *attr_list,
5107     int num_attributes
5108 )
5109 {
5110     DPY2TRACE_VIRCTX(dpy);
5111
5112     TRACE_FUNCNAME(idx);
5113
5114     va_TraceDisplayAttributes (trace_ctx, attr_list, num_attributes);
5115
5116     DPY2TRACE_VIRCTX_EXIT(pva_trace);
5117 }
5118
5119
5120 void va_TracePutSurface (
5121     VADisplay dpy,
5122     VASurfaceID surface,
5123     void *draw, /* the target Drawable */
5124     short srcx,
5125     short srcy,
5126     unsigned short srcw,
5127     unsigned short srch,
5128     short destx,
5129     short desty,
5130     unsigned short destw,
5131     unsigned short desth,
5132     VARectangle *cliprects, /* client supplied clip list */
5133     unsigned int number_cliprects, /* number of clip rects in the clip list */
5134     unsigned int flags /* de-interlacing flags */
5135 )
5136 {
5137     DPY2TRACE_VIRCTX(dpy);
5138
5139     TRACE_FUNCNAME(idx);
5140     
5141     va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
5142     va_TraceMsg(trace_ctx, "\tdraw = 0x%08x\n", draw);
5143     va_TraceMsg(trace_ctx, "\tsrcx = %d\n", srcx);
5144     va_TraceMsg(trace_ctx, "\tsrcy = %d\n", srcy);
5145     va_TraceMsg(trace_ctx, "\tsrcw = %d\n", srcw);
5146     va_TraceMsg(trace_ctx, "\tsrch = %d\n", srch);
5147     va_TraceMsg(trace_ctx, "\tdestx = %d\n", destx);
5148     va_TraceMsg(trace_ctx, "\tdesty = %d\n", desty);
5149     va_TraceMsg(trace_ctx, "\tdestw = %d\n", destw);
5150     va_TraceMsg(trace_ctx, "\tdesth = %d\n", desth);
5151     va_TraceMsg(trace_ctx, "\tcliprects = 0x%08x\n", cliprects);
5152     va_TraceMsg(trace_ctx, "\tnumber_cliprects = %d\n", number_cliprects);
5153     va_TraceMsg(trace_ctx, "\tflags = 0x%08x\n", flags);
5154     va_TraceMsg(trace_ctx, NULL);
5155
5156     DPY2TRACE_VIRCTX_EXIT(pva_trace);
5157 }