OSDN Git Service

vatrace: print frame_type for VP8 encoding
[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_TraceVAPictureParameterBufferH264(
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     int i;
1489     VAPictureParameterBufferH264 *p = (VAPictureParameterBufferH264*)data;
1490     
1491     DPY2TRACECTX(dpy);
1492
1493     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferH264\n");
1494
1495     va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
1496     va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %d\n", p->CurrPic.frame_idx);
1497     va_TraceMsg(trace_ctx, "\tCurrPic.flags = %d\n", p->CurrPic.flags);
1498     va_TraceMsg(trace_ctx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrderCnt);
1499     va_TraceMsg(trace_ctx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFieldOrderCnt);
1500
1501     va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags:\n");
1502     for (i = 0; i < 16; i++)
1503     {
1504         if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) &&
1505             ((p->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID) == 0)) {
1506             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08x\n",
1507                         p->ReferenceFrames[i].TopFieldOrderCnt,
1508                         p->ReferenceFrames[i].BottomFieldOrderCnt,
1509                         p->ReferenceFrames[i].picture_id,
1510                         p->ReferenceFrames[i].frame_idx,
1511                         p->ReferenceFrames[i].flags);
1512         } else
1513             break;
1514     }
1515     va_TraceMsg(trace_ctx, "\tpicture_width_in_mbs_minus1 = %d\n", p->picture_width_in_mbs_minus1);
1516     va_TraceMsg(trace_ctx, "\tpicture_height_in_mbs_minus1 = %d\n", p->picture_height_in_mbs_minus1);
1517     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8);
1518     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8);
1519     va_TraceMsg(trace_ctx, "\tnum_ref_frames = %d\n", p->num_ref_frames);
1520     va_TraceMsg(trace_ctx, "\tseq fields = %d\n", p->seq_fields.value);
1521     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc);
1522     va_TraceMsg(trace_ctx, "\tresidual_colour_transform_flag = %d\n", p->seq_fields.bits.residual_colour_transform_flag);
1523     va_TraceMsg(trace_ctx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mbs_only_flag);
1524     va_TraceMsg(trace_ctx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits.mb_adaptive_frame_field_flag);
1525     va_TraceMsg(trace_ctx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.direct_8x8_inference_flag);
1526     va_TraceMsg(trace_ctx, "\tMinLumaBiPredSize8x8 = %d\n", p->seq_fields.bits.MinLumaBiPredSize8x8);
1527     va_TraceMsg(trace_ctx, "\tnum_slice_groups_minus1 = %d\n", p->num_slice_groups_minus1);
1528     va_TraceMsg(trace_ctx, "\tslice_group_map_type = %d\n", p->slice_group_map_type);
1529     va_TraceMsg(trace_ctx, "\tslice_group_change_rate_minus1 = %d\n", p->slice_group_change_rate_minus1);
1530     va_TraceMsg(trace_ctx, "\tpic_init_qp_minus26 = %d\n", p->pic_init_qp_minus26);
1531     va_TraceMsg(trace_ctx, "\tpic_init_qs_minus26 = %d\n", p->pic_init_qs_minus26);
1532     va_TraceMsg(trace_ctx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offset);
1533     va_TraceMsg(trace_ctx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_qp_index_offset);
1534     va_TraceMsg(trace_ctx, "\tpic_fields = 0x%03x\n", p->pic_fields.value);
1535     va_TraceFlagIfNotZero(trace_ctx, "\t\tentropy_coding_mode_flag", p->pic_fields.bits.entropy_coding_mode_flag);
1536     va_TraceFlagIfNotZero(trace_ctx, "\t\tweighted_pred_flag", p->pic_fields.bits.weighted_pred_flag);
1537     va_TraceFlagIfNotZero(trace_ctx, "\t\tweighted_bipred_idc", p->pic_fields.bits.weighted_bipred_idc);
1538     va_TraceFlagIfNotZero(trace_ctx, "\t\ttransform_8x8_mode_flag", p->pic_fields.bits.transform_8x8_mode_flag);
1539     va_TraceFlagIfNotZero(trace_ctx, "\t\tfield_pic_flag", p->pic_fields.bits.field_pic_flag);
1540     va_TraceFlagIfNotZero(trace_ctx, "\t\tconstrained_intra_pred_flag", p->pic_fields.bits.constrained_intra_pred_flag);
1541     va_TraceFlagIfNotZero(trace_ctx, "\t\tpic_order_present_flag", p->pic_fields.bits.pic_order_present_flag);
1542     va_TraceFlagIfNotZero(trace_ctx, "\t\tdeblocking_filter_control_present_flag", p->pic_fields.bits.deblocking_filter_control_present_flag);
1543     va_TraceFlagIfNotZero(trace_ctx, "\t\tredundant_pic_cnt_present_flag", p->pic_fields.bits.redundant_pic_cnt_present_flag);
1544     va_TraceFlagIfNotZero(trace_ctx, "\t\treference_pic_flag", p->pic_fields.bits.reference_pic_flag);
1545     va_TraceMsg(trace_ctx, "\tframe_num = %d\n", p->frame_num);
1546     va_TraceMsg(trace_ctx, NULL);
1547
1548     return;
1549 }
1550
1551 static void va_TraceVASliceParameterBufferH264(
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     VASliceParameterBufferH264* p = (VASliceParameterBufferH264*)data;
1562     DPY2TRACECTX(dpy);
1563
1564     trace_ctx->trace_slice_no++;
1565     trace_ctx->trace_slice_size = p->slice_data_size;
1566
1567     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferH264\n");
1568     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
1569     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
1570     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
1571     va_TraceMsg(trace_ctx, "\tslice_data_bit_offset = %d\n", p->slice_data_bit_offset);
1572     va_TraceMsg(trace_ctx, "\tfirst_mb_in_slice = %d\n", p->first_mb_in_slice);
1573     va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type);
1574     va_TraceMsg(trace_ctx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_mv_pred_flag);
1575     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
1576     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
1577     va_TraceMsg(trace_ctx, "\tcabac_init_idc = %d\n", p->cabac_init_idc);
1578     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
1579     va_TraceMsg(trace_ctx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_deblocking_filter_idc);
1580     va_TraceMsg(trace_ctx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_offset_div2);
1581     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
1582
1583     va_TraceMsg(trace_ctx, "\tRefPicList0 =\n");
1584     for (i = 0; i < 32; i++) {
1585         if ((p->RefPicList0[i].picture_id != VA_INVALID_SURFACE) &&
1586             ((p->RefPicList0[i].flags & VA_PICTURE_H264_INVALID) == 0))
1587         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);
1588         else
1589             break;
1590     }
1591     va_TraceMsg(trace_ctx, "\tRefPicList1 =\n");
1592     for (i = 0; i < 32; i++) {
1593         if ((p->RefPicList1[i].picture_id != VA_INVALID_SURFACE) &&
1594             ((p->RefPicList1[i].flags & VA_PICTURE_H264_INVALID) == 0))
1595             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);
1596         else
1597             break;
1598     }
1599
1600     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
1601     va_TraceMsg(trace_ctx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_denom);
1602     va_TraceMsg(trace_ctx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag);
1603
1604     for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
1605         va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
1606             p->luma_weight_l0[i],
1607             p->luma_offset_l0[i]);
1608     }
1609
1610
1611     va_TraceMsg(trace_ctx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag);
1612
1613     for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
1614         va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
1615             p->chroma_weight_l0[i][0],
1616             p->chroma_offset_l0[i][0],
1617             p->chroma_weight_l0[i][1],
1618             p->chroma_offset_l0[i][1]);
1619     }
1620
1621
1622     va_TraceMsg(trace_ctx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag);
1623
1624     for (i = 0; (i <=  p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
1625         va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
1626             p->luma_weight_l1[i],
1627             p->luma_offset_l1[i]);
1628     }
1629
1630
1631     va_TraceMsg(trace_ctx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag);
1632
1633     for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
1634         va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
1635             p->chroma_weight_l1[i][0],
1636             p->chroma_offset_l1[i][0],
1637             p->chroma_weight_l1[i][1],
1638             p->chroma_offset_l1[i][1]);
1639
1640     }
1641     va_TraceMsg(trace_ctx, NULL);
1642 }
1643
1644 static void va_TraceVAIQMatrixBufferH264(
1645     VADisplay dpy,
1646     VAContextID context,
1647     VABufferID buffer,
1648     VABufferType type,
1649     unsigned int size,
1650     unsigned int num_elements,
1651     void *data
1652 )
1653 {
1654     int i, j;
1655     VAIQMatrixBufferH264* p = (VAIQMatrixBufferH264* )data;
1656
1657     DPY2TRACECTX(dpy);
1658
1659     va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferH264\n");
1660
1661     va_TraceMsg(trace_ctx, "\tScalingList4x4[6][16]=\n");
1662     for (i = 0; i < 6; i++) {
1663         for (j = 0; j < 16; j++) {
1664             if (trace_ctx->trace_fp_log) {
1665                 fprintf(trace_ctx->trace_fp_log, "\t%d", p->ScalingList4x4[i][j]);
1666                 if ((j + 1) % 8 == 0)
1667                     fprintf(trace_ctx->trace_fp_log, "\n");
1668             }
1669         }
1670     }
1671
1672     va_TraceMsg(trace_ctx, "\tScalingList8x8[2][64]=\n");
1673     for (i = 0; i < 2; i++) {
1674         for (j = 0; j < 64; j++) {
1675             if (trace_ctx->trace_fp_log) {
1676                 fprintf(trace_ctx->trace_fp_log,"\t%d", p->ScalingList8x8[i][j]);
1677                 if ((j + 1) % 8 == 0)
1678                     fprintf(trace_ctx->trace_fp_log, "\n");
1679             }
1680         }
1681     }
1682
1683     va_TraceMsg(trace_ctx, NULL);
1684 }
1685
1686
1687
1688 static void va_TraceVAEncSequenceParameterBufferH264(
1689     VADisplay dpy,
1690     VAContextID context,
1691     VABufferID buffer,
1692     VABufferType type,
1693     unsigned int size,
1694     unsigned int num_elements,
1695     void *data)
1696 {
1697     VAEncSequenceParameterBufferH264 *p = (VAEncSequenceParameterBufferH264 *)data;
1698     DPY2TRACECTX(dpy);
1699     unsigned int i;
1700
1701     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH264\n");
1702
1703     va_TraceMsg(trace_ctx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id);
1704     va_TraceMsg(trace_ctx, "\tlevel_idc = %d\n", p->level_idc);
1705     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
1706     va_TraceMsg(trace_ctx, "\tintra_idr_period = %d\n", p->intra_idr_period);
1707     va_TraceMsg(trace_ctx, "\tip_period = %d\n", p->ip_period);
1708     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
1709     va_TraceMsg(trace_ctx, "\tmax_num_ref_frames = %d\n", p->max_num_ref_frames);
1710     va_TraceMsg(trace_ctx, "\tpicture_width_in_mbs = %d\n", p->picture_width_in_mbs);
1711     va_TraceMsg(trace_ctx, "\tpicture_height_in_mbs = %d\n", p->picture_height_in_mbs);
1712     va_TraceMsg(trace_ctx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_format_idc);
1713     va_TraceMsg(trace_ctx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mbs_only_flag);
1714     va_TraceMsg(trace_ctx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits.mb_adaptive_frame_field_flag);
1715     va_TraceMsg(trace_ctx, "\tseq_scaling_matrix_present_flag = %d\n", p->seq_fields.bits.seq_scaling_matrix_present_flag);
1716     va_TraceMsg(trace_ctx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.direct_8x8_inference_flag);
1717     va_TraceMsg(trace_ctx, "\tlog2_max_frame_num_minus4 = %d\n", p->seq_fields.bits.log2_max_frame_num_minus4);
1718     va_TraceMsg(trace_ctx, "\tpic_order_cnt_type = %d\n", p->seq_fields.bits.pic_order_cnt_type);
1719     va_TraceMsg(trace_ctx, "\tlog2_max_pic_order_cnt_lsb_minus4 = %d\n", p->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4);
1720     va_TraceMsg(trace_ctx, "\tdelta_pic_order_always_zero_flag = %d\n", p->seq_fields.bits.delta_pic_order_always_zero_flag);
1721     va_TraceMsg(trace_ctx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8);
1722     va_TraceMsg(trace_ctx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_minus8);
1723     va_TraceMsg(trace_ctx, "\tnum_ref_frames_in_pic_order_cnt_cycle = %d\n", p->num_ref_frames_in_pic_order_cnt_cycle);
1724     va_TraceMsg(trace_ctx, "\toffset_for_non_ref_pic = %d\n", p->offset_for_non_ref_pic);
1725     va_TraceMsg(trace_ctx, "\toffset_for_top_to_bottom_field = %d\n", p->offset_for_top_to_bottom_field);
1726     for(i = 0; (i < p->max_num_ref_frames) && (i < 32); ++i)
1727         va_TraceMsg(trace_ctx, "\toffset_for_ref_frame[%d] = %d\n", i, p->offset_for_ref_frame[i]);
1728     va_TraceMsg(trace_ctx, "\tframe_cropping_flag = %d\n", p->frame_cropping_flag);
1729     va_TraceMsg(trace_ctx, "\tframe_crop_left_offset = %d\n", p->frame_crop_left_offset);
1730     va_TraceMsg(trace_ctx, "\tframe_crop_right_offset = %d\n", p->frame_crop_right_offset);
1731     va_TraceMsg(trace_ctx, "\tframe_crop_top_offset = %d\n", p->frame_crop_top_offset);
1732     va_TraceMsg(trace_ctx, "\tframe_crop_bottom_offset = %d\n", p->frame_crop_bottom_offset);
1733     va_TraceMsg(trace_ctx, "\tvui_parameters_present_flag = %d\n", p->vui_parameters_present_flag);
1734     va_TraceMsg(trace_ctx, "\taspect_ratio_info_present_flag = %d\n", p->vui_fields.bits.aspect_ratio_info_present_flag);
1735     va_TraceMsg(trace_ctx, "\ttiming_info_present_flag = %d\n", p->vui_fields.bits.timing_info_present_flag);
1736     va_TraceMsg(trace_ctx, "\tbitstream_restriction_flag = %d\n", p->vui_fields.bits.bitstream_restriction_flag);
1737     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_horizontal = %d\n", p->vui_fields.bits.log2_max_mv_length_horizontal);
1738     va_TraceMsg(trace_ctx, "\tlog2_max_mv_length_vertical = %d\n", p->vui_fields.bits.log2_max_mv_length_vertical);
1739     va_TraceMsg(trace_ctx, "\taspect_ratio_idc = %d\n", p->aspect_ratio_idc);
1740     va_TraceMsg(trace_ctx, "\tsar_width = %d\n", p->sar_width);
1741     va_TraceMsg(trace_ctx, "\tsar_height = %d\n", p->sar_height);
1742     va_TraceMsg(trace_ctx, "\tnum_units_in_tick = %d\n", p->num_units_in_tick);
1743     va_TraceMsg(trace_ctx, "\ttime_scale = %d\n", p->time_scale);
1744
1745     va_TraceMsg(trace_ctx, NULL);
1746
1747     return;
1748 }
1749
1750
1751 static void va_TraceVAEncPictureParameterBufferH264(
1752     VADisplay dpy,
1753     VAContextID context,
1754     VABufferID buffer,
1755     VABufferType type,
1756     unsigned int size,
1757     unsigned int num_elements,
1758     void *data)
1759 {
1760     VAEncPictureParameterBufferH264 *p = (VAEncPictureParameterBufferH264 *)data;
1761     DPY2TRACECTX(dpy);
1762     int i;
1763
1764     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH264\n");
1765
1766     va_TraceMsg(trace_ctx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
1767     va_TraceMsg(trace_ctx, "\tCurrPic.frame_idx = %d\n", p->CurrPic.frame_idx);
1768     va_TraceMsg(trace_ctx, "\tCurrPic.flags = %d\n", p->CurrPic.flags);
1769     va_TraceMsg(trace_ctx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrderCnt);
1770     va_TraceMsg(trace_ctx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFieldOrderCnt);
1771     va_TraceMsg(trace_ctx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
1772     for (i = 0; i < 16; i++)
1773     {
1774         if ((p->ReferenceFrames[i].picture_id != VA_INVALID_SURFACE) &&
1775             ((p->ReferenceFrames[i].flags & VA_PICTURE_H264_INVALID) == 0)) {
1776             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08x\n",
1777                         p->ReferenceFrames[i].TopFieldOrderCnt,
1778                         p->ReferenceFrames[i].BottomFieldOrderCnt,
1779                         p->ReferenceFrames[i].picture_id,
1780                         p->ReferenceFrames[i].frame_idx,
1781                         p->ReferenceFrames[i].flags
1782                         );
1783         } else
1784             break;
1785     }
1786     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
1787     va_TraceMsg(trace_ctx, "\tpic_parameter_set_id = %d\n", p->pic_parameter_set_id);
1788     va_TraceMsg(trace_ctx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id);
1789     va_TraceMsg(trace_ctx, "\tlast_picture = 0x%08x\n", p->last_picture);
1790     va_TraceMsg(trace_ctx, "\tframe_num = %d\n", p->frame_num);
1791     va_TraceMsg(trace_ctx, "\tpic_init_qp = %d\n", p->pic_init_qp);
1792     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_active_minus1);
1793     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
1794     va_TraceMsg(trace_ctx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offset);
1795     va_TraceMsg(trace_ctx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_qp_index_offset);
1796     va_TraceMsg(trace_ctx, "\tpic_fields = 0x%03x\n", p->pic_fields.value);
1797     va_TraceMsg(trace_ctx, "\tidr_pic_flag = %d\n", p->pic_fields.bits.idr_pic_flag);
1798     va_TraceMsg(trace_ctx, "\treference_pic_flag = %d\n", p->pic_fields.bits.reference_pic_flag);
1799     va_TraceMsg(trace_ctx, "\tentropy_coding_mode_flag = %d\n", p->pic_fields.bits.entropy_coding_mode_flag);
1800     va_TraceMsg(trace_ctx, "\tweighted_pred_flag = %d\n", p->pic_fields.bits.weighted_pred_flag);
1801     va_TraceMsg(trace_ctx, "\tweighted_bipred_idc = %d\n", p->pic_fields.bits.weighted_bipred_idc);
1802     va_TraceMsg(trace_ctx, "\tconstrained_intra_pred_flag = %d\n", p->pic_fields.bits.constrained_intra_pred_flag);
1803     va_TraceMsg(trace_ctx, "\ttransform_8x8_mode_flag = %d\n", p->pic_fields.bits.transform_8x8_mode_flag);
1804     va_TraceMsg(trace_ctx, "\tdeblocking_filter_control_present_flag = %d\n", p->pic_fields.bits.deblocking_filter_control_present_flag);
1805     va_TraceMsg(trace_ctx, "\tredundant_pic_cnt_present_flag = %d\n", p->pic_fields.bits.redundant_pic_cnt_present_flag);
1806     va_TraceMsg(trace_ctx, "\tpic_order_present_flag = %d\n", p->pic_fields.bits.pic_order_present_flag);
1807     va_TraceMsg(trace_ctx, "\tpic_scaling_matrix_present_flag = %d\n", p->pic_fields.bits.pic_scaling_matrix_present_flag);
1808
1809     va_TraceMsg(trace_ctx, NULL);
1810
1811     return;
1812 }
1813
1814 static void va_TraceVAEncSliceParameterBuffer(
1815     VADisplay dpy,
1816     VAContextID context,
1817     VABufferID buffer,
1818     VABufferType type,
1819     unsigned int size,
1820     unsigned int num_elements,
1821     void *data)
1822 {
1823     VAEncSliceParameterBuffer* p = (VAEncSliceParameterBuffer*)data;
1824     DPY2TRACECTX(dpy);
1825     
1826     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBuffer\n");
1827     
1828     va_TraceMsg(trace_ctx, "\tstart_row_number = %d\n", p->start_row_number);
1829     va_TraceMsg(trace_ctx, "\tslice_height = %d\n", p->slice_height);
1830     va_TraceMsg(trace_ctx, "\tslice_flags.is_intra = %d\n", p->slice_flags.bits.is_intra);
1831     va_TraceMsg(trace_ctx, "\tslice_flags.disable_deblocking_filter_idc = %d\n", p->slice_flags.bits.disable_deblocking_filter_idc);
1832     va_TraceMsg(trace_ctx, "\tslice_flags.uses_long_term_ref = %d\n", p->slice_flags.bits.uses_long_term_ref);
1833     va_TraceMsg(trace_ctx, "\tslice_flags.is_long_term_ref = %d\n", p->slice_flags.bits.is_long_term_ref);
1834     va_TraceMsg(trace_ctx, NULL);
1835
1836     return;
1837 }
1838
1839 static void va_TraceVAEncSliceParameterBufferH264(
1840     VADisplay dpy,
1841     VAContextID context,
1842     VABufferID buffer,
1843     VABufferType type,
1844     unsigned int size,
1845     unsigned int num_elements,
1846     void *data)
1847 {
1848     VAEncSliceParameterBufferH264* p = (VAEncSliceParameterBufferH264*)data;
1849     DPY2TRACECTX(dpy);
1850     int i;
1851
1852     if (!p)
1853         return;
1854     
1855     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferH264\n");
1856     va_TraceMsg(trace_ctx, "\tmacroblock_address = %d\n", p->macroblock_address);
1857     va_TraceMsg(trace_ctx, "\tnum_macroblocks = %d\n", p->num_macroblocks);
1858     va_TraceMsg(trace_ctx, "\tmacroblock_info = %08x\n", p->macroblock_info);
1859     va_TraceMsg(trace_ctx, "\tslice_type = %d\n", p->slice_type);
1860     va_TraceMsg(trace_ctx, "\tpic_parameter_set_id = %d\n", p->pic_parameter_set_id);
1861     va_TraceMsg(trace_ctx, "\tidr_pic_id = %d\n", p->idr_pic_id);
1862     va_TraceMsg(trace_ctx, "\tpic_order_cnt_lsb = %d\n", p->pic_order_cnt_lsb);
1863     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt_bottom = %d\n", p->delta_pic_order_cnt_bottom);
1864     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt[0] = %d\n", p->delta_pic_order_cnt[0]);
1865     va_TraceMsg(trace_ctx, "\tdelta_pic_order_cnt[1] = %d\n", p->delta_pic_order_cnt[1]);
1866     va_TraceMsg(trace_ctx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_mv_pred_flag);
1867     va_TraceMsg(trace_ctx, "\tnum_ref_idx_active_override_flag = %d\n", p->num_ref_idx_active_override_flag);
1868     va_TraceMsg(trace_ctx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_active_minus1);
1869     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
1870
1871     va_TraceMsg(trace_ctx, "\tRefPicList0 (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
1872
1873     
1874     
1875     for (i = 0; i < 32; i++) {
1876         if ((p->RefPicList0[i].picture_id != VA_INVALID_SURFACE) &&
1877             ((p->RefPicList0[i].flags & VA_PICTURE_H264_INVALID) == 0))
1878             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08x\n",
1879                         p->RefPicList0[i].TopFieldOrderCnt,
1880                         p->RefPicList0[i].BottomFieldOrderCnt,
1881                         p->RefPicList0[i].picture_id,
1882                         p->RefPicList0[i].frame_idx,
1883                         p->RefPicList0[i].flags);
1884         else
1885             break;
1886     }
1887     
1888     va_TraceMsg(trace_ctx, "\tRefPicList1 (TopFieldOrderCnt-BottomFieldOrderCnt-picture_id-frame_idx-flags):\n");
1889     for (i = 0; i < 32; i++) {
1890         if ((p->RefPicList1[i].picture_id != VA_INVALID_SURFACE) &&
1891             ((p->RefPicList1[i].flags & VA_PICTURE_H264_INVALID) == 0))
1892             va_TraceMsg(trace_ctx, "\t\t%08d-%08d-0x%08x-%08d-0x%08d\n",
1893                         p->RefPicList1[i].TopFieldOrderCnt,
1894                         p->RefPicList1[i].BottomFieldOrderCnt,
1895                         p->RefPicList1[i].picture_id,
1896                         p->RefPicList1[i].frame_idx,
1897                         p->RefPicList1[i].flags
1898                         );
1899         else
1900             break;
1901     }
1902     
1903     va_TraceMsg(trace_ctx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_denom);
1904     va_TraceMsg(trace_ctx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_denom);
1905     va_TraceMsg(trace_ctx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag);
1906     if (p->luma_weight_l0_flag) {
1907         for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
1908             va_TraceMsg(trace_ctx, "\t\t%d\t%d\n",
1909                         p->luma_weight_l0[i],
1910                         p->luma_offset_l0[i]);
1911         }
1912     }
1913
1914     va_TraceMsg(trace_ctx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag);
1915     if (p->chroma_weight_l0_flag) {
1916         for (i = 0; (i <= p->num_ref_idx_l0_active_minus1) && (i<32); i++) {
1917             va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
1918                         p->chroma_weight_l0[i][0],
1919                         p->chroma_offset_l0[i][0],
1920                         p->chroma_weight_l0[i][1],
1921                         p->chroma_offset_l0[i][1]);
1922         }
1923     }
1924
1925     va_TraceMsg(trace_ctx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag);
1926     if (p->luma_weight_l1_flag) {
1927         for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
1928             va_TraceMsg(trace_ctx, "\t\t%d\t\t%d\n",
1929                         p->luma_weight_l1[i],
1930                         p->luma_offset_l1[i]);
1931         }
1932     }
1933
1934     va_TraceMsg(trace_ctx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag);
1935     if (p->chroma_weight_l1_flag && p->num_ref_idx_l1_active_minus1 < 32) {
1936         for (i = 0; (i <= p->num_ref_idx_l1_active_minus1) && (i<32); i++) {
1937             va_TraceMsg(trace_ctx, "\t\t%d\t%d\t%d\t%d\n",
1938                         p->chroma_weight_l1[i][0],
1939                         p->chroma_offset_l1[i][0],
1940                         p->chroma_weight_l1[i][1],
1941                         p->chroma_offset_l1[i][1]);
1942         }
1943     }
1944     va_TraceMsg(trace_ctx, NULL);
1945
1946     va_TraceMsg(trace_ctx, "\tcabac_init_idc = %d\n", p->cabac_init_idc);
1947     va_TraceMsg(trace_ctx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
1948     va_TraceMsg(trace_ctx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_deblocking_filter_idc);
1949     va_TraceMsg(trace_ctx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_offset_div2);
1950     va_TraceMsg(trace_ctx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div2);
1951     va_TraceMsg(trace_ctx, NULL);
1952
1953     return;
1954 }
1955
1956
1957 static void va_TraceVAEncPackedHeaderParameterBufferType(
1958     VADisplay dpy,
1959     VAContextID context,
1960     VABufferID buffer,
1961     VABufferType type,
1962     unsigned int size,
1963     unsigned int num_elements,
1964     void *data)
1965 {
1966     VAEncPackedHeaderParameterBuffer* p = (VAEncPackedHeaderParameterBuffer*)data;
1967     DPY2TRACECTX(dpy);
1968     int i;
1969
1970     if (!p)
1971         return;
1972     va_TraceMsg(trace_ctx, "\t--VAEncPackedHeaderParameterBuffer\n");
1973     va_TraceMsg(trace_ctx, "\ttype = 0x%08x\n", p->type);
1974     va_TraceMsg(trace_ctx, "\tbit_length = %d\n", p->bit_length);
1975     va_TraceMsg(trace_ctx, "\thas_emulation_bytes = %d\n", p->has_emulation_bytes);
1976     va_TraceMsg(trace_ctx, NULL);
1977
1978     return;
1979 }
1980
1981 static void va_TraceVAEncMiscParameterBuffer(
1982     VADisplay dpy,
1983     VAContextID context,
1984     VABufferID buffer,
1985     VABufferType type,
1986     unsigned int size,
1987     unsigned int num_elements,
1988     void *data)
1989 {
1990     VAEncMiscParameterBuffer* tmp = (VAEncMiscParameterBuffer*)data;
1991     DPY2TRACECTX(dpy);
1992     
1993     switch (tmp->type) {
1994     case VAEncMiscParameterTypeFrameRate:
1995     {
1996         VAEncMiscParameterFrameRate *p = (VAEncMiscParameterFrameRate *)tmp->data;
1997         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterFrameRate\n");
1998         va_TraceMsg(trace_ctx, "\tframerate = %d\n", p->framerate);
1999         
2000         break;
2001     }
2002     case VAEncMiscParameterTypeRateControl:
2003     {
2004         VAEncMiscParameterRateControl *p = (VAEncMiscParameterRateControl *)tmp->data;
2005
2006         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterRateControl\n");
2007         va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2008         va_TraceMsg(trace_ctx, "\ttarget_percentage = %d\n", p->target_percentage);
2009         va_TraceMsg(trace_ctx, "\twindow_size = %d\n", p->window_size);
2010         va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
2011         va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
2012         va_TraceMsg(trace_ctx, "\tbasic_unit_size = %d\n", p->basic_unit_size);
2013         va_TraceMsg(trace_ctx, "\trc_flags.reset = %d \n", p->rc_flags.bits.reset);
2014         va_TraceMsg(trace_ctx, "\trc_flags.disable_frame_skip = %d\n", p->rc_flags.bits.disable_frame_skip);
2015         va_TraceMsg(trace_ctx, "\trc_flags.disable_bit_stuffing = %d\n", p->rc_flags.bits.disable_bit_stuffing);
2016         break;
2017     }
2018     case VAEncMiscParameterTypeMaxSliceSize:
2019     {
2020         VAEncMiscParameterMaxSliceSize *p = (VAEncMiscParameterMaxSliceSize *)tmp->data;
2021         
2022         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxSliceSize\n");
2023         va_TraceMsg(trace_ctx, "\tmax_slice_size = %d\n", p->max_slice_size);
2024         break;
2025     }
2026     case VAEncMiscParameterTypeAIR:
2027     {
2028         VAEncMiscParameterAIR *p = (VAEncMiscParameterAIR *)tmp->data;
2029         
2030         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterAIR\n");
2031         va_TraceMsg(trace_ctx, "\tair_num_mbs = %d\n", p->air_num_mbs);
2032         va_TraceMsg(trace_ctx, "\tair_threshold = %d\n", p->air_threshold);
2033         va_TraceMsg(trace_ctx, "\tair_auto = %d\n", p->air_auto);
2034         break;
2035     }
2036     case VAEncMiscParameterTypeHRD:
2037     {
2038         VAEncMiscParameterHRD *p = (VAEncMiscParameterHRD *)tmp->data;
2039
2040         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterHRD\n");
2041         va_TraceMsg(trace_ctx, "\tinitial_buffer_fullness = %d\n", p->initial_buffer_fullness);
2042         va_TraceMsg(trace_ctx, "\tbuffer_size = %d\n", p->buffer_size);
2043         break;
2044     }
2045     case VAEncMiscParameterTypeMaxFrameSize:
2046     {
2047         VAEncMiscParameterBufferMaxFrameSize *p = (VAEncMiscParameterBufferMaxFrameSize *)tmp->data;
2048
2049         va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxFrameSize\n");
2050         va_TraceMsg(trace_ctx, "\tmax_frame_size = %d\n", p->max_frame_size);
2051         break;
2052     }
2053     default:
2054         va_TraceMsg(trace_ctx, "Unknown VAEncMiscParameterBuffer(type = %d):\n", tmp->type);
2055         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, data);
2056         break;
2057     }
2058     va_TraceMsg(trace_ctx, NULL);
2059
2060     return;
2061 }
2062
2063
2064 static void va_TraceVAPictureParameterBufferVC1(
2065     VADisplay dpy,
2066     VAContextID context,
2067     VABufferID buffer,
2068     VABufferType type,
2069     unsigned int size,
2070     unsigned int num_elements,
2071     void *data
2072 )
2073 {
2074     VAPictureParameterBufferVC1* p = (VAPictureParameterBufferVC1*)data;
2075     DPY2TRACECTX(dpy);
2076     
2077     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVC1\n");
2078     
2079     va_TraceMsg(trace_ctx, "\tforward_reference_picture = 0x%08x\n", p->forward_reference_picture);
2080     va_TraceMsg(trace_ctx, "\tbackward_reference_picture = 0x%08x\n", p->backward_reference_picture);
2081     va_TraceMsg(trace_ctx, "\tinloop_decoded_picture = 0x%08x\n", p->inloop_decoded_picture);
2082     
2083     va_TraceMsg(trace_ctx, "\tpulldown = %d\n", p->sequence_fields.bits.pulldown);
2084     va_TraceMsg(trace_ctx, "\tinterlace = %d\n", p->sequence_fields.bits.interlace);
2085     va_TraceMsg(trace_ctx, "\ttfcntrflag = %d\n", p->sequence_fields.bits.tfcntrflag);
2086     va_TraceMsg(trace_ctx, "\tfinterpflag = %d\n", p->sequence_fields.bits.finterpflag);
2087     va_TraceMsg(trace_ctx, "\tpsf = %d\n", p->sequence_fields.bits.psf);
2088     va_TraceMsg(trace_ctx, "\tmultires = %d\n", p->sequence_fields.bits.multires);
2089     va_TraceMsg(trace_ctx, "\toverlap = %d\n", p->sequence_fields.bits.overlap);
2090     va_TraceMsg(trace_ctx, "\tsyncmarker = %d\n", p->sequence_fields.bits.syncmarker);
2091     va_TraceMsg(trace_ctx, "\trangered = %d\n", p->sequence_fields.bits.rangered);
2092     va_TraceMsg(trace_ctx, "\tmax_b_frames = %d\n", p->sequence_fields.bits.max_b_frames);
2093     va_TraceMsg(trace_ctx, "\tprofile = %d\n", p->sequence_fields.bits.profile);
2094     va_TraceMsg(trace_ctx, "\tcoded_width = %d\n", p->coded_width);
2095     va_TraceMsg(trace_ctx, "\tcoded_height = %d\n", p->coded_height);
2096     va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry);
2097     va_TraceMsg(trace_ctx, "\tbroken_link = %d\n", p->entrypoint_fields.bits.broken_link);
2098     va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry);
2099     va_TraceMsg(trace_ctx, "\tpanscan_flag = %d\n", p->entrypoint_fields.bits.panscan_flag);
2100     va_TraceMsg(trace_ctx, "\tloopfilter = %d\n", p->entrypoint_fields.bits.loopfilter);
2101     va_TraceMsg(trace_ctx, "\tconditional_overlap_flag = %d\n", p->conditional_overlap_flag);
2102     va_TraceMsg(trace_ctx, "\tfast_uvmc_flag = %d\n", p->fast_uvmc_flag);
2103     va_TraceMsg(trace_ctx, "\trange_mapping_luma_flag = %d\n", p->range_mapping_fields.bits.luma_flag);
2104     va_TraceMsg(trace_ctx, "\trange_mapping_luma = %d\n", p->range_mapping_fields.bits.luma);
2105     va_TraceMsg(trace_ctx, "\trange_mapping_chroma_flag = %d\n", p->range_mapping_fields.bits.chroma_flag);
2106     va_TraceMsg(trace_ctx, "\trange_mapping_chroma = %d\n", p->range_mapping_fields.bits.chroma);
2107     va_TraceMsg(trace_ctx, "\tb_picture_fraction = %d\n", p->b_picture_fraction);
2108     va_TraceMsg(trace_ctx, "\tcbp_table = %d\n", p->cbp_table);
2109     va_TraceMsg(trace_ctx, "\tmb_mode_table = %d\n", p->mb_mode_table);
2110     va_TraceMsg(trace_ctx, "\trange_reduction_frame = %d\n", p->range_reduction_frame);
2111     va_TraceMsg(trace_ctx, "\trounding_control = %d\n", p->rounding_control);
2112     va_TraceMsg(trace_ctx, "\tpost_processing = %d\n", p->post_processing);
2113     va_TraceMsg(trace_ctx, "\tpicture_resolution_index = %d\n", p->picture_resolution_index);
2114     va_TraceMsg(trace_ctx, "\tluma_scale = %d\n", p->luma_scale);
2115     va_TraceMsg(trace_ctx, "\tluma_shift = %d\n", p->luma_shift);
2116     va_TraceMsg(trace_ctx, "\tpicture_type = %d\n", p->picture_fields.bits.picture_type);
2117     va_TraceMsg(trace_ctx, "\tframe_coding_mode = %d\n", p->picture_fields.bits.frame_coding_mode);
2118     va_TraceMsg(trace_ctx, "\ttop_field_first = %d\n", p->picture_fields.bits.top_field_first);
2119     va_TraceMsg(trace_ctx, "\tis_first_field = %d\n", p->picture_fields.bits.is_first_field);
2120     va_TraceMsg(trace_ctx, "\tintensity_compensation = %d\n", p->picture_fields.bits.intensity_compensation);
2121     va_TraceMsg(trace_ctx, "\tmv_type_mb = %d\n", p->raw_coding.flags.mv_type_mb);
2122     va_TraceMsg(trace_ctx, "\tdirect_mb = %d\n", p->raw_coding.flags.direct_mb);
2123     va_TraceMsg(trace_ctx, "\tskip_mb = %d\n", p->raw_coding.flags.skip_mb);
2124     va_TraceMsg(trace_ctx, "\tfield_tx = %d\n", p->raw_coding.flags.field_tx);
2125     va_TraceMsg(trace_ctx, "\tforward_mb = %d\n", p->raw_coding.flags.forward_mb);
2126     va_TraceMsg(trace_ctx, "\tac_pred = %d\n", p->raw_coding.flags.ac_pred);
2127     va_TraceMsg(trace_ctx, "\toverflags = %d\n", p->raw_coding.flags.overflags);
2128     va_TraceMsg(trace_ctx, "\tbp_mv_type_mb = %d\n", p->bitplane_present.flags.bp_mv_type_mb);
2129     va_TraceMsg(trace_ctx, "\tbp_direct_mb = %d\n", p->bitplane_present.flags.bp_direct_mb);
2130     va_TraceMsg(trace_ctx, "\tbp_skip_mb = %d\n", p->bitplane_present.flags.bp_skip_mb);
2131     va_TraceMsg(trace_ctx, "\tbp_field_tx = %d\n", p->bitplane_present.flags.bp_field_tx);
2132     va_TraceMsg(trace_ctx, "\tbp_forward_mb = %d\n", p->bitplane_present.flags.bp_forward_mb);
2133     va_TraceMsg(trace_ctx, "\tbp_ac_pred = %d\n", p->bitplane_present.flags.bp_ac_pred);
2134     va_TraceMsg(trace_ctx, "\tbp_overflags = %d\n", p->bitplane_present.flags.bp_overflags);
2135     va_TraceMsg(trace_ctx, "\treference_distance_flag = %d\n", p->reference_fields.bits.reference_distance_flag);
2136     va_TraceMsg(trace_ctx, "\treference_distance = %d\n", p->reference_fields.bits.reference_distance);
2137     va_TraceMsg(trace_ctx, "\tnum_reference_pictures = %d\n", p->reference_fields.bits.num_reference_pictures);
2138     va_TraceMsg(trace_ctx, "\treference_field_pic_indicator = %d\n", p->reference_fields.bits.reference_field_pic_indicator);
2139     va_TraceMsg(trace_ctx, "\tmv_mode = %d\n", p->mv_fields.bits.mv_mode);
2140     va_TraceMsg(trace_ctx, "\tmv_mode2 = %d\n", p->mv_fields.bits.mv_mode2);
2141     va_TraceMsg(trace_ctx, "\tmv_table = %d\n", p->mv_fields.bits.mv_table);
2142     va_TraceMsg(trace_ctx, "\ttwo_mv_block_pattern_table = %d\n", p->mv_fields.bits.two_mv_block_pattern_table);
2143     va_TraceMsg(trace_ctx, "\tfour_mv_switch = %d\n", p->mv_fields.bits.four_mv_switch);
2144     va_TraceMsg(trace_ctx, "\tfour_mv_block_pattern_table = %d\n", p->mv_fields.bits.four_mv_block_pattern_table);
2145     va_TraceMsg(trace_ctx, "\textended_mv_flag = %d\n", p->mv_fields.bits.extended_mv_flag);
2146     va_TraceMsg(trace_ctx, "\textended_mv_range = %d\n", p->mv_fields.bits.extended_mv_range);
2147     va_TraceMsg(trace_ctx, "\textended_dmv_flag = %d\n", p->mv_fields.bits.extended_dmv_flag);
2148     va_TraceMsg(trace_ctx, "\textended_dmv_range = %d\n", p->mv_fields.bits.extended_dmv_range);
2149     va_TraceMsg(trace_ctx, "\tdquant = %d\n", p->pic_quantizer_fields.bits.dquant);
2150     va_TraceMsg(trace_ctx, "\tquantizer = %d\n", p->pic_quantizer_fields.bits.quantizer);
2151     va_TraceMsg(trace_ctx, "\thalf_qp = %d\n", p->pic_quantizer_fields.bits.half_qp);
2152     va_TraceMsg(trace_ctx, "\tpic_quantizer_scale = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_scale);
2153     va_TraceMsg(trace_ctx, "\tpic_quantizer_type = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_type);
2154     va_TraceMsg(trace_ctx, "\tdq_frame = %d\n", p->pic_quantizer_fields.bits.dq_frame);
2155     va_TraceMsg(trace_ctx, "\tdq_profile = %d\n", p->pic_quantizer_fields.bits.dq_profile);
2156     va_TraceMsg(trace_ctx, "\tdq_sb_edge = %d\n", p->pic_quantizer_fields.bits.dq_sb_edge);
2157     va_TraceMsg(trace_ctx, "\tdq_db_edge = %d\n", p->pic_quantizer_fields.bits.dq_db_edge);
2158     va_TraceMsg(trace_ctx, "\tdq_binary_level = %d\n", p->pic_quantizer_fields.bits.dq_binary_level);
2159     va_TraceMsg(trace_ctx, "\talt_pic_quantizer = %d\n", p->pic_quantizer_fields.bits.alt_pic_quantizer);
2160     va_TraceMsg(trace_ctx, "\tvariable_sized_transform_flag = %d\n", p->transform_fields.bits.variable_sized_transform_flag);
2161     va_TraceMsg(trace_ctx, "\tmb_level_transform_type_flag = %d\n", p->transform_fields.bits.mb_level_transform_type_flag);
2162     va_TraceMsg(trace_ctx, "\tframe_level_transform_type = %d\n", p->transform_fields.bits.frame_level_transform_type);
2163     va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx1 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx1);
2164     va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx2 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx2);
2165     va_TraceMsg(trace_ctx, "\tintra_transform_dc_table = %d\n", p->transform_fields.bits.intra_transform_dc_table);
2166     va_TraceMsg(trace_ctx, NULL);
2167 }
2168
2169 static void va_TraceVASliceParameterBufferVC1(
2170     VADisplay dpy,
2171     VAContextID context,
2172     VABufferID buffer,
2173     VABufferType type,
2174     unsigned int size,
2175     unsigned int num_elements,
2176     void* data
2177 )
2178 {
2179     VASliceParameterBufferVC1 *p = (VASliceParameterBufferVC1*)data;
2180     DPY2TRACECTX(dpy);
2181
2182     trace_ctx->trace_slice_no++;
2183     trace_ctx->trace_slice_size = p->slice_data_size;
2184
2185     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVC1\n");
2186     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
2187     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
2188     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
2189     va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
2190     va_TraceMsg(trace_ctx, "\tslice_vertical_position = %d\n", p->slice_vertical_position);
2191     va_TraceMsg(trace_ctx, NULL);
2192 }
2193
2194 static void va_TraceVAPictureParameterBufferVP8(
2195     VADisplay dpy,
2196     VAContextID context,
2197     VABufferID buffer,
2198     VABufferType type,
2199     unsigned int size,
2200     unsigned int num_elements,
2201     void *data)
2202 {
2203     char tmp[1024];
2204     VAPictureParameterBufferVP8 *p = (VAPictureParameterBufferVP8 *)data;
2205     DPY2TRACECTX(dpy);
2206     int i,j;
2207
2208     va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVP8\n");
2209
2210     va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
2211     va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
2212     va_TraceMsg(trace_ctx, "\tlast_ref_frame = %x\n", p->last_ref_frame);
2213     va_TraceMsg(trace_ctx, "\tgolden_ref_frame = %x\n", p->golden_ref_frame);
2214     va_TraceMsg(trace_ctx, "\talt_ref_frame = %x\n", p->alt_ref_frame);
2215     va_TraceMsg(trace_ctx, "\tout_of_loop_frame = %x\n", p->out_of_loop_frame);
2216
2217     va_TraceMsg(trace_ctx, "\tkey_frame = %d\n", p->pic_fields.bits.key_frame);
2218     va_TraceMsg(trace_ctx, "\tversion = %d\n", p->pic_fields.bits.version);
2219     va_TraceMsg(trace_ctx, "\tsegmentation_enabled = %d\n", p->pic_fields.bits.segmentation_enabled);
2220     va_TraceMsg(trace_ctx, "\tupdate_mb_segmentation_map = %d\n", p->pic_fields.bits.update_mb_segmentation_map);
2221     va_TraceMsg(trace_ctx, "\tupdate_segment_feature_data = %d\n", p->pic_fields.bits.update_segment_feature_data);
2222     va_TraceMsg(trace_ctx, "\tfilter_type = %d\n", p->pic_fields.bits.filter_type);
2223     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->pic_fields.bits.sharpness_level);
2224     va_TraceMsg(trace_ctx, "\tloop_filter_adj_enable = %d\n", p->pic_fields.bits.loop_filter_adj_enable);
2225     va_TraceMsg(trace_ctx, "\tmode_ref_lf_delta_update = %d\n", p->pic_fields.bits.mode_ref_lf_delta_update);
2226     va_TraceMsg(trace_ctx, "\tsign_bias_golden = %d\n", p->pic_fields.bits.sign_bias_golden);
2227     va_TraceMsg(trace_ctx, "\tsign_bias_alternate = %d\n", p->pic_fields.bits.sign_bias_alternate);
2228     va_TraceMsg(trace_ctx, "\tmb_no_coeff_skip = %d\n", p->pic_fields.bits.mb_no_coeff_skip);
2229     va_TraceMsg(trace_ctx, "\tloop_filter_disable = %d\n", p->pic_fields.bits.loop_filter_disable);
2230
2231     va_TraceMsg(trace_ctx, "\tmb_segment_tree_probs: 0x%2x, 0x%2x, 0x%2x\n",
2232         p->mb_segment_tree_probs[0], p->mb_segment_tree_probs[1], p->mb_segment_tree_probs[2]);
2233
2234     va_TraceMsg(trace_ctx, "\tloop_filter_level: %d, %d, %d, %d\n",
2235         p->loop_filter_level[0], p->loop_filter_level[1], p->loop_filter_level[2], p->loop_filter_level[3]);
2236
2237     va_TraceMsg(trace_ctx, "\tloop_filter_deltas_ref_frame: %d, %d, %d, %d\n",
2238         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]);
2239
2240     va_TraceMsg(trace_ctx, "\tloop_filter_deltas_mode: %d, %d, %d, %d\n",
2241         p->loop_filter_deltas_mode[0], p->loop_filter_deltas_mode[1], p->loop_filter_deltas_mode[2], p->loop_filter_deltas_mode[3]);
2242
2243     va_TraceMsg(trace_ctx, "\tprob_skip_false = %2x\n", p->prob_skip_false);
2244     va_TraceMsg(trace_ctx, "\tprob_intra = %2x\n", p->prob_intra);
2245     va_TraceMsg(trace_ctx, "\tprob_last = %2x\n", p->prob_last);
2246     va_TraceMsg(trace_ctx, "\tprob_gf = %2x\n", p->prob_gf);
2247
2248     va_TraceMsg(trace_ctx, "\ty_mode_probs: 0x%2x, 0x%2x, 0x%2x, 0x%2x\n",
2249         p->y_mode_probs[0], p->y_mode_probs[1], p->y_mode_probs[2], p->y_mode_probs[3]);
2250
2251     va_TraceMsg(trace_ctx, "\tuv_mode_probs: 0x%2x, 0x%2x, 0x%2x\n",
2252         p->uv_mode_probs[0], p->uv_mode_probs[1], p->uv_mode_probs[2]);
2253
2254     va_TraceMsg(trace_ctx, "\tmv_probs[2][19]:\n");
2255     for(i = 0; i<2; ++i) {
2256         memset(tmp, 0, sizeof tmp);
2257         for (j=0; j<19; j++)
2258             sprintf(tmp + strlen(tmp), "%2x ", p->mv_probs[i][j]);
2259         va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
2260     }
2261
2262     va_TraceMsg(trace_ctx, "\tbool_coder_ctx: range = %02x, value = %02x, count = %d\n",
2263         p->bool_coder_ctx.range, p->bool_coder_ctx.value, p->bool_coder_ctx.count);
2264
2265     va_TraceMsg(trace_ctx, NULL);
2266
2267     return;
2268 }
2269
2270 static void va_TraceVASliceParameterBufferVP8(
2271     VADisplay dpy,
2272     VAContextID context,
2273     VABufferID buffer,
2274     VABufferType type,
2275     unsigned int size,
2276     unsigned int num_elements,
2277     void *data)
2278 {
2279     VASliceParameterBufferVP8 *p = (VASliceParameterBufferVP8 *)data;
2280     DPY2TRACECTX(dpy);
2281     int i;
2282
2283     va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVP8\n");
2284
2285     va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
2286     va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
2287     va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
2288     va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
2289     va_TraceMsg(trace_ctx, "\tnum_of_partitions = %d\n", p->num_of_partitions);
2290
2291     for(i = 0; i<9; ++i)
2292         va_TraceMsg(trace_ctx, "\tpartition_size[%d] = %d\n", i, p->partition_size[i]);
2293
2294     va_TraceMsg(trace_ctx, NULL);
2295
2296     return;
2297 }
2298
2299 static void va_TraceVAIQMatrixBufferVP8(
2300     VADisplay dpy,
2301     VAContextID context,
2302     VABufferID buffer,
2303     VABufferType type,
2304     unsigned int size,
2305     unsigned int num_elements,
2306     void *data)
2307 {
2308     char tmp[1024];
2309     VAIQMatrixBufferVP8 *p = (VAIQMatrixBufferVP8 *)data;
2310     DPY2TRACECTX(dpy);
2311     int i,j;
2312
2313     va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferVP8\n");
2314
2315     va_TraceMsg(trace_ctx, "\tquantization_index[4][6]=\n");
2316     for (i = 0; i < 4; i++) {
2317         memset(tmp, 0, sizeof tmp);
2318         for (j = 0; j < 6; j++)
2319             sprintf(tmp + strlen(tmp), "%4x, ", p->quantization_index[i][j]);
2320         va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
2321     }
2322
2323     va_TraceMsg(trace_ctx, NULL);
2324
2325     return;
2326 }
2327 static void va_TraceVAProbabilityBufferVP8(
2328     VADisplay dpy,
2329     VAContextID context,
2330     VABufferID buffer,
2331     VABufferType type,
2332     unsigned int size,
2333     unsigned int num_elements,
2334     void *data)
2335 {
2336     char tmp[1024];
2337     VAProbabilityDataBufferVP8 *p = (VAProbabilityDataBufferVP8 *)data;
2338     DPY2TRACECTX(dpy);
2339     int i,j,k,l;
2340
2341     va_TraceMsg(trace_ctx, "\t--VAProbabilityDataBufferVP8\n");
2342
2343     for (i = 0; i < 4; i++)
2344         for (j = 0; j < 8; j++) {
2345             memset(tmp, 0, sizeof tmp);
2346             for (k=0; k<3; k++)
2347                 for (l=0; l<11; l++)
2348                     sprintf(tmp + strlen(tmp), "%2x, ", p->dct_coeff_probs[i][j][k][l]);
2349             va_TraceMsg(trace_ctx,"\t\t[%d, %d] = %s\n", i, j, tmp);
2350         }
2351
2352     va_TraceMsg(trace_ctx, NULL);
2353
2354     return;
2355 }
2356
2357 static void va_TraceVAEncSequenceParameterBufferVP8(
2358     VADisplay dpy,
2359     VAContextID context,
2360     VABufferID buffer,
2361     VABufferType type,
2362     unsigned int size,
2363     unsigned int num_elements,
2364     void *data)
2365 {
2366     VAEncSequenceParameterBufferVP8 *p = (VAEncSequenceParameterBufferVP8 *)data;
2367     DPY2TRACECTX(dpy);
2368     int i;
2369
2370     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferVP8\n");
2371
2372     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2373     va_TraceMsg(trace_ctx, "\terror_resilient = %d\n", p->error_resilient);
2374     va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
2375     va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
2376     va_TraceMsg(trace_ctx, "\tframe_height_scale = %d\n", p->frame_height_scale);
2377     va_TraceMsg(trace_ctx, "\tframe_width_scale = %d\n", p->frame_width_scale);
2378     va_TraceMsg(trace_ctx, "\tkf_auto = %d\n", p->kf_auto);
2379     va_TraceMsg(trace_ctx, "\tkf_max_dist = %d\n", p->kf_max_dist);
2380     va_TraceMsg(trace_ctx, "\tkf_min_dist = %d\n", p->kf_min_dist);
2381     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
2382
2383     for(i = 0; i<4; ++i)
2384         va_TraceMsg(trace_ctx, "\treference_frames[%d] = 0x%08x\n", i, p->reference_frames[i]);
2385
2386     va_TraceMsg(trace_ctx, NULL);
2387
2388     return;
2389 }
2390
2391 static void va_TraceVAEncPictureParameterBufferVP8(
2392     VADisplay dpy,
2393     VAContextID context,
2394     VABufferID buffer,
2395     VABufferType type,
2396     unsigned int size,
2397     unsigned int num_elements,
2398     void *data)
2399 {
2400     VAEncPictureParameterBufferVP8 *p = (VAEncPictureParameterBufferVP8 *)data;
2401     DPY2TRACECTX(dpy);
2402     int i;
2403
2404     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferVP8\n");
2405     va_TraceMsg(trace_ctx, "\treconstructed_frame = 0x%08x\n", p->reconstructed_frame);
2406     va_TraceMsg(trace_ctx, "\tref_last_frame = 0x%08x\n", p->ref_last_frame);
2407     va_TraceMsg(trace_ctx, "\tref_gf_frame = 0x%08x\n", p->ref_gf_frame);
2408     va_TraceMsg(trace_ctx, "\tref_arf_frame = 0x%08x\n", p->ref_arf_frame);
2409     va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", p->coded_buf);
2410
2411     va_TraceMsg(trace_ctx, "\tref_flags.bits.force_kf = %d\n", p->ref_flags.bits.force_kf);
2412     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_last = %d\n", p->ref_flags.bits.no_ref_last);
2413     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_gf = %d\n", p->ref_flags.bits.no_ref_gf);
2414     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = %d\n", p->ref_flags.bits.no_ref_arf);
2415     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = 0x%08x\n", p->ref_flags.bits.reserved);
2416     
2417     va_TraceMsg(trace_ctx, "\tpic_flags.bits.frame_type = %d\n", p->pic_flags.bits.frame_type);
2418     va_TraceMsg(trace_ctx, "\tpic_flags.bits.version = %d\n", p->pic_flags.bits.version);
2419     va_TraceMsg(trace_ctx, "\tpic_flags.bits.show_frame = %d\n", p->pic_flags.bits.show_frame);
2420     va_TraceMsg(trace_ctx, "\tpic_flags.bits.color_space = %d\n", p->pic_flags.bits.color_space);
2421     va_TraceMsg(trace_ctx, "\tpic_flags.bits.recon_filter_type = %d\n", p->pic_flags.bits.recon_filter_type);
2422     va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_type = %d\n", p->pic_flags.bits.loop_filter_type);
2423     va_TraceMsg(trace_ctx, "\tpic_flags.bits.auto_partitions = %d\n", p->pic_flags.bits.auto_partitions);
2424     va_TraceMsg(trace_ctx, "\tpic_flags.bits.num_token_partitions = %d\n", p->pic_flags.bits.num_token_partitions);
2425     va_TraceMsg(trace_ctx, "\tpic_flags.bits.clamping_type = %d\n", p->pic_flags.bits.clamping_type);
2426     va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_enabled = %d\n", p->pic_flags.bits.segmentation_enabled);
2427     va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_mb_segmentation_map = %d\n", p->pic_flags.bits.update_mb_segmentation_map);
2428     va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_segment_feature_data = %d\n", p->pic_flags.bits.update_segment_feature_data);
2429     va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_adj_enable = %d\n", p->pic_flags.bits.loop_filter_adj_enable);
2430     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_entropy_probs = %d\n", p->pic_flags.bits.refresh_entropy_probs);
2431     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_golden_frame = %d\n", p->pic_flags.bits.refresh_golden_frame);
2432     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_alternate_frame = %d\n", p->pic_flags.bits.refresh_alternate_frame);
2433     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_last = %d\n", p->pic_flags.bits.refresh_last);
2434     va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_golden = %d\n", p->pic_flags.bits.copy_buffer_to_golden);
2435     va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_alternate = %d\n", p->pic_flags.bits.copy_buffer_to_alternate);
2436
2437     va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_golden = %d\n", p->pic_flags.bits.sign_bias_golden);
2438     va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_alternate = %d\n", p->pic_flags.bits.sign_bias_alternate);
2439     va_TraceMsg(trace_ctx, "\tpic_flags.bits.mb_no_coeff_skip = %d\n", p->pic_flags.bits.mb_no_coeff_skip);
2440     va_TraceMsg(trace_ctx, "\tpic_flags.bits.forced_lf_adjustment = %d\n", p->pic_flags.bits.forced_lf_adjustment);
2441     va_TraceMsg(trace_ctx, "\tpic_flags.bits.reserved = %d\n", p->pic_flags.bits.reserved);
2442
2443     for(i=0;i<4;i++)
2444        va_TraceMsg(trace_ctx, "\tloop_filter_level[%d] = %d\n", i, p->loop_filter_level[i]);
2445     for(i=0;i<4;i++)
2446        va_TraceMsg(trace_ctx, "\tref_lf_delta[%d] = %d\n", i, p->ref_lf_delta[i]);
2447     for(i=0;i<4;i++)
2448        va_TraceMsg(trace_ctx, "\tmode_lf_delta[%d] = %d\n", i, p->mode_lf_delta[i]);
2449
2450     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level);
2451     va_TraceMsg(trace_ctx, "\tclamp_qindex_high = %d\n", p->clamp_qindex_high);
2452     va_TraceMsg(trace_ctx, "\tclamp_qindex_low = %d\n", p->clamp_qindex_low);
2453
2454     va_TraceMsg(trace_ctx, NULL);
2455
2456     return;
2457 }
2458
2459 void va_TraceBeginPicture(
2460     VADisplay dpy,
2461     VAContextID context,
2462     VASurfaceID render_target
2463 )
2464 {
2465     DPY2TRACECTX(dpy);
2466
2467     TRACE_FUNCNAME(idx);
2468
2469     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
2470     va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", render_target);
2471     va_TraceMsg(trace_ctx, "\tframe_count  = #%d\n", trace_ctx->trace_frame_no);
2472     va_TraceMsg(trace_ctx, NULL);
2473
2474     trace_ctx->trace_rendertarget = render_target; /* for surface data dump after vaEndPicture */
2475
2476     trace_ctx->trace_frame_no++;
2477     trace_ctx->trace_slice_no = 0;
2478 }
2479
2480 static void va_TraceMPEG2Buf(
2481     VADisplay dpy,
2482     VAContextID context,
2483     VABufferID buffer,
2484     VABufferType type,
2485     unsigned int size,
2486     unsigned int num_elements,
2487     void *pbuf
2488 )
2489 {
2490     switch (type) {
2491     case VAPictureParameterBufferType:
2492         va_TraceVAPictureParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2493         break;
2494     case VAIQMatrixBufferType:
2495         va_TraceVAIQMatrixBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2496         break;
2497     case VABitPlaneBufferType:
2498         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2499         break;
2500     case VASliceGroupMapBufferType:
2501         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2502         break;
2503     case VASliceParameterBufferType:
2504         va_TraceVASliceParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2505         break;
2506     case VASliceDataBufferType:
2507         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2508         break;
2509     case VAMacroblockParameterBufferType:
2510         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2511         break;
2512     case VAResidualDataBufferType:
2513         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2514         break;
2515     case VADeblockingParameterBufferType:
2516         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2517         break;
2518     case VAImageBufferType:
2519         break;
2520     case VAProtectedSliceDataBufferType:
2521         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2522         break;
2523     case VAEncCodedBufferType:
2524         break;
2525     case VAEncSequenceParameterBufferType:
2526         break;
2527     case VAEncPictureParameterBufferType:
2528         break;
2529     case VAEncSliceParameterBufferType:
2530         break;
2531     default:
2532         break;
2533     }
2534 }
2535
2536 static void va_TraceVAEncSequenceParameterBufferH263(
2537     VADisplay dpy,
2538     VAContextID context,
2539     VABufferID buffer,
2540     VABufferType type,
2541     unsigned int size,
2542     unsigned int num_elements,
2543     void *data)
2544 {
2545     VAEncSequenceParameterBufferH263 *p = (VAEncSequenceParameterBufferH263 *)data;
2546     DPY2TRACECTX(dpy);
2547     
2548     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH263\n");
2549     
2550     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
2551     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2552     va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate);
2553     va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
2554     va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
2555     va_TraceMsg(trace_ctx, NULL);
2556
2557     return;
2558 }
2559
2560
2561 static void va_TraceVAEncPictureParameterBufferH263(
2562     VADisplay dpy,
2563     VAContextID context,
2564     VABufferID buffer,
2565     VABufferType type,
2566     unsigned int size,
2567     unsigned int num_elements,
2568     void *data)
2569 {
2570     VAEncPictureParameterBufferH263 *p = (VAEncPictureParameterBufferH263 *)data;
2571     DPY2TRACECTX(dpy);
2572     
2573     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH263\n");
2574     va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture);
2575     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2576     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2577     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2578     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2579     va_TraceMsg(trace_ctx, "\tpicture_type = 0x%08x\n", p->picture_type);
2580     va_TraceMsg(trace_ctx, NULL);
2581
2582     return;
2583 }
2584
2585 static void va_TraceVAEncPictureParameterBufferJPEG(
2586     VADisplay dpy,
2587     VAContextID context,
2588     VABufferID buffer,
2589     VABufferType type,
2590     unsigned int size,
2591     unsigned int num_elements,
2592     void *data)
2593 {
2594     VAEncPictureParameterBufferJPEG *p = (VAEncPictureParameterBufferJPEG *)data;
2595     int i;
2596     
2597     DPY2TRACECTX(dpy);
2598     
2599     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferJPEG\n");
2600     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2601     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2602     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2603     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2604     va_TraceMsg(trace_ctx, "\tpic_flags.bits.profile = %d\n", p->pic_flags.bits.profile);
2605     va_TraceMsg(trace_ctx, "\tpic_flags.bits.progressive = %d\n", p->pic_flags.bits.profile);
2606     va_TraceMsg(trace_ctx, "\tpic_flags.bits.huffman = %d\n", p->pic_flags.bits.huffman);
2607     va_TraceMsg(trace_ctx, "\tpic_flags.bits.interleaved = %d\n", p->pic_flags.bits.interleaved);
2608     va_TraceMsg(trace_ctx, "\tpic_flags.bits.differential = %d\n", p->pic_flags.bits.differential);
2609     va_TraceMsg(trace_ctx, "\tsample_bit_depth = %d\n", p->sample_bit_depth);
2610     va_TraceMsg(trace_ctx, "\tnum_scan = %d\n", p->num_scan);
2611     va_TraceMsg(trace_ctx, "\tnum_components = %d\n", p->num_components);
2612     for (i=0; i<p->num_components; i++)
2613         va_TraceMsg(trace_ctx, "\tcomponent_id[%d] = %d\n", i, p->component_id[i]);
2614
2615     if (p->quality > 0)
2616         va_TraceMsg(trace_ctx, "\tquality = %d\n", p->quality);
2617     else
2618         va_TraceMsg(trace_ctx, "\tquantiser_table_selector[] = %d %d %d %d\n",
2619                     p->quantiser_table_selector[0],
2620                     p->quantiser_table_selector[1],
2621                     p->quantiser_table_selector[2],
2622                     p->quantiser_table_selector[3]);
2623
2624     va_TraceMsg(trace_ctx, NULL);
2625
2626     return;
2627 }
2628
2629 static void va_TraceVAEncQMatrixBufferJPEG(
2630     VADisplay dpy,
2631     VAContextID context,
2632     VABufferID buffer,
2633     VABufferType type,
2634     unsigned int size,
2635     unsigned int num_elements,
2636     void *data)
2637 {
2638     VAQMatrixBufferJPEG *p = (VAQMatrixBufferJPEG *)data;
2639     DPY2TRACECTX(dpy);
2640     
2641     va_TraceMsg(trace_ctx, "\t--VAQMatrixBufferJPEG\n");
2642     va_TraceMsg(trace_ctx, "\tload_lum_quantiser_matrix = %d", p->load_lum_quantiser_matrix);
2643     if (p->load_lum_quantiser_matrix) {
2644         int i;
2645         for (i = 0; i < 64; i++) {
2646             if ((i % 8) == 0)
2647                 va_TraceMsg(trace_ctx, "\n\t");
2648             va_TraceMsg(trace_ctx, "\t0x%02x", p->lum_quantiser_matrix[i]);
2649         }
2650         va_TraceMsg(trace_ctx, "\n");
2651     }
2652     va_TraceMsg(trace_ctx, "\tload_chroma_quantiser_matrix = %08x\n", p->load_chroma_quantiser_matrix);
2653     if (p->load_chroma_quantiser_matrix) {
2654         int i;
2655         for (i = 0; i < 64; i++) {
2656             if ((i % 8) == 0)
2657                 va_TraceMsg(trace_ctx, "\n\t");
2658             va_TraceMsg(trace_ctx, "\t0x%02x", p->chroma_quantiser_matrix[i]);
2659         }
2660         va_TraceMsg(trace_ctx, "\n");
2661     }
2662     
2663     va_TraceMsg(trace_ctx, NULL);
2664     
2665     return;
2666 }
2667
2668
2669 static void va_TraceVAEncSliceParameterBufferJPEG(
2670     VADisplay dpy,
2671     VAContextID context,
2672     VABufferID buffer,
2673     VABufferType type,
2674     unsigned int size,
2675     unsigned int num_elements,
2676     void *data)
2677 {
2678     VAEncSliceParameterBufferJPEG *p = (VAEncSliceParameterBufferJPEG *)data;
2679     int i;
2680     
2681     DPY2TRACECTX(dpy);
2682     
2683     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferJPEG\n");
2684     va_TraceMsg(trace_ctx, "\trestart_interval = 0x%04x\n", p->restart_interval);
2685     va_TraceMsg(trace_ctx, "\tnum_components = 0x%08x\n", p->num_components);
2686     for (i=0; i<4; i++) {
2687         va_TraceMsg(trace_ctx, "\tcomponents[%i] =\n ");
2688         va_TraceMsg(trace_ctx, "\t\tcomponent_selector = %d\n", p->components[i].component_selector);
2689         va_TraceMsg(trace_ctx, "\t\tdc_table_selector = %d\n", p->components[i].dc_table_selector);
2690         va_TraceMsg(trace_ctx, "\t\tac_table_selector = %d\n", p->components[i].ac_table_selector);
2691     }
2692     
2693     va_TraceMsg(trace_ctx, NULL);
2694     
2695     return;
2696 }
2697
2698
2699 static void va_TraceH263Buf(
2700     VADisplay dpy,
2701     VAContextID context,
2702     VABufferID buffer,
2703     VABufferType type,
2704     unsigned int size,
2705     unsigned int num_elements,
2706     void *pbuf
2707 )
2708 {
2709     switch (type) {
2710     case VAPictureParameterBufferType:/* print MPEG4 buffer */
2711         va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2712         break;
2713     case VAIQMatrixBufferType:/* print MPEG4 buffer */
2714         va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2715         break;
2716     case VABitPlaneBufferType:/* print MPEG4 buffer */
2717         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2718         break;
2719     case VASliceGroupMapBufferType:
2720         break;
2721     case VASliceParameterBufferType:/* print MPEG4 buffer */
2722         va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2723         break;
2724     case VASliceDataBufferType:
2725         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2726         break;
2727     case VAMacroblockParameterBufferType:
2728         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2729         break;
2730     case VAResidualDataBufferType:
2731         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2732         break;
2733     case VADeblockingParameterBufferType:
2734         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2735         break;
2736     case VAImageBufferType:
2737         break;
2738     case VAProtectedSliceDataBufferType:
2739         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2740         break;
2741     case VAEncCodedBufferType:
2742         break;
2743     case VAEncSequenceParameterBufferType:
2744         va_TraceVAEncSequenceParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
2745         break;
2746     case VAEncPictureParameterBufferType:
2747         va_TraceVAEncPictureParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
2748         break;
2749     case VAEncSliceParameterBufferType:
2750         va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2751         break;
2752     case VAEncPackedHeaderParameterBufferType:
2753         va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
2754         break;
2755     default:
2756         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2757         break;
2758     }
2759 }
2760
2761
2762 static void va_TraceJPEGBuf(
2763     VADisplay dpy,
2764     VAContextID context,
2765     VABufferID buffer,
2766     VABufferType type,
2767     unsigned int size,
2768     unsigned int num_elements,
2769     void *pbuf
2770 )
2771 {
2772     switch (type) {
2773     case VABitPlaneBufferType:
2774     case VASliceGroupMapBufferType:
2775     case VASliceDataBufferType:
2776     case VAMacroblockParameterBufferType:
2777     case VAResidualDataBufferType:
2778     case VADeblockingParameterBufferType:
2779     case VAImageBufferType:
2780     case VAProtectedSliceDataBufferType:
2781     case VAEncCodedBufferType:
2782     case VAEncSequenceParameterBufferType:
2783         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2784         break;
2785     case VAEncSliceParameterBufferType:
2786         va_TraceVAEncSliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2787         break;
2788     case VAPictureParameterBufferType:
2789         va_TraceVAPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2790         break;
2791     case VAIQMatrixBufferType:
2792         va_TraceVAIQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2793         break;
2794     case VASliceParameterBufferType:
2795         va_TraceVASliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2796         break;
2797     case VAHuffmanTableBufferType:
2798         va_TraceVAHuffmanTableBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2799         break;
2800     case VAEncPictureParameterBufferType:
2801         va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2802         break;
2803     case VAQMatrixBufferType:
2804         va_TraceVAEncQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2805         break;
2806     default:
2807         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2808         break;
2809     }
2810 }
2811
2812 static void va_TraceMPEG4Buf(
2813     VADisplay dpy,
2814     VAContextID context,
2815     VABufferID buffer,
2816     VABufferType type,
2817     unsigned int size,
2818     unsigned int num_elements,
2819     void *pbuf
2820 )
2821 {
2822     switch (type) {
2823     case VAPictureParameterBufferType:
2824         va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2825         break;
2826     case VAIQMatrixBufferType:
2827         va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2828         break;
2829     case VABitPlaneBufferType:
2830         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2831         break;
2832     case VASliceGroupMapBufferType:
2833         break;
2834     case VASliceParameterBufferType:
2835         va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2836         break;
2837     case VASliceDataBufferType:
2838         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2839         break;
2840     case VAMacroblockParameterBufferType:
2841         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2842         break;
2843     case VAResidualDataBufferType:
2844         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2845         break;
2846     case VADeblockingParameterBufferType:
2847         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2848         break;
2849     case VAImageBufferType:
2850         break;
2851     case VAProtectedSliceDataBufferType:
2852         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2853         break;
2854     case VAEncCodedBufferType:
2855         break;
2856     case VAEncSequenceParameterBufferType:
2857         va_TraceVAEncSequenceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2858         break;
2859     case VAEncPictureParameterBufferType:
2860         va_TraceVAEncPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2861         break;
2862     case VAEncSliceParameterBufferType:
2863         va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2864         break;
2865     default:
2866         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2867         break;
2868     }
2869 }
2870
2871 static void va_TraceHEVCBuf(
2872     VADisplay dpy,
2873     VAContextID context,
2874     VABufferID buffer,
2875     VABufferType type,
2876     unsigned int size,
2877     unsigned int num_elements,
2878     void *pbuf
2879 )
2880 {
2881     DPY2TRACECTX(dpy);
2882
2883     switch (type) {
2884         case VAPictureParameterBufferType:
2885             va_TraceVAPictureParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
2886             break;
2887         case VASliceParameterBufferType:
2888             va_TraceVASliceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
2889             break;
2890         case VAIQMatrixBufferType:
2891             va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2892             break;
2893         default:
2894             va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2895             break;
2896     }
2897 }
2898
2899 static void va_TraceH264Buf(
2900     VADisplay dpy,
2901     VAContextID context,
2902     VABufferID buffer,
2903     VABufferType type,
2904     unsigned int size,
2905     unsigned int num_elements,
2906     void *pbuf
2907 )
2908 {
2909     DPY2TRACECTX(dpy);
2910     
2911     switch (type) {
2912     case VAPictureParameterBufferType:
2913         va_TraceVAPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2914         break;
2915     case VAIQMatrixBufferType:
2916         va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2917         break;
2918     case VABitPlaneBufferType:
2919         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
2920         break;
2921     case VASliceGroupMapBufferType:
2922         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2923         break;
2924     case VASliceParameterBufferType:
2925         va_TraceVASliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2926         break;
2927     case VASliceDataBufferType:
2928         va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
2929         break;
2930     case VAMacroblockParameterBufferType:
2931         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
2932         break;
2933     case VAResidualDataBufferType:
2934         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
2935         break;
2936     case VADeblockingParameterBufferType:
2937         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2938         break;
2939     case VAImageBufferType:
2940         break;
2941     case VAProtectedSliceDataBufferType:
2942         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2943         break;
2944     case VAEncCodedBufferType:
2945         break;
2946     case VAEncSequenceParameterBufferType:
2947         va_TraceVAEncSequenceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2948         break;
2949     case VAEncPictureParameterBufferType:
2950         va_TraceVAEncPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2951         break;
2952     case VAEncSliceParameterBufferType:
2953         if (size == sizeof(VAEncSliceParameterBuffer))
2954             va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2955         else
2956             va_TraceVAEncSliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2957         break;
2958     case VAEncPackedHeaderParameterBufferType:
2959         va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
2960         break;
2961         
2962     case VAEncMiscParameterBufferType:
2963         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2964         break;
2965     default:
2966         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2967         break;
2968     }
2969 }
2970
2971 static void va_TraceVP8Buf(
2972     VADisplay dpy,
2973     VAContextID context,
2974     VABufferID buffer,
2975     VABufferType type,
2976     unsigned int size,
2977     unsigned int num_elements,
2978     void *pbuf
2979 )
2980 {
2981     DPY2TRACECTX(dpy);
2982
2983     switch (type) {
2984     case VAPictureParameterBufferType:
2985         va_TraceVAPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2986         break;
2987     case VAIQMatrixBufferType:
2988         va_TraceVAIQMatrixBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2989         break;
2990     case VAQMatrixBufferType:
2991         break;
2992     case VABitPlaneBufferType:
2993         break;
2994     case VASliceGroupMapBufferType:
2995         break;
2996     case VASliceParameterBufferType:
2997         va_TraceVASliceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2998         break;
2999     case VASliceDataBufferType:
3000         break;
3001     case VAProbabilityBufferType:
3002         va_TraceVAProbabilityBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3003         break;
3004     case VAMacroblockParameterBufferType:
3005         break;
3006     case VAResidualDataBufferType:
3007         break;
3008     case VADeblockingParameterBufferType:
3009         break;
3010     case VAImageBufferType:
3011         break;
3012     case VAProtectedSliceDataBufferType:
3013         break;
3014     case VAEncCodedBufferType:
3015         break;
3016     case VAEncSequenceParameterBufferType:
3017         va_TraceVAEncSequenceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3018         break;
3019     case VAEncPictureParameterBufferType:
3020         va_TraceVAEncPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3021         break;
3022     case VAEncSliceParameterBufferType:
3023         break;
3024     case VAEncPackedHeaderParameterBufferType:
3025         break;
3026     case VAEncMiscParameterBufferType:
3027         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3028         break;
3029     default:
3030         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3031         break;
3032     }
3033 }
3034
3035 static void va_TraceVC1Buf(
3036     VADisplay dpy,
3037     VAContextID context,
3038     VABufferID buffer,
3039     VABufferType type,
3040     unsigned int size,
3041     unsigned int num_elements,
3042     void *pbuf
3043 )
3044 {
3045     DPY2TRACECTX(dpy);
3046
3047     switch (type) {
3048     case VAPictureParameterBufferType:
3049         va_TraceVAPictureParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
3050         break;
3051     case VAIQMatrixBufferType:
3052         break;
3053     case VABitPlaneBufferType:
3054         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3055         break;
3056     case VASliceGroupMapBufferType:
3057         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3058         break;
3059     case VASliceParameterBufferType:
3060         va_TraceVASliceParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
3061         break;
3062     case VASliceDataBufferType:
3063         va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
3064         break;
3065     case VAMacroblockParameterBufferType:
3066         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3067         break;
3068     case VAResidualDataBufferType:
3069         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3070         break;
3071     case VADeblockingParameterBufferType:
3072         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3073         break;
3074     case VAImageBufferType:
3075         break;
3076     case VAProtectedSliceDataBufferType:
3077         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3078         break;
3079     case VAEncCodedBufferType:
3080         break;
3081     case VAEncSequenceParameterBufferType:
3082         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3083         break;
3084     case VAEncPictureParameterBufferType:
3085         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3086         break;
3087     case VAEncSliceParameterBufferType:
3088         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3089         break;
3090     default:
3091         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3092         break;
3093     }
3094 }
3095
3096 static void
3097 va_TraceProcFilterParameterBufferDeinterlacing(
3098     VADisplay dpy,
3099     VAContextID context,
3100     VAProcFilterParameterBufferBase *base
3101 )
3102 {
3103     VAProcFilterParameterBufferDeinterlacing *deint = (VAProcFilterParameterBufferDeinterlacing *)base;
3104
3105     DPY2TRACECTX(dpy);
3106
3107     va_TraceMsg(trace_ctx, "\t    type = %d\n", deint->type);
3108     va_TraceMsg(trace_ctx, "\t    algorithm = %d\n", deint->algorithm);
3109     va_TraceMsg(trace_ctx, "\t    flags = %d\n", deint->flags);
3110 }
3111
3112 static void
3113 va_TraceProcFilterParameterBufferColorBalance(
3114     VADisplay dpy,
3115     VAContextID context,
3116     VAProcFilterParameterBufferBase *base
3117 )
3118 {
3119     VAProcFilterParameterBufferColorBalance *color_balance = (VAProcFilterParameterBufferColorBalance *)base;
3120
3121     DPY2TRACECTX(dpy);
3122
3123     va_TraceMsg(trace_ctx, "\t    type = %d\n", color_balance->type);
3124     va_TraceMsg(trace_ctx, "\t    attrib = %d\n", color_balance->attrib);
3125     va_TraceMsg(trace_ctx, "\t    value = %f\n", color_balance->value);
3126 }
3127
3128 static void
3129 va_TraceProcFilterParameterBufferBase(
3130     VADisplay dpy,
3131     VAContextID context,
3132     VAProcFilterParameterBufferBase *base
3133 )
3134 {
3135     DPY2TRACECTX(dpy);
3136
3137     va_TraceMsg(trace_ctx, "\t    type = %d\n", base->type);
3138 }
3139
3140 static void
3141 va_TraceProcFilterParameterBuffer(
3142     VADisplay dpy,
3143     VAContextID context,
3144     VABufferID *filters,
3145     unsigned int num_filters
3146 )
3147 {
3148     VABufferType type;
3149     unsigned int size;
3150     unsigned int num_elements;
3151     VAProcFilterParameterBufferBase *base_filter = NULL;
3152     int i;
3153
3154     DPY2TRACECTX(dpy);
3155
3156     if (num_filters == 0 || filters == NULL) {
3157         va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
3158         va_TraceMsg(trace_ctx, "\t  filters = %p\n", filters);
3159         return;
3160     }
3161
3162     va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
3163
3164     /* get buffer type information */
3165     for (i = 0; i < num_filters; i++) {
3166         vaBufferInfo(dpy, context, filters[i], &type, &size, &num_elements);
3167
3168         if (type != VAProcFilterParameterBufferType) {
3169             va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x (INVALID)\n", i, filters[i]);
3170             return;
3171         } else {
3172             va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x\n", i, filters[i]);
3173         }
3174
3175         base_filter = NULL;
3176         vaMapBuffer(dpy, filters[i], (void **)&base_filter);
3177
3178         if (base_filter == NULL) {
3179             vaUnmapBuffer(dpy, filters[i]);
3180             return;
3181         }
3182
3183         switch (base_filter->type) {
3184         case VAProcFilterDeinterlacing:
3185             va_TraceProcFilterParameterBufferDeinterlacing(dpy,
3186                                                            context,
3187                                                            base_filter);
3188             break;
3189         case VAProcFilterColorBalance:
3190             va_TraceProcFilterParameterBufferColorBalance(dpy,
3191                                                           context,
3192                                                           base_filter);
3193             break;
3194         default:
3195             va_TraceProcFilterParameterBufferBase(dpy,
3196                                                   context,
3197                                                   base_filter);
3198             break;
3199         }
3200
3201         vaUnmapBuffer(dpy, filters[i]);
3202     }
3203 }
3204
3205 static void
3206 va_TraceVAProcPipelineParameterBuffer(
3207     VADisplay dpy,
3208     VAContextID context,
3209     VABufferID buffer,
3210     VABufferType type,
3211     unsigned int size,
3212     unsigned int num_elements,
3213     void *data
3214 )
3215 {
3216     VAProcPipelineParameterBuffer *p = (VAProcPipelineParameterBuffer *)data;
3217     int i;
3218
3219     DPY2TRACECTX(dpy);
3220
3221     va_TraceMsg(trace_ctx, "\t--VAProcPipelineParameterBuffer\n");
3222
3223     va_TraceMsg(trace_ctx, "\t  surface = 0x%08x\n", p->surface);
3224
3225     if (p->surface_region) {
3226         va_TraceMsg(trace_ctx, "\t  surface_region\n");
3227         va_TraceMsg(trace_ctx, "\t    x = %d\n", p->surface_region->x);
3228         va_TraceMsg(trace_ctx, "\t    y = %d\n", p->surface_region->y);
3229         va_TraceMsg(trace_ctx, "\t    width = %d\n", p->surface_region->width);
3230         va_TraceMsg(trace_ctx, "\t    height = %d\n", p->surface_region->height);
3231     } else {
3232         va_TraceMsg(trace_ctx, "\t  surface_region = (NULL)\n");
3233     }
3234
3235     va_TraceMsg(trace_ctx, "\t  surface_color_standard = %d\n", p->surface_color_standard);
3236
3237     if (p->output_region) {
3238         va_TraceMsg(trace_ctx, "\t  output_region\n");
3239         va_TraceMsg(trace_ctx, "\t    x = %d\n", p->output_region->x);
3240         va_TraceMsg(trace_ctx, "\t    y = %d\n", p->output_region->y);
3241         va_TraceMsg(trace_ctx, "\t    width = %d\n", p->output_region->width);
3242         va_TraceMsg(trace_ctx, "\t    height = %d\n", p->output_region->height);
3243     } else {
3244         va_TraceMsg(trace_ctx, "\t  output_region = (NULL)\n");
3245     }
3246
3247     va_TraceMsg(trace_ctx, "\t  output_background_color = 0x%08x\n", p->output_background_color);
3248     va_TraceMsg(trace_ctx, "\t  output_color_standard = %d\n", p->output_color_standard);
3249     va_TraceMsg(trace_ctx, "\t  pipeline_flags = 0x%08x\n", p->pipeline_flags);
3250     va_TraceMsg(trace_ctx, "\t  filter_flags = 0x%08x\n", p->filter_flags);
3251
3252     va_TraceProcFilterParameterBuffer(dpy, context, p->filters, p->num_filters);
3253
3254     va_TraceMsg(trace_ctx, "\t  num_forward_references = 0x%08x\n", p->num_forward_references);
3255
3256     if (p->num_forward_references) {
3257         va_TraceMsg(trace_ctx, "\t  forward_references\n");
3258
3259         if (p->forward_references) {
3260             /* only dump the first 5 forward references */
3261             for (i = 0; i < p->num_forward_references && i < 5; i++) {
3262                 va_TraceMsg(trace_ctx, "\t    forward_references[%d] = 0x%08x\n", i, p->forward_references[i]);
3263             }
3264         } else {
3265             for (i = 0; i < p->num_forward_references && i < 5; i++) {
3266                 va_TraceMsg(trace_ctx, "\t    forward_references[%d] = (NULL)\n", i);
3267             }
3268         }
3269     }
3270
3271     va_TraceMsg(trace_ctx, "\t  num_backward_references = 0x%08x\n", p->num_backward_references);
3272
3273     if (p->num_backward_references) {
3274         va_TraceMsg(trace_ctx, "\t  backward_references\n");
3275
3276         if (p->backward_references) {
3277             /* only dump the first 5 backward references */
3278             for (i = 0; i < p->num_backward_references && i < 5; i++) {
3279                 va_TraceMsg(trace_ctx, "\t    backward_references[%d] = 0x%08x\n", i, p->backward_references[i]);
3280             }
3281         } else {
3282             for (i = 0; i < p->num_backward_references && i < 5; i++) {
3283                 va_TraceMsg(trace_ctx, "\t    backward_references[%d] = (NULL)\n", i);
3284             }
3285         }
3286     }
3287
3288     /* FIXME: add other info later */
3289
3290     va_TraceMsg(trace_ctx, NULL);
3291 }
3292
3293 static void
3294 va_TraceNoneBuf(
3295     VADisplay dpy,
3296     VAContextID context,
3297     VABufferID buffer,
3298     VABufferType type,
3299     unsigned int size,
3300     unsigned int num_elements,
3301     void *pbuf
3302 )
3303 {
3304     DPY2TRACECTX(dpy);
3305
3306     switch (type) {
3307     case VAProcPipelineParameterBufferType:
3308         va_TraceVAProcPipelineParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3309         break;
3310     default:
3311         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3312         break;
3313     }
3314 }
3315
3316 void va_TraceRenderPicture(
3317     VADisplay dpy,
3318     VAContextID context,
3319     VABufferID *buffers,
3320     int num_buffers
3321 )
3322 {
3323     VABufferType type;
3324     unsigned int size;
3325     unsigned int num_elements;
3326     int i;
3327     DPY2TRACECTX(dpy);
3328
3329     TRACE_FUNCNAME(idx);
3330     
3331     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
3332     va_TraceMsg(trace_ctx, "\tnum_buffers = %d\n", num_buffers);
3333     if (buffers == NULL)
3334         return;
3335     
3336     for (i = 0; i < num_buffers; i++) {
3337         unsigned char *pbuf = NULL;
3338         unsigned int j;
3339         
3340         /* get buffer type information */
3341         vaBufferInfo(dpy, context, buffers[i], &type, &size, &num_elements);
3342
3343         va_TraceMsg(trace_ctx, "\t---------------------------\n");
3344         va_TraceMsg(trace_ctx, "\tbuffers[%d] = 0x%08x\n", i, buffers[i]);
3345         va_TraceMsg(trace_ctx, "\t  type = %s\n", buffer_type_to_string(type));
3346         va_TraceMsg(trace_ctx, "\t  size = %d\n", size);
3347         va_TraceMsg(trace_ctx, "\t  num_elements = %d\n", num_elements);
3348
3349         vaMapBuffer(dpy, buffers[i], (void **)&pbuf);
3350         if (pbuf == NULL)
3351             continue;
3352         
3353         switch (trace_ctx->trace_profile) {
3354         case VAProfileMPEG2Simple:
3355         case VAProfileMPEG2Main:
3356             for (j=0; j<num_elements; j++) {
3357                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3358                 va_TraceMPEG2Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3359             }
3360             break;
3361         case VAProfileMPEG4Simple:
3362         case VAProfileMPEG4AdvancedSimple:
3363         case VAProfileMPEG4Main:
3364             for (j=0; j<num_elements; j++) {
3365                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3366                 va_TraceMPEG4Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3367             }
3368             break;
3369         case VAProfileH264Baseline:
3370         case VAProfileH264Main:
3371         case VAProfileH264High:
3372         case VAProfileH264ConstrainedBaseline:
3373             for (j=0; j<num_elements; j++) {
3374                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3375                 
3376                 va_TraceH264Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3377             }
3378             break;
3379         case VAProfileVC1Simple:
3380         case VAProfileVC1Main:
3381         case VAProfileVC1Advanced:
3382             for (j=0; j<num_elements; j++) {
3383                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3384                 
3385                 va_TraceVC1Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3386             }
3387             break;
3388         case VAProfileH263Baseline:
3389             for (j=0; j<num_elements; j++) {
3390                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3391                 
3392                 va_TraceH263Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3393             }
3394             break;
3395         case VAProfileJPEGBaseline:
3396             for (j=0; j<num_elements; j++) {
3397                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3398                 
3399                 va_TraceJPEGBuf (dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3400             }
3401             break;
3402
3403         case VAProfileNone:
3404             for (j=0; j<num_elements; j++) {
3405                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3406
3407                 va_TraceNoneBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3408             }
3409             break;
3410
3411         case VAProfileVP8Version0_3:
3412             for (j=0; j<num_elements; j++) {
3413                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3414
3415                 va_TraceVP8Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3416             }
3417             break;
3418
3419         case VAProfileHEVCMain:
3420         case VAProfileHEVCMain10:
3421             for (j=0; j<num_elements; j++) {
3422                 va_TraceMsg(trace_ctx, "\telement[%d] = ", j);
3423
3424                 va_TraceHEVCBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3425             }
3426             break;
3427         default:
3428             break;
3429         }
3430
3431         vaUnmapBuffer(dpy, buffers[i]);
3432     }
3433
3434     va_TraceMsg(trace_ctx, NULL);
3435 }
3436
3437 void va_TraceEndPicture(
3438     VADisplay dpy,
3439     VAContextID context,
3440     int endpic_done
3441 )
3442 {
3443     int encode, decode, jpeg;
3444     DPY2TRACECTX(dpy);
3445
3446     TRACE_FUNCNAME(idx);
3447
3448     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
3449     va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", trace_ctx->trace_rendertarget);
3450
3451     /* avoid to create so many empty files */
3452     encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
3453     decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
3454     jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
3455
3456     /* trace encode source surface, can do it before HW completes rendering */
3457     if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE))||
3458         (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG)))
3459         va_TraceSurface(dpy);
3460     
3461     /* trace decoded surface, do it after HW completes rendering */
3462     if (decode && ((trace_flag & VA_TRACE_FLAG_SURFACE_DECODE))) {
3463         vaSyncSurface(dpy, trace_ctx->trace_rendertarget);
3464         va_TraceSurface(dpy);
3465     }
3466
3467     va_TraceMsg(trace_ctx, NULL);
3468 }
3469
3470
3471 void va_TraceSyncSurface(
3472     VADisplay dpy,
3473     VASurfaceID render_target
3474 )
3475 {
3476     DPY2TRACECTX(dpy);
3477
3478     TRACE_FUNCNAME(idx);
3479
3480     va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target);
3481     va_TraceMsg(trace_ctx, NULL);
3482 }
3483
3484 void va_TraceQuerySurfaceAttributes(
3485     VADisplay           dpy,
3486     VAConfigID          config,
3487     VASurfaceAttrib    *attrib_list,
3488     unsigned int       *num_attribs
3489 )
3490 {
3491     DPY2TRACECTX(dpy);
3492
3493     TRACE_FUNCNAME(idx);
3494     va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config);
3495     va_TraceSurfaceAttributes(trace_ctx, attrib_list, num_attribs);
3496     
3497     va_TraceMsg(trace_ctx, NULL);
3498
3499 }
3500
3501
3502 void va_TraceQuerySurfaceStatus(
3503     VADisplay dpy,
3504     VASurfaceID render_target,
3505     VASurfaceStatus *status    /* out */
3506 )
3507 {
3508     DPY2TRACECTX(dpy);
3509
3510     TRACE_FUNCNAME(idx);
3511
3512     va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target);
3513     if (status)
3514         va_TraceMsg(trace_ctx, "\tstatus = 0x%08x\n", *status);
3515     va_TraceMsg(trace_ctx, NULL);
3516 }
3517
3518
3519 void va_TraceQuerySurfaceError(
3520     VADisplay dpy,
3521     VASurfaceID surface,
3522     VAStatus error_status,
3523     void **error_info       /*out*/
3524 )
3525 {
3526     DPY2TRACECTX(dpy);
3527
3528     TRACE_FUNCNAME(idx);
3529     va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
3530     va_TraceMsg(trace_ctx, "\terror_status = 0x%08x\n", error_status);
3531     if (error_info && (error_status == VA_STATUS_ERROR_DECODING_ERROR)) {
3532         VASurfaceDecodeMBErrors *p = *error_info;
3533         while (p && (p->status != -1)) {
3534             va_TraceMsg(trace_ctx, "\t\tstatus = %d\n", p->status);
3535             va_TraceMsg(trace_ctx, "\t\tstart_mb = %d\n", p->start_mb);
3536             va_TraceMsg(trace_ctx, "\t\tend_mb = %d\n", p->end_mb);
3537             p++; /* next error record */
3538         }
3539     }
3540     va_TraceMsg(trace_ctx, NULL);
3541 }
3542
3543 void va_TraceMaxNumDisplayAttributes (
3544     VADisplay dpy,
3545     int number
3546 )
3547 {
3548     DPY2TRACECTX(dpy);
3549
3550     TRACE_FUNCNAME(idx);
3551     
3552     va_TraceMsg(trace_ctx, "\tmax_display_attributes = %d\n", number);
3553     va_TraceMsg(trace_ctx, NULL);
3554 }
3555
3556 void va_TraceQueryDisplayAttributes (
3557     VADisplay dpy,
3558     VADisplayAttribute *attr_list,    /* out */
3559     int *num_attributes               /* out */
3560 )
3561 {
3562     int i;
3563     
3564     DPY2TRACECTX(dpy);
3565     
3566     if (attr_list == NULL || num_attributes == NULL)
3567         return;
3568
3569     va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", *num_attributes);
3570     
3571     for (i=0; i<*num_attributes; i++) {
3572         va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n");
3573         va_TraceMsg(trace_ctx, "\t  typ = 0x%08x\n", attr_list[i].type);
3574         va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
3575         va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
3576         va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
3577         va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
3578     }
3579     va_TraceMsg(trace_ctx, NULL);
3580 }
3581
3582
3583 static void va_TraceDisplayAttributes (
3584     VADisplay dpy,
3585     VADisplayAttribute *attr_list,
3586     int num_attributes
3587 )
3588 {
3589     int i;
3590     
3591     DPY2TRACECTX(dpy);
3592     
3593     va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", num_attributes);
3594     if (attr_list == NULL)
3595         return;
3596     
3597     for (i=0; i<num_attributes; i++) {
3598         va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n");
3599         va_TraceMsg(trace_ctx, "\t  typ = 0x%08x\n", attr_list[i].type);
3600         va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
3601         va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
3602         va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
3603         va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
3604     }
3605     va_TraceMsg(trace_ctx, NULL);
3606 }
3607
3608
3609 void va_TraceGetDisplayAttributes (
3610     VADisplay dpy,
3611     VADisplayAttribute *attr_list,
3612     int num_attributes
3613 )
3614 {
3615     DPY2TRACECTX(dpy);
3616
3617     TRACE_FUNCNAME(idx);
3618
3619     va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
3620 }
3621
3622 void va_TraceSetDisplayAttributes (
3623     VADisplay dpy,
3624     VADisplayAttribute *attr_list,
3625     int num_attributes
3626 )
3627 {
3628     DPY2TRACECTX(dpy);
3629
3630     TRACE_FUNCNAME(idx);
3631
3632     va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
3633 }
3634
3635
3636 void va_TracePutSurface (
3637     VADisplay dpy,
3638     VASurfaceID surface,
3639     void *draw, /* the target Drawable */
3640     short srcx,
3641     short srcy,
3642     unsigned short srcw,
3643     unsigned short srch,
3644     short destx,
3645     short desty,
3646     unsigned short destw,
3647     unsigned short desth,
3648     VARectangle *cliprects, /* client supplied clip list */
3649     unsigned int number_cliprects, /* number of clip rects in the clip list */
3650     unsigned int flags /* de-interlacing flags */
3651 )
3652 {
3653     DPY2TRACECTX(dpy);
3654
3655     TRACE_FUNCNAME(idx);
3656     
3657     va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
3658     va_TraceMsg(trace_ctx, "\tdraw = 0x%08x\n", draw);
3659     va_TraceMsg(trace_ctx, "\tsrcx = %d\n", srcx);
3660     va_TraceMsg(trace_ctx, "\tsrcy = %d\n", srcy);
3661     va_TraceMsg(trace_ctx, "\tsrcw = %d\n", srcw);
3662     va_TraceMsg(trace_ctx, "\tsrch = %d\n", srch);
3663     va_TraceMsg(trace_ctx, "\tdestx = %d\n", destx);
3664     va_TraceMsg(trace_ctx, "\tdesty = %d\n", desty);
3665     va_TraceMsg(trace_ctx, "\tdestw = %d\n", destw);
3666     va_TraceMsg(trace_ctx, "\tdesth = %d\n", desth);
3667     va_TraceMsg(trace_ctx, "\tcliprects = 0x%08x\n", cliprects);
3668     va_TraceMsg(trace_ctx, "\tnumber_cliprects = %d\n", number_cliprects);
3669     va_TraceMsg(trace_ctx, "\tflags = 0x%08x\n", flags);
3670     va_TraceMsg(trace_ctx, NULL);
3671 }