OSDN Git Service

Va_trace changes to dump the HEVC encode parameters
[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_trace.h"
32 #include "va_enc_h264.h"
33 #include "va_enc_jpeg.h"
34 #include "va_enc_vp8.h"
35 #include "va_dec_jpeg.h"
36 #include "va_dec_vp8.h"
37 #include "va_dec_hevc.h"
38 #include "va_vpp.h"
39 #include <assert.h>
40 #include <stdarg.h>
41 #include <stdlib.h>
42 #include <stdio.h>
43 #include <string.h>
44 #include <dlfcn.h>
45 #include <unistd.h>
46 #include <sys/types.h>
47 #include <sys/stat.h>
48 #include <unistd.h>
49 #include <time.h>
50 #include <errno.h>
51
52 /*
53  * Env. to debug some issue, e.g. the decode/encode issue in a video conference scenerio:
54  * .LIBVA_TRACE=log_file: general VA parameters saved into log_file
55  * .LIBVA_TRACE_BUFDATA: dump all VA data buffer into log_file
56  * .LIBVA_TRACE_CODEDBUF=coded_clip_file: save the coded clip into file coded_clip_file
57  * .LIBVA_TRACE_SURFACE=yuv_file: save surface YUV into file yuv_file. Use file name to determine
58  *                                decode/encode or jpeg surfaces
59  * .LIBVA_TRACE_SURFACE_GEOMETRY=WIDTHxHEIGHT+XOFF+YOFF: only save part of surface context into file
60  *                                due to storage bandwidth limitation
61  */
62
63 /* global settings */
64
65 /* LIBVA_TRACE */
66 int trace_flag = 0;
67
68 /* per context settings */
69 struct trace_context {
70     /* LIBVA_TRACE */
71     FILE *trace_fp_log; /* save the log into a file */
72     char *trace_log_fn; /* file name */
73     
74     /* LIBVA_TRACE_CODEDBUF */
75     FILE *trace_fp_codedbuf; /* save the encode result into a file */
76     char *trace_codedbuf_fn; /* file name */
77     
78     /* LIBVA_TRACE_SURFACE */
79     FILE *trace_fp_surface; /* save the surface YUV into a file */
80     char *trace_surface_fn; /* file name */
81
82     VAContextID  trace_context; /* current context */
83     
84     VASurfaceID  trace_rendertarget; /* current render target */
85     VAProfile trace_profile; /* current profile for buffers */
86     VAEntrypoint trace_entrypoint; /* current entrypoint */
87     
88     unsigned int trace_frame_no; /* current frame NO */
89     unsigned int trace_slice_no; /* current slice NO */
90     unsigned int trace_slice_size; /* current slice buffer size */
91
92     unsigned int trace_surface_width; /* surface dumping geometry */
93     unsigned int trace_surface_height;
94     unsigned int trace_surface_xoff;
95     unsigned int trace_surface_yoff;
96
97     unsigned int trace_frame_width; /* current frame width */
98     unsigned int trace_frame_height; /* current frame height */
99 };
100
101 #define TRACE_CTX(dpy) ((struct trace_context *)((VADisplayContextP)dpy)->vatrace)
102
103 #define DPY2TRACECTX(dpy)                               \
104     struct trace_context *trace_ctx = TRACE_CTX(dpy);   \
105                                                         \
106     if (trace_ctx == NULL)                              \
107         return;                                         \
108
109 #define TRACE_FUNCNAME(idx)    va_TraceMsg(trace_ctx, "==========%s\n", __func__); 
110
111 /* Prototype declarations (functions defined in va.c) */
112
113 void va_errorMessage(const char *msg, ...);
114 void va_infoMessage(const char *msg, ...);
115
116 int va_parseConfig(char *env, char *env_value);
117
118 VAStatus vaBufferInfo(
119     VADisplay dpy,
120     VAContextID context,        /* in */
121     VABufferID buf_id,          /* in */
122     VABufferType *type,         /* out */
123     unsigned int *size,         /* out */
124     unsigned int *num_elements  /* out */
125     );
126
127 VAStatus vaLockSurface(VADisplay dpy,
128                        VASurfaceID surface,
129                        unsigned int *fourcc, /* following are output argument */
130                        unsigned int *luma_stride,
131                        unsigned int *chroma_u_stride,
132                        unsigned int *chroma_v_stride,
133                        unsigned int *luma_offset,
134                        unsigned int *chroma_u_offset,
135                        unsigned int *chroma_v_offset,
136                        unsigned int *buffer_name,
137                        void **buffer 
138                        );
139
140 VAStatus vaUnlockSurface(VADisplay dpy,
141                          VASurfaceID surface
142                          );
143
144 #define FILE_NAME_SUFFIX(env_value)                      \
145 do {                                                    \
146     int tmp = strnlen(env_value, sizeof(env_value));    \
147     int left = sizeof(env_value) - tmp;                 \
148                                                         \
149     snprintf(env_value+tmp,                             \
150              left,                                      \
151              ".%04d.%08lx",                             \
152              suffix,                                    \
153              (unsigned long)trace_ctx);                 \
154 } while (0)
155
156 void va_TraceInit(VADisplay dpy)
157 {
158     char env_value[1024];
159     unsigned short suffix = 0xffff & ((unsigned int)time(NULL));
160     int trace_index = 0;
161     FILE *tmp;    
162     struct trace_context *trace_ctx = calloc(sizeof(struct trace_context), 1);
163
164     if (trace_ctx == NULL)
165         return;
166     
167     if (va_parseConfig("LIBVA_TRACE", &env_value[0]) == 0) {
168         FILE_NAME_SUFFIX(env_value);
169         trace_ctx->trace_log_fn = strdup(env_value);
170         
171         tmp = fopen(env_value, "w");
172         if (tmp) {
173             trace_ctx->trace_fp_log = tmp;
174             va_infoMessage("LIBVA_TRACE is on, save log into %s\n", trace_ctx->trace_log_fn);
175             trace_flag = VA_TRACE_FLAG_LOG;
176         } else
177             va_errorMessage("Open file %s failed (%s)\n", env_value, strerror(errno));
178     }
179
180     /* may re-get the global settings for multiple context */
181     if ((trace_flag & VA_TRACE_FLAG_LOG) && (va_parseConfig("LIBVA_TRACE_BUFDATA", NULL) == 0)) {
182         trace_flag |= VA_TRACE_FLAG_BUFDATA;
183         va_infoMessage("LIBVA_TRACE_BUFDATA is on, dump buffer into log file\n");
184     }
185
186     /* per-context setting */
187     if (va_parseConfig("LIBVA_TRACE_CODEDBUF", &env_value[0]) == 0) {
188         FILE_NAME_SUFFIX(env_value);
189         trace_ctx->trace_codedbuf_fn = strdup(env_value);
190         va_infoMessage("LIBVA_TRACE_CODEDBUF is on, save codedbuf into log file %s\n",
191                        trace_ctx->trace_codedbuf_fn);
192         trace_flag |= VA_TRACE_FLAG_CODEDBUF;
193     }
194
195     if (va_parseConfig("LIBVA_TRACE_SURFACE", &env_value[0]) == 0) {
196         FILE_NAME_SUFFIX(env_value);
197         trace_ctx->trace_surface_fn = strdup(env_value);
198
199         va_infoMessage("LIBVA_TRACE_SURFACE is on, save surface into %s\n",
200                        trace_ctx->trace_surface_fn);
201
202         /* for surface data dump, it is time-consume, and may
203          * cause some side-effect, so only trace the needed surfaces
204          * to trace encode surface, set the trace file name to sth like *enc*
205          * to trace decode surface, set the trace file name to sth like *dec*
206          * if no dec/enc in file name, set both
207          */
208         if (strstr(env_value, "dec"))
209             trace_flag |= VA_TRACE_FLAG_SURFACE_DECODE;
210         if (strstr(env_value, "enc"))
211             trace_flag |= VA_TRACE_FLAG_SURFACE_ENCODE;
212         if (strstr(env_value, "jpeg") || strstr(env_value, "jpg"))
213             trace_flag |= VA_TRACE_FLAG_SURFACE_JPEG;
214
215         if (va_parseConfig("LIBVA_TRACE_SURFACE_GEOMETRY", &env_value[0]) == 0) {
216             char *p = env_value, *q;
217
218             trace_ctx->trace_surface_width = strtod(p, &q);
219             p = q+1; /* skip "x" */
220             trace_ctx->trace_surface_height = strtod(p, &q);
221             p = q+1; /* skip "+" */
222             trace_ctx->trace_surface_xoff = strtod(p, &q);
223             p = q+1; /* skip "+" */
224             trace_ctx->trace_surface_yoff = strtod(p, &q);
225
226             va_infoMessage("LIBVA_TRACE_SURFACE_GEOMETRY is on, only dump surface %dx%d+%d+%d content\n",
227                            trace_ctx->trace_surface_width,
228                            trace_ctx->trace_surface_height,
229                            trace_ctx->trace_surface_xoff,
230                            trace_ctx->trace_surface_yoff);
231         }
232     }
233
234     ((VADisplayContextP)dpy)->vatrace = trace_ctx;
235 }
236
237
238 void va_TraceEnd(VADisplay dpy)
239 {
240     DPY2TRACECTX(dpy);
241     
242     if (trace_ctx->trace_fp_log)
243         fclose(trace_ctx->trace_fp_log);
244     
245     if (trace_ctx->trace_fp_codedbuf)
246         fclose(trace_ctx->trace_fp_codedbuf);
247     
248     if (trace_ctx->trace_fp_surface)
249         fclose(trace_ctx->trace_fp_surface);
250
251     if (trace_ctx->trace_log_fn)
252         free(trace_ctx->trace_log_fn);
253     
254     if (trace_ctx->trace_codedbuf_fn)
255         free(trace_ctx->trace_codedbuf_fn);
256     
257     if (trace_ctx->trace_surface_fn)
258         free(trace_ctx->trace_surface_fn);
259     
260     free(trace_ctx);
261     ((VADisplayContextP)dpy)->vatrace = NULL;
262 }
263
264 static void va_TraceMsg(struct trace_context *trace_ctx, const char *msg, ...)
265 {
266     va_list args;
267
268     if (!(trace_flag & VA_TRACE_FLAG_LOG))
269         return;
270
271     if (msg)  {
272         struct timeval tv;
273
274         if (gettimeofday(&tv, NULL) == 0)
275             fprintf(trace_ctx->trace_fp_log, "[%04d.%06d] ",
276                     (unsigned int)tv.tv_sec & 0xffff, (unsigned int)tv.tv_usec);
277         va_start(args, msg);
278         vfprintf(trace_ctx->trace_fp_log, msg, args);
279         va_end(args);
280     } else
281         fflush(trace_ctx->trace_fp_log);
282 }
283
284
285 static void va_TraceSurface(VADisplay dpy)
286 {
287     unsigned int i, j;
288     unsigned int fourcc; /* following are output argument */
289     unsigned int luma_stride;
290     unsigned int chroma_u_stride;
291     unsigned int chroma_v_stride;
292     unsigned int luma_offset;
293     unsigned int chroma_u_offset;
294     unsigned int chroma_v_offset;
295     unsigned int buffer_name;
296     void *buffer = NULL;
297     unsigned char *Y_data, *UV_data, *tmp;
298     VAStatus va_status;
299     unsigned char check_sum = 0;
300     DPY2TRACECTX(dpy);
301
302     if (!trace_ctx->trace_fp_surface)
303         return;
304
305     va_TraceMsg(trace_ctx, "==========dump surface data in file %s\n", trace_ctx->trace_surface_fn);
306
307     va_TraceMsg(trace_ctx, NULL);
308
309     va_status = vaLockSurface(
310         dpy,
311         trace_ctx->trace_rendertarget,
312         &fourcc,
313         &luma_stride, &chroma_u_stride, &chroma_v_stride,
314         &luma_offset, &chroma_u_offset, &chroma_v_offset,
315         &buffer_name, &buffer);
316
317     if (va_status != VA_STATUS_SUCCESS) {
318         va_TraceMsg(trace_ctx, "Error:vaLockSurface failed\n");
319         return;
320     }
321
322     va_TraceMsg(trace_ctx, "\tfourcc = 0x%08x\n", fourcc);
323     va_TraceMsg(trace_ctx, "\twidth = %d\n", trace_ctx->trace_frame_width);
324     va_TraceMsg(trace_ctx, "\theight = %d\n", trace_ctx->trace_frame_height);
325     va_TraceMsg(trace_ctx, "\tluma_stride = %d\n", luma_stride);
326     va_TraceMsg(trace_ctx, "\tchroma_u_stride = %d\n", chroma_u_stride);
327     va_TraceMsg(trace_ctx, "\tchroma_v_stride = %d\n", chroma_v_stride);
328     va_TraceMsg(trace_ctx, "\tluma_offset = %d\n", luma_offset);
329     va_TraceMsg(trace_ctx, "\tchroma_u_offset = %d\n", chroma_u_offset);
330     va_TraceMsg(trace_ctx, "\tchroma_v_offset = %d\n", chroma_v_offset);
331
332     if (buffer == NULL) {
333         va_TraceMsg(trace_ctx, "Error:vaLockSurface return NULL buffer\n");
334         va_TraceMsg(trace_ctx, NULL);
335
336         vaUnlockSurface(dpy, trace_ctx->trace_rendertarget);
337         return;
338     }
339     va_TraceMsg(trace_ctx, "\tbuffer location = 0x%08x\n", buffer);
340     va_TraceMsg(trace_ctx, NULL);
341
342     Y_data = (unsigned char*)buffer;
343     UV_data = (unsigned char*)buffer + chroma_u_offset;
344
345     tmp = Y_data + luma_stride * trace_ctx->trace_surface_yoff;
346     for (i=0; i<trace_ctx->trace_surface_height; i++) {
347         fwrite(tmp + trace_ctx->trace_surface_xoff,
348                trace_ctx->trace_surface_width,
349                1, trace_ctx->trace_fp_surface);
350         
351         tmp += luma_stride;
352     }
353     tmp = UV_data + chroma_u_stride * trace_ctx->trace_surface_yoff / 2;
354     if (fourcc == VA_FOURCC_NV12) {
355         for (i=0; i<trace_ctx->trace_surface_height/2; i++) {
356             fwrite(tmp + trace_ctx->trace_surface_xoff,
357                    trace_ctx->trace_surface_width,
358                    1, trace_ctx->trace_fp_surface);
359             
360             tmp += chroma_u_stride;
361         }
362     }
363
364     vaUnlockSurface(dpy, trace_ctx->trace_rendertarget);
365
366     va_TraceMsg(trace_ctx, NULL);
367 }
368
369
370 void va_TraceInitialize (
371     VADisplay dpy,
372     int *major_version,     /* out */
373     int *minor_version      /* out */
374 )
375 {
376     DPY2TRACECTX(dpy);    
377     TRACE_FUNCNAME(idx);
378 }
379
380 void va_TraceTerminate (
381     VADisplay dpy
382 )
383 {
384     DPY2TRACECTX(dpy);    
385     TRACE_FUNCNAME(idx);
386 }
387
388
389 void va_TraceCreateConfig(
390     VADisplay dpy,
391     VAProfile profile, 
392     VAEntrypoint entrypoint, 
393     VAConfigAttrib *attrib_list,
394     int num_attribs,
395     VAConfigID *config_id /* out */
396 )
397 {
398     int i;
399     int encode, decode, jpeg;
400     DPY2TRACECTX(dpy);
401
402     TRACE_FUNCNAME(idx);
403     
404     va_TraceMsg(trace_ctx, "\tprofile = %d\n", profile);
405     va_TraceMsg(trace_ctx, "\tentrypoint = %d\n", entrypoint);
406     va_TraceMsg(trace_ctx, "\tnum_attribs = %d\n", num_attribs);
407     if (attrib_list) {
408         for (i = 0; i < num_attribs; i++) {
409             va_TraceMsg(trace_ctx, "\t\tattrib_list[%d].type = 0x%08x\n", i, attrib_list[i].type);
410             va_TraceMsg(trace_ctx, "\t\tattrib_list[%d].value = 0x%08x\n", i, attrib_list[i].value);
411         }
412     }
413     va_TraceMsg(trace_ctx, NULL);
414
415     trace_ctx->trace_profile = profile;
416     trace_ctx->trace_entrypoint = entrypoint;
417
418     /* avoid to create so many empty files */
419     encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
420     decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
421     jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
422     if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE)) ||
423         (decode && (trace_flag & VA_TRACE_FLAG_SURFACE_DECODE)) ||
424         (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG))) {
425         FILE *tmp = fopen(trace_ctx->trace_surface_fn, "w");
426         
427         if (tmp)
428             trace_ctx->trace_fp_surface = tmp;
429         else {
430             va_errorMessage("Open file %s failed (%s)\n",
431                             trace_ctx->trace_surface_fn,
432                             strerror(errno));
433             trace_ctx->trace_fp_surface = NULL;
434             trace_flag &= ~(VA_TRACE_FLAG_SURFACE);
435         }
436     }
437
438     if (encode && (trace_flag & VA_TRACE_FLAG_CODEDBUF)) {
439         FILE *tmp = fopen(trace_ctx->trace_codedbuf_fn, "w");
440         
441         if (tmp)
442             trace_ctx->trace_fp_codedbuf = tmp;
443         else {
444             va_errorMessage("Open file %s failed (%s)\n",
445                             trace_ctx->trace_codedbuf_fn,
446                             strerror(errno));
447             trace_ctx->trace_fp_codedbuf = NULL;
448             trace_flag &= ~VA_TRACE_FLAG_CODEDBUF;
449         }
450     }
451 }
452
453 static void va_TraceSurfaceAttributes(
454     struct trace_context *trace_ctx,
455     VASurfaceAttrib    *attrib_list,
456     unsigned int       *num_attribs
457 )
458 {
459     int i, num;
460     VASurfaceAttrib *p;
461     
462     if (!attrib_list || !num_attribs)
463         return;
464     
465     p = attrib_list;
466     num = *num_attribs;
467     if (num > VASurfaceAttribCount)
468         num = VASurfaceAttribCount;
469
470     for (i=0; i<num; i++) {
471         int type = p->value.type;
472         
473         va_TraceMsg(trace_ctx, "\tattrib_list[%i] =\n", i);
474         
475         va_TraceMsg(trace_ctx, "\t\ttype = %d\n", p->type);
476         va_TraceMsg(trace_ctx, "\t\tflags = %d\n", p->flags);
477         va_TraceMsg(trace_ctx, "\t\tvalue.type = %d\n", type);
478         switch (type) {
479         case VAGenericValueTypeInteger:
480             va_TraceMsg(trace_ctx, "\t\tvalue.value.i = 0x%08x\n", p->value.value.i);
481             break;
482         case VAGenericValueTypeFloat:
483             va_TraceMsg(trace_ctx, "\t\tvalue.value.f = %f\n", p->value.value.f);
484             break;
485         case VAGenericValueTypePointer:
486             va_TraceMsg(trace_ctx, "\t\tvalue.value.p = %p\n", p->value.value.p);
487             if ((p->type == VASurfaceAttribExternalBufferDescriptor) && p->value.value.p) {
488                 VASurfaceAttribExternalBuffers *tmp = (VASurfaceAttribExternalBuffers *) p->value.value.p;
489                 int j;
490                 
491                 va_TraceMsg(trace_ctx, "\t\t--VASurfaceAttribExternalBufferDescriptor\n");
492                 va_TraceMsg(trace_ctx, "\t\t  pixel_format=0x%08x\n", tmp->pixel_format);
493                 va_TraceMsg(trace_ctx, "\t\t  width=%d\n", tmp->width);
494                 va_TraceMsg(trace_ctx, "\t\t  height=%d\n", tmp->height);
495                 va_TraceMsg(trace_ctx, "\t\t  data_size=%d\n", tmp->data_size);
496                 va_TraceMsg(trace_ctx, "\t\t  num_planes=%d\n", tmp->num_planes);
497                 va_TraceMsg(trace_ctx, "\t\t  pitches[4]=%d %d %d %d\n",
498                             tmp->pitches[0], tmp->pitches[1], tmp->pitches[2], tmp->pitches[3]);
499                 va_TraceMsg(trace_ctx, "\t\t  offsets[4]=%d %d %d %d\n",
500                             tmp->offsets[0], tmp->offsets[1], tmp->offsets[2], tmp->offsets[3]);
501                 va_TraceMsg(trace_ctx, "\t\t  flags=0x%08x\n", tmp->flags);
502                 va_TraceMsg(trace_ctx, "\t\t  num_buffers=0x%08x\n", tmp->num_buffers);
503                 va_TraceMsg(trace_ctx, "\t\t  buffers=%p\n", tmp->buffers);
504                 for (j = 0; j < tmp->num_buffers; j++) {
505                     va_TraceMsg(trace_ctx, "\t\t\tbuffers[%d]=%p\n", j, tmp->buffers[j]);
506                 }
507             }
508             break;
509         case VAGenericValueTypeFunc:
510             va_TraceMsg(trace_ctx, "\t\tvalue.value.fn = %p\n", p->value.value.fn);
511             break;
512         default:
513             break;
514         }
515
516         p++;
517     }
518 }
519
520 void va_TraceCreateSurfaces(
521     VADisplay dpy,
522     int width,
523     int height,
524     int format,
525     int num_surfaces,
526     VASurfaceID *surfaces,    /* out */
527     VASurfaceAttrib    *attrib_list,
528     unsigned int        num_attribs
529 )
530 {
531     int i;
532     DPY2TRACECTX(dpy);
533
534     TRACE_FUNCNAME(idx);
535     
536     va_TraceMsg(trace_ctx, "\twidth = %d\n", width);
537     va_TraceMsg(trace_ctx, "\theight = %d\n", height);
538     va_TraceMsg(trace_ctx, "\tformat = %d\n", format);
539     va_TraceMsg(trace_ctx, "\tnum_surfaces = %d\n", num_surfaces);
540
541     if (surfaces) {
542         for (i = 0; i < num_surfaces; i++)
543             va_TraceMsg(trace_ctx, "\t\tsurfaces[%d] = 0x%08x\n", i, surfaces[i]);
544     }
545     
546     va_TraceSurfaceAttributes(trace_ctx, attrib_list, &num_attribs);
547
548     va_TraceMsg(trace_ctx, NULL);
549 }
550
551
552 void va_TraceDestroySurfaces(
553     VADisplay dpy,
554     VASurfaceID *surface_list,
555     int num_surfaces
556 )
557 {
558     int i;
559     DPY2TRACECTX(dpy);
560
561     TRACE_FUNCNAME(idx);
562
563     if (surface_list) {
564         for (i = 0; i < num_surfaces; i++)
565             va_TraceMsg(trace_ctx, "\t\tsurfaces[%d] = 0x%08x\n", i, surface_list[i]);
566     }
567     
568     va_TraceMsg(trace_ctx, NULL);
569 }
570
571
572 void va_TraceCreateContext(
573     VADisplay dpy,
574     VAConfigID config_id,
575     int picture_width,
576     int picture_height,
577     int flag,
578     VASurfaceID *render_targets,
579     int num_render_targets,
580     VAContextID *context        /* out */
581 )
582 {
583     int i;
584     DPY2TRACECTX(dpy);
585
586     TRACE_FUNCNAME(idx);
587
588     va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config_id);
589     va_TraceMsg(trace_ctx, "\twidth = %d\n", picture_width);
590     va_TraceMsg(trace_ctx, "\theight = %d\n", picture_height);
591     va_TraceMsg(trace_ctx, "\tflag = 0x%08x\n", flag);
592     va_TraceMsg(trace_ctx, "\tnum_render_targets = %d\n", num_render_targets);
593     if (render_targets) {
594         for (i=0; i<num_render_targets; i++)
595             va_TraceMsg(trace_ctx, "\t\trender_targets[%d] = 0x%08x\n", i, render_targets[i]);
596     }
597     if (context) {
598         va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", *context);
599         trace_ctx->trace_context = *context;
600     } else
601         trace_ctx->trace_context = VA_INVALID_ID;
602     
603     trace_ctx->trace_frame_no = 0;
604     trace_ctx->trace_slice_no = 0;
605
606     trace_ctx->trace_frame_width = picture_width;
607     trace_ctx->trace_frame_height = picture_height;
608
609     if (trace_ctx->trace_surface_width == 0)
610         trace_ctx->trace_surface_width = picture_width;
611     if (trace_ctx->trace_surface_height == 0)
612         trace_ctx->trace_surface_height = picture_height;
613 }
614
615
616 static char * buffer_type_to_string(int type)
617 {
618     switch (type) {
619     case VAPictureParameterBufferType: return "VAPictureParameterBufferType";
620     case VAIQMatrixBufferType: return "VAIQMatrixBufferType";
621     case VABitPlaneBufferType: return "VABitPlaneBufferType";
622     case VASliceGroupMapBufferType: return "VASliceGroupMapBufferType";
623     case VASliceParameterBufferType: return "VASliceParameterBufferType";
624     case VASliceDataBufferType: return "VASliceDataBufferType";
625     case VAProtectedSliceDataBufferType: return "VAProtectedSliceDataBufferType";
626     case VAMacroblockParameterBufferType: return "VAMacroblockParameterBufferType";
627     case VAResidualDataBufferType: return "VAResidualDataBufferType";
628     case VADeblockingParameterBufferType: return "VADeblockingParameterBufferType";
629     case VAImageBufferType: return "VAImageBufferType";
630     case VAQMatrixBufferType: return "VAQMatrixBufferType";
631     case VAHuffmanTableBufferType: return "VAHuffmanTableBufferType";
632 /* Following are encode buffer types */
633     case VAEncCodedBufferType: return "VAEncCodedBufferType";
634     case VAEncSequenceParameterBufferType: return "VAEncSequenceParameterBufferType";
635     case VAEncPictureParameterBufferType: return "VAEncPictureParameterBufferType";
636     case VAEncSliceParameterBufferType: return "VAEncSliceParameterBufferType";
637     case VAEncPackedHeaderParameterBufferType: return "VAEncPackedHeaderParameterBufferType";
638     case VAEncPackedHeaderDataBufferType: return "VAEncPackedHeaderDataBufferType";
639     case VAEncMiscParameterBufferType: return "VAEncMiscParameterBufferType";
640     case VAEncMacroblockParameterBufferType: return "VAEncMacroblockParameterBufferType";
641     case VAProcPipelineParameterBufferType: return "VAProcPipelineParameterBufferType";
642     case VAProcFilterParameterBufferType: return "VAProcFilterParameterBufferType";
643     default: return "UnknowBuffer";
644     }
645 }
646
647 void va_TraceCreateBuffer (
648     VADisplay dpy,
649     VAContextID context,        /* in */
650     VABufferType type,          /* in */
651     unsigned int size,          /* in */
652     unsigned int num_elements,  /* in */
653     void *data,                 /* in */
654     VABufferID *buf_id          /* out */
655 )
656 {
657     DPY2TRACECTX(dpy);
658
659     /* only trace CodedBuffer */
660     if (type != VAEncCodedBufferType)
661         return;
662
663     TRACE_FUNCNAME(idx);
664     va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", buffer_type_to_string(type));
665     if (buf_id)
666         va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", *buf_id);
667     va_TraceMsg(trace_ctx, "\tsize=%d\n", size);
668     va_TraceMsg(trace_ctx, "\tnum_elements=%d\n", num_elements);
669     
670     va_TraceMsg(trace_ctx, NULL);
671 }
672
673 void va_TraceDestroyBuffer (
674     VADisplay dpy,
675     VABufferID buf_id    /* in */
676 )
677 {
678     VABufferType type;
679     unsigned int size;
680     unsigned int num_elements;
681     
682     VACodedBufferSegment *buf_list;
683     int i = 0;
684     
685     DPY2TRACECTX(dpy);
686
687     vaBufferInfo(dpy, trace_ctx->trace_context, buf_id, &type, &size, &num_elements);    
688     
689     /* only trace CodedBuffer */
690     if (type != VAEncCodedBufferType)
691         return;
692
693     TRACE_FUNCNAME(idx);
694     va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", buffer_type_to_string(type));
695     va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", buf_id);
696     va_TraceMsg(trace_ctx, "\tsize=%d\n", size);
697     va_TraceMsg(trace_ctx, "\tnum_elements=%d\n", num_elements);
698     
699     va_TraceMsg(trace_ctx, NULL);
700 }
701
702
703 void va_TraceMapBuffer (
704     VADisplay dpy,
705     VABufferID buf_id,    /* in */
706     void **pbuf           /* out */
707 )
708 {
709     VABufferType type;
710     unsigned int size;
711     unsigned int num_elements;
712     
713     VACodedBufferSegment *buf_list;
714     int i = 0;
715     
716     DPY2TRACECTX(dpy);
717
718     vaBufferInfo(dpy, trace_ctx->trace_context, buf_id, &type, &size, &num_elements);    
719     
720     /* only trace CodedBuffer */
721     if (type != VAEncCodedBufferType)
722         return;
723
724     TRACE_FUNCNAME(idx);
725     va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", buf_id);
726     va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", buffer_type_to_string(type));
727     if ((pbuf == NULL) || (*pbuf == NULL))
728         return;
729     
730     buf_list = (VACodedBufferSegment *)(*pbuf);
731     while (buf_list != NULL) {
732         va_TraceMsg(trace_ctx, "\tCodedbuf[%d] =\n", i++);
733         
734         va_TraceMsg(trace_ctx, "\t   size = %d\n", buf_list->size);
735         va_TraceMsg(trace_ctx, "\t   bit_offset = %d\n", buf_list->bit_offset);
736         va_TraceMsg(trace_ctx, "\t   status = 0x%08x\n", buf_list->status);
737         va_TraceMsg(trace_ctx, "\t   reserved = 0x%08x\n", buf_list->reserved);
738         va_TraceMsg(trace_ctx, "\t   buf = 0x%08x\n", buf_list->buf);
739
740         if (trace_ctx->trace_fp_codedbuf) {
741             va_TraceMsg(trace_ctx, "\tDump the content to file\n");
742             fwrite(buf_list->buf, buf_list->size, 1, trace_ctx->trace_fp_codedbuf);
743         }
744         
745         buf_list = buf_list->next;
746     }
747     va_TraceMsg(trace_ctx, NULL);
748 }
749
750 static void va_TraceVABuffers(
751     VADisplay dpy,
752     VAContextID context,
753     VABufferID buffer,
754     VABufferType type,
755     unsigned int size,
756     unsigned int num_elements,
757     void *pbuf
758 )
759 {
760     unsigned int i;
761     unsigned char *p = pbuf;
762
763     DPY2TRACECTX(dpy);
764     
765     va_TraceMsg(trace_ctx, "--%s\n",  buffer_type_to_string(type));
766
767     if ((trace_flag & VA_TRACE_FLAG_BUFDATA) && trace_ctx->trace_fp_log) {
768         for (i=0; i<size; i++) {
769             unsigned char value =  p[i];
770
771             if (i==0)
772                 fprintf(trace_ctx->trace_fp_log, "\t\t0x%04x:", i);
773             else if ((i%16) == 0)
774                 fprintf(trace_ctx->trace_fp_log, "\n\t\t0x%04x:", i);
775
776             fprintf(trace_ctx->trace_fp_log, " %02x", value);
777         }
778         fprintf(trace_ctx->trace_fp_log, "\n");
779     }
780     
781     va_TraceMsg(trace_ctx, NULL);
782
783     return;
784 }
785
786
787 static void va_TraceVAPictureParameterBufferMPEG2(
788     VADisplay dpy,
789     VAContextID context,
790     VABufferID buffer,
791     VABufferType type,
792     unsigned int size,
793     unsigned int num_elements,
794     void *data)
795 {
796     VAPictureParameterBufferMPEG2 *p=(VAPictureParameterBufferMPEG2 *)data;
797     DPY2TRACECTX(dpy);
798
799     va_TraceMsg(trace_ctx,"VAPictureParameterBufferMPEG2\n");
800
801     va_TraceMsg(trace_ctx,"\thorizontal size= %d\n", p->horizontal_size);
802     va_TraceMsg(trace_ctx,"\tvertical size= %d\n", p->vertical_size);
803     va_TraceMsg(trace_ctx,"\tforward reference picture= %d\n", p->forward_reference_picture);
804     va_TraceMsg(trace_ctx,"\tbackward reference picture= %d\n", p->backward_reference_picture);
805     va_TraceMsg(trace_ctx,"\tpicture coding type= %d\n", p->picture_coding_type);
806     va_TraceMsg(trace_ctx,"\tf mode= %d\n", p->f_code);
807
808     va_TraceMsg(trace_ctx,"\tpicture coding extension = %d\n", p->picture_coding_extension.value);
809     va_TraceMsg(trace_ctx,"\tintra_dc_precision= %d\n", p->picture_coding_extension.bits.intra_dc_precision);
810     va_TraceMsg(trace_ctx,"\tpicture_structure= %d\n", p->picture_coding_extension.bits.picture_structure);
811     va_TraceMsg(trace_ctx,"\ttop_field_first= %d\n", p->picture_coding_extension.bits.top_field_first);
812     va_TraceMsg(trace_ctx,"\tframe_pred_frame_dct= %d\n", p->picture_coding_extension.bits.frame_pred_frame_dct);
813     va_TraceMsg(trace_ctx,"\tconcealment_motion_vectors= %d\n", p->picture_coding_extension.bits.concealment_motion_vectors);
814     va_TraceMsg(trace_ctx,"\tq_scale_type= %d\n", p->picture_coding_extension.bits.q_scale_type);
815     va_TraceMsg(trace_ctx,"\tintra_vlc_format= %d\n", p->picture_coding_extension.bits.intra_vlc_format);
816     va_TraceMsg(trace_ctx,"\talternate_scan= %d\n", p->picture_coding_extension.bits.alternate_scan);
817     va_TraceMsg(trace_ctx,"\trepeat_first_field= %d\n", p->picture_coding_extension.bits.repeat_first_field);
818     va_TraceMsg(trace_ctx,"\tprogressive_frame= %d\n", p->picture_coding_extension.bits.progressive_frame);
819     va_TraceMsg(trace_ctx,"\tis_first_field= %d\n", p->picture_coding_extension.bits.is_first_field);
820     va_TraceMsg(trace_ctx, NULL);
821
822     return;
823 }
824
825
826 static void va_TraceVAIQMatrixBufferMPEG2(
827     VADisplay dpy,
828     VAContextID context,
829     VABufferID buffer,
830     VABufferType type,
831     unsigned int size,
832     unsigned int num_elements,
833     void *data)
834 {
835     VAIQMatrixBufferMPEG2 *p=(VAIQMatrixBufferMPEG2 *)data;
836     DPY2TRACECTX(dpy);
837
838     va_TraceMsg(trace_ctx,"VAIQMatrixBufferMPEG2\n");
839
840     va_TraceMsg(trace_ctx,"\tload_intra_quantiser_matrix = %d\n", p->load_intra_quantiser_matrix);
841     va_TraceMsg(trace_ctx,"\tload_non_intra_quantiser_matrix = %d\n", p->load_non_intra_quantiser_matrix);
842     va_TraceMsg(trace_ctx,"\tload_chroma_intra_quantiser_matrix = %d\n", p->load_chroma_intra_quantiser_matrix);
843     va_TraceMsg(trace_ctx,"\tload_chroma_non_intra_quantiser_matrix = %d\n", p->load_chroma_non_intra_quantiser_matrix);
844     va_TraceMsg(trace_ctx,"\tintra_quantiser_matrix = %d\n", p->intra_quantiser_matrix);
845     va_TraceMsg(trace_ctx,"\tnon_intra_quantiser_matrix = %d\n", p->non_intra_quantiser_matrix);
846     va_TraceMsg(trace_ctx,"\tchroma_intra_quantiser_matrix = %d\n", p->chroma_intra_quantiser_matrix);
847     va_TraceMsg(trace_ctx,"\tchroma_non_intra_quantiser_matrix = %d\n", p->chroma_non_intra_quantiser_matrix);
848     va_TraceMsg(trace_ctx, NULL);
849
850     return;
851 }
852
853
854 static void va_TraceVASliceParameterBufferMPEG2(
855     VADisplay dpy,
856     VAContextID context,
857     VABufferID buffer,
858     VABufferType type,
859     unsigned int size,
860     unsigned int num_elements,
861     void *data)
862 {
863     VASliceParameterBufferMPEG2 *p=(VASliceParameterBufferMPEG2 *)data;
864
865     DPY2TRACECTX(dpy);
866
867     trace_ctx->trace_slice_no++;
868     
869     trace_ctx->trace_slice_size = p->slice_data_size;
870
871     va_TraceMsg(trace_ctx,"VASliceParameterBufferMPEG2\n");
872
873     va_TraceMsg(trace_ctx,"\tslice_data_size = %d\n", p->slice_data_size);
874     va_TraceMsg(trace_ctx,"\tslice_data_offset = %d\n", p->slice_data_offset);
875     va_TraceMsg(trace_ctx,"\tslice_data_flag = %d\n", p->slice_data_flag);
876     va_TraceMsg(trace_ctx,"\tmacroblock_offset = %d\n", p->macroblock_offset);
877     va_TraceMsg(trace_ctx,"\tslice_horizontal_position = %d\n", p->slice_horizontal_position);
878     va_TraceMsg(trace_ctx,"\tslice_vertical_position = %d\n", p->slice_vertical_position);
879     va_TraceMsg(trace_ctx,"\tquantiser_scale_code = %d\n", p->quantiser_scale_code);
880     va_TraceMsg(trace_ctx,"\tintra_slice_flag = %d\n", p->intra_slice_flag);
881     va_TraceMsg(trace_ctx, NULL);
882
883     return;
884 }
885
886 static void va_TraceVAPictureParameterBufferJPEG(
887     VADisplay dpy,
888     VAContextID context,
889     VABufferID buffer,
890     VABufferType type,
891     unsigned int size,
892     unsigned int num_elements,
893     void *data)
894 {
895     int i;
896     VAPictureParameterBufferJPEGBaseline *p=(VAPictureParameterBufferJPEGBaseline *)data;
897     DPY2TRACECTX(dpy);
898
899     va_TraceMsg(trace_ctx,"*VAPictureParameterBufferJPEG\n");
900     va_TraceMsg(trace_ctx,"\tpicture_width = %u\n", p->picture_width);
901     va_TraceMsg(trace_ctx,"\tpicture_height = %u\n", p->picture_height);
902     va_TraceMsg(trace_ctx,"\tcomponents = \n");
903     for (i = 0; i < p->num_components && i < 255; ++i) {
904         va_TraceMsg(trace_ctx,"\t\t[%d] component_id = %u\n", i, p->components[i].component_id);
905         va_TraceMsg(trace_ctx,"\t\t[%d] h_sampling_factor = %u\n", i, p->components[i].h_sampling_factor);
906         va_TraceMsg(trace_ctx,"\t\t[%d] v_sampling_factor = %u\n", i, p->components[i].v_sampling_factor);
907         va_TraceMsg(trace_ctx,"\t\t[%d] quantiser_table_selector = %u\n", i, p->components[i].quantiser_table_selector);
908     }
909 }
910
911 static void va_TraceVAIQMatrixBufferJPEG(
912     VADisplay dpy,
913     VAContextID context,
914     VABufferID buffer,
915     VABufferType type,
916     unsigned int size,
917     unsigned int num_elements,
918     void *data)
919 {
920     int i, j;
921     static char tmp[1024];
922     VAIQMatrixBufferJPEGBaseline *p=(VAIQMatrixBufferJPEGBaseline *)data;
923     DPY2TRACECTX(dpy);
924     va_TraceMsg(trace_ctx,"*VAIQMatrixParameterBufferJPEG\n");
925     va_TraceMsg(trace_ctx,"\tload_quantiser_table =\n");
926     for (i = 0; i < 4; ++i) {
927         va_TraceMsg(trace_ctx,"\t\t[%d] = %u\n", i, p->load_quantiser_table[i]);
928     }
929     va_TraceMsg(trace_ctx,"\tquantiser_table =\n");
930     for (i = 0; i < 4; ++i) {
931         memset(tmp, 0, sizeof tmp);
932         for (j = 0; j < 64; ++j) {
933             sprintf(tmp + strlen(tmp), "%u ", p->quantiser_table[i][j]);
934         }
935         va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
936     }
937 }
938
939 static void va_TraceVASliceParameterBufferJPEG(
940     VADisplay dpy,
941     VAContextID context,
942     VABufferID buffer,
943     VABufferType type,
944     unsigned int size,
945     unsigned int num_elements,
946     void *data)
947 {
948     int i;
949     VASliceParameterBufferJPEGBaseline *p=(VASliceParameterBufferJPEGBaseline *)data;
950     DPY2TRACECTX(dpy);
951     va_TraceMsg(trace_ctx,"*VASliceParameterBufferJPEG\n");
952     va_TraceMsg(trace_ctx,"\tslice_data_size = %u\n", p->slice_data_size);
953     va_TraceMsg(trace_ctx,"\tslice_data_offset = %u\n", p->slice_data_offset);
954     va_TraceMsg(trace_ctx,"\tslice_data_flag = %u\n", p->slice_data_flag);
955     va_TraceMsg(trace_ctx,"\tslice_horizontal_position = %u\n", p->slice_horizontal_position);
956     va_TraceMsg(trace_ctx,"\tslice_vertical_position = %u\n", p->slice_vertical_position);
957     va_TraceMsg(trace_ctx,"\tcomponents = \n");
958     for (i = 0; i < p->num_components && i < 4; ++i) {
959         va_TraceMsg(trace_ctx,"\t\t[%d] component_selector = %u\n", i, p->components[i].component_selector);
960         va_TraceMsg(trace_ctx,"\t\t[%d] dc_table_selector = %u\n", i, p->components[i].dc_table_selector);
961         va_TraceMsg(trace_ctx,"\t\t[%d] ac_table_selector = %u\n", i, p->components[i].ac_table_selector);
962     }
963     va_TraceMsg(trace_ctx,"\trestart_interval = %u\n", p->restart_interval);
964     va_TraceMsg(trace_ctx,"\tnum_mcus = %u\n", p->num_mcus);
965 }
966
967 static void va_TraceVAHuffmanTableBufferJPEG(
968     VADisplay dpy,
969     VAContextID context,
970     VABufferID buffer,
971     VABufferType type,
972     unsigned int size,
973     unsigned int num_elements,
974     void *data)
975 {
976     int i, j;
977     static char tmp[1024];
978     VAHuffmanTableBufferJPEGBaseline *p=(VAHuffmanTableBufferJPEGBaseline *)data;
979     DPY2TRACECTX(dpy);
980     va_TraceMsg(trace_ctx,"*VAHuffmanTableBufferJPEG\n");
981
982     for (i = 0; i < 2; ++i) {
983         va_TraceMsg(trace_ctx,"\tload_huffman_table[%d] =%u\n", i, p->load_huffman_table[0]);
984         va_TraceMsg(trace_ctx,"\thuffman_table[%d] =\n", i);
985         memset(tmp, 0, sizeof tmp);
986         for (j = 0; j < 16; ++j) {
987             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].num_dc_codes[j]);
988         }
989         va_TraceMsg(trace_ctx,"\t\tnum_dc_codes =%s\n", tmp);
990         memset(tmp, 0, sizeof tmp);
991         for (j = 0; j < 12; ++j) {
992             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].dc_values[j]);
993         }
994         va_TraceMsg(trace_ctx,"\t\tdc_values =%s\n", tmp);
995         memset(tmp, 0, sizeof tmp);
996         for (j = 0; j < 16; ++j) {
997             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].num_ac_codes[j]);
998         }
999         va_TraceMsg(trace_ctx,"\t\tnum_dc_codes =%s\n", tmp);
1000         memset(tmp, 0, sizeof tmp);
1001         for (j = 0; j < 162; ++j) {
1002             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].ac_values[j]);
1003         }
1004         va_TraceMsg(trace_ctx,"\t\tnum_dc_codes =%s\n", tmp);
1005         memset(tmp, 0, sizeof tmp);
1006         for (j = 0; j < 2; ++j) {
1007             sprintf(tmp + strlen(tmp), "%u ", p->huffman_table[i].pad[j]);
1008         }
1009         va_TraceMsg(trace_ctx,"\t\tnum_dc_codes =%s\n", tmp);
1010     }
1011 }
1012
1013 static void va_TraceVAPictureParameterBufferMPEG4(
1014     VADisplay dpy,
1015     VAContextID context,
1016     VABufferID buffer,
1017     VABufferType type,
1018     unsigned int size,
1019     unsigned int num_elements,
1020     void *data)
1021 {
1022     int i;
1023     VAPictureParameterBufferMPEG4 *p=(VAPictureParameterBufferMPEG4 *)data;
1024     
1025     DPY2TRACECTX(dpy);
1026
1027     va_TraceMsg(trace_ctx,"*VAPictureParameterBufferMPEG4\n");
1028     va_TraceMsg(trace_ctx,"\tvop_width = %d\n", p->vop_width);
1029     va_TraceMsg(trace_ctx,"\tvop_height = %d\n", p->vop_height);
1030     va_TraceMsg(trace_ctx,"\tforward_reference_picture = %d\n", p->forward_reference_picture);
1031     va_TraceMsg(trace_ctx,"\tbackward_reference_picture = %d\n", p->backward_reference_picture);
1032     va_TraceMsg(trace_ctx,"\tvol_fields value = %d\n", p->vol_fields.value);
1033     va_TraceMsg(trace_ctx,"\tshort_video_header= %d\n", p->vol_fields.bits.short_video_header);
1034     va_TraceMsg(trace_ctx,"\tchroma_format= %d\n", p->vol_fields.bits.chroma_format);
1035     va_TraceMsg(trace_ctx,"\tinterlaced= %d\n", p->vol_fields.bits.interlaced);
1036     va_TraceMsg(trace_ctx,"\tobmc_disable= %d\n", p->vol_fields.bits.obmc_disable);
1037     va_TraceMsg(trace_ctx,"\tsprite_enable= %d\n", p->vol_fields.bits.sprite_enable);
1038     va_TraceMsg(trace_ctx,"\tsprite_warping_accuracy= %d\n", p->vol_fields.bits.sprite_warping_accuracy);
1039     va_TraceMsg(trace_ctx,"\tquant_type= %d\n", p->vol_fields.bits.quant_type);
1040     va_TraceMsg(trace_ctx,"\tquarter_sample= %d\n", p->vol_fields.bits.quarter_sample);
1041     va_TraceMsg(trace_ctx,"\tdata_partitioned= %d\n", p->vol_fields.bits.data_partitioned);
1042     va_TraceMsg(trace_ctx,"\treversible_vlc= %d\n", p->vol_fields.bits.reversible_vlc);
1043     va_TraceMsg(trace_ctx,"\tresync_marker_disable= %d\n", p->vol_fields.bits.resync_marker_disable);
1044     va_TraceMsg(trace_ctx,"\tno_of_sprite_warping_points = %d\n", p->no_of_sprite_warping_points);
1045     va_TraceMsg(trace_ctx,"\tsprite_trajectory_du =");
1046     for(i=0;i<3;i++)
1047         va_TraceMsg(trace_ctx,"\t%d", p->sprite_trajectory_du[i]);
1048
1049     va_TraceMsg(trace_ctx,"\n");
1050     va_TraceMsg(trace_ctx,"\tsprite_trajectory_dv =");
1051     for(i=0;i<3;i++)
1052         va_TraceMsg(trace_ctx,"\t%d", p->sprite_trajectory_dv[i]);
1053     va_TraceMsg(trace_ctx,"\n");
1054     va_TraceMsg(trace_ctx,"\tvop_fields value = %d\n", p->vop_fields.value);
1055     va_TraceMsg(trace_ctx,"\tvop_coding_type= %d\n", p->vop_fields.bits.vop_coding_type);
1056     va_TraceMsg(trace_ctx,"\tbackward_reference_vop_coding_type= %d\n", p->vop_fields.bits.backward_reference_vop_coding_type);
1057     va_TraceMsg(trace_ctx,"\tvop_rounding_type= %d\n", p->vop_fields.bits.vop_rounding_type);
1058     va_TraceMsg(trace_ctx,"\tintra_dc_vlc_thr= %d\n", p->vop_fields.bits.intra_dc_vlc_thr);
1059     va_TraceMsg(trace_ctx,"\ttop_field_first= %d\n", p->vop_fields.bits.top_field_first);
1060     va_TraceMsg(trace_ctx,"\talternate_vertical_scan_flag= %d\n", p->vop_fields.bits.alternate_vertical_scan_flag);
1061     va_TraceMsg(trace_ctx,"\tvop_fcode_forward = %d\n", p->vop_fcode_forward);
1062     va_TraceMsg(trace_ctx,"\tvop_fcode_backward = %d\n", p->vop_fcode_backward);
1063     va_TraceMsg(trace_ctx,"\tnum_gobs_in_vop = %d\n", p->num_gobs_in_vop);
1064     va_TraceMsg(trace_ctx,"\tnum_macroblocks_in_gob = %d\n", p->num_macroblocks_in_gob);
1065     va_TraceMsg(trace_ctx,"\tTRB = %d\n", p->TRB);
1066     va_TraceMsg(trace_ctx,"\tTRD = %d\n", p->TRD);
1067     va_TraceMsg(trace_ctx, NULL);
1068
1069     return;
1070 }
1071
1072
1073 static void va_TraceVAIQMatrixBufferMPEG4(
1074     VADisplay dpy,
1075     VAContextID context,
1076     VABufferID buffer,
1077     VABufferType type,
1078     unsigned int size,
1079     unsigned int num_elements,
1080     void *data)
1081 {
1082     int i;
1083     VAIQMatrixBufferMPEG4 *p=(VAIQMatrixBufferMPEG4 *)data;
1084     DPY2TRACECTX(dpy);
1085
1086     va_TraceMsg(trace_ctx,"VAIQMatrixBufferMPEG4\n");
1087
1088     va_TraceMsg(trace_ctx,"\tload_intra_quant_mat = %d\n", p->load_intra_quant_mat);
1089     va_TraceMsg(trace_ctx,"\tload_non_intra_quant_mat = %d\n", p->load_non_intra_quant_mat);
1090     va_TraceMsg(trace_ctx,"\tintra_quant_mat =\n");
1091     for(i=0;i<64;i++)
1092         va_TraceMsg(trace_ctx,"\t\t%d\n", p->intra_quant_mat[i]);
1093
1094     va_TraceMsg(trace_ctx,"\tnon_intra_quant_mat =\n");
1095     for(i=0;i<64;i++)
1096         va_TraceMsg(trace_ctx,"\t\t%d\n", p->non_intra_quant_mat[i]);
1097     va_TraceMsg(trace_ctx, NULL);
1098
1099     return;
1100 }
1101
1102 static void va_TraceVAEncSequenceParameterBufferMPEG4(
1103     VADisplay dpy,
1104     VAContextID context,
1105     VABufferID buffer,
1106     VABufferType type,
1107     unsigned int size,
1108     unsigned int num_elements,
1109     void *data)
1110 {
1111     VAEncSequenceParameterBufferMPEG4 *p = (VAEncSequenceParameterBufferMPEG4 *)data;
1112     DPY2TRACECTX(dpy);
1113     
1114     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferMPEG4\n");
1115     
1116     va_TraceMsg(trace_ctx, "\tprofile_and_level_indication = %d\n", p->profile_and_level_indication);
1117     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
1118     va_TraceMsg(trace_ctx, "\tvideo_object_layer_width = %d\n", p->video_object_layer_width);
1119     va_TraceMsg(trace_ctx, "\tvideo_object_layer_height = %d\n", p->video_object_layer_height);
1120     va_TraceMsg(trace_ctx, "\tvop_time_increment_resolution = %d\n", p->vop_time_increment_resolution);
1121     va_TraceMsg(trace_ctx, "\tfixed_vop_rate = %d\n", p->fixed_vop_rate);
1122     va_TraceMsg(trace_ctx, "\tfixed_vop_time_increment = %d\n", p->fixed_vop_time_increment);
1123     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
1124     va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate);
1125     va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
1126     va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
1127     va_TraceMsg(trace_ctx, NULL);
1128
1129     return;
1130 }
1131
1132 static void va_TraceVAEncPictureParameterBufferMPEG4(
1133     VADisplay dpy,
1134     VAContextID context,
1135     VABufferID buffer,
1136     VABufferType type,
1137     unsigned int size,
1138     unsigned int num_elements,
1139     void *data)
1140 {
1141     VAEncPictureParameterBufferMPEG4 *p = (VAEncPictureParameterBufferMPEG4 *)data;
1142     DPY2TRACECTX(dpy);
1143     
1144     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferMPEG4\n");
1145     va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture);
1146     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
1147     va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", p->coded_buf);
1148     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
1149     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
1150     va_TraceMsg(trace_ctx, "\tmodulo_time_base = %d\n", p->modulo_time_base);
1151     va_TraceMsg(trace_ctx, "\tvop_time_increment = %d\n", p->vop_time_increment);
1152     va_TraceMsg(trace_ctx, "\tpicture_type = %d\n", p->picture_type);
1153     va_TraceMsg(trace_ctx, NULL);
1154
1155     return;
1156 }
1157
1158
1159 static void va_TraceVASliceParameterBufferMPEG4(
1160     VADisplay dpy,
1161     VAContextID context,
1162     VABufferID buffer,
1163     VABufferType type,
1164     unsigned int size,
1165     unsigned int num_elements,
1166     void *data)
1167 {
1168     VASliceParameterBufferMPEG4 *p=(VASliceParameterBufferMPEG4 *)data;
1169     
1170     DPY2TRACECTX(dpy);
1171
1172     trace_ctx->trace_slice_no++;
1173
1174     trace_ctx->trace_slice_size = p->slice_data_size;
1175
1176     va_TraceMsg(trace_ctx,"VASliceParameterBufferMPEG4\n");
1177
1178     va_TraceMsg(trace_ctx,"\tslice_data_size = %d\n", p->slice_data_size);
1179     va_TraceMsg(trace_ctx,"\tslice_data_offset = %d\n", p->slice_data_offset);
1180     va_TraceMsg(trace_ctx,"\tslice_data_flag = %d\n", p->slice_data_flag);
1181     va_TraceMsg(trace_ctx,"\tmacroblock_offset = %d\n", p->macroblock_offset);
1182     va_TraceMsg(trace_ctx,"\tmacroblock_number = %d\n", p->macroblock_number);
1183     va_TraceMsg(trace_ctx,"\tquant_scale = %d\n", p->quant_scale);
1184     va_TraceMsg(trace_ctx, NULL);
1185
1186     return;
1187 }
1188
1189
1190 static inline void va_TraceFlagIfNotZero(
1191     struct trace_context *trace_ctx,
1192     const char *name,   /* in */
1193     unsigned int flag   /* in */
1194 )
1195 {
1196     if (flag != 0) {
1197         va_TraceMsg(trace_ctx, "%s = %x\n", name, flag);
1198     }
1199 }
1200
1201
1202 static void va_TraceVAPictureParameterBufferHEVC(
1203     VADisplay dpy,
1204     VAContextID context,
1205     VABufferID buffer,
1206     VABufferType type,
1207     unsigned int size,
1208     unsigned int num_elements,
1209     void *data)
1210 {
1211     int i;
1212     VAPictureParameterBufferHEVC *p = (VAPictureParameterBufferHEVC*)data;
1213
1214     DPY2TRACECTX(dpy);
1215
1216     va_TraceMsg(trace_ctx, "VAPictureParameterBufferHEVC\n");
1217
1218     va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
1219     va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %d\n", p->CurrPic.pic_order_cnt);
1220     va_TraceMsg(trace_ctx, "\tCurrPic.flags = %d\n", p->CurrPic.flags);
1221
1222     va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags:\n");
1223     for (i = 0; i < 15; i++)
1224     {
1225         if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) &&
1226             ((p->ReferenceFrames[i].flags & VA_PICTURE_HEVC_INVALID) == 0)) {
1227             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x\n",
1228                         p->ReferenceFrames[i].picture_id,
1229                         p->ReferenceFrames[i].pic_order_cnt,
1230                         p->ReferenceFrames[i].flags);
1231         } else
1232             va_TraceMsg(trace_ctx, "\t\tinv-inv-inv-inv-inv\n");
1233     }
1234     va_TraceMsg(trace_ctx, "\n");
1235
1236     va_TraceMsg(trace_ctx, "\tpic_width_in_luma_samples = %d\n", p->pic_width_in_luma_samples);
1237     va_TraceMsg(trace_ctx, "\tpic_height_in_luma_samples = %d\n", p->pic_height_in_luma_samples);
1238     va_TraceMsg(trace_ctx, "\tpic_fields = %d\n", p->pic_fields.value);
1239
1240     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->pic_fields.bits.chroma_format_idc);
1241     va_TraceMsg(trace_ctx, "\tseparate_colour_plane_flag = %d\n", p->pic_fields.bits.separate_colour_plane_flag);
1242     va_TraceMsg(trace_ctx, "\tpcm_enabled_flag = %d\n", p->pic_fields.bits.pcm_enabled_flag);
1243     va_TraceMsg(trace_ctx, "\tscaling_list_enabled_flag = %d\n", p->pic_fields.bits.scaling_list_enabled_flag);
1244     va_TraceMsg(trace_ctx, "\ttransform_skip_enabled_flag = %d\n", p->pic_fields.bits.transform_skip_enabled_flag);
1245     va_TraceMsg(trace_ctx, "\tamp_enabled_flag = %d\n", p->pic_fields.bits.amp_enabled_flag);
1246     va_TraceMsg(trace_ctx, "\tstrong_intra_smoothing_enabled_flag = %d\n", p->pic_fields.bits.strong_intra_smoothing_enabled_flag);
1247     va_TraceMsg(trace_ctx, "\tsign_data_hiding_enabled_flag = %d\n", p->pic_fields.bits.sign_data_hiding_enabled_flag);
1248     va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag);
1249     va_TraceMsg(trace_ctx, "\tcu_qp_delta_enabled_flag = %d\n", p->pic_fields.bits.cu_qp_delta_enabled_flag);
1250     va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag);
1251     va_TraceMsg(trace_ctx, "\tweighted_bipred_flag = %d\n", p->pic_fields.bits.weighted_bipred_flag);
1252     va_TraceMsg(trace_ctx, "\ttransquant_bypass_enabled_flag = %d\n", p->pic_fields.bits.transquant_bypass_enabled_flag);
1253     va_TraceMsg(trace_ctx, "\ttiles_enabled_flag = %d\n", p->pic_fields.bits.tiles_enabled_flag);
1254     va_TraceMsg(trace_ctx, "\tentropy_coding_sync_enabled_flag = %d\n", p->pic_fields.bits.entropy_coding_sync_enabled_flag);
1255     va_TraceMsg(trace_ctx, "\tpps_loop_filter_across_slices_enabled_flag = %d\n", p->pic_fields.bits.pps_loop_filter_across_slices_enabled_flag);
1256     va_TraceMsg(trace_ctx, "\tloop_filter_across_tiles_enabled_flag = %d\n", p->pic_fields.bits.loop_filter_across_tiles_enabled_flag);
1257     va_TraceMsg(trace_ctx, "\tpcm_loop_filter_disabled_flag = %d\n", p->pic_fields.bits.pcm_loop_filter_disabled_flag);
1258     va_TraceMsg(trace_ctx, "\tNoPicReorderingFlag = %d\n", p->pic_fields.bits.NoPicReorderingFlag);
1259     va_TraceMsg(trace_ctx, "\tNoBiPredFlag = %d\n", p->pic_fields.bits.NoBiPredFlag);
1260     va_TraceMsg(trace_ctx, "\tReservedBits = %d\n", p->pic_fields.bits.ReservedBits);
1261
1262     va_TraceMsg(trace_ctx, "\tsps_max_dec_pic_buffering_minus1 = %d\n", p->sps_max_dec_pic_buffering_minus1);
1263     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8);
1264     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8);
1265     va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_luma_minus1 = %d\n", p->pcm_sample_bit_depth_luma_minus1);
1266     va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_chroma_minus1 = %d\n", p->pcm_sample_bit_depth_chroma_minus1);
1267     va_TraceMsg(trace_ctx, "\tlog2_min_luma_coding_block_size_minus3 = %d\n", p->log2_min_luma_coding_block_size_minus3);
1268     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_luma_coding_block_size = %d\n", p->log2_diff_max_min_luma_coding_block_size);
1269     va_TraceMsg(trace_ctx, "\tlog2_min_transform_block_size_minus2 = %d\n", p->log2_min_transform_block_size_minus2);
1270     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_transform_block_size = %d\n", p->log2_diff_max_min_transform_block_size);
1271     va_TraceMsg(trace_ctx, "\tlog2_min_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_min_pcm_luma_coding_block_size_minus3);
1272     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);
1273     va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_intra = %d\n", p->max_transform_hierarchy_depth_intra);
1274     va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_inter = %d\n", p->max_transform_hierarchy_depth_inter);
1275     va_TraceMsg(trace_ctx, "\tinit_qp_minus26 = %d\n", p->init_qp_minus26);
1276     va_TraceMsg(trace_ctx, "\tdiff_cu_qp_delta_depth = %d\n", p->diff_cu_qp_delta_depth);
1277     va_TraceMsg(trace_ctx, "\tpps_cb_qp_offset = %d\n", p->pps_cb_qp_offset);
1278     va_TraceMsg(trace_ctx, "\tpps_cr_qp_offset = %d\n", p->pps_cr_qp_offset);
1279     va_TraceMsg(trace_ctx, "\tlog2_parallel_merge_level_minus2 = %d\n", p->log2_parallel_merge_level_minus2);
1280     va_TraceMsg(trace_ctx, "\tnum_tile_columns_minus1 = %d\n", p->num_tile_columns_minus1);
1281     va_TraceMsg(trace_ctx, "\tnum_tile_rows_minus1 = %d\n", p->num_tile_rows_minus1);
1282
1283     va_TraceMsg(trace_ctx, "\tcolumn_width_minus1[19]=\n");
1284     for (i = 0; i < 19; i++) {
1285         va_TraceMsg(trace_ctx, "\t%d", p->column_width_minus1[i]);
1286         if ((i + 1) % 8 == 0)
1287             va_TraceMsg(trace_ctx, "\n");
1288     }
1289     va_TraceMsg(trace_ctx, "\n");
1290     va_TraceMsg(trace_ctx, "\trow_height_minus1[21]=\n");
1291     for (i = 0; i < 21; i++) {
1292         va_TraceMsg(trace_ctx, "\t%d", p->row_height_minus1[i]);
1293         if ((i + 1) % 8 == 0)
1294             va_TraceMsg(trace_ctx, "\n");
1295     }
1296     va_TraceMsg(trace_ctx, "\n");
1297
1298     va_TraceMsg(trace_ctx, "\tslice_parsing_fields = %d\n", p->slice_parsing_fields.value);
1299     va_TraceMsg(trace_ctx, "\tlists_modification_present_flag = %d\n", p->slice_parsing_fields.bits.lists_modification_present_flag);
1300     va_TraceMsg(trace_ctx, "\tlong_term_ref_pics_present_flag = %d\n", p->slice_parsing_fields.bits.long_term_ref_pics_present_flag);
1301     va_TraceMsg(trace_ctx, "\tsps_temporal_mvp_enabled_flag = %d\n", p->slice_parsing_fields.bits.sps_temporal_mvp_enabled_flag);
1302     va_TraceMsg(trace_ctx, "\tcabac_init_present_flag = %d\n", p->slice_parsing_fields.bits.cabac_init_present_flag);
1303     va_TraceMsg(trace_ctx, "\toutput_flag_present_flag = %d\n", p->slice_parsing_fields.bits.output_flag_present_flag);
1304     va_TraceMsg(trace_ctx, "\tdependent_slice_segments_enabled_flag = %d\n", p->slice_parsing_fields.bits.dependent_slice_segments_enabled_flag);
1305     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);
1306     va_TraceMsg(trace_ctx, "\tsample_adaptive_offset_enabled_flag = %d\n", p->slice_parsing_fields.bits.sample_adaptive_offset_enabled_flag);
1307     va_TraceMsg(trace_ctx, "\tdeblocking_filter_override_enabled_flag = %d\n", p->slice_parsing_fields.bits.deblocking_filter_override_enabled_flag);
1308     va_TraceMsg(trace_ctx, "\tpps_disable_deblocking_filter_flag = %d\n", p->slice_parsing_fields.bits.pps_disable_deblocking_filter_flag);
1309     va_TraceMsg(trace_ctx, "\tslice_segment_header_extension_present_flag = %d\n", p->slice_parsing_fields.bits.slice_segment_header_extension_present_flag);
1310     va_TraceMsg(trace_ctx, "\tRapPicFlag = %d\n", p->slice_parsing_fields.bits.RapPicFlag);
1311     va_TraceMsg(trace_ctx, "\tIdrPicFlag = %d\n", p->slice_parsing_fields.bits.IdrPicFlag);
1312     va_TraceMsg(trace_ctx, "\tIntraPicFlag = %d\n", p->slice_parsing_fields.bits.IntraPicFlag);
1313     va_TraceMsg(trace_ctx, "\tReservedBits = %d\n", p->slice_parsing_fields.bits.ReservedBits);
1314
1315     va_TraceMsg(trace_ctx, "\tlog2_max_pic_order_cnt_lsb_minus4 = %d\n", p->log2_max_pic_order_cnt_lsb_minus4);
1316     va_TraceMsg(trace_ctx, "\tnum_short_term_ref_pic_sets = %d\n", p->num_short_term_ref_pic_sets);
1317     va_TraceMsg(trace_ctx, "\tnum_long_term_ref_pic_sps = %d\n", p->num_long_term_ref_pic_sps);
1318     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_default_active_minus1 = %d\n", p->num_ref_idx_l0_default_active_minus1);
1319     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_default_active_minus1 = %d\n", p->num_ref_idx_l1_default_active_minus1);
1320     va_TraceMsg(trace_ctx, "\tpps_beta_offset_div2 = %d\n", p->pps_beta_offset_div2);
1321     va_TraceMsg(trace_ctx, "\tpps_tc_offset_div2 = %d\n", p->pps_tc_offset_div2);
1322     va_TraceMsg(trace_ctx, "\tnum_extra_slice_header_bits = %d\n", p->num_extra_slice_header_bits);
1323     va_TraceMsg(trace_ctx, "\tst_rps_bits = %d\n", p->st_rps_bits);
1324
1325     return;
1326 }
1327
1328 static void va_TraceVASliceParameterBufferHEVC(
1329     VADisplay dpy,
1330     VAContextID context,
1331     VABufferID buffer,
1332     VABufferType type,
1333     unsigned int size,
1334     unsigned int num_elements,
1335     void *data)
1336 {
1337     int i,j;
1338     VASliceParameterBufferHEVC* p = (VASliceParameterBufferHEVC*)data;
1339
1340     DPY2TRACECTX(dpy);
1341
1342     trace_ctx->trace_slice_no++;
1343     trace_ctx->trace_slice_size = p->slice_data_size;
1344
1345     va_TraceMsg(trace_ctx, "VASliceParameterBufferHEVC\n");
1346     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
1347     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
1348     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
1349     va_TraceMsg(trace_ctx, "\tslice_data_byte_offset = %d\n", p->slice_data_byte_offset);
1350     va_TraceMsg(trace_ctx, "\tslice_segment_address = %d\n", p->slice_segment_address);
1351
1352     va_TraceMsg(trace_ctx, "\tRefPicList[2][15]=\n");
1353     for (i = 0; i < 2; i++) {
1354         for (j = 0; j < 15; j++) {
1355             va_TraceMsg(trace_ctx, "\t%d", p->RefPicList[i][j]);
1356             if ((i*8 + j + 1) % 8 == 0)
1357                 va_TraceMsg(trace_ctx, "\n");
1358         }
1359     }
1360     va_TraceMsg(trace_ctx, "\n");
1361
1362     va_TraceMsg(trace_ctx, "\tLongSliceFlags.value = %d\n", p->LongSliceFlags.value);
1363     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.LastSliceOfPic = %d\n", p->LongSliceFlags.fields.LastSliceOfPic);
1364     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.dependent_slice_segment_flag = %d\n", p->LongSliceFlags.fields.dependent_slice_segment_flag);
1365     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_type = %d\n", p->LongSliceFlags.fields.slice_type);
1366     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.color_plane_id = %d\n", p->LongSliceFlags.fields.color_plane_id);
1367     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_sao_luma_flag = %d\n", p->LongSliceFlags.fields.slice_sao_luma_flag);
1368     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_sao_chroma_flag = %d\n", p->LongSliceFlags.fields.slice_sao_chroma_flag);
1369     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.mvd_l1_zero_flag = %d\n", p->LongSliceFlags.fields.mvd_l1_zero_flag);
1370     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.cabac_init_flag = %d\n", p->LongSliceFlags.fields.cabac_init_flag);
1371     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_temporal_mvp_enabled_flag = %d\n", p->LongSliceFlags.fields.slice_temporal_mvp_enabled_flag);
1372     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.slice_deblocking_filter_disabled_flag = %d\n", p->LongSliceFlags.fields.slice_deblocking_filter_disabled_flag);
1373     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.collocated_from_l0_flag = %d\n", p->LongSliceFlags.fields.collocated_from_l0_flag);
1374     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);
1375     va_TraceMsg(trace_ctx, "\tLongSliceFlags.fields.reserved = %d\n", p->LongSliceFlags.fields.reserved);
1376
1377     va_TraceMsg(trace_ctx, "\tcollocated_ref_idx = %d\n", p->collocated_ref_idx);
1378
1379     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
1380     va_TraceMsg(trace_ctx, "\tslice_cb_qp_offset = %d\n", p->slice_cb_qp_offset);
1381     va_TraceMsg(trace_ctx, "\tslice_cr_qp_offset = %d\n", p->slice_cr_qp_offset);
1382     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
1383     va_TraceMsg(trace_ctx, "\tslice_tc_offset_div2 = %d\n", p->slice_tc_offset_div2);
1384     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
1385     va_TraceMsg(trace_ctx, "\tdelta_chroma_log2_weight_denom = %d\n", p->delta_chroma_log2_weight_denom);
1386
1387     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
1388     for (i = 0; i <=  p->num_ref_idx_l0_active_minus1; i++) {
1389         va_TraceMsg(trace_ctx, "\t%d ", p->delta_luma_weight_l0[i]);
1390         va_TraceMsg(trace_ctx, "\t%d ", p->luma_offset_l0[i]);
1391         va_TraceMsg(trace_ctx, "\t%d ", p->delta_chroma_weight_l0[i][0]);
1392         va_TraceMsg(trace_ctx, "\t%d ", p->delta_chroma_weight_l0[i][1]);
1393         va_TraceMsg(trace_ctx, "\t%d ", p->ChromaOffsetL0[i][0]);
1394         va_TraceMsg(trace_ctx, "\t%d ", p->ChromaOffsetL0[i][1]);
1395         va_TraceMsg(trace_ctx, "\n");
1396     }
1397
1398     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
1399     for (i = 0; i <=  p->num_ref_idx_l1_active_minus1; i++) {
1400         va_TraceMsg(trace_ctx, "\t%d ", p->delta_luma_weight_l1[i]);
1401         va_TraceMsg(trace_ctx, "\t%d ", p->luma_offset_l1[i]);
1402         va_TraceMsg(trace_ctx, "\t%d ", p->delta_chroma_weight_l1[i][0]);
1403         va_TraceMsg(trace_ctx, "\t%d ", p->delta_chroma_weight_l1[i][1]);
1404         va_TraceMsg(trace_ctx, "\t%d ", p->ChromaOffsetL1[i][0]);
1405         va_TraceMsg(trace_ctx, "\t%d ", p->ChromaOffsetL1[i][1]);
1406         va_TraceMsg(trace_ctx, "\n");
1407     }
1408
1409     va_TraceMsg(trace_ctx, "\tfive_minus_max_num_merge_cand = %d\n", p->five_minus_max_num_merge_cand);
1410
1411     va_TraceMsg(trace_ctx, NULL);
1412 }
1413
1414 static void va_TraceVAIQMatrixBufferHEVC(
1415     VADisplay dpy,
1416     VAContextID context,
1417     VABufferID buffer,
1418     VABufferType type,
1419     unsigned int size,
1420     unsigned int num_elements,
1421     void *data
1422 )
1423 {
1424     int i, j;
1425     VAIQMatrixBufferHEVC* p = (VAIQMatrixBufferHEVC* )data;
1426
1427     DPY2TRACECTX(dpy);
1428
1429     va_TraceMsg(trace_ctx, "VAIQMatrixBufferHEVC\n");
1430
1431     va_TraceMsg(trace_ctx, "\tScalingList4x4[6][16]=\n");
1432     for (i = 0; i < 6; i++) {
1433         for (j = 0; j < 16; j++) {
1434             va_TraceMsg(trace_ctx, "\t%d\t", p->ScalingList4x4[i][j]);
1435             if ((j + 1) % 8 == 0)
1436                 va_TraceMsg(trace_ctx, "\n");
1437         }
1438     }
1439
1440     va_TraceMsg(trace_ctx, "\tScalingList8x8[6][64]=\n");
1441     for (i = 0; i < 6; i++) {
1442         for (j = 0; j < 64; j++) {
1443             va_TraceMsg(trace_ctx, "\t%d", p->ScalingList8x8[i][j]);
1444             if ((j + 1) % 8 == 0)
1445                 va_TraceMsg(trace_ctx, "\n");
1446         }
1447     }
1448
1449     va_TraceMsg(trace_ctx, "\tScalingList16x16[6][64]=\n");
1450     for (i = 0; i < 6; i++) {
1451         for (j = 0; j < 64; j++) {
1452             va_TraceMsg(trace_ctx, "\t%d", p->ScalingList16x16[i][j]);
1453             if ((j + 1) % 8 == 0)
1454                 va_TraceMsg(trace_ctx, "\n");
1455         }
1456     }
1457
1458     va_TraceMsg(trace_ctx, "\tScalingList32x32[2][64]=\n");
1459     for (i = 0; i < 2; i++) {
1460         for (j = 0; j < 64; j++) {
1461             va_TraceMsg(trace_ctx, "\t%d", p->ScalingList32x32[i][j]);
1462             if ((j + 1) % 8 == 0)
1463                 va_TraceMsg(trace_ctx, "\n");
1464         }
1465     }
1466
1467     va_TraceMsg(trace_ctx, "\tScalingListDC16x16[6]=\n");
1468     for (j = 0; j < 6; j++) {
1469         va_TraceMsg(trace_ctx, "\t%d", p->ScalingListDC16x16[j]);
1470     }
1471     va_TraceMsg(trace_ctx, "\tScalingListDC32x32[2]=\n");
1472     for (j = 0; j < 2; j++) {
1473         va_TraceMsg(trace_ctx, "\t%d", p->ScalingListDC32x32[j]);
1474     }
1475
1476     va_TraceMsg(trace_ctx, NULL);
1477 }
1478
1479 static void va_TraceVAEncSequenceParameterBufferHEVC(
1480     VADisplay dpy,
1481     VAContextID context,
1482     VABufferID buffer,
1483     VABufferType type,
1484     unsigned int size,
1485     unsigned int num_elements,
1486     void *data)
1487 {
1488     VAEncSequenceParameterBufferHEVC *p = (VAEncSequenceParameterBufferHEVC *)data;
1489
1490     DPY2TRACECTX(dpy);
1491
1492     if(!p)
1493         return;
1494
1495     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferHEVC\n");
1496
1497     va_TraceMsg(trace_ctx, "\tgeneral_profile_idc = %d\n", p->general_profile_idc);
1498     va_TraceMsg(trace_ctx, "\tgeneral_level_idc = %d\n", p->general_level_idc);
1499     va_TraceMsg(trace_ctx, "\tgeneral_tier_flag = %d\n", p->general_tier_flag);
1500     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
1501     va_TraceMsg(trace_ctx, "\tintra_idr_period = %d\n", p->intra_idr_period);
1502     va_TraceMsg(trace_ctx, "\tip_period = %d\n", p->ip_period);
1503     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
1504     va_TraceMsg(trace_ctx, "\tpic_width_in_luma_samples = %d\n", p->pic_width_in_luma_samples);
1505     va_TraceMsg(trace_ctx, "\tpic_height_in_luma_samples = %d\n", p->pic_height_in_luma_samples);
1506     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc);
1507     va_TraceMsg(trace_ctx, "\tseparate_colour_plane_flag = %d\n", p->seq_fields.bits.separate_colour_plane_flag);
1508     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->seq_fields.bits.bit_depth_luma_minus8);
1509     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->seq_fields.bits.bit_depth_chroma_minus8);
1510     va_TraceMsg(trace_ctx, "\tscaling_list_enabled_flag = %d\n", p->seq_fields.bits.scaling_list_enabled_flag);
1511     va_TraceMsg(trace_ctx, "\tstrong_intra_smoothing_enabled_flag = %d\n", p->seq_fields.bits.strong_intra_smoothing_enabled_flag);
1512     va_TraceMsg(trace_ctx, "\tamp_enabled_flag = %d\n", p->seq_fields.bits.amp_enabled_flag);
1513     va_TraceMsg(trace_ctx, "\tsample_adaptive_offset_enabled_flag = %d\n", p->seq_fields.bits.sample_adaptive_offset_enabled_flag);
1514     va_TraceMsg(trace_ctx, "\tpcm_enabled_flag = %d\n", p->seq_fields.bits.pcm_enabled_flag);
1515     va_TraceMsg(trace_ctx, "\tpcm_loop_filter_disabled_flag = %d\n", p->seq_fields.bits.pcm_loop_filter_disabled_flag);
1516     va_TraceMsg(trace_ctx, "\tsps_temporal_mvp_enabled_flag = %d\n", p->seq_fields.bits.sps_temporal_mvp_enabled_flag);
1517     va_TraceMsg(trace_ctx, "\treserved_bits = %d\n", p->seq_fields.bits.reserved_bits);
1518     va_TraceMsg(trace_ctx, "\tlog2_min_luma_coding_block_size_minus3 = %d\n", p->log2_min_luma_coding_block_size_minus3);
1519     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_luma_coding_block_size = %d\n", p->log2_diff_max_min_luma_coding_block_size);
1520     va_TraceMsg(trace_ctx, "\tlog2_min_transform_block_size_minus2 = %d\n", p->log2_min_transform_block_size_minus2);
1521     va_TraceMsg(trace_ctx, "\tlog2_diff_max_min_transform_block_size = %d\n", p->log2_diff_max_min_transform_block_size);
1522     va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_inter = %d\n", p->max_transform_hierarchy_depth_inter);
1523     va_TraceMsg(trace_ctx, "\tmax_transform_hierarchy_depth_intra = %d\n", p->max_transform_hierarchy_depth_intra);
1524     va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_luma_minus1 = %d\n", p->pcm_sample_bit_depth_luma_minus1);
1525     va_TraceMsg(trace_ctx, "\tpcm_sample_bit_depth_chroma_minus1 = %d\n", p->pcm_sample_bit_depth_chroma_minus1);
1526     va_TraceMsg(trace_ctx, "\tlog2_min_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_min_pcm_luma_coding_block_size_minus3);
1527     va_TraceMsg(trace_ctx, "\tlog2_max_pcm_luma_coding_block_size_minus3 = %d\n", p->log2_max_pcm_luma_coding_block_size_minus3);
1528     va_TraceMsg(trace_ctx, "\tvui_parameters_present_flag = %d\n", p->vui_parameters_present_flag);
1529     va_TraceMsg(trace_ctx, "\taspect_ratio_info_present_flag = %d\n", p->vui_fields.bits.aspect_ratio_info_present_flag);
1530     va_TraceMsg(trace_ctx, "\tneutral_chroma_indication_flag = %d\n", p->vui_fields.bits.neutral_chroma_indication_flag);
1531     va_TraceMsg(trace_ctx, "\tfield_seq_flag = %d\n", p->vui_fields.bits.field_seq_flag);
1532     va_TraceMsg(trace_ctx, "\tvui_timing_info_present_flag = %d\n", p->vui_fields.bits.vui_timing_info_present_flag);
1533     va_TraceMsg(trace_ctx, "\tbitstream_restriction_flag = %d\n", p->vui_fields.bits.bitstream_restriction_flag);
1534     va_TraceMsg(trace_ctx, "\ttiles_fixed_structure_flag = %d\n", p->vui_fields.bits.tiles_fixed_structure_flag);
1535     va_TraceMsg(trace_ctx, "\tmotion_vectors_over_pic_boundaries_flag = %d\n", p->vui_fields.bits.motion_vectors_over_pic_boundaries_flag);
1536     va_TraceMsg(trace_ctx, "\trestricted_ref_pic_lists_flag = %d\n", p->vui_fields.bits.restricted_ref_pic_lists_flag);
1537     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_horizontal = %d\n", p->vui_fields.bits.log2_max_mv_length_horizontal);
1538     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_vertical = %d\n", p->vui_fields.bits.log2_max_mv_length_vertical);
1539     va_TraceMsg(trace_ctx, "\taspect_ratio_idc = %d\n", p->aspect_ratio_idc);
1540     va_TraceMsg(trace_ctx, "\tsar_width = %d\n", p->sar_width);
1541     va_TraceMsg(trace_ctx, "\tsar_height = %d\n", p->sar_height);
1542     va_TraceMsg(trace_ctx, "\tvui_num_units_in_tick = %d\n", p->vui_num_units_in_tick);
1543     va_TraceMsg(trace_ctx, "\tvui_time_scale = %d\n", p->vui_time_scale);
1544     va_TraceMsg(trace_ctx, "\tmin_spatial_segmentation_idc = %d\n", p->min_spatial_segmentation_idc);
1545     va_TraceMsg(trace_ctx, "\tmax_bytes_per_pic_denom = %d\n", p->max_bytes_per_pic_denom);
1546     va_TraceMsg(trace_ctx, "\tmax_bits_per_min_cu_denom = %d\n", p->max_bits_per_min_cu_denom);
1547
1548     return;
1549 }
1550
1551 static void va_TraceVAEncPictureParameterBufferHEVC(
1552     VADisplay dpy,
1553     VAContextID context,
1554     VABufferID buffer,
1555     VABufferType type,
1556     unsigned int size,
1557     unsigned int num_elements,
1558     void *data)
1559 {
1560     int i;
1561     VAEncPictureParameterBufferHEVC *p = (VAEncPictureParameterBufferHEVC *)data;
1562
1563     DPY2TRACECTX(dpy);
1564
1565     if(!p)
1566         return;
1567
1568     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferHEVC\n");
1569
1570     va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.picture_id = %d\n", p->decoded_curr_pic.picture_id);
1571     va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.pic_order_cnt = %d\n", p->decoded_curr_pic.pic_order_cnt);
1572     va_TraceMsg(trace_ctx, "\tdecoded_curr_pic.flags = %d\n", p->decoded_curr_pic.flags);
1573
1574     for(i = 0; i < 15; i ++)
1575     {
1576         va_TraceMsg(trace_ctx, "\treference_frames[%d].picture_id = %d\n", i, p->reference_frames[i].picture_id);
1577         va_TraceMsg(trace_ctx, "\treference_frames[%d].pic_order_cnt = %d\n", i, p->reference_frames[i].pic_order_cnt);
1578         va_TraceMsg(trace_ctx, "\treference_frames[%d].flags = %d\n", i, p->reference_frames[i].flags);
1579     }
1580
1581     va_TraceMsg(trace_ctx, "\tcoded_buf = %d\n", p->coded_buf);
1582     va_TraceMsg(trace_ctx, "\tcollocated_ref_pic_index = %d\n", p->collocated_ref_pic_index);
1583     va_TraceMsg(trace_ctx, "\tlast_picture = %d\n", p->last_picture);
1584     va_TraceMsg(trace_ctx, "\tpic_init_qp = %d\n", p->pic_init_qp);
1585     va_TraceMsg(trace_ctx, "\tdiff_cu_qp_delta_depth = %d\n", p->diff_cu_qp_delta_depth);
1586     va_TraceMsg(trace_ctx, "\tpps_cb_qp_offset = %d\n", p->pps_cb_qp_offset);
1587     va_TraceMsg(trace_ctx, "\tpps_cr_qp_offset = %d\n", p->pps_cr_qp_offset);
1588     va_TraceMsg(trace_ctx, "\tnum_tile_columns_minus1 = %d\n", p->num_tile_columns_minus1);
1589     va_TraceMsg(trace_ctx, "\tnum_tile_rows_minus1 = %d\n", p->num_tile_rows_minus1);
1590
1591     for(i = 0; i < 19; i ++)
1592     {
1593         va_TraceMsg(trace_ctx, "\tcolumn_width_minus1[%d] = %d\n", i, p->column_width_minus1[i]);
1594     }
1595
1596     for(i = 0; i < 21; i ++)
1597     {
1598         va_TraceMsg(trace_ctx, "\trow_height_minus1[%d] = %d\n", i, p->row_height_minus1[i]);
1599     }
1600
1601     va_TraceMsg(trace_ctx, "\tlog2_parallel_merge_level_minus2 = %d\n", p->log2_parallel_merge_level_minus2);
1602     va_TraceMsg(trace_ctx, "\tctu_max_bitsize_allowed = %d\n", p->ctu_max_bitsize_allowed);
1603     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_default_active_minus1 = %d\n", p->num_ref_idx_l0_default_active_minus1);
1604     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_default_active_minus1 = %d\n", p->num_ref_idx_l1_default_active_minus1);
1605     va_TraceMsg(trace_ctx, "\tslice_pic_parameter_set_id = %d\n", p->slice_pic_parameter_set_id);
1606     va_TraceMsg(trace_ctx, "\tnal_unit_type = %d\n", p->nal_unit_type);
1607     va_TraceMsg(trace_ctx, "\tidr_pic_flag = %d\n", p->pic_fields.bits.idr_pic_flag);
1608     va_TraceMsg(trace_ctx, "\tcoding_type = %d\n", p->pic_fields.bits.coding_type);
1609     va_TraceMsg(trace_ctx, "\treference_pic_flag = %d\n", p->pic_fields.bits.reference_pic_flag);
1610     va_TraceMsg(trace_ctx, "\tdependent_slice_segments_enabled_flag = %d\n", p->pic_fields.bits.dependent_slice_segments_enabled_flag);
1611     va_TraceMsg(trace_ctx, "\tsign_data_hiding_enabled_flag = %d\n", p->pic_fields.bits.sign_data_hiding_enabled_flag);
1612     va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag);
1613     va_TraceMsg(trace_ctx, "\ttransform_skip_enabled_flag = %d\n", p->pic_fields.bits.transform_skip_enabled_flag);
1614     va_TraceMsg(trace_ctx, "\tcu_qp_delta_enabled_flag = %d\n", p->pic_fields.bits.cu_qp_delta_enabled_flag);
1615     va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag);
1616     va_TraceMsg(trace_ctx, "\tweighted_bipred_flag = %d\n", p->pic_fields.bits.weighted_bipred_flag);
1617     va_TraceMsg(trace_ctx, "\ttransquant_bypass_enabled_flag = %d\n", p->pic_fields.bits.transquant_bypass_enabled_flag);
1618     va_TraceMsg(trace_ctx, "\ttiles_enabled_flag = %d\n", p->pic_fields.bits.tiles_enabled_flag);
1619     va_TraceMsg(trace_ctx, "\tentropy_coding_sync_enabled_flag = %d\n", p->pic_fields.bits.entropy_coding_sync_enabled_flag);
1620     va_TraceMsg(trace_ctx, "\tloop_filter_across_tiles_enabled_flag = %d\n", p->pic_fields.bits.loop_filter_across_tiles_enabled_flag);
1621     va_TraceMsg(trace_ctx, "\tpps_loop_filter_across_slices_enabled_flag = %d\n", p->pic_fields.bits.pps_loop_filter_across_slices_enabled_flag);
1622     va_TraceMsg(trace_ctx, "\tscaling_list_data_present_flag = %d\n", p->pic_fields.bits.scaling_list_data_present_flag);
1623     va_TraceMsg(trace_ctx, "\tscreen_content_flag = %d\n", p->pic_fields.bits.screen_content_flag);
1624     va_TraceMsg(trace_ctx, "\tenable_gpu_weighted_prediction = %d\n", p->pic_fields.bits.enable_gpu_weighted_prediction);
1625     va_TraceMsg(trace_ctx, "\tno_output_of_prior_pics_flag = %d\n", p->pic_fields.bits.no_output_of_prior_pics_flag);
1626     va_TraceMsg(trace_ctx, "\treserved = %d\n", p->pic_fields.bits.reserved);
1627
1628     return;
1629 }
1630
1631 static void va_TraceVAEncSliceParameterBufferHEVC(
1632     VADisplay dpy,
1633     VAContextID context,
1634     VABufferID buffer,
1635     VABufferType type,
1636     unsigned int size,
1637     unsigned int num_elements,
1638     void *data)
1639 {
1640     int i;
1641     VAEncSliceParameterBufferHEVC *p = (VAEncSliceParameterBufferHEVC *)data;
1642
1643     DPY2TRACECTX(dpy);
1644
1645     if(!p)
1646         return;
1647
1648     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferHEVC\n");
1649
1650     va_TraceMsg(trace_ctx, "\tslice_segment_address = %d\n", p->slice_segment_address);
1651     va_TraceMsg(trace_ctx, "\tnum_ctu_in_slice = %d\n", p->num_ctu_in_slice);
1652     va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type);
1653     va_TraceMsg(trace_ctx, "\tslice_pic_parameter_set_id = %d\n", p->slice_pic_parameter_set_id);
1654     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
1655     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
1656
1657     for(i = 0; i < 15; i ++)
1658     {
1659         va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].picture_id = %d\n", i, p->ref_pic_list0[i].picture_id);
1660         va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].pic_order_cnt = %d\n", i, p->ref_pic_list0[i].pic_order_cnt);
1661         va_TraceMsg(trace_ctx, "\tref_pic_list0[%d].flags = %d\n", i, p->ref_pic_list0[i].flags);
1662         va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].picture_id = %d\n", i, p->ref_pic_list1[i].picture_id);
1663         va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].pic_order_cnt = %d\n", i, p->ref_pic_list1[i].pic_order_cnt);
1664         va_TraceMsg(trace_ctx, "\tref_pic_list1[%d].flags = %d\n", i, p->ref_pic_list1[i].flags);
1665     }
1666
1667     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
1668     va_TraceMsg(trace_ctx, "\tdelta_chroma_log2_weight_denom = %d\n", p->delta_chroma_log2_weight_denom);
1669
1670     for(i = 0; i < 15; i ++)
1671     {
1672         va_TraceMsg(trace_ctx, "\tdelta_luma_weight_l0[%d] = %d\n", i, p->delta_luma_weight_l0[i]);
1673         va_TraceMsg(trace_ctx, "\tdelta_luma_weight_l1[%d] = %d\n", i, p->delta_luma_weight_l1[i]);
1674     }
1675
1676     for(i = 0; i < 15; i ++)
1677     {
1678         va_TraceMsg(trace_ctx, "\tluma_offset_l0[%d] = %d\n", i, p->luma_offset_l0[i]);
1679         va_TraceMsg(trace_ctx, "\tluma_offset_l1[%d] = %d\n", i, p->luma_offset_l1[i]);
1680     }
1681
1682     for(i = 0; i < 15; i ++)
1683     {
1684         va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l0[%d][0] = %d\n", i, p->delta_chroma_weight_l0[i][0]);
1685         va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l0[%d][1] = %d\n", i, p->delta_chroma_weight_l0[i][1]);
1686         va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l1[%d][0] = %d\n", i, p->delta_chroma_weight_l1[i][0]);
1687         va_TraceMsg(trace_ctx, "\tdelta_chroma_weight_l1[%d][1] = %d\n", i, p->delta_chroma_weight_l1[i][1]);
1688     }
1689
1690     for(i = 0; i < 15; i ++)
1691     {
1692         va_TraceMsg(trace_ctx, "\tchroma_offset_l0[%d][0] = %d\n", i, p->chroma_offset_l0[i][0]);
1693         va_TraceMsg(trace_ctx, "\tchroma_offset_l0[%d][1] = %d\n", i, p->chroma_offset_l0[i][1]);
1694         va_TraceMsg(trace_ctx, "\tchroma_offset_l1[%d][0] = %d\n", i, p->chroma_offset_l1[i][0]);
1695         va_TraceMsg(trace_ctx, "\tchroma_offset_l1[%d][1] = %d\n", i, p->chroma_offset_l1[i][1]);
1696     }
1697
1698     va_TraceMsg(trace_ctx, "\tmax_num_merge_cand = %d\n", p->max_num_merge_cand);
1699     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
1700     va_TraceMsg(trace_ctx, "\tslice_cb_qp_offset = %d\n", p->slice_cb_qp_offset);
1701     va_TraceMsg(trace_ctx, "\tslice_cr_qp_offset = %d\n", p->slice_cr_qp_offset);
1702     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
1703     va_TraceMsg(trace_ctx, "\tslice_tc_offset_div2 = %d\n", p->slice_tc_offset_div2);
1704     va_TraceMsg(trace_ctx, "\tlast_slice_of_pic_flag = %d\n", p->slice_fields.bits.last_slice_of_pic_flag);
1705     va_TraceMsg(trace_ctx, "\tdependent_slice_segment_flag = %d\n", p->slice_fields.bits.dependent_slice_segment_flag);
1706     va_TraceMsg(trace_ctx, "\tcolour_plane_id = %d\n", p->slice_fields.bits.colour_plane_id);
1707     va_TraceMsg(trace_ctx, "\tslice_temporal_mvp_enabled_flag = %d\n", p->slice_fields.bits.slice_temporal_mvp_enabled_flag);
1708     va_TraceMsg(trace_ctx, "\tslice_sao_luma_flag = %d\n", p->slice_fields.bits.slice_sao_luma_flag);
1709     va_TraceMsg(trace_ctx, "\tslice_sao_chroma_flag = %d\n", p->slice_fields.bits.slice_sao_chroma_flag);
1710     va_TraceMsg(trace_ctx, "\tnum_ref_idx_active_override_flag = %d\n", p->slice_fields.bits.num_ref_idx_active_override_flag);
1711     va_TraceMsg(trace_ctx, "\tmvd_l1_zero_flag = %d\n", p->slice_fields.bits.mvd_l1_zero_flag);
1712     va_TraceMsg(trace_ctx, "\tcabac_init_flag = %d\n", p->slice_fields.bits.cabac_init_flag);
1713     va_TraceMsg(trace_ctx, "\tslice_deblocking_filter_disabled_flag = %d\n", p->slice_fields.bits.slice_deblocking_filter_disabled_flag);
1714     va_TraceMsg(trace_ctx, "\tslice_loop_filter_across_slices_enabled_flag = %d\n", p->slice_fields.bits.slice_loop_filter_across_slices_enabled_flag);
1715     va_TraceMsg(trace_ctx, "\tcollocated_from_l0_flag = %d\n", p->slice_fields.bits.collocated_from_l0_flag);
1716
1717     return;
1718 }
1719
1720 static void va_TraceVAPictureParameterBufferH264(
1721     VADisplay dpy,
1722     VAContextID context,
1723     VABufferID buffer,
1724     VABufferType type,
1725     unsigned int size,
1726     unsigned int num_elements,
1727     void *data)
1728 {
1729     int i;
1730     VAPictureParameterBufferH264 *p = (VAPictureParameterBufferH264*)data;
1731     
1732     DPY2TRACECTX(dpy);
1733
1734     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferH264\n");
1735
1736     va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
1737     va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %d\n", p->CurrPic.frame_idx);
1738     va_TraceMsg(trace_ctx, "\tCurrPic.flags = %d\n", p->CurrPic.flags);
1739     va_TraceMsg(trace_ctx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrderCnt);
1740     va_TraceMsg(trace_ctx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFieldOrderCnt);
1741
1742     va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags:\n");
1743     for (i = 0; i < 16; i++)
1744     {
1745         if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) &&
1746             ((p->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID) == 0)) {
1747             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08x\n",
1748                         p->ReferenceFrames[i].TopFieldOrderCnt,
1749                         p->ReferenceFrames[i].BottomFieldOrderCnt,
1750                         p->ReferenceFrames[i].picture_id,
1751                         p->ReferenceFrames[i].frame_idx,
1752                         p->ReferenceFrames[i].flags);
1753         } else
1754             break;
1755     }
1756     va_TraceMsg(trace_ctx, "\tpicture_width_in_mbs_minus1 = %d\n", p->picture_width_in_mbs_minus1);
1757     va_TraceMsg(trace_ctx, "\tpicture_height_in_mbs_minus1 = %d\n", p->picture_height_in_mbs_minus1);
1758     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8);
1759     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8);
1760     va_TraceMsg(trace_ctx, "\tnum_ref_frames = %d\n", p->num_ref_frames);
1761     va_TraceMsg(trace_ctx, "\tseq fields = %d\n", p->seq_fields.value);
1762     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc);
1763     va_TraceMsg(trace_ctx, "\tresidual_colour_transform_flag = %d\n", p->seq_fields.bits.residual_colour_transform_flag);
1764     va_TraceMsg(trace_ctx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mbs_only_flag);
1765     va_TraceMsg(trace_ctx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits.mb_adaptive_frame_field_flag);
1766     va_TraceMsg(trace_ctx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.direct_8x8_inference_flag);
1767     va_TraceMsg(trace_ctx, "\tMinLumaBiPredSize8x8 = %d\n", p->seq_fields.bits.MinLumaBiPredSize8x8);
1768     va_TraceMsg(trace_ctx, "\tnum_slice_groups_minus1 = %d\n", p->num_slice_groups_minus1);
1769     va_TraceMsg(trace_ctx, "\tslice_group_map_type = %d\n", p->slice_group_map_type);
1770     va_TraceMsg(trace_ctx, "\tslice_group_change_rate_minus1 = %d\n", p->slice_group_change_rate_minus1);
1771     va_TraceMsg(trace_ctx, "\tpic_init_qp_minus26 = %d\n", p->pic_init_qp_minus26);
1772     va_TraceMsg(trace_ctx, "\tpic_init_qs_minus26 = %d\n", p->pic_init_qs_minus26);
1773     va_TraceMsg(trace_ctx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offset);
1774     va_TraceMsg(trace_ctx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_qp_index_offset);
1775     va_TraceMsg(trace_ctx, "\tpic_fields = 0x%03x\n", p->pic_fields.value);
1776     va_TraceFlagIfNotZero(trace_ctx, "\t\tentropy_coding_mode_flag", p->pic_fields.bits.entropy_coding_mode_flag);
1777     va_TraceFlagIfNotZero(trace_ctx, "\t\tweighted_pred_flag", p->pic_fields.bits.weighted_pred_flag);
1778     va_TraceFlagIfNotZero(trace_ctx, "\t\tweighted_bipred_idc", p->pic_fields.bits.weighted_bipred_idc);
1779     va_TraceFlagIfNotZero(trace_ctx, "\t\ttransform_8x8_mode_flag", p->pic_fields.bits.transform_8x8_mode_flag);
1780     va_TraceFlagIfNotZero(trace_ctx, "\t\tfield_pic_flag", p->pic_fields.bits.field_pic_flag);
1781     va_TraceFlagIfNotZero(trace_ctx, "\t\tconstrained_intra_pred_flag", p->pic_fields.bits.constrained_intra_pred_flag);
1782     va_TraceFlagIfNotZero(trace_ctx, "\t\tpic_order_present_flag", p->pic_fields.bits.pic_order_present_flag);
1783     va_TraceFlagIfNotZero(trace_ctx, "\t\tdeblocking_filter_control_present_flag", p->pic_fields.bits.deblocking_filter_control_present_flag);
1784     va_TraceFlagIfNotZero(trace_ctx, "\t\tredundant_pic_cnt_present_flag", p->pic_fields.bits.redundant_pic_cnt_present_flag);
1785     va_TraceFlagIfNotZero(trace_ctx, "\t\treference_pic_flag", p->pic_fields.bits.reference_pic_flag);
1786     va_TraceMsg(trace_ctx, "\tframe_num = %d\n", p->frame_num);
1787     va_TraceMsg(trace_ctx, NULL);
1788
1789     return;
1790 }
1791
1792 static void va_TraceVASliceParameterBufferH264(
1793     VADisplay dpy,
1794     VAContextID context,
1795     VABufferID buffer,
1796     VABufferType type,
1797     unsigned int size,
1798     unsigned int num_elements,
1799     void *data)
1800 {
1801     int i;
1802     VASliceParameterBufferH264* p = (VASliceParameterBufferH264*)data;
1803     DPY2TRACECTX(dpy);
1804
1805     trace_ctx->trace_slice_no++;
1806     trace_ctx->trace_slice_size = p->slice_data_size;
1807
1808     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferH264\n");
1809     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
1810     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
1811     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
1812     va_TraceMsg(trace_ctx, "\tslice_data_bit_offset = %d\n", p->slice_data_bit_offset);
1813     va_TraceMsg(trace_ctx, "\tfirst_mb_in_slice = %d\n", p->first_mb_in_slice);
1814     va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type);
1815     va_TraceMsg(trace_ctx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_mv_pred_flag);
1816     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
1817     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
1818     va_TraceMsg(trace_ctx, "\tcabac_init_idc = %d\n", p->cabac_init_idc);
1819     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
1820     va_TraceMsg(trace_ctx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_deblocking_filter_idc);
1821     va_TraceMsg(trace_ctx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_offset_div2);
1822     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
1823
1824     va_TraceMsg(trace_ctx, "\tRefPicList0 =\n");
1825     for (i = 0; i < 32; i++) {
1826         if ((p->RefPicList0[i].picture_id != VA_INVALID_SURFACE) &&
1827             ((p->RefPicList0[i].flags & VA_PICTURE_H264_INVALID) == 0))
1828         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);
1829         else
1830             break;
1831     }
1832     va_TraceMsg(trace_ctx, "\tRefPicList1 =\n");
1833     for (i = 0; i < 32; i++) {
1834         if ((p->RefPicList1[i].picture_id != VA_INVALID_SURFACE) &&
1835             ((p->RefPicList1[i].flags & VA_PICTURE_H264_INVALID) == 0))
1836             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);
1837         else
1838             break;
1839     }
1840
1841     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
1842     va_TraceMsg(trace_ctx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_denom);
1843     va_TraceMsg(trace_ctx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag);
1844
1845     for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
1846         va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
1847             p->luma_weight_l0[i],
1848             p->luma_offset_l0[i]);
1849     }
1850
1851
1852     va_TraceMsg(trace_ctx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag);
1853
1854     for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
1855         va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
1856             p->chroma_weight_l0[i][0],
1857             p->chroma_offset_l0[i][0],
1858             p->chroma_weight_l0[i][1],
1859             p->chroma_offset_l0[i][1]);
1860     }
1861
1862
1863     va_TraceMsg(trace_ctx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag);
1864
1865     for (i = 0; (i <=  p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
1866         va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
1867             p->luma_weight_l1[i],
1868             p->luma_offset_l1[i]);
1869     }
1870
1871
1872     va_TraceMsg(trace_ctx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag);
1873
1874     for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
1875         va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
1876             p->chroma_weight_l1[i][0],
1877             p->chroma_offset_l1[i][0],
1878             p->chroma_weight_l1[i][1],
1879             p->chroma_offset_l1[i][1]);
1880
1881     }
1882     va_TraceMsg(trace_ctx, NULL);
1883 }
1884
1885 static void va_TraceVAIQMatrixBufferH264(
1886     VADisplay dpy,
1887     VAContextID context,
1888     VABufferID buffer,
1889     VABufferType type,
1890     unsigned int size,
1891     unsigned int num_elements,
1892     void *data
1893 )
1894 {
1895     int i, j;
1896     VAIQMatrixBufferH264* p = (VAIQMatrixBufferH264* )data;
1897
1898     DPY2TRACECTX(dpy);
1899
1900     va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferH264\n");
1901
1902     va_TraceMsg(trace_ctx, "\tScalingList4x4[6][16]=\n");
1903     for (i = 0; i < 6; i++) {
1904         for (j = 0; j < 16; j++) {
1905             if (trace_ctx->trace_fp_log) {
1906                 fprintf(trace_ctx->trace_fp_log, "\t%d", p->ScalingList4x4[i][j]);
1907                 if ((j + 1) % 8 == 0)
1908                     fprintf(trace_ctx->trace_fp_log, "\n");
1909             }
1910         }
1911     }
1912
1913     va_TraceMsg(trace_ctx, "\tScalingList8x8[2][64]=\n");
1914     for (i = 0; i < 2; i++) {
1915         for (j = 0; j < 64; j++) {
1916             if (trace_ctx->trace_fp_log) {
1917                 fprintf(trace_ctx->trace_fp_log,"\t%d", p->ScalingList8x8[i][j]);
1918                 if ((j + 1) % 8 == 0)
1919                     fprintf(trace_ctx->trace_fp_log, "\n");
1920             }
1921         }
1922     }
1923
1924     va_TraceMsg(trace_ctx, NULL);
1925 }
1926
1927
1928
1929 static void va_TraceVAEncSequenceParameterBufferH264(
1930     VADisplay dpy,
1931     VAContextID context,
1932     VABufferID buffer,
1933     VABufferType type,
1934     unsigned int size,
1935     unsigned int num_elements,
1936     void *data)
1937 {
1938     VAEncSequenceParameterBufferH264 *p = (VAEncSequenceParameterBufferH264 *)data;
1939     DPY2TRACECTX(dpy);
1940     unsigned int i;
1941
1942     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH264\n");
1943
1944     va_TraceMsg(trace_ctx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id);
1945     va_TraceMsg(trace_ctx, "\tlevel_idc = %d\n", p->level_idc);
1946     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
1947     va_TraceMsg(trace_ctx, "\tintra_idr_period = %d\n", p->intra_idr_period);
1948     va_TraceMsg(trace_ctx, "\tip_period = %d\n", p->ip_period);
1949     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
1950     va_TraceMsg(trace_ctx, "\tmax_num_ref_frames = %d\n", p->max_num_ref_frames);
1951     va_TraceMsg(trace_ctx, "\tpicture_width_in_mbs = %d\n", p->picture_width_in_mbs);
1952     va_TraceMsg(trace_ctx, "\tpicture_height_in_mbs = %d\n", p->picture_height_in_mbs);
1953     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc);
1954     va_TraceMsg(trace_ctx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mbs_only_flag);
1955     va_TraceMsg(trace_ctx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits.mb_adaptive_frame_field_flag);
1956     va_TraceMsg(trace_ctx, "\tseq_scaling_matrix_present_flag = %d\n", p->seq_fields.bits.seq_scaling_matrix_present_flag);
1957     va_TraceMsg(trace_ctx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.direct_8x8_inference_flag);
1958     va_TraceMsg(trace_ctx, "\tlog2_max_frame_num_minus4 = %d\n", p->seq_fields.bits.log2_max_frame_num_minus4);
1959     va_TraceMsg(trace_ctx, "\tpic_order_cnt_type = %d\n", p->seq_fields.bits.pic_order_cnt_type);
1960     va_TraceMsg(trace_ctx, "\tlog2_max_pic_order_cnt_lsb_minus4 = %d\n", p->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4);
1961     va_TraceMsg(trace_ctx, "\tdelta_pic_order_always_zero_flag = %d\n", p->seq_fields.bits.delta_pic_order_always_zero_flag);
1962     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8);
1963     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8);
1964     va_TraceMsg(trace_ctx, "\tnum_ref_frames_in_pic_order_cnt_cycle = %d\n", p->num_ref_frames_in_pic_order_cnt_cycle);
1965     va_TraceMsg(trace_ctx, "\toffset_for_non_ref_pic = %d\n", p->offset_for_non_ref_pic);
1966     va_TraceMsg(trace_ctx, "\toffset_for_top_to_bottom_field = %d\n", p->offset_for_top_to_bottom_field);
1967     for(i = 0; (i < p->max_num_ref_frames) && (i < 32); ++i)
1968         va_TraceMsg(trace_ctx, "\toffset_for_ref_frame[%d] = %d\n", i, p->offset_for_ref_frame[i]);
1969     va_TraceMsg(trace_ctx, "\tframe_cropping_flag = %d\n", p->frame_cropping_flag);
1970     va_TraceMsg(trace_ctx, "\tframe_crop_left_offset = %d\n", p->frame_crop_left_offset);
1971     va_TraceMsg(trace_ctx, "\tframe_crop_right_offset = %d\n", p->frame_crop_right_offset);
1972     va_TraceMsg(trace_ctx, "\tframe_crop_top_offset = %d\n", p->frame_crop_top_offset);
1973     va_TraceMsg(trace_ctx, "\tframe_crop_bottom_offset = %d\n", p->frame_crop_bottom_offset);
1974     va_TraceMsg(trace_ctx, "\tvui_parameters_present_flag = %d\n", p->vui_parameters_present_flag);
1975     va_TraceMsg(trace_ctx, "\taspect_ratio_info_present_flag = %d\n", p->vui_fields.bits.aspect_ratio_info_present_flag);
1976     va_TraceMsg(trace_ctx, "\ttiming_info_present_flag = %d\n", p->vui_fields.bits.timing_info_present_flag);
1977     va_TraceMsg(trace_ctx, "\tbitstream_restriction_flag = %d\n", p->vui_fields.bits.bitstream_restriction_flag);
1978     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_horizontal = %d\n", p->vui_fields.bits.log2_max_mv_length_horizontal);
1979     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_vertical = %d\n", p->vui_fields.bits.log2_max_mv_length_vertical);
1980     va_TraceMsg(trace_ctx, "\taspect_ratio_idc = %d\n", p->aspect_ratio_idc);
1981     va_TraceMsg(trace_ctx, "\tsar_width = %d\n", p->sar_width);
1982     va_TraceMsg(trace_ctx, "\tsar_height = %d\n", p->sar_height);
1983     va_TraceMsg(trace_ctx, "\tnum_units_in_tick = %d\n", p->num_units_in_tick);
1984     va_TraceMsg(trace_ctx, "\ttime_scale = %d\n", p->time_scale);
1985
1986     va_TraceMsg(trace_ctx, NULL);
1987
1988     return;
1989 }
1990
1991
1992 static void va_TraceVAEncPictureParameterBufferH264(
1993     VADisplay dpy,
1994     VAContextID context,
1995     VABufferID buffer,
1996     VABufferType type,
1997     unsigned int size,
1998     unsigned int num_elements,
1999     void *data)
2000 {
2001     VAEncPictureParameterBufferH264 *p = (VAEncPictureParameterBufferH264 *)data;
2002     DPY2TRACECTX(dpy);
2003     int i;
2004
2005     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH264\n");
2006
2007     va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
2008     va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %d\n", p->CurrPic.frame_idx);
2009     va_TraceMsg(trace_ctx, "\tCurrPic.flags = %d\n", p->CurrPic.flags);
2010     va_TraceMsg(trace_ctx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrderCnt);
2011     va_TraceMsg(trace_ctx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFieldOrderCnt);
2012     va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
2013     for (i = 0; i < 16; i++)
2014     {
2015         if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) &&
2016             ((p->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID) == 0)) {
2017             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08x\n",
2018                         p->ReferenceFrames[i].TopFieldOrderCnt,
2019                         p->ReferenceFrames[i].BottomFieldOrderCnt,
2020                         p->ReferenceFrames[i].picture_id,
2021                         p->ReferenceFrames[i].frame_idx,
2022                         p->ReferenceFrames[i].flags
2023                         );
2024         } else
2025             break;
2026     }
2027     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2028     va_TraceMsg(trace_ctx, "\tpic_parameter_set_id = %d\n", p->pic_parameter_set_id);
2029     va_TraceMsg(trace_ctx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id);
2030     va_TraceMsg(trace_ctx, "\tlast_picture = 0x%08x\n", p->last_picture);
2031     va_TraceMsg(trace_ctx, "\tframe_num = %d\n", p->frame_num);
2032     va_TraceMsg(trace_ctx, "\tpic_init_qp = %d\n", p->pic_init_qp);
2033     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
2034     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
2035     va_TraceMsg(trace_ctx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offset);
2036     va_TraceMsg(trace_ctx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_qp_index_offset);
2037     va_TraceMsg(trace_ctx, "\tpic_fields = 0x%03x\n", p->pic_fields.value);
2038     va_TraceMsg(trace_ctx, "\tidr_pic_flag = %d\n", p->pic_fields.bits.idr_pic_flag);
2039     va_TraceMsg(trace_ctx, "\treference_pic_flag = %d\n", p->pic_fields.bits.reference_pic_flag);
2040     va_TraceMsg(trace_ctx, "\tentropy_coding_mode_flag = %d\n", p->pic_fields.bits.entropy_coding_mode_flag);
2041     va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag);
2042     va_TraceMsg(trace_ctx, "\tweighted_bipred_idc = %d\n", p->pic_fields.bits.weighted_bipred_idc);
2043     va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag);
2044     va_TraceMsg(trace_ctx, "\ttransform_8x8_mode_flag = %d\n", p->pic_fields.bits.transform_8x8_mode_flag);
2045     va_TraceMsg(trace_ctx, "\tdeblocking_filter_control_present_flag = %d\n", p->pic_fields.bits.deblocking_filter_control_present_flag);
2046     va_TraceMsg(trace_ctx, "\tredundant_pic_cnt_present_flag = %d\n", p->pic_fields.bits.redundant_pic_cnt_present_flag);
2047     va_TraceMsg(trace_ctx, "\tpic_order_present_flag = %d\n", p->pic_fields.bits.pic_order_present_flag);
2048     va_TraceMsg(trace_ctx, "\tpic_scaling_matrix_present_flag = %d\n", p->pic_fields.bits.pic_scaling_matrix_present_flag);
2049
2050     va_TraceMsg(trace_ctx, NULL);
2051
2052     return;
2053 }
2054
2055 static void va_TraceVAEncSliceParameterBuffer(
2056     VADisplay dpy,
2057     VAContextID context,
2058     VABufferID buffer,
2059     VABufferType type,
2060     unsigned int size,
2061     unsigned int num_elements,
2062     void *data)
2063 {
2064     VAEncSliceParameterBuffer* p = (VAEncSliceParameterBuffer*)data;
2065     DPY2TRACECTX(dpy);
2066     
2067     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBuffer\n");
2068     
2069     va_TraceMsg(trace_ctx, "\tstart_row_number = %d\n", p->start_row_number);
2070     va_TraceMsg(trace_ctx, "\tslice_height = %d\n", p->slice_height);
2071     va_TraceMsg(trace_ctx, "\tslice_flags.is_intra = %d\n", p->slice_flags.bits.is_intra);
2072     va_TraceMsg(trace_ctx, "\tslice_flags.disable_deblocking_filter_idc = %d\n", p->slice_flags.bits.disable_deblocking_filter_idc);
2073     va_TraceMsg(trace_ctx, "\tslice_flags.uses_long_term_ref = %d\n", p->slice_flags.bits.uses_long_term_ref);
2074     va_TraceMsg(trace_ctx, "\tslice_flags.is_long_term_ref = %d\n", p->slice_flags.bits.is_long_term_ref);
2075     va_TraceMsg(trace_ctx, NULL);
2076
2077     return;
2078 }
2079
2080 static void va_TraceVAEncSliceParameterBufferH264(
2081     VADisplay dpy,
2082     VAContextID context,
2083     VABufferID buffer,
2084     VABufferType type,
2085     unsigned int size,
2086     unsigned int num_elements,
2087     void *data)
2088 {
2089     VAEncSliceParameterBufferH264* p = (VAEncSliceParameterBufferH264*)data;
2090     DPY2TRACECTX(dpy);
2091     int i;
2092
2093     if (!p)
2094         return;
2095     
2096     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferH264\n");
2097     va_TraceMsg(trace_ctx, "\tmacroblock_address = %d\n", p->macroblock_address);
2098     va_TraceMsg(trace_ctx, "\tnum_macroblocks = %d\n", p->num_macroblocks);
2099     va_TraceMsg(trace_ctx, "\tmacroblock_info = %08x\n", p->macroblock_info);
2100     va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type);
2101     va_TraceMsg(trace_ctx, "\tpic_parameter_set_id = %d\n", p->pic_parameter_set_id);
2102     va_TraceMsg(trace_ctx, "\tidr_pic_id = %d\n", p->idr_pic_id);
2103     va_TraceMsg(trace_ctx, "\tpic_order_cnt_lsb = %d\n", p->pic_order_cnt_lsb);
2104     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt_bottom = %d\n", p->delta_pic_order_cnt_bottom);
2105     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt[0] = %d\n", p->delta_pic_order_cnt[0]);
2106     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt[1] = %d\n", p->delta_pic_order_cnt[1]);
2107     va_TraceMsg(trace_ctx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_mv_pred_flag);
2108     va_TraceMsg(trace_ctx, "\tnum_ref_idx_active_override_flag = %d\n", p->num_ref_idx_active_override_flag);
2109     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
2110     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
2111
2112     va_TraceMsg(trace_ctx, "\tRefPicList0 (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
2113
2114     
2115     
2116     for (i = 0; i < 32; i++) {
2117         if ((p->RefPicList0[i].picture_id != VA_INVALID_SURFACE) &&
2118             ((p->RefPicList0[i].flags & VA_PICTURE_H264_INVALID) == 0))
2119             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08x\n",
2120                         p->RefPicList0[i].TopFieldOrderCnt,
2121                         p->RefPicList0[i].BottomFieldOrderCnt,
2122                         p->RefPicList0[i].picture_id,
2123                         p->RefPicList0[i].frame_idx,
2124                         p->RefPicList0[i].flags);
2125         else
2126             break;
2127     }
2128     
2129     va_TraceMsg(trace_ctx, "\tRefPicList1 (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
2130     for (i = 0; i < 32; i++) {
2131         if ((p->RefPicList1[i].picture_id != VA_INVALID_SURFACE) &&
2132             ((p->RefPicList1[i].flags & VA_PICTURE_H264_INVALID) == 0))
2133             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08d\n",
2134                         p->RefPicList1[i].TopFieldOrderCnt,
2135                         p->RefPicList1[i].BottomFieldOrderCnt,
2136                         p->RefPicList1[i].picture_id,
2137                         p->RefPicList1[i].frame_idx,
2138                         p->RefPicList1[i].flags
2139                         );
2140         else
2141             break;
2142     }
2143     
2144     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
2145     va_TraceMsg(trace_ctx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_denom);
2146     va_TraceMsg(trace_ctx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag);
2147     if (p->luma_weight_l0_flag) {
2148         for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
2149             va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
2150                         p->luma_weight_l0[i],
2151                         p->luma_offset_l0[i]);
2152         }
2153     }
2154
2155     va_TraceMsg(trace_ctx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag);
2156     if (p->chroma_weight_l0_flag) {
2157         for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
2158             va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
2159                         p->chroma_weight_l0[i][0],
2160                         p->chroma_offset_l0[i][0],
2161                         p->chroma_weight_l0[i][1],
2162                         p->chroma_offset_l0[i][1]);
2163         }
2164     }
2165
2166     va_TraceMsg(trace_ctx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag);
2167     if (p->luma_weight_l1_flag) {
2168         for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
2169             va_TraceMsg(trace_ctx, "\t\t%d\t\t%d\n",
2170                         p->luma_weight_l1[i],
2171                         p->luma_offset_l1[i]);
2172         }
2173     }
2174
2175     va_TraceMsg(trace_ctx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag);
2176     if (p->chroma_weight_l1_flag && p->num_ref_idx_l1_active_minus1 < 32) {
2177         for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
2178             va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
2179                         p->chroma_weight_l1[i][0],
2180                         p->chroma_offset_l1[i][0],
2181                         p->chroma_weight_l1[i][1],
2182                         p->chroma_offset_l1[i][1]);
2183         }
2184     }
2185     va_TraceMsg(trace_ctx, NULL);
2186
2187     va_TraceMsg(trace_ctx, "\tcabac_init_idc = %d\n", p->cabac_init_idc);
2188     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
2189     va_TraceMsg(trace_ctx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_deblocking_filter_idc);
2190     va_TraceMsg(trace_ctx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_offset_div2);
2191     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
2192     va_TraceMsg(trace_ctx, NULL);
2193
2194     return;
2195 }
2196
2197
2198 static void va_TraceVAEncPackedHeaderParameterBufferType(
2199     VADisplay dpy,
2200     VAContextID context,
2201     VABufferID buffer,
2202     VABufferType type,
2203     unsigned int size,
2204     unsigned int num_elements,
2205     void *data)
2206 {
2207     VAEncPackedHeaderParameterBuffer* p = (VAEncPackedHeaderParameterBuffer*)data;
2208     DPY2TRACECTX(dpy);
2209     int i;
2210
2211     if (!p)
2212         return;
2213     va_TraceMsg(trace_ctx, "\t--VAEncPackedHeaderParameterBuffer\n");
2214     va_TraceMsg(trace_ctx, "\ttype = 0x%08x\n", p->type);
2215     va_TraceMsg(trace_ctx, "\tbit_length = %d\n", p->bit_length);
2216     va_TraceMsg(trace_ctx, "\thas_emulation_bytes = %d\n", p->has_emulation_bytes);
2217     va_TraceMsg(trace_ctx, NULL);
2218
2219     return;
2220 }
2221
2222 static void va_TraceVAEncMiscParameterBuffer(
2223     VADisplay dpy,
2224     VAContextID context,
2225     VABufferID buffer,
2226     VABufferType type,
2227     unsigned int size,
2228     unsigned int num_elements,
2229     void *data)
2230 {
2231     VAEncMiscParameterBuffer* tmp = (VAEncMiscParameterBuffer*)data;
2232     DPY2TRACECTX(dpy);
2233     
2234     switch (tmp->type) {
2235     case VAEncMiscParameterTypeFrameRate:
2236     {
2237         VAEncMiscParameterFrameRate *p = (VAEncMiscParameterFrameRate *)tmp->data;
2238         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterFrameRate\n");
2239         va_TraceMsg(trace_ctx, "\tframerate = %d\n", p->framerate);
2240         
2241         break;
2242     }
2243     case VAEncMiscParameterTypeRateControl:
2244     {
2245         VAEncMiscParameterRateControl *p = (VAEncMiscParameterRateControl *)tmp->data;
2246
2247         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterRateControl\n");
2248         va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2249         va_TraceMsg(trace_ctx, "\ttarget_percentage = %d\n", p->target_percentage);
2250         va_TraceMsg(trace_ctx, "\twindow_size = %d\n", p->window_size);
2251         va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
2252         va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
2253         va_TraceMsg(trace_ctx, "\tbasic_unit_size = %d\n", p->basic_unit_size);
2254         va_TraceMsg(trace_ctx, "\trc_flags.reset = %d \n", p->rc_flags.bits.reset);
2255         va_TraceMsg(trace_ctx, "\trc_flags.disable_frame_skip = %d\n", p->rc_flags.bits.disable_frame_skip);
2256         va_TraceMsg(trace_ctx, "\trc_flags.disable_bit_stuffing = %d\n", p->rc_flags.bits.disable_bit_stuffing);
2257         break;
2258     }
2259     case VAEncMiscParameterTypeMaxSliceSize:
2260     {
2261         VAEncMiscParameterMaxSliceSize *p = (VAEncMiscParameterMaxSliceSize *)tmp->data;
2262         
2263         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxSliceSize\n");
2264         va_TraceMsg(trace_ctx, "\tmax_slice_size = %d\n", p->max_slice_size);
2265         break;
2266     }
2267     case VAEncMiscParameterTypeAIR:
2268     {
2269         VAEncMiscParameterAIR *p = (VAEncMiscParameterAIR *)tmp->data;
2270         
2271         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterAIR\n");
2272         va_TraceMsg(trace_ctx, "\tair_num_mbs = %d\n", p->air_num_mbs);
2273         va_TraceMsg(trace_ctx, "\tair_threshold = %d\n", p->air_threshold);
2274         va_TraceMsg(trace_ctx, "\tair_auto = %d\n", p->air_auto);
2275         break;
2276     }
2277     case VAEncMiscParameterTypeHRD:
2278     {
2279         VAEncMiscParameterHRD *p = (VAEncMiscParameterHRD *)tmp->data;
2280
2281         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterHRD\n");
2282         va_TraceMsg(trace_ctx, "\tinitial_buffer_fullness = %d\n", p->initial_buffer_fullness);
2283         va_TraceMsg(trace_ctx, "\tbuffer_size = %d\n", p->buffer_size);
2284         break;
2285     }
2286     case VAEncMiscParameterTypeMaxFrameSize:
2287     {
2288         VAEncMiscParameterBufferMaxFrameSize *p = (VAEncMiscParameterBufferMaxFrameSize *)tmp->data;
2289
2290         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxFrameSize\n");
2291         va_TraceMsg(trace_ctx, "\tmax_frame_size = %d\n", p->max_frame_size);
2292         break;
2293     }
2294     default:
2295         va_TraceMsg(trace_ctx, "Unknown VAEncMiscParameterBuffer(type = %d):\n", tmp->type);
2296         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, data);
2297         break;
2298     }
2299     va_TraceMsg(trace_ctx, NULL);
2300
2301     return;
2302 }
2303
2304
2305 static void va_TraceVAPictureParameterBufferVC1(
2306     VADisplay dpy,
2307     VAContextID context,
2308     VABufferID buffer,
2309     VABufferType type,
2310     unsigned int size,
2311     unsigned int num_elements,
2312     void *data
2313 )
2314 {
2315     VAPictureParameterBufferVC1* p = (VAPictureParameterBufferVC1*)data;
2316     DPY2TRACECTX(dpy);
2317     
2318     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVC1\n");
2319     
2320     va_TraceMsg(trace_ctx, "\tforward_reference_picture = 0x%08x\n", p->forward_reference_picture);
2321     va_TraceMsg(trace_ctx, "\tbackward_reference_picture = 0x%08x\n", p->backward_reference_picture);
2322     va_TraceMsg(trace_ctx, "\tinloop_decoded_picture = 0x%08x\n", p->inloop_decoded_picture);
2323     
2324     va_TraceMsg(trace_ctx, "\tpulldown = %d\n", p->sequence_fields.bits.pulldown);
2325     va_TraceMsg(trace_ctx, "\tinterlace = %d\n", p->sequence_fields.bits.interlace);
2326     va_TraceMsg(trace_ctx, "\ttfcntrflag = %d\n", p->sequence_fields.bits.tfcntrflag);
2327     va_TraceMsg(trace_ctx, "\tfinterpflag = %d\n", p->sequence_fields.bits.finterpflag);
2328     va_TraceMsg(trace_ctx, "\tpsf = %d\n", p->sequence_fields.bits.psf);
2329     va_TraceMsg(trace_ctx, "\tmultires = %d\n", p->sequence_fields.bits.multires);
2330     va_TraceMsg(trace_ctx, "\toverlap = %d\n", p->sequence_fields.bits.overlap);
2331     va_TraceMsg(trace_ctx, "\tsyncmarker = %d\n", p->sequence_fields.bits.syncmarker);
2332     va_TraceMsg(trace_ctx, "\trangered = %d\n", p->sequence_fields.bits.rangered);
2333     va_TraceMsg(trace_ctx, "\tmax_b_frames = %d\n", p->sequence_fields.bits.max_b_frames);
2334     va_TraceMsg(trace_ctx, "\tprofile = %d\n", p->sequence_fields.bits.profile);
2335     va_TraceMsg(trace_ctx, "\tcoded_width = %d\n", p->coded_width);
2336     va_TraceMsg(trace_ctx, "\tcoded_height = %d\n", p->coded_height);
2337     va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry);
2338     va_TraceMsg(trace_ctx, "\tbroken_link = %d\n", p->entrypoint_fields.bits.broken_link);
2339     va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry);
2340     va_TraceMsg(trace_ctx, "\tpanscan_flag = %d\n", p->entrypoint_fields.bits.panscan_flag);
2341     va_TraceMsg(trace_ctx, "\tloopfilter = %d\n", p->entrypoint_fields.bits.loopfilter);
2342     va_TraceMsg(trace_ctx, "\tconditional_overlap_flag = %d\n", p->conditional_overlap_flag);
2343     va_TraceMsg(trace_ctx, "\tfast_uvmc_flag = %d\n", p->fast_uvmc_flag);
2344     va_TraceMsg(trace_ctx, "\trange_mapping_luma_flag = %d\n", p->range_mapping_fields.bits.luma_flag);
2345     va_TraceMsg(trace_ctx, "\trange_mapping_luma = %d\n", p->range_mapping_fields.bits.luma);
2346     va_TraceMsg(trace_ctx, "\trange_mapping_chroma_flag = %d\n", p->range_mapping_fields.bits.chroma_flag);
2347     va_TraceMsg(trace_ctx, "\trange_mapping_chroma = %d\n", p->range_mapping_fields.bits.chroma);
2348     va_TraceMsg(trace_ctx, "\tb_picture_fraction = %d\n", p->b_picture_fraction);
2349     va_TraceMsg(trace_ctx, "\tcbp_table = %d\n", p->cbp_table);
2350     va_TraceMsg(trace_ctx, "\tmb_mode_table = %d\n", p->mb_mode_table);
2351     va_TraceMsg(trace_ctx, "\trange_reduction_frame = %d\n", p->range_reduction_frame);
2352     va_TraceMsg(trace_ctx, "\trounding_control = %d\n", p->rounding_control);
2353     va_TraceMsg(trace_ctx, "\tpost_processing = %d\n", p->post_processing);
2354     va_TraceMsg(trace_ctx, "\tpicture_resolution_index = %d\n", p->picture_resolution_index);
2355     va_TraceMsg(trace_ctx, "\tluma_scale = %d\n", p->luma_scale);
2356     va_TraceMsg(trace_ctx, "\tluma_shift = %d\n", p->luma_shift);
2357     va_TraceMsg(trace_ctx, "\tpicture_type = %d\n", p->picture_fields.bits.picture_type);
2358     va_TraceMsg(trace_ctx, "\tframe_coding_mode = %d\n", p->picture_fields.bits.frame_coding_mode);
2359     va_TraceMsg(trace_ctx, "\ttop_field_first = %d\n", p->picture_fields.bits.top_field_first);
2360     va_TraceMsg(trace_ctx, "\tis_first_field = %d\n", p->picture_fields.bits.is_first_field);
2361     va_TraceMsg(trace_ctx, "\tintensity_compensation = %d\n", p->picture_fields.bits.intensity_compensation);
2362     va_TraceMsg(trace_ctx, "\tmv_type_mb = %d\n", p->raw_coding.flags.mv_type_mb);
2363     va_TraceMsg(trace_ctx, "\tdirect_mb = %d\n", p->raw_coding.flags.direct_mb);
2364     va_TraceMsg(trace_ctx, "\tskip_mb = %d\n", p->raw_coding.flags.skip_mb);
2365     va_TraceMsg(trace_ctx, "\tfield_tx = %d\n", p->raw_coding.flags.field_tx);
2366     va_TraceMsg(trace_ctx, "\tforward_mb = %d\n", p->raw_coding.flags.forward_mb);
2367     va_TraceMsg(trace_ctx, "\tac_pred = %d\n", p->raw_coding.flags.ac_pred);
2368     va_TraceMsg(trace_ctx, "\toverflags = %d\n", p->raw_coding.flags.overflags);
2369     va_TraceMsg(trace_ctx, "\tbp_mv_type_mb = %d\n", p->bitplane_present.flags.bp_mv_type_mb);
2370     va_TraceMsg(trace_ctx, "\tbp_direct_mb = %d\n", p->bitplane_present.flags.bp_direct_mb);
2371     va_TraceMsg(trace_ctx, "\tbp_skip_mb = %d\n", p->bitplane_present.flags.bp_skip_mb);
2372     va_TraceMsg(trace_ctx, "\tbp_field_tx = %d\n", p->bitplane_present.flags.bp_field_tx);
2373     va_TraceMsg(trace_ctx, "\tbp_forward_mb = %d\n", p->bitplane_present.flags.bp_forward_mb);
2374     va_TraceMsg(trace_ctx, "\tbp_ac_pred = %d\n", p->bitplane_present.flags.bp_ac_pred);
2375     va_TraceMsg(trace_ctx, "\tbp_overflags = %d\n", p->bitplane_present.flags.bp_overflags);
2376     va_TraceMsg(trace_ctx, "\treference_distance_flag = %d\n", p->reference_fields.bits.reference_distance_flag);
2377     va_TraceMsg(trace_ctx, "\treference_distance = %d\n", p->reference_fields.bits.reference_distance);
2378     va_TraceMsg(trace_ctx, "\tnum_reference_pictures = %d\n", p->reference_fields.bits.num_reference_pictures);
2379     va_TraceMsg(trace_ctx, "\treference_field_pic_indicator = %d\n", p->reference_fields.bits.reference_field_pic_indicator);
2380     va_TraceMsg(trace_ctx, "\tmv_mode = %d\n", p->mv_fields.bits.mv_mode);
2381     va_TraceMsg(trace_ctx, "\tmv_mode2 = %d\n", p->mv_fields.bits.mv_mode2);
2382     va_TraceMsg(trace_ctx, "\tmv_table = %d\n", p->mv_fields.bits.mv_table);
2383     va_TraceMsg(trace_ctx, "\ttwo_mv_block_pattern_table = %d\n", p->mv_fields.bits.two_mv_block_pattern_table);
2384     va_TraceMsg(trace_ctx, "\tfour_mv_switch = %d\n", p->mv_fields.bits.four_mv_switch);
2385     va_TraceMsg(trace_ctx, "\tfour_mv_block_pattern_table = %d\n", p->mv_fields.bits.four_mv_block_pattern_table);
2386     va_TraceMsg(trace_ctx, "\textended_mv_flag = %d\n", p->mv_fields.bits.extended_mv_flag);
2387     va_TraceMsg(trace_ctx, "\textended_mv_range = %d\n", p->mv_fields.bits.extended_mv_range);
2388     va_TraceMsg(trace_ctx, "\textended_dmv_flag = %d\n", p->mv_fields.bits.extended_dmv_flag);
2389     va_TraceMsg(trace_ctx, "\textended_dmv_range = %d\n", p->mv_fields.bits.extended_dmv_range);
2390     va_TraceMsg(trace_ctx, "\tdquant = %d\n", p->pic_quantizer_fields.bits.dquant);
2391     va_TraceMsg(trace_ctx, "\tquantizer = %d\n", p->pic_quantizer_fields.bits.quantizer);
2392     va_TraceMsg(trace_ctx, "\thalf_qp = %d\n", p->pic_quantizer_fields.bits.half_qp);
2393     va_TraceMsg(trace_ctx, "\tpic_quantizer_scale = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_scale);
2394     va_TraceMsg(trace_ctx, "\tpic_quantizer_type = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_type);
2395     va_TraceMsg(trace_ctx, "\tdq_frame = %d\n", p->pic_quantizer_fields.bits.dq_frame);
2396     va_TraceMsg(trace_ctx, "\tdq_profile = %d\n", p->pic_quantizer_fields.bits.dq_profile);
2397     va_TraceMsg(trace_ctx, "\tdq_sb_edge = %d\n", p->pic_quantizer_fields.bits.dq_sb_edge);
2398     va_TraceMsg(trace_ctx, "\tdq_db_edge = %d\n", p->pic_quantizer_fields.bits.dq_db_edge);
2399     va_TraceMsg(trace_ctx, "\tdq_binary_level = %d\n", p->pic_quantizer_fields.bits.dq_binary_level);
2400     va_TraceMsg(trace_ctx, "\talt_pic_quantizer = %d\n", p->pic_quantizer_fields.bits.alt_pic_quantizer);
2401     va_TraceMsg(trace_ctx, "\tvariable_sized_transform_flag = %d\n", p->transform_fields.bits.variable_sized_transform_flag);
2402     va_TraceMsg(trace_ctx, "\tmb_level_transform_type_flag = %d\n", p->transform_fields.bits.mb_level_transform_type_flag);
2403     va_TraceMsg(trace_ctx, "\tframe_level_transform_type = %d\n", p->transform_fields.bits.frame_level_transform_type);
2404     va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx1 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx1);
2405     va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx2 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx2);
2406     va_TraceMsg(trace_ctx, "\tintra_transform_dc_table = %d\n", p->transform_fields.bits.intra_transform_dc_table);
2407     va_TraceMsg(trace_ctx, NULL);
2408 }
2409
2410 static void va_TraceVASliceParameterBufferVC1(
2411     VADisplay dpy,
2412     VAContextID context,
2413     VABufferID buffer,
2414     VABufferType type,
2415     unsigned int size,
2416     unsigned int num_elements,
2417     void* data
2418 )
2419 {
2420     VASliceParameterBufferVC1 *p = (VASliceParameterBufferVC1*)data;
2421     DPY2TRACECTX(dpy);
2422
2423     trace_ctx->trace_slice_no++;
2424     trace_ctx->trace_slice_size = p->slice_data_size;
2425
2426     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVC1\n");
2427     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
2428     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
2429     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
2430     va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
2431     va_TraceMsg(trace_ctx, "\tslice_vertical_position = %d\n", p->slice_vertical_position);
2432     va_TraceMsg(trace_ctx, NULL);
2433 }
2434
2435 static void va_TraceVAPictureParameterBufferVP8(
2436     VADisplay dpy,
2437     VAContextID context,
2438     VABufferID buffer,
2439     VABufferType type,
2440     unsigned int size,
2441     unsigned int num_elements,
2442     void *data)
2443 {
2444     char tmp[1024];
2445     VAPictureParameterBufferVP8 *p = (VAPictureParameterBufferVP8 *)data;
2446     DPY2TRACECTX(dpy);
2447     int i,j;
2448
2449     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVP8\n");
2450
2451     va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
2452     va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
2453     va_TraceMsg(trace_ctx, "\tlast_ref_frame = %x\n", p->last_ref_frame);
2454     va_TraceMsg(trace_ctx, "\tgolden_ref_frame = %x\n", p->golden_ref_frame);
2455     va_TraceMsg(trace_ctx, "\talt_ref_frame = %x\n", p->alt_ref_frame);
2456     va_TraceMsg(trace_ctx, "\tout_of_loop_frame = %x\n", p->out_of_loop_frame);
2457
2458     va_TraceMsg(trace_ctx, "\tkey_frame = %d\n", p->pic_fields.bits.key_frame);
2459     va_TraceMsg(trace_ctx, "\tversion = %d\n", p->pic_fields.bits.version);
2460     va_TraceMsg(trace_ctx, "\tsegmentation_enabled = %d\n", p->pic_fields.bits.segmentation_enabled);
2461     va_TraceMsg(trace_ctx, "\tupdate_mb_segmentation_map = %d\n", p->pic_fields.bits.update_mb_segmentation_map);
2462     va_TraceMsg(trace_ctx, "\tupdate_segment_feature_data = %d\n", p->pic_fields.bits.update_segment_feature_data);
2463     va_TraceMsg(trace_ctx, "\tfilter_type = %d\n", p->pic_fields.bits.filter_type);
2464     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->pic_fields.bits.sharpness_level);
2465     va_TraceMsg(trace_ctx, "\tloop_filter_adj_enable = %d\n", p->pic_fields.bits.loop_filter_adj_enable);
2466     va_TraceMsg(trace_ctx, "\tmode_ref_lf_delta_update = %d\n", p->pic_fields.bits.mode_ref_lf_delta_update);
2467     va_TraceMsg(trace_ctx, "\tsign_bias_golden = %d\n", p->pic_fields.bits.sign_bias_golden);
2468     va_TraceMsg(trace_ctx, "\tsign_bias_alternate = %d\n", p->pic_fields.bits.sign_bias_alternate);
2469     va_TraceMsg(trace_ctx, "\tmb_no_coeff_skip = %d\n", p->pic_fields.bits.mb_no_coeff_skip);
2470     va_TraceMsg(trace_ctx, "\tloop_filter_disable = %d\n", p->pic_fields.bits.loop_filter_disable);
2471
2472     va_TraceMsg(trace_ctx, "\tmb_segment_tree_probs: 0x%2x, 0x%2x, 0x%2x\n",
2473         p->mb_segment_tree_probs[0], p->mb_segment_tree_probs[1], p->mb_segment_tree_probs[2]);
2474
2475     va_TraceMsg(trace_ctx, "\tloop_filter_level: %d, %d, %d, %d\n",
2476         p->loop_filter_level[0], p->loop_filter_level[1], p->loop_filter_level[2], p->loop_filter_level[3]);
2477
2478     va_TraceMsg(trace_ctx, "\tloop_filter_deltas_ref_frame: %d, %d, %d, %d\n",
2479         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]);
2480
2481     va_TraceMsg(trace_ctx, "\tloop_filter_deltas_mode: %d, %d, %d, %d\n",
2482         p->loop_filter_deltas_mode[0], p->loop_filter_deltas_mode[1], p->loop_filter_deltas_mode[2], p->loop_filter_deltas_mode[3]);
2483
2484     va_TraceMsg(trace_ctx, "\tprob_skip_false = %2x\n", p->prob_skip_false);
2485     va_TraceMsg(trace_ctx, "\tprob_intra = %2x\n", p->prob_intra);
2486     va_TraceMsg(trace_ctx, "\tprob_last = %2x\n", p->prob_last);
2487     va_TraceMsg(trace_ctx, "\tprob_gf = %2x\n", p->prob_gf);
2488
2489     va_TraceMsg(trace_ctx, "\ty_mode_probs: 0x%2x, 0x%2x, 0x%2x, 0x%2x\n",
2490         p->y_mode_probs[0], p->y_mode_probs[1], p->y_mode_probs[2], p->y_mode_probs[3]);
2491
2492     va_TraceMsg(trace_ctx, "\tuv_mode_probs: 0x%2x, 0x%2x, 0x%2x\n",
2493         p->uv_mode_probs[0], p->uv_mode_probs[1], p->uv_mode_probs[2]);
2494
2495     va_TraceMsg(trace_ctx, "\tmv_probs[2][19]:\n");
2496     for(i = 0; i<2; ++i) {
2497         memset(tmp, 0, sizeof tmp);
2498         for (j=0; j<19; j++)
2499             sprintf(tmp + strlen(tmp), "%2x ", p->mv_probs[i][j]);
2500         va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
2501     }
2502
2503     va_TraceMsg(trace_ctx, "\tbool_coder_ctx: range = %02x, value = %02x, count = %d\n",
2504         p->bool_coder_ctx.range, p->bool_coder_ctx.value, p->bool_coder_ctx.count);
2505
2506     va_TraceMsg(trace_ctx, NULL);
2507
2508     return;
2509 }
2510
2511 static void va_TraceVASliceParameterBufferVP8(
2512     VADisplay dpy,
2513     VAContextID context,
2514     VABufferID buffer,
2515     VABufferType type,
2516     unsigned int size,
2517     unsigned int num_elements,
2518     void *data)
2519 {
2520     VASliceParameterBufferVP8 *p = (VASliceParameterBufferVP8 *)data;
2521     DPY2TRACECTX(dpy);
2522     int i;
2523
2524     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVP8\n");
2525
2526     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
2527     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
2528     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
2529     va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
2530     va_TraceMsg(trace_ctx, "\tnum_of_partitions = %d\n", p->num_of_partitions);
2531
2532     for(i = 0; i<9; ++i)
2533         va_TraceMsg(trace_ctx, "\tpartition_size[%d] = %d\n", i, p->partition_size[i]);
2534
2535     va_TraceMsg(trace_ctx, NULL);
2536
2537     return;
2538 }
2539
2540 static void va_TraceVAIQMatrixBufferVP8(
2541     VADisplay dpy,
2542     VAContextID context,
2543     VABufferID buffer,
2544     VABufferType type,
2545     unsigned int size,
2546     unsigned int num_elements,
2547     void *data)
2548 {
2549     char tmp[1024];
2550     VAIQMatrixBufferVP8 *p = (VAIQMatrixBufferVP8 *)data;
2551     DPY2TRACECTX(dpy);
2552     int i,j;
2553
2554     va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferVP8\n");
2555
2556     va_TraceMsg(trace_ctx, "\tquantization_index[4][6]=\n");
2557     for (i = 0; i < 4; i++) {
2558         memset(tmp, 0, sizeof tmp);
2559         for (j = 0; j < 6; j++)
2560             sprintf(tmp + strlen(tmp), "%4x, ", p->quantization_index[i][j]);
2561         va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
2562     }
2563
2564     va_TraceMsg(trace_ctx, NULL);
2565
2566     return;
2567 }
2568 static void va_TraceVAProbabilityBufferVP8(
2569     VADisplay dpy,
2570     VAContextID context,
2571     VABufferID buffer,
2572     VABufferType type,
2573     unsigned int size,
2574     unsigned int num_elements,
2575     void *data)
2576 {
2577     char tmp[1024];
2578     VAProbabilityDataBufferVP8 *p = (VAProbabilityDataBufferVP8 *)data;
2579     DPY2TRACECTX(dpy);
2580     int i,j,k,l;
2581
2582     va_TraceMsg(trace_ctx, "\t--VAProbabilityDataBufferVP8\n");
2583
2584     for (i = 0; i < 4; i++)
2585         for (j = 0; j < 8; j++) {
2586             memset(tmp, 0, sizeof tmp);
2587             for (k=0; k<3; k++)
2588                 for (l=0; l<11; l++)
2589                     sprintf(tmp + strlen(tmp), "%2x, ", p->dct_coeff_probs[i][j][k][l]);
2590             va_TraceMsg(trace_ctx,"\t\t[%d, %d] = %s\n", i, j, tmp);
2591         }
2592
2593     va_TraceMsg(trace_ctx, NULL);
2594
2595     return;
2596 }
2597
2598 static void va_TraceVAEncSequenceParameterBufferVP8(
2599     VADisplay dpy,
2600     VAContextID context,
2601     VABufferID buffer,
2602     VABufferType type,
2603     unsigned int size,
2604     unsigned int num_elements,
2605     void *data)
2606 {
2607     VAEncSequenceParameterBufferVP8 *p = (VAEncSequenceParameterBufferVP8 *)data;
2608     DPY2TRACECTX(dpy);
2609     int i;
2610
2611     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferVP8\n");
2612
2613     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2614     va_TraceMsg(trace_ctx, "\terror_resilient = %d\n", p->error_resilient);
2615     va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
2616     va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
2617     va_TraceMsg(trace_ctx, "\tframe_height_scale = %d\n", p->frame_height_scale);
2618     va_TraceMsg(trace_ctx, "\tframe_width_scale = %d\n", p->frame_width_scale);
2619     va_TraceMsg(trace_ctx, "\tkf_auto = %d\n", p->kf_auto);
2620     va_TraceMsg(trace_ctx, "\tkf_max_dist = %d\n", p->kf_max_dist);
2621     va_TraceMsg(trace_ctx, "\tkf_min_dist = %d\n", p->kf_min_dist);
2622     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
2623
2624     for(i = 0; i<4; ++i)
2625         va_TraceMsg(trace_ctx, "\treference_frames[%d] = 0x%08x\n", i, p->reference_frames[i]);
2626
2627     va_TraceMsg(trace_ctx, NULL);
2628
2629     return;
2630 }
2631
2632 static void va_TraceVAEncPictureParameterBufferVP8(
2633     VADisplay dpy,
2634     VAContextID context,
2635     VABufferID buffer,
2636     VABufferType type,
2637     unsigned int size,
2638     unsigned int num_elements,
2639     void *data)
2640 {
2641     VAEncPictureParameterBufferVP8 *p = (VAEncPictureParameterBufferVP8 *)data;
2642     DPY2TRACECTX(dpy);
2643     int i;
2644
2645     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferVP8\n");
2646     va_TraceMsg(trace_ctx, "\treconstructed_frame = 0x%08x\n", p->reconstructed_frame);
2647     va_TraceMsg(trace_ctx, "\tref_last_frame = 0x%08x\n", p->ref_last_frame);
2648     va_TraceMsg(trace_ctx, "\tref_gf_frame = 0x%08x\n", p->ref_gf_frame);
2649     va_TraceMsg(trace_ctx, "\tref_arf_frame = 0x%08x\n", p->ref_arf_frame);
2650     va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", p->coded_buf);
2651
2652     va_TraceMsg(trace_ctx, "\tref_flags.bits.force_kf = %d\n", p->ref_flags.bits.force_kf);
2653     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_last = %d\n", p->ref_flags.bits.no_ref_last);
2654     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_gf = %d\n", p->ref_flags.bits.no_ref_gf);
2655     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = %d\n", p->ref_flags.bits.no_ref_arf);
2656     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = 0x%08x\n", p->ref_flags.bits.reserved);
2657     
2658     va_TraceMsg(trace_ctx, "\tpic_flags.bits.frame_type = %d\n", p->pic_flags.bits.frame_type);
2659     va_TraceMsg(trace_ctx, "\tpic_flags.bits.version = %d\n", p->pic_flags.bits.version);
2660     va_TraceMsg(trace_ctx, "\tpic_flags.bits.show_frame = %d\n", p->pic_flags.bits.show_frame);
2661     va_TraceMsg(trace_ctx, "\tpic_flags.bits.color_space = %d\n", p->pic_flags.bits.color_space);
2662     va_TraceMsg(trace_ctx, "\tpic_flags.bits.recon_filter_type = %d\n", p->pic_flags.bits.recon_filter_type);
2663     va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_type = %d\n", p->pic_flags.bits.loop_filter_type);
2664     va_TraceMsg(trace_ctx, "\tpic_flags.bits.auto_partitions = %d\n", p->pic_flags.bits.auto_partitions);
2665     va_TraceMsg(trace_ctx, "\tpic_flags.bits.num_token_partitions = %d\n", p->pic_flags.bits.num_token_partitions);
2666     va_TraceMsg(trace_ctx, "\tpic_flags.bits.clamping_type = %d\n", p->pic_flags.bits.clamping_type);
2667     va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_enabled = %d\n", p->pic_flags.bits.segmentation_enabled);
2668     va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_mb_segmentation_map = %d\n", p->pic_flags.bits.update_mb_segmentation_map);
2669     va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_segment_feature_data = %d\n", p->pic_flags.bits.update_segment_feature_data);
2670     va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_adj_enable = %d\n", p->pic_flags.bits.loop_filter_adj_enable);
2671     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_entropy_probs = %d\n", p->pic_flags.bits.refresh_entropy_probs);
2672     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_golden_frame = %d\n", p->pic_flags.bits.refresh_golden_frame);
2673     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_alternate_frame = %d\n", p->pic_flags.bits.refresh_alternate_frame);
2674     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_last = %d\n", p->pic_flags.bits.refresh_last);
2675     va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_golden = %d\n", p->pic_flags.bits.copy_buffer_to_golden);
2676     va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_alternate = %d\n", p->pic_flags.bits.copy_buffer_to_alternate);
2677
2678     va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_golden = %d\n", p->pic_flags.bits.sign_bias_golden);
2679     va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_alternate = %d\n", p->pic_flags.bits.sign_bias_alternate);
2680     va_TraceMsg(trace_ctx, "\tpic_flags.bits.mb_no_coeff_skip = %d\n", p->pic_flags.bits.mb_no_coeff_skip);
2681     va_TraceMsg(trace_ctx, "\tpic_flags.bits.forced_lf_adjustment = %d\n", p->pic_flags.bits.forced_lf_adjustment);
2682     va_TraceMsg(trace_ctx, "\tpic_flags.bits.reserved = %d\n", p->pic_flags.bits.reserved);
2683
2684     for(i=0;i<4;i++)
2685        va_TraceMsg(trace_ctx, "\tloop_filter_level[%d] = %d\n", i, p->loop_filter_level[i]);
2686     for(i=0;i<4;i++)
2687        va_TraceMsg(trace_ctx, "\tref_lf_delta[%d] = %d\n", i, p->ref_lf_delta[i]);
2688     for(i=0;i<4;i++)
2689        va_TraceMsg(trace_ctx, "\tmode_lf_delta[%d] = %d\n", i, p->mode_lf_delta[i]);
2690
2691     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level);
2692     va_TraceMsg(trace_ctx, "\tclamp_qindex_high = %d\n", p->clamp_qindex_high);
2693     va_TraceMsg(trace_ctx, "\tclamp_qindex_low = %d\n", p->clamp_qindex_low);
2694
2695     va_TraceMsg(trace_ctx, NULL);
2696
2697     return;
2698 }
2699
2700 void va_TraceBeginPicture(
2701     VADisplay dpy,
2702     VAContextID context,
2703     VASurfaceID render_target
2704 )
2705 {
2706     DPY2TRACECTX(dpy);
2707
2708     TRACE_FUNCNAME(idx);
2709
2710     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
2711     va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", render_target);
2712     va_TraceMsg(trace_ctx, "\tframe_count  = #%d\n", trace_ctx->trace_frame_no);
2713     va_TraceMsg(trace_ctx, NULL);
2714
2715     trace_ctx->trace_rendertarget = render_target; /* for surface data dump after vaEndPicture */
2716
2717     trace_ctx->trace_frame_no++;
2718     trace_ctx->trace_slice_no = 0;
2719 }
2720
2721 static void va_TraceMPEG2Buf(
2722     VADisplay dpy,
2723     VAContextID context,
2724     VABufferID buffer,
2725     VABufferType type,
2726     unsigned int size,
2727     unsigned int num_elements,
2728     void *pbuf
2729 )
2730 {
2731     switch (type) {
2732     case VAPictureParameterBufferType:
2733         va_TraceVAPictureParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2734         break;
2735     case VAIQMatrixBufferType:
2736         va_TraceVAIQMatrixBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2737         break;
2738     case VABitPlaneBufferType:
2739         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2740         break;
2741     case VASliceGroupMapBufferType:
2742         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2743         break;
2744     case VASliceParameterBufferType:
2745         va_TraceVASliceParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2746         break;
2747     case VASliceDataBufferType:
2748         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2749         break;
2750     case VAMacroblockParameterBufferType:
2751         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2752         break;
2753     case VAResidualDataBufferType:
2754         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2755         break;
2756     case VADeblockingParameterBufferType:
2757         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2758         break;
2759     case VAImageBufferType:
2760         break;
2761     case VAProtectedSliceDataBufferType:
2762         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2763         break;
2764     case VAEncCodedBufferType:
2765         break;
2766     case VAEncSequenceParameterBufferType:
2767         break;
2768     case VAEncPictureParameterBufferType:
2769         break;
2770     case VAEncSliceParameterBufferType:
2771         break;
2772     default:
2773         break;
2774     }
2775 }
2776
2777 static void va_TraceVAEncSequenceParameterBufferH263(
2778     VADisplay dpy,
2779     VAContextID context,
2780     VABufferID buffer,
2781     VABufferType type,
2782     unsigned int size,
2783     unsigned int num_elements,
2784     void *data)
2785 {
2786     VAEncSequenceParameterBufferH263 *p = (VAEncSequenceParameterBufferH263 *)data;
2787     DPY2TRACECTX(dpy);
2788     
2789     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH263\n");
2790     
2791     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
2792     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2793     va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate);
2794     va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
2795     va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
2796     va_TraceMsg(trace_ctx, NULL);
2797
2798     return;
2799 }
2800
2801
2802 static void va_TraceVAEncPictureParameterBufferH263(
2803     VADisplay dpy,
2804     VAContextID context,
2805     VABufferID buffer,
2806     VABufferType type,
2807     unsigned int size,
2808     unsigned int num_elements,
2809     void *data)
2810 {
2811     VAEncPictureParameterBufferH263 *p = (VAEncPictureParameterBufferH263 *)data;
2812     DPY2TRACECTX(dpy);
2813     
2814     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH263\n");
2815     va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture);
2816     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2817     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2818     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2819     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2820     va_TraceMsg(trace_ctx, "\tpicture_type = 0x%08x\n", p->picture_type);
2821     va_TraceMsg(trace_ctx, NULL);
2822
2823     return;
2824 }
2825
2826 static void va_TraceVAEncPictureParameterBufferJPEG(
2827     VADisplay dpy,
2828     VAContextID context,
2829     VABufferID buffer,
2830     VABufferType type,
2831     unsigned int size,
2832     unsigned int num_elements,
2833     void *data)
2834 {
2835     VAEncPictureParameterBufferJPEG *p = (VAEncPictureParameterBufferJPEG *)data;
2836     int i;
2837     
2838     DPY2TRACECTX(dpy);
2839     
2840     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferJPEG\n");
2841     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2842     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2843     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2844     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2845     va_TraceMsg(trace_ctx, "\tpic_flags.bits.profile = %d\n", p->pic_flags.bits.profile);
2846     va_TraceMsg(trace_ctx, "\tpic_flags.bits.progressive = %d\n", p->pic_flags.bits.profile);
2847     va_TraceMsg(trace_ctx, "\tpic_flags.bits.huffman = %d\n", p->pic_flags.bits.huffman);
2848     va_TraceMsg(trace_ctx, "\tpic_flags.bits.interleaved = %d\n", p->pic_flags.bits.interleaved);
2849     va_TraceMsg(trace_ctx, "\tpic_flags.bits.differential = %d\n", p->pic_flags.bits.differential);
2850     va_TraceMsg(trace_ctx, "\tsample_bit_depth = %d\n", p->sample_bit_depth);
2851     va_TraceMsg(trace_ctx, "\tnum_scan = %d\n", p->num_scan);
2852     va_TraceMsg(trace_ctx, "\tnum_components = %d\n", p->num_components);
2853     for (i=0; i<p->num_components; i++)
2854         va_TraceMsg(trace_ctx, "\tcomponent_id[%d] = %d\n", i, p->component_id[i]);
2855
2856     if (p->quality > 0)
2857         va_TraceMsg(trace_ctx, "\tquality = %d\n", p->quality);
2858     else
2859         va_TraceMsg(trace_ctx, "\tquantiser_table_selector[] = %d %d %d %d\n",
2860                     p->quantiser_table_selector[0],
2861                     p->quantiser_table_selector[1],
2862                     p->quantiser_table_selector[2],
2863                     p->quantiser_table_selector[3]);
2864
2865     va_TraceMsg(trace_ctx, NULL);
2866
2867     return;
2868 }
2869
2870 static void va_TraceVAEncQMatrixBufferJPEG(
2871     VADisplay dpy,
2872     VAContextID context,
2873     VABufferID buffer,
2874     VABufferType type,
2875     unsigned int size,
2876     unsigned int num_elements,
2877     void *data)
2878 {
2879     VAQMatrixBufferJPEG *p = (VAQMatrixBufferJPEG *)data;
2880     DPY2TRACECTX(dpy);
2881     
2882     va_TraceMsg(trace_ctx, "\t--VAQMatrixBufferJPEG\n");
2883     va_TraceMsg(trace_ctx, "\tload_lum_quantiser_matrix = %d", p->load_lum_quantiser_matrix);
2884     if (p->load_lum_quantiser_matrix) {
2885         int i;
2886         for (i = 0; i < 64; i++) {
2887             if ((i % 8) == 0)
2888                 va_TraceMsg(trace_ctx, "\n\t");
2889             va_TraceMsg(trace_ctx, "\t0x%02x", p->lum_quantiser_matrix[i]);
2890         }
2891         va_TraceMsg(trace_ctx, "\n");
2892     }
2893     va_TraceMsg(trace_ctx, "\tload_chroma_quantiser_matrix = %08x\n", p->load_chroma_quantiser_matrix);
2894     if (p->load_chroma_quantiser_matrix) {
2895         int i;
2896         for (i = 0; i < 64; i++) {
2897             if ((i % 8) == 0)
2898                 va_TraceMsg(trace_ctx, "\n\t");
2899             va_TraceMsg(trace_ctx, "\t0x%02x", p->chroma_quantiser_matrix[i]);
2900         }
2901         va_TraceMsg(trace_ctx, "\n");
2902     }
2903     
2904     va_TraceMsg(trace_ctx, NULL);
2905     
2906     return;
2907 }
2908
2909
2910 static void va_TraceVAEncSliceParameterBufferJPEG(
2911     VADisplay dpy,
2912     VAContextID context,
2913     VABufferID buffer,
2914     VABufferType type,
2915     unsigned int size,
2916     unsigned int num_elements,
2917     void *data)
2918 {
2919     VAEncSliceParameterBufferJPEG *p = (VAEncSliceParameterBufferJPEG *)data;
2920     int i;
2921     
2922     DPY2TRACECTX(dpy);
2923     
2924     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferJPEG\n");
2925     va_TraceMsg(trace_ctx, "\trestart_interval = 0x%04x\n", p->restart_interval);
2926     va_TraceMsg(trace_ctx, "\tnum_components = 0x%08x\n", p->num_components);
2927     for (i=0; i<4; i++) {
2928         va_TraceMsg(trace_ctx, "\tcomponents[%i] =\n ");
2929         va_TraceMsg(trace_ctx, "\t\tcomponent_selector = %d\n", p->components[i].component_selector);
2930         va_TraceMsg(trace_ctx, "\t\tdc_table_selector = %d\n", p->components[i].dc_table_selector);
2931         va_TraceMsg(trace_ctx, "\t\tac_table_selector = %d\n", p->components[i].ac_table_selector);
2932     }
2933     
2934     va_TraceMsg(trace_ctx, NULL);
2935     
2936     return;
2937 }
2938
2939
2940 static void va_TraceH263Buf(
2941     VADisplay dpy,
2942     VAContextID context,
2943     VABufferID buffer,
2944     VABufferType type,
2945     unsigned int size,
2946     unsigned int num_elements,
2947     void *pbuf
2948 )
2949 {
2950     switch (type) {
2951     case VAPictureParameterBufferType:/* print MPEG4 buffer */
2952         va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2953         break;
2954     case VAIQMatrixBufferType:/* print MPEG4 buffer */
2955         va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2956         break;
2957     case VABitPlaneBufferType:/* print MPEG4 buffer */
2958         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2959         break;
2960     case VASliceGroupMapBufferType:
2961         break;
2962     case VASliceParameterBufferType:/* print MPEG4 buffer */
2963         va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2964         break;
2965     case VASliceDataBufferType:
2966         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2967         break;
2968     case VAMacroblockParameterBufferType:
2969         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2970         break;
2971     case VAResidualDataBufferType:
2972         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2973         break;
2974     case VADeblockingParameterBufferType:
2975         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2976         break;
2977     case VAImageBufferType:
2978         break;
2979     case VAProtectedSliceDataBufferType:
2980         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2981         break;
2982     case VAEncCodedBufferType:
2983         break;
2984     case VAEncSequenceParameterBufferType:
2985         va_TraceVAEncSequenceParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
2986         break;
2987     case VAEncPictureParameterBufferType:
2988         va_TraceVAEncPictureParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
2989         break;
2990     case VAEncSliceParameterBufferType:
2991         va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2992         break;
2993     case VAEncPackedHeaderParameterBufferType:
2994         va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
2995         break;
2996     default:
2997         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2998         break;
2999     }
3000 }
3001
3002
3003 static void va_TraceJPEGBuf(
3004     VADisplay dpy,
3005     VAContextID context,
3006     VABufferID buffer,
3007     VABufferType type,
3008     unsigned int size,
3009     unsigned int num_elements,
3010     void *pbuf
3011 )
3012 {
3013     switch (type) {
3014     case VABitPlaneBufferType:
3015     case VASliceGroupMapBufferType:
3016     case VASliceDataBufferType:
3017     case VAMacroblockParameterBufferType:
3018     case VAResidualDataBufferType:
3019     case VADeblockingParameterBufferType:
3020     case VAImageBufferType:
3021     case VAProtectedSliceDataBufferType:
3022     case VAEncCodedBufferType:
3023     case VAEncSequenceParameterBufferType:
3024         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3025         break;
3026     case VAEncSliceParameterBufferType:
3027         va_TraceVAEncSliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
3028         break;
3029     case VAPictureParameterBufferType:
3030         va_TraceVAPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
3031         break;
3032     case VAIQMatrixBufferType:
3033         va_TraceVAIQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
3034         break;
3035     case VASliceParameterBufferType:
3036         va_TraceVASliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
3037         break;
3038     case VAHuffmanTableBufferType:
3039         va_TraceVAHuffmanTableBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
3040         break;
3041     case VAEncPictureParameterBufferType:
3042         va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
3043         break;
3044     case VAQMatrixBufferType:
3045         va_TraceVAEncQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
3046         break;
3047     default:
3048         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3049         break;
3050     }
3051 }
3052
3053 static void va_TraceMPEG4Buf(
3054     VADisplay dpy,
3055     VAContextID context,
3056     VABufferID buffer,
3057     VABufferType type,
3058     unsigned int size,
3059     unsigned int num_elements,
3060     void *pbuf
3061 )
3062 {
3063     switch (type) {
3064     case VAPictureParameterBufferType:
3065         va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
3066         break;
3067     case VAIQMatrixBufferType:
3068         va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
3069         break;
3070     case VABitPlaneBufferType:
3071         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3072         break;
3073     case VASliceGroupMapBufferType:
3074         break;
3075     case VASliceParameterBufferType:
3076         va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
3077         break;
3078     case VASliceDataBufferType:
3079         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3080         break;
3081     case VAMacroblockParameterBufferType:
3082         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3083         break;
3084     case VAResidualDataBufferType:
3085         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3086         break;
3087     case VADeblockingParameterBufferType:
3088         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3089         break;
3090     case VAImageBufferType:
3091         break;
3092     case VAProtectedSliceDataBufferType:
3093         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3094         break;
3095     case VAEncCodedBufferType:
3096         break;
3097     case VAEncSequenceParameterBufferType:
3098         va_TraceVAEncSequenceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
3099         break;
3100     case VAEncPictureParameterBufferType:
3101         va_TraceVAEncPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
3102         break;
3103     case VAEncSliceParameterBufferType:
3104         va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3105         break;
3106     default:
3107         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3108         break;
3109     }
3110 }
3111
3112 static void va_TraceHEVCBuf(
3113     VADisplay dpy,
3114     VAContextID context,
3115     VABufferID buffer,
3116     VABufferType type,
3117     unsigned int size,
3118     unsigned int num_elements,
3119     void *pbuf
3120 )
3121 {
3122     DPY2TRACECTX(dpy);
3123
3124     switch (type) {
3125         case VAPictureParameterBufferType:
3126             va_TraceVAPictureParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
3127             break;
3128         case VASliceParameterBufferType:
3129             va_TraceVASliceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
3130             break;
3131         case VAIQMatrixBufferType:
3132             va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
3133             break;
3134         case VAEncSequenceParameterBufferType:
3135             va_TraceVAEncSequenceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
3136             break;
3137         case VAEncPictureParameterBufferType:
3138             va_TraceVAEncPictureParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
3139             break;
3140         case VAEncSliceParameterBufferType:
3141             va_TraceVAEncSliceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
3142             break;
3143         case VAEncMiscParameterBufferType:
3144             va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3145             break;
3146         default:
3147             va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3148             break;
3149     }
3150 }
3151
3152 static void va_TraceH264Buf(
3153     VADisplay dpy,
3154     VAContextID context,
3155     VABufferID buffer,
3156     VABufferType type,
3157     unsigned int size,
3158     unsigned int num_elements,
3159     void *pbuf
3160 )
3161 {
3162     DPY2TRACECTX(dpy);
3163     
3164     switch (type) {
3165     case VAPictureParameterBufferType:
3166         va_TraceVAPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
3167         break;
3168     case VAIQMatrixBufferType:
3169         va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
3170         break;
3171     case VABitPlaneBufferType:
3172         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
3173         break;
3174     case VASliceGroupMapBufferType:
3175         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3176         break;
3177     case VASliceParameterBufferType:
3178         va_TraceVASliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
3179         break;
3180     case VASliceDataBufferType:
3181         va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
3182         break;
3183     case VAMacroblockParameterBufferType:
3184         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
3185         break;
3186     case VAResidualDataBufferType:
3187         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
3188         break;
3189     case VADeblockingParameterBufferType:
3190         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3191         break;
3192     case VAImageBufferType:
3193         break;
3194     case VAProtectedSliceDataBufferType:
3195         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3196         break;
3197     case VAEncCodedBufferType:
3198         break;
3199     case VAEncSequenceParameterBufferType:
3200         va_TraceVAEncSequenceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
3201         break;
3202     case VAEncPictureParameterBufferType:
3203         va_TraceVAEncPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
3204         break;
3205     case VAEncSliceParameterBufferType:
3206         if (size == sizeof(VAEncSliceParameterBuffer))
3207             va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3208         else
3209             va_TraceVAEncSliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
3210         break;
3211     case VAEncPackedHeaderParameterBufferType:
3212         va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
3213         break;
3214         
3215     case VAEncMiscParameterBufferType:
3216         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3217         break;
3218     default:
3219         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3220         break;
3221     }
3222 }
3223
3224 static void va_TraceVP8Buf(
3225     VADisplay dpy,
3226     VAContextID context,
3227     VABufferID buffer,
3228     VABufferType type,
3229     unsigned int size,
3230     unsigned int num_elements,
3231     void *pbuf
3232 )
3233 {
3234     DPY2TRACECTX(dpy);
3235
3236     switch (type) {
3237     case VAPictureParameterBufferType:
3238         va_TraceVAPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3239         break;
3240     case VAIQMatrixBufferType:
3241         va_TraceVAIQMatrixBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3242         break;
3243     case VAQMatrixBufferType:
3244         break;
3245     case VABitPlaneBufferType:
3246         break;
3247     case VASliceGroupMapBufferType:
3248         break;
3249     case VASliceParameterBufferType:
3250         va_TraceVASliceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3251         break;
3252     case VASliceDataBufferType:
3253         break;
3254     case VAProbabilityBufferType:
3255         va_TraceVAProbabilityBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3256         break;
3257     case VAMacroblockParameterBufferType:
3258         break;
3259     case VAResidualDataBufferType:
3260         break;
3261     case VADeblockingParameterBufferType:
3262         break;
3263     case VAImageBufferType:
3264         break;
3265     case VAProtectedSliceDataBufferType:
3266         break;
3267     case VAEncCodedBufferType:
3268         break;
3269     case VAEncSequenceParameterBufferType:
3270         va_TraceVAEncSequenceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3271         break;
3272     case VAEncPictureParameterBufferType:
3273         va_TraceVAEncPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3274         break;
3275     case VAEncSliceParameterBufferType:
3276         break;
3277     case VAEncPackedHeaderParameterBufferType:
3278         break;
3279     case VAEncMiscParameterBufferType:
3280         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3281         break;
3282     default:
3283         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3284         break;
3285     }
3286 }
3287
3288 static void va_TraceVC1Buf(
3289     VADisplay dpy,
3290     VAContextID context,
3291     VABufferID buffer,
3292     VABufferType type,
3293     unsigned int size,
3294     unsigned int num_elements,
3295     void *pbuf
3296 )
3297 {
3298     DPY2TRACECTX(dpy);
3299
3300     switch (type) {
3301     case VAPictureParameterBufferType:
3302         va_TraceVAPictureParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
3303         break;
3304     case VAIQMatrixBufferType:
3305         break;
3306     case VABitPlaneBufferType:
3307         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3308         break;
3309     case VASliceGroupMapBufferType:
3310         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3311         break;
3312     case VASliceParameterBufferType:
3313         va_TraceVASliceParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
3314         break;
3315     case VASliceDataBufferType:
3316         va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
3317         break;
3318     case VAMacroblockParameterBufferType:
3319         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3320         break;
3321     case VAResidualDataBufferType:
3322         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3323         break;
3324     case VADeblockingParameterBufferType:
3325         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3326         break;
3327     case VAImageBufferType:
3328         break;
3329     case VAProtectedSliceDataBufferType:
3330         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3331         break;
3332     case VAEncCodedBufferType:
3333         break;
3334     case VAEncSequenceParameterBufferType:
3335         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3336         break;
3337     case VAEncPictureParameterBufferType:
3338         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3339         break;
3340     case VAEncSliceParameterBufferType:
3341         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3342         break;
3343     default:
3344         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3345         break;
3346     }
3347 }
3348
3349 static void
3350 va_TraceProcFilterParameterBufferDeinterlacing(
3351     VADisplay dpy,
3352     VAContextID context,
3353     VAProcFilterParameterBufferBase *base
3354 )
3355 {
3356     VAProcFilterParameterBufferDeinterlacing *deint = (VAProcFilterParameterBufferDeinterlacing *)base;
3357
3358     DPY2TRACECTX(dpy);
3359
3360     va_TraceMsg(trace_ctx, "\t    type = %d\n", deint->type);
3361     va_TraceMsg(trace_ctx, "\t    algorithm = %d\n", deint->algorithm);
3362     va_TraceMsg(trace_ctx, "\t    flags = %d\n", deint->flags);
3363 }
3364
3365 static void
3366 va_TraceProcFilterParameterBufferColorBalance(
3367     VADisplay dpy,
3368     VAContextID context,
3369     VAProcFilterParameterBufferBase *base
3370 )
3371 {
3372     VAProcFilterParameterBufferColorBalance *color_balance = (VAProcFilterParameterBufferColorBalance *)base;
3373
3374     DPY2TRACECTX(dpy);
3375
3376     va_TraceMsg(trace_ctx, "\t    type = %d\n", color_balance->type);
3377     va_TraceMsg(trace_ctx, "\t    attrib = %d\n", color_balance->attrib);
3378     va_TraceMsg(trace_ctx, "\t    value = %f\n", color_balance->value);
3379 }
3380
3381 static void
3382 va_TraceProcFilterParameterBufferBase(
3383     VADisplay dpy,
3384     VAContextID context,
3385     VAProcFilterParameterBufferBase *base
3386 )
3387 {
3388     DPY2TRACECTX(dpy);
3389
3390     va_TraceMsg(trace_ctx, "\t    type = %d\n", base->type);
3391 }
3392
3393 static void
3394 va_TraceProcFilterParameterBuffer(
3395     VADisplay dpy,
3396     VAContextID context,
3397     VABufferID *filters,
3398     unsigned int num_filters
3399 )
3400 {
3401     VABufferType type;
3402     unsigned int size;
3403     unsigned int num_elements;
3404     VAProcFilterParameterBufferBase *base_filter = NULL;
3405     int i;
3406
3407     DPY2TRACECTX(dpy);
3408
3409     if (num_filters == 0 || filters == NULL) {
3410         va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
3411         va_TraceMsg(trace_ctx, "\t  filters = %p\n", filters);
3412         return;
3413     }
3414
3415     va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
3416
3417     /* get buffer type information */
3418     for (i = 0; i < num_filters; i++) {
3419         vaBufferInfo(dpy, context, filters[i], &type, &size, &num_elements);
3420
3421         if (type != VAProcFilterParameterBufferType) {
3422             va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x (INVALID)\n", i, filters[i]);
3423             return;
3424         } else {
3425             va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x\n", i, filters[i]);
3426         }
3427
3428         base_filter = NULL;
3429         vaMapBuffer(dpy, filters[i], (void **)&base_filter);
3430
3431         if (base_filter == NULL) {
3432             vaUnmapBuffer(dpy, filters[i]);
3433             return;
3434         }
3435
3436         switch (base_filter->type) {
3437         case VAProcFilterDeinterlacing:
3438             va_TraceProcFilterParameterBufferDeinterlacing(dpy,
3439                                                            context,
3440                                                            base_filter);
3441             break;
3442         case VAProcFilterColorBalance:
3443             va_TraceProcFilterParameterBufferColorBalance(dpy,
3444                                                           context,
3445                                                           base_filter);
3446             break;
3447         default:
3448             va_TraceProcFilterParameterBufferBase(dpy,
3449                                                   context,
3450                                                   base_filter);
3451             break;
3452         }
3453
3454         vaUnmapBuffer(dpy, filters[i]);
3455     }
3456 }
3457
3458 static void
3459 va_TraceVAProcPipelineParameterBuffer(
3460     VADisplay dpy,
3461     VAContextID context,
3462     VABufferID buffer,
3463     VABufferType type,
3464     unsigned int size,
3465     unsigned int num_elements,
3466     void *data
3467 )
3468 {
3469     VAProcPipelineParameterBuffer *p = (VAProcPipelineParameterBuffer *)data;
3470     int i;
3471
3472     DPY2TRACECTX(dpy);
3473
3474     va_TraceMsg(trace_ctx, "\t--VAProcPipelineParameterBuffer\n");
3475
3476     va_TraceMsg(trace_ctx, "\t  surface = 0x%08x\n", p->surface);
3477
3478     if (p->surface_region) {
3479         va_TraceMsg(trace_ctx, "\t  surface_region\n");
3480         va_TraceMsg(trace_ctx, "\t    x = %d\n", p->surface_region->x);
3481         va_TraceMsg(trace_ctx, "\t    y = %d\n", p->surface_region->y);
3482         va_TraceMsg(trace_ctx, "\t    width = %d\n", p->surface_region->width);
3483         va_TraceMsg(trace_ctx, "\t    height = %d\n", p->surface_region->height);
3484     } else {
3485         va_TraceMsg(trace_ctx, "\t  surface_region = (NULL)\n");
3486     }
3487
3488     va_TraceMsg(trace_ctx, "\t  surface_color_standard = %d\n", p->surface_color_standard);
3489
3490     if (p->output_region) {
3491         va_TraceMsg(trace_ctx, "\t  output_region\n");
3492         va_TraceMsg(trace_ctx, "\t    x = %d\n", p->output_region->x);
3493         va_TraceMsg(trace_ctx, "\t    y = %d\n", p->output_region->y);
3494         va_TraceMsg(trace_ctx, "\t    width = %d\n", p->output_region->width);
3495         va_TraceMsg(trace_ctx, "\t    height = %d\n", p->output_region->height);
3496     } else {
3497         va_TraceMsg(trace_ctx, "\t  output_region = (NULL)\n");
3498     }
3499
3500     va_TraceMsg(trace_ctx, "\t  output_background_color = 0x%08x\n", p->output_background_color);
3501     va_TraceMsg(trace_ctx, "\t  output_color_standard = %d\n", p->output_color_standard);
3502     va_TraceMsg(trace_ctx, "\t  pipeline_flags = 0x%08x\n", p->pipeline_flags);
3503     va_TraceMsg(trace_ctx, "\t  filter_flags = 0x%08x\n", p->filter_flags);
3504
3505     va_TraceProcFilterParameterBuffer(dpy, context, p->filters, p->num_filters);
3506
3507     va_TraceMsg(trace_ctx, "\t  num_forward_references = 0x%08x\n", p->num_forward_references);
3508
3509     if (p->num_forward_references) {
3510         va_TraceMsg(trace_ctx, "\t  forward_references\n");
3511
3512         if (p->forward_references) {
3513             /* only dump the first 5 forward references */
3514             for (i = 0; i < p->num_forward_references && i < 5; i++) {
3515                 va_TraceMsg(trace_ctx, "\t    forward_references[%d] = 0x%08x\n", i, p->forward_references[i]);
3516             }
3517         } else {
3518             for (i = 0; i < p->num_forward_references && i < 5; i++) {
3519                 va_TraceMsg(trace_ctx, "\t    forward_references[%d] = (NULL)\n", i);
3520             }
3521         }
3522     }
3523
3524     va_TraceMsg(trace_ctx, "\t  num_backward_references = 0x%08x\n", p->num_backward_references);
3525
3526     if (p->num_backward_references) {
3527         va_TraceMsg(trace_ctx, "\t  backward_references\n");
3528
3529         if (p->backward_references) {
3530             /* only dump the first 5 backward references */
3531             for (i = 0; i < p->num_backward_references && i < 5; i++) {
3532                 va_TraceMsg(trace_ctx, "\t    backward_references[%d] = 0x%08x\n", i, p->backward_references[i]);
3533             }
3534         } else {
3535             for (i = 0; i < p->num_backward_references && i < 5; i++) {
3536                 va_TraceMsg(trace_ctx, "\t    backward_references[%d] = (NULL)\n", i);
3537             }
3538         }
3539     }
3540
3541     /* FIXME: add other info later */
3542
3543     va_TraceMsg(trace_ctx, NULL);
3544 }
3545
3546 static void
3547 va_TraceNoneBuf(
3548     VADisplay dpy,
3549     VAContextID context,
3550     VABufferID buffer,
3551     VABufferType type,
3552     unsigned int size,
3553     unsigned int num_elements,
3554     void *pbuf
3555 )
3556 {
3557     DPY2TRACECTX(dpy);
3558
3559     switch (type) {
3560     case VAProcPipelineParameterBufferType:
3561         va_TraceVAProcPipelineParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3562         break;
3563     default:
3564         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3565         break;
3566     }
3567 }
3568
3569 void va_TraceRenderPicture(
3570     VADisplay dpy,
3571     VAContextID context,
3572     VABufferID *buffers,
3573     int num_buffers
3574 )
3575 {
3576     VABufferType type;
3577     unsigned int size;
3578     unsigned int num_elements;
3579     int i;
3580     DPY2TRACECTX(dpy);
3581
3582     TRACE_FUNCNAME(idx);
3583     
3584     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
3585     va_TraceMsg(trace_ctx, "\tnum_buffers = %d\n", num_buffers);
3586     if (buffers == NULL)
3587         return;
3588     
3589     for (i = 0; i < num_buffers; i++) {
3590         unsigned char *pbuf = NULL;
3591         unsigned int j;
3592         
3593         /* get buffer type information */
3594         vaBufferInfo(dpy, context, buffers[i], &type, &size, &num_elements);
3595
3596         va_TraceMsg(trace_ctx, "\t---------------------------\n");
3597         va_TraceMsg(trace_ctx, "\tbuffers[%d] = 0x%08x\n", i, buffers[i]);
3598         va_TraceMsg(trace_ctx, "\t  type = %s\n", buffer_type_to_string(type));
3599         va_TraceMsg(trace_ctx, "\t  size = %d\n", size);
3600         va_TraceMsg(trace_ctx, "\t  num_elements = %d\n", num_elements);
3601
3602         vaMapBuffer(dpy, buffers[i], (void **)&pbuf);
3603         if (pbuf == NULL)
3604             continue;
3605         
3606         switch (trace_ctx->trace_profile) {
3607         case VAProfileMPEG2Simple:
3608         case VAProfileMPEG2Main:
3609             for (j=0; j<num_elements; j++) {
3610                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3611                 va_TraceMPEG2Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3612             }
3613             break;
3614         case VAProfileMPEG4Simple:
3615         case VAProfileMPEG4AdvancedSimple:
3616         case VAProfileMPEG4Main:
3617             for (j=0; j<num_elements; j++) {
3618                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3619                 va_TraceMPEG4Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3620             }
3621             break;
3622         case VAProfileH264Baseline:
3623         case VAProfileH264Main:
3624         case VAProfileH264High:
3625         case VAProfileH264ConstrainedBaseline:
3626             for (j=0; j<num_elements; j++) {
3627                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3628                 
3629                 va_TraceH264Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3630             }
3631             break;
3632         case VAProfileVC1Simple:
3633         case VAProfileVC1Main:
3634         case VAProfileVC1Advanced:
3635             for (j=0; j<num_elements; j++) {
3636                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3637                 
3638                 va_TraceVC1Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3639             }
3640             break;
3641         case VAProfileH263Baseline:
3642             for (j=0; j<num_elements; j++) {
3643                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3644                 
3645                 va_TraceH263Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3646             }
3647             break;
3648         case VAProfileJPEGBaseline:
3649             for (j=0; j<num_elements; j++) {
3650                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3651                 
3652                 va_TraceJPEGBuf (dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3653             }
3654             break;
3655
3656         case VAProfileNone:
3657             for (j=0; j<num_elements; j++) {
3658                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3659
3660                 va_TraceNoneBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3661             }
3662             break;
3663
3664         case VAProfileVP8Version0_3:
3665             for (j=0; j<num_elements; j++) {
3666                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3667
3668                 va_TraceVP8Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3669             }
3670             break;
3671
3672         case VAProfileHEVCMain:
3673         case VAProfileHEVCMain10:
3674             for (j=0; j<num_elements; j++) {
3675                 va_TraceMsg(trace_ctx, "\telement[%d] = ", j);
3676
3677                 va_TraceHEVCBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3678             }
3679             break;
3680         default:
3681             break;
3682         }
3683
3684         vaUnmapBuffer(dpy, buffers[i]);
3685     }
3686
3687     va_TraceMsg(trace_ctx, NULL);
3688 }
3689
3690 void va_TraceEndPicture(
3691     VADisplay dpy,
3692     VAContextID context,
3693     int endpic_done
3694 )
3695 {
3696     int encode, decode, jpeg;
3697     DPY2TRACECTX(dpy);
3698
3699     TRACE_FUNCNAME(idx);
3700
3701     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
3702     va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", trace_ctx->trace_rendertarget);
3703
3704     /* avoid to create so many empty files */
3705     encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
3706     decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
3707     jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
3708
3709     /* trace encode source surface, can do it before HW completes rendering */
3710     if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE))||
3711         (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG)))
3712         va_TraceSurface(dpy);
3713     
3714     /* trace decoded surface, do it after HW completes rendering */
3715     if (decode && ((trace_flag & VA_TRACE_FLAG_SURFACE_DECODE))) {
3716         vaSyncSurface(dpy, trace_ctx->trace_rendertarget);
3717         va_TraceSurface(dpy);
3718     }
3719
3720     va_TraceMsg(trace_ctx, NULL);
3721 }
3722
3723
3724 void va_TraceSyncSurface(
3725     VADisplay dpy,
3726     VASurfaceID render_target
3727 )
3728 {
3729     DPY2TRACECTX(dpy);
3730
3731     TRACE_FUNCNAME(idx);
3732
3733     va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target);
3734     va_TraceMsg(trace_ctx, NULL);
3735 }
3736
3737 void va_TraceQuerySurfaceAttributes(
3738     VADisplay           dpy,
3739     VAConfigID          config,
3740     VASurfaceAttrib    *attrib_list,
3741     unsigned int       *num_attribs
3742 )
3743 {
3744     DPY2TRACECTX(dpy);
3745
3746     TRACE_FUNCNAME(idx);
3747     va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config);
3748     va_TraceSurfaceAttributes(trace_ctx, attrib_list, num_attribs);
3749     
3750     va_TraceMsg(trace_ctx, NULL);
3751
3752 }
3753
3754
3755 void va_TraceQuerySurfaceStatus(
3756     VADisplay dpy,
3757     VASurfaceID render_target,
3758     VASurfaceStatus *status    /* out */
3759 )
3760 {
3761     DPY2TRACECTX(dpy);
3762
3763     TRACE_FUNCNAME(idx);
3764
3765     va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target);
3766     if (status)
3767         va_TraceMsg(trace_ctx, "\tstatus = 0x%08x\n", *status);
3768     va_TraceMsg(trace_ctx, NULL);
3769 }
3770
3771
3772 void va_TraceQuerySurfaceError(
3773     VADisplay dpy,
3774     VASurfaceID surface,
3775     VAStatus error_status,
3776     void **error_info       /*out*/
3777 )
3778 {
3779     DPY2TRACECTX(dpy);
3780
3781     TRACE_FUNCNAME(idx);
3782     va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
3783     va_TraceMsg(trace_ctx, "\terror_status = 0x%08x\n", error_status);
3784     if (error_info && (error_status == VA_STATUS_ERROR_DECODING_ERROR)) {
3785         VASurfaceDecodeMBErrors *p = *error_info;
3786         while (p && (p->status != -1)) {
3787             va_TraceMsg(trace_ctx, "\t\tstatus = %d\n", p->status);
3788             va_TraceMsg(trace_ctx, "\t\tstart_mb = %d\n", p->start_mb);
3789             va_TraceMsg(trace_ctx, "\t\tend_mb = %d\n", p->end_mb);
3790             p++; /* next error record */
3791         }
3792     }
3793     va_TraceMsg(trace_ctx, NULL);
3794 }
3795
3796 void va_TraceMaxNumDisplayAttributes (
3797     VADisplay dpy,
3798     int number
3799 )
3800 {
3801     DPY2TRACECTX(dpy);
3802
3803     TRACE_FUNCNAME(idx);
3804     
3805     va_TraceMsg(trace_ctx, "\tmax_display_attributes = %d\n", number);
3806     va_TraceMsg(trace_ctx, NULL);
3807 }
3808
3809 void va_TraceQueryDisplayAttributes (
3810     VADisplay dpy,
3811     VADisplayAttribute *attr_list,    /* out */
3812     int *num_attributes               /* out */
3813 )
3814 {
3815     int i;
3816     
3817     DPY2TRACECTX(dpy);
3818     
3819     if (attr_list == NULL || num_attributes == NULL)
3820         return;
3821
3822     va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", *num_attributes);
3823     
3824     for (i=0; i<*num_attributes; i++) {
3825         va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n");
3826         va_TraceMsg(trace_ctx, "\t  typ = 0x%08x\n", attr_list[i].type);
3827         va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
3828         va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
3829         va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
3830         va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
3831     }
3832     va_TraceMsg(trace_ctx, NULL);
3833 }
3834
3835
3836 static void va_TraceDisplayAttributes (
3837     VADisplay dpy,
3838     VADisplayAttribute *attr_list,
3839     int num_attributes
3840 )
3841 {
3842     int i;
3843     
3844     DPY2TRACECTX(dpy);
3845     
3846     va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", num_attributes);
3847     if (attr_list == NULL)
3848         return;
3849     
3850     for (i=0; i<num_attributes; i++) {
3851         va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n");
3852         va_TraceMsg(trace_ctx, "\t  typ = 0x%08x\n", attr_list[i].type);
3853         va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
3854         va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
3855         va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
3856         va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
3857     }
3858     va_TraceMsg(trace_ctx, NULL);
3859 }
3860
3861
3862 void va_TraceGetDisplayAttributes (
3863     VADisplay dpy,
3864     VADisplayAttribute *attr_list,
3865     int num_attributes
3866 )
3867 {
3868     DPY2TRACECTX(dpy);
3869
3870     TRACE_FUNCNAME(idx);
3871
3872     va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
3873 }
3874
3875 void va_TraceSetDisplayAttributes (
3876     VADisplay dpy,
3877     VADisplayAttribute *attr_list,
3878     int num_attributes
3879 )
3880 {
3881     DPY2TRACECTX(dpy);
3882
3883     TRACE_FUNCNAME(idx);
3884
3885     va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
3886 }
3887
3888
3889 void va_TracePutSurface (
3890     VADisplay dpy,
3891     VASurfaceID surface,
3892     void *draw, /* the target Drawable */
3893     short srcx,
3894     short srcy,
3895     unsigned short srcw,
3896     unsigned short srch,
3897     short destx,
3898     short desty,
3899     unsigned short destw,
3900     unsigned short desth,
3901     VARectangle *cliprects, /* client supplied clip list */
3902     unsigned int number_cliprects, /* number of clip rects in the clip list */
3903     unsigned int flags /* de-interlacing flags */
3904 )
3905 {
3906     DPY2TRACECTX(dpy);
3907
3908     TRACE_FUNCNAME(idx);
3909     
3910     va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
3911     va_TraceMsg(trace_ctx, "\tdraw = 0x%08x\n", draw);
3912     va_TraceMsg(trace_ctx, "\tsrcx = %d\n", srcx);
3913     va_TraceMsg(trace_ctx, "\tsrcy = %d\n", srcy);
3914     va_TraceMsg(trace_ctx, "\tsrcw = %d\n", srcw);
3915     va_TraceMsg(trace_ctx, "\tsrch = %d\n", srch);
3916     va_TraceMsg(trace_ctx, "\tdestx = %d\n", destx);
3917     va_TraceMsg(trace_ctx, "\tdesty = %d\n", desty);
3918     va_TraceMsg(trace_ctx, "\tdestw = %d\n", destw);
3919     va_TraceMsg(trace_ctx, "\tdesth = %d\n", desth);
3920     va_TraceMsg(trace_ctx, "\tcliprects = 0x%08x\n", cliprects);
3921     va_TraceMsg(trace_ctx, "\tnumber_cliprects = %d\n", number_cliprects);
3922     va_TraceMsg(trace_ctx, "\tflags = 0x%08x\n", flags);
3923     va_TraceMsg(trace_ctx, NULL);
3924 }