OSDN Git Service

Enhance LIBVA_TRACE to dump SPS/PPS/ for VP8 encode.
[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
2406     va_TraceMsg(trace_ctx, "\treconstructed_frame = 0x%08x\n", i, p->reconstructed_frame);
2407     va_TraceMsg(trace_ctx, "\tref_last_frame = 0x%08x\n", i, p->ref_last_frame);
2408     va_TraceMsg(trace_ctx, "\tref_gf_frame = 0x%08x\n", i, p->ref_gf_frame);
2409     va_TraceMsg(trace_ctx, "\tref_arf_frame = 0x%08x\n", i, p->ref_arf_frame);
2410     va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", i, p->coded_buf);
2411
2412     va_TraceMsg(trace_ctx, "\tref_flags.bits.force_kf = %d\n", i, p->ref_flags.bits.force_kf);
2413     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_last = %d\n", i, p->ref_flags.bits.no_ref_last);
2414     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_gf = %d\n", i, p->ref_flags.bits.no_ref_gf);
2415     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = %d\n", i, p->ref_flags.bits.no_ref_arf);
2416     va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = 0x%08x\n", i, p->ref_flags.bits.reserved);
2417
2418     va_TraceMsg(trace_ctx, "\tpic_flags.bits.version = %d\n", i, p->pic_flags.bits.version);
2419     va_TraceMsg(trace_ctx, "\tpic_flags.bits.show_frame = %d\n", i, p->pic_flags.bits.show_frame);
2420     va_TraceMsg(trace_ctx, "\tpic_flags.bits.color_space = %d\n", i, p->pic_flags.bits.color_space);
2421     va_TraceMsg(trace_ctx, "\tpic_flags.bits.recon_filter_type = %d\n", i, p->pic_flags.bits.recon_filter_type);
2422     va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_type = %d\n", i, p->pic_flags.bits.loop_filter_type);
2423     va_TraceMsg(trace_ctx, "\tpic_flags.bits.auto_partitions = %d\n", i, p->pic_flags.bits.auto_partitions);
2424     va_TraceMsg(trace_ctx, "\tpic_flags.bits.num_token_partitions = %d\n", i, p->pic_flags.bits.num_token_partitions);
2425     va_TraceMsg(trace_ctx, "\tpic_flags.bits.clamping_type = %d\n", i, p->pic_flags.bits.clamping_type);
2426     va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_enabled = %d\n", i, p->pic_flags.bits.segmentation_enabled);
2427     va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_mb_segmentation_map = %d\n", i, p->pic_flags.bits.update_mb_segmentation_map);
2428     va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_segment_feature_data = %d\n", i, p->pic_flags.bits.update_segment_feature_data);
2429     va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_adj_enable = %d\n", i, p->pic_flags.bits.loop_filter_adj_enable);
2430     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_entropy_probs = %d\n", i, p->pic_flags.bits.refresh_entropy_probs);
2431     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_golden_frame = %d\n", i, p->pic_flags.bits.refresh_golden_frame);
2432     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_alternate_frame = %d\n", i, p->pic_flags.bits.refresh_alternate_frame);
2433     va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_last = %d\n", i, p->pic_flags.bits.refresh_last);
2434     va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_golden = %d\n", i, p->pic_flags.bits.copy_buffer_to_golden);
2435     va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_alternate = %d\n", i, p->pic_flags.bits.copy_buffer_to_alternate);
2436
2437     va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_golden = %d\n", i, p->pic_flags.bits.sign_bias_golden);
2438     va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_alternate = %d\n", i, p->pic_flags.bits.sign_bias_alternate);
2439     va_TraceMsg(trace_ctx, "\tpic_flags.bits.mb_no_coeff_skip = %d\n", i, p->pic_flags.bits.mb_no_coeff_skip);
2440     va_TraceMsg(trace_ctx, "\tpic_flags.bits.forced_lf_adjustment = %d\n", i, p->pic_flags.bits.forced_lf_adjustment);
2441     va_TraceMsg(trace_ctx, "\tpic_flags.bits.reserved = %d\n", i, p->pic_flags.bits.reserved);
2442
2443
2444     for(i=0;i<4;i++)
2445        va_TraceMsg(trace_ctx, "\tloop_filter_level[%d] = %d\n", p->loop_filter_level[i]);
2446     for(i=0;i<4;i++)
2447        va_TraceMsg(trace_ctx, "\tref_lf_delta[%d] = %d\n", i, p->ref_lf_delta[i]);
2448     for(i=0;i<4;i++)
2449        va_TraceMsg(trace_ctx, "\tmode_lf_delta[%d] = %d\n", i, p->mode_lf_delta[i]);
2450
2451     va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level);
2452     va_TraceMsg(trace_ctx, "\tclamp_qindex_high = %d\n", p->clamp_qindex_high);
2453     va_TraceMsg(trace_ctx, "\tclamp_qindex_low = %d\n", p->clamp_qindex_low);
2454
2455     va_TraceMsg(trace_ctx, NULL);
2456
2457     return;
2458 }
2459
2460 void va_TraceBeginPicture(
2461     VADisplay dpy,
2462     VAContextID context,
2463     VASurfaceID render_target
2464 )
2465 {
2466     DPY2TRACECTX(dpy);
2467
2468     TRACE_FUNCNAME(idx);
2469
2470     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
2471     va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", render_target);
2472     va_TraceMsg(trace_ctx, "\tframe_count  = #%d\n", trace_ctx->trace_frame_no);
2473     va_TraceMsg(trace_ctx, NULL);
2474
2475     trace_ctx->trace_rendertarget = render_target; /* for surface data dump after vaEndPicture */
2476
2477     trace_ctx->trace_frame_no++;
2478     trace_ctx->trace_slice_no = 0;
2479 }
2480
2481 static void va_TraceMPEG2Buf(
2482     VADisplay dpy,
2483     VAContextID context,
2484     VABufferID buffer,
2485     VABufferType type,
2486     unsigned int size,
2487     unsigned int num_elements,
2488     void *pbuf
2489 )
2490 {
2491     switch (type) {
2492     case VAPictureParameterBufferType:
2493         va_TraceVAPictureParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2494         break;
2495     case VAIQMatrixBufferType:
2496         va_TraceVAIQMatrixBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2497         break;
2498     case VABitPlaneBufferType:
2499         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2500         break;
2501     case VASliceGroupMapBufferType:
2502         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2503         break;
2504     case VASliceParameterBufferType:
2505         va_TraceVASliceParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2506         break;
2507     case VASliceDataBufferType:
2508         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2509         break;
2510     case VAMacroblockParameterBufferType:
2511         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2512         break;
2513     case VAResidualDataBufferType:
2514         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2515         break;
2516     case VADeblockingParameterBufferType:
2517         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2518         break;
2519     case VAImageBufferType:
2520         break;
2521     case VAProtectedSliceDataBufferType:
2522         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2523         break;
2524     case VAEncCodedBufferType:
2525         break;
2526     case VAEncSequenceParameterBufferType:
2527         break;
2528     case VAEncPictureParameterBufferType:
2529         break;
2530     case VAEncSliceParameterBufferType:
2531         break;
2532     default:
2533         break;
2534     }
2535 }
2536
2537 static void va_TraceVAEncSequenceParameterBufferH263(
2538     VADisplay dpy,
2539     VAContextID context,
2540     VABufferID buffer,
2541     VABufferType type,
2542     unsigned int size,
2543     unsigned int num_elements,
2544     void *data)
2545 {
2546     VAEncSequenceParameterBufferH263 *p = (VAEncSequenceParameterBufferH263 *)data;
2547     DPY2TRACECTX(dpy);
2548     
2549     va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH263\n");
2550     
2551     va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
2552     va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2553     va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate);
2554     va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
2555     va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
2556     va_TraceMsg(trace_ctx, NULL);
2557
2558     return;
2559 }
2560
2561
2562 static void va_TraceVAEncPictureParameterBufferH263(
2563     VADisplay dpy,
2564     VAContextID context,
2565     VABufferID buffer,
2566     VABufferType type,
2567     unsigned int size,
2568     unsigned int num_elements,
2569     void *data)
2570 {
2571     VAEncPictureParameterBufferH263 *p = (VAEncPictureParameterBufferH263 *)data;
2572     DPY2TRACECTX(dpy);
2573     
2574     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH263\n");
2575     va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture);
2576     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2577     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2578     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2579     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2580     va_TraceMsg(trace_ctx, "\tpicture_type = 0x%08x\n", p->picture_type);
2581     va_TraceMsg(trace_ctx, NULL);
2582
2583     return;
2584 }
2585
2586 static void va_TraceVAEncPictureParameterBufferJPEG(
2587     VADisplay dpy,
2588     VAContextID context,
2589     VABufferID buffer,
2590     VABufferType type,
2591     unsigned int size,
2592     unsigned int num_elements,
2593     void *data)
2594 {
2595     VAEncPictureParameterBufferJPEG *p = (VAEncPictureParameterBufferJPEG *)data;
2596     int i;
2597     
2598     DPY2TRACECTX(dpy);
2599     
2600     va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferJPEG\n");
2601     va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2602     va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2603     va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2604     va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2605     va_TraceMsg(trace_ctx, "\tpic_flags.bits.profile = %d\n", p->pic_flags.bits.profile);
2606     va_TraceMsg(trace_ctx, "\tpic_flags.bits.progressive = %d\n", p->pic_flags.bits.profile);
2607     va_TraceMsg(trace_ctx, "\tpic_flags.bits.huffman = %d\n", p->pic_flags.bits.huffman);
2608     va_TraceMsg(trace_ctx, "\tpic_flags.bits.interleaved = %d\n", p->pic_flags.bits.interleaved);
2609     va_TraceMsg(trace_ctx, "\tpic_flags.bits.differential = %d\n", p->pic_flags.bits.differential);
2610     va_TraceMsg(trace_ctx, "\tsample_bit_depth = %d\n", p->sample_bit_depth);
2611     va_TraceMsg(trace_ctx, "\tnum_scan = %d\n", p->num_scan);
2612     va_TraceMsg(trace_ctx, "\tnum_components = %d\n", p->num_components);
2613     for (i=0; i<p->num_components; i++)
2614         va_TraceMsg(trace_ctx, "\tcomponent_id[%d] = %d\n", i, p->component_id[i]);
2615
2616     if (p->quality > 0)
2617         va_TraceMsg(trace_ctx, "\tquality = %d\n", p->quality);
2618     else
2619         va_TraceMsg(trace_ctx, "\tquantiser_table_selector[] = %d %d %d %d\n",
2620                     p->quantiser_table_selector[0],
2621                     p->quantiser_table_selector[1],
2622                     p->quantiser_table_selector[2],
2623                     p->quantiser_table_selector[3]);
2624
2625     va_TraceMsg(trace_ctx, NULL);
2626
2627     return;
2628 }
2629
2630 static void va_TraceVAEncQMatrixBufferJPEG(
2631     VADisplay dpy,
2632     VAContextID context,
2633     VABufferID buffer,
2634     VABufferType type,
2635     unsigned int size,
2636     unsigned int num_elements,
2637     void *data)
2638 {
2639     VAQMatrixBufferJPEG *p = (VAQMatrixBufferJPEG *)data;
2640     DPY2TRACECTX(dpy);
2641     
2642     va_TraceMsg(trace_ctx, "\t--VAQMatrixBufferJPEG\n");
2643     va_TraceMsg(trace_ctx, "\tload_lum_quantiser_matrix = %d", p->load_lum_quantiser_matrix);
2644     if (p->load_lum_quantiser_matrix) {
2645         int i;
2646         for (i = 0; i < 64; i++) {
2647             if ((i % 8) == 0)
2648                 va_TraceMsg(trace_ctx, "\n\t");
2649             va_TraceMsg(trace_ctx, "\t0x%02x", p->lum_quantiser_matrix[i]);
2650         }
2651         va_TraceMsg(trace_ctx, "\n");
2652     }
2653     va_TraceMsg(trace_ctx, "\tload_chroma_quantiser_matrix = %08x\n", p->load_chroma_quantiser_matrix);
2654     if (p->load_chroma_quantiser_matrix) {
2655         int i;
2656         for (i = 0; i < 64; i++) {
2657             if ((i % 8) == 0)
2658                 va_TraceMsg(trace_ctx, "\n\t");
2659             va_TraceMsg(trace_ctx, "\t0x%02x", p->chroma_quantiser_matrix[i]);
2660         }
2661         va_TraceMsg(trace_ctx, "\n");
2662     }
2663     
2664     va_TraceMsg(trace_ctx, NULL);
2665     
2666     return;
2667 }
2668
2669
2670 static void va_TraceVAEncSliceParameterBufferJPEG(
2671     VADisplay dpy,
2672     VAContextID context,
2673     VABufferID buffer,
2674     VABufferType type,
2675     unsigned int size,
2676     unsigned int num_elements,
2677     void *data)
2678 {
2679     VAEncSliceParameterBufferJPEG *p = (VAEncSliceParameterBufferJPEG *)data;
2680     int i;
2681     
2682     DPY2TRACECTX(dpy);
2683     
2684     va_TraceMsg(trace_ctx, "\t--VAEncSliceParameterBufferJPEG\n");
2685     va_TraceMsg(trace_ctx, "\trestart_interval = 0x%04x\n", p->restart_interval);
2686     va_TraceMsg(trace_ctx, "\tnum_components = 0x%08x\n", p->num_components);
2687     for (i=0; i<4; i++) {
2688         va_TraceMsg(trace_ctx, "\tcomponents[%i] =\n ");
2689         va_TraceMsg(trace_ctx, "\t\tcomponent_selector = %d\n", p->components[i].component_selector);
2690         va_TraceMsg(trace_ctx, "\t\tdc_table_selector = %d\n", p->components[i].dc_table_selector);
2691         va_TraceMsg(trace_ctx, "\t\tac_table_selector = %d\n", p->components[i].ac_table_selector);
2692     }
2693     
2694     va_TraceMsg(trace_ctx, NULL);
2695     
2696     return;
2697 }
2698
2699
2700 static void va_TraceH263Buf(
2701     VADisplay dpy,
2702     VAContextID context,
2703     VABufferID buffer,
2704     VABufferType type,
2705     unsigned int size,
2706     unsigned int num_elements,
2707     void *pbuf
2708 )
2709 {
2710     switch (type) {
2711     case VAPictureParameterBufferType:/* print MPEG4 buffer */
2712         va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2713         break;
2714     case VAIQMatrixBufferType:/* print MPEG4 buffer */
2715         va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2716         break;
2717     case VABitPlaneBufferType:/* print MPEG4 buffer */
2718         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2719         break;
2720     case VASliceGroupMapBufferType:
2721         break;
2722     case VASliceParameterBufferType:/* print MPEG4 buffer */
2723         va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2724         break;
2725     case VASliceDataBufferType:
2726         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2727         break;
2728     case VAMacroblockParameterBufferType:
2729         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2730         break;
2731     case VAResidualDataBufferType:
2732         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2733         break;
2734     case VADeblockingParameterBufferType:
2735         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2736         break;
2737     case VAImageBufferType:
2738         break;
2739     case VAProtectedSliceDataBufferType:
2740         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2741         break;
2742     case VAEncCodedBufferType:
2743         break;
2744     case VAEncSequenceParameterBufferType:
2745         va_TraceVAEncSequenceParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
2746         break;
2747     case VAEncPictureParameterBufferType:
2748         va_TraceVAEncPictureParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
2749         break;
2750     case VAEncSliceParameterBufferType:
2751         va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2752         break;
2753     case VAEncPackedHeaderParameterBufferType:
2754         va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
2755         break;
2756     default:
2757         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2758         break;
2759     }
2760 }
2761
2762
2763 static void va_TraceJPEGBuf(
2764     VADisplay dpy,
2765     VAContextID context,
2766     VABufferID buffer,
2767     VABufferType type,
2768     unsigned int size,
2769     unsigned int num_elements,
2770     void *pbuf
2771 )
2772 {
2773     switch (type) {
2774     case VABitPlaneBufferType:
2775     case VASliceGroupMapBufferType:
2776     case VASliceDataBufferType:
2777     case VAMacroblockParameterBufferType:
2778     case VAResidualDataBufferType:
2779     case VADeblockingParameterBufferType:
2780     case VAImageBufferType:
2781     case VAProtectedSliceDataBufferType:
2782     case VAEncCodedBufferType:
2783     case VAEncSequenceParameterBufferType:
2784         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2785         break;
2786     case VAEncSliceParameterBufferType:
2787         va_TraceVAEncSliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2788         break;
2789     case VAPictureParameterBufferType:
2790         va_TraceVAPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2791         break;
2792     case VAIQMatrixBufferType:
2793         va_TraceVAIQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2794         break;
2795     case VASliceParameterBufferType:
2796         va_TraceVASliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2797         break;
2798     case VAHuffmanTableBufferType:
2799         va_TraceVAHuffmanTableBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2800         break;
2801     case VAEncPictureParameterBufferType:
2802         va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2803         break;
2804     case VAQMatrixBufferType:
2805         va_TraceVAEncQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2806         break;
2807     default:
2808         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2809         break;
2810     }
2811 }
2812
2813 static void va_TraceMPEG4Buf(
2814     VADisplay dpy,
2815     VAContextID context,
2816     VABufferID buffer,
2817     VABufferType type,
2818     unsigned int size,
2819     unsigned int num_elements,
2820     void *pbuf
2821 )
2822 {
2823     switch (type) {
2824     case VAPictureParameterBufferType:
2825         va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2826         break;
2827     case VAIQMatrixBufferType:
2828         va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2829         break;
2830     case VABitPlaneBufferType:
2831         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2832         break;
2833     case VASliceGroupMapBufferType:
2834         break;
2835     case VASliceParameterBufferType:
2836         va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2837         break;
2838     case VASliceDataBufferType:
2839         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2840         break;
2841     case VAMacroblockParameterBufferType:
2842         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2843         break;
2844     case VAResidualDataBufferType:
2845         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2846         break;
2847     case VADeblockingParameterBufferType:
2848         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2849         break;
2850     case VAImageBufferType:
2851         break;
2852     case VAProtectedSliceDataBufferType:
2853         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2854         break;
2855     case VAEncCodedBufferType:
2856         break;
2857     case VAEncSequenceParameterBufferType:
2858         va_TraceVAEncSequenceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2859         break;
2860     case VAEncPictureParameterBufferType:
2861         va_TraceVAEncPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2862         break;
2863     case VAEncSliceParameterBufferType:
2864         va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2865         break;
2866     default:
2867         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2868         break;
2869     }
2870 }
2871
2872 static void va_TraceHEVCBuf(
2873     VADisplay dpy,
2874     VAContextID context,
2875     VABufferID buffer,
2876     VABufferType type,
2877     unsigned int size,
2878     unsigned int num_elements,
2879     void *pbuf
2880 )
2881 {
2882     DPY2TRACECTX(dpy);
2883
2884     switch (type) {
2885         case VAPictureParameterBufferType:
2886             va_TraceVAPictureParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
2887             break;
2888         case VASliceParameterBufferType:
2889             va_TraceVASliceParameterBufferHEVC(dpy, context, buffer, type, size, num_elements, pbuf);
2890             break;
2891         case VAIQMatrixBufferType:
2892             va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2893             break;
2894         default:
2895             va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2896             break;
2897     }
2898 }
2899
2900 static void va_TraceH264Buf(
2901     VADisplay dpy,
2902     VAContextID context,
2903     VABufferID buffer,
2904     VABufferType type,
2905     unsigned int size,
2906     unsigned int num_elements,
2907     void *pbuf
2908 )
2909 {
2910     DPY2TRACECTX(dpy);
2911     
2912     switch (type) {
2913     case VAPictureParameterBufferType:
2914         va_TraceVAPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2915         break;
2916     case VAIQMatrixBufferType:
2917         va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2918         break;
2919     case VABitPlaneBufferType:
2920         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
2921         break;
2922     case VASliceGroupMapBufferType:
2923         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2924         break;
2925     case VASliceParameterBufferType:
2926         va_TraceVASliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2927         break;
2928     case VASliceDataBufferType:
2929         va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
2930         break;
2931     case VAMacroblockParameterBufferType:
2932         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
2933         break;
2934     case VAResidualDataBufferType:
2935         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);        
2936         break;
2937     case VADeblockingParameterBufferType:
2938         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2939         break;
2940     case VAImageBufferType:
2941         break;
2942     case VAProtectedSliceDataBufferType:
2943         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2944         break;
2945     case VAEncCodedBufferType:
2946         break;
2947     case VAEncSequenceParameterBufferType:
2948         va_TraceVAEncSequenceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2949         break;
2950     case VAEncPictureParameterBufferType:
2951         va_TraceVAEncPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2952         break;
2953     case VAEncSliceParameterBufferType:
2954         if (size == sizeof(VAEncSliceParameterBuffer))
2955             va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2956         else
2957             va_TraceVAEncSliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2958         break;
2959     case VAEncPackedHeaderParameterBufferType:
2960         va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
2961         break;
2962         
2963     case VAEncMiscParameterBufferType:
2964         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2965         break;
2966     default:
2967         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2968         break;
2969     }
2970 }
2971
2972 static void va_TraceVP8Buf(
2973     VADisplay dpy,
2974     VAContextID context,
2975     VABufferID buffer,
2976     VABufferType type,
2977     unsigned int size,
2978     unsigned int num_elements,
2979     void *pbuf
2980 )
2981 {
2982     DPY2TRACECTX(dpy);
2983
2984     switch (type) {
2985     case VAPictureParameterBufferType:
2986         va_TraceVAPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2987         break;
2988     case VAIQMatrixBufferType:
2989         va_TraceVAIQMatrixBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2990         break;
2991     case VAQMatrixBufferType:
2992         break;
2993     case VABitPlaneBufferType:
2994         break;
2995     case VASliceGroupMapBufferType:
2996         break;
2997     case VASliceParameterBufferType:
2998         va_TraceVASliceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2999         break;
3000     case VASliceDataBufferType:
3001         break;
3002     case VAProbabilityBufferType:
3003         va_TraceVAProbabilityBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3004         break;
3005     case VAMacroblockParameterBufferType:
3006         break;
3007     case VAResidualDataBufferType:
3008         break;
3009     case VADeblockingParameterBufferType:
3010         break;
3011     case VAImageBufferType:
3012         break;
3013     case VAProtectedSliceDataBufferType:
3014         break;
3015     case VAEncCodedBufferType:
3016         break;
3017     case VAEncSequenceParameterBufferType:
3018         va_TraceVAEncSequenceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3019         break;
3020     case VAEncPictureParameterBufferType:
3021         va_TraceVAEncPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
3022         break;
3023     case VAEncSliceParameterBufferType:
3024         break;
3025     case VAEncPackedHeaderParameterBufferType:
3026         break;
3027     case VAEncMiscParameterBufferType:
3028         va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3029         break;
3030     default:
3031         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3032         break;
3033     }
3034 }
3035
3036 static void va_TraceVC1Buf(
3037     VADisplay dpy,
3038     VAContextID context,
3039     VABufferID buffer,
3040     VABufferType type,
3041     unsigned int size,
3042     unsigned int num_elements,
3043     void *pbuf
3044 )
3045 {
3046     DPY2TRACECTX(dpy);
3047
3048     switch (type) {
3049     case VAPictureParameterBufferType:
3050         va_TraceVAPictureParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
3051         break;
3052     case VAIQMatrixBufferType:
3053         break;
3054     case VABitPlaneBufferType:
3055         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3056         break;
3057     case VASliceGroupMapBufferType:
3058         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3059         break;
3060     case VASliceParameterBufferType:
3061         va_TraceVASliceParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
3062         break;
3063     case VASliceDataBufferType:
3064         va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
3065         break;
3066     case VAMacroblockParameterBufferType:
3067         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3068         break;
3069     case VAResidualDataBufferType:
3070         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3071         break;
3072     case VADeblockingParameterBufferType:
3073         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3074         break;
3075     case VAImageBufferType:
3076         break;
3077     case VAProtectedSliceDataBufferType:
3078         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3079         break;
3080     case VAEncCodedBufferType:
3081         break;
3082     case VAEncSequenceParameterBufferType:
3083         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3084         break;
3085     case VAEncPictureParameterBufferType:
3086         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3087         break;
3088     case VAEncSliceParameterBufferType:
3089         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3090         break;
3091     default:
3092         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3093         break;
3094     }
3095 }
3096
3097 static void
3098 va_TraceProcFilterParameterBufferDeinterlacing(
3099     VADisplay dpy,
3100     VAContextID context,
3101     VAProcFilterParameterBufferBase *base
3102 )
3103 {
3104     VAProcFilterParameterBufferDeinterlacing *deint = (VAProcFilterParameterBufferDeinterlacing *)base;
3105
3106     DPY2TRACECTX(dpy);
3107
3108     va_TraceMsg(trace_ctx, "\t    type = %d\n", deint->type);
3109     va_TraceMsg(trace_ctx, "\t    algorithm = %d\n", deint->algorithm);
3110     va_TraceMsg(trace_ctx, "\t    flags = %d\n", deint->flags);
3111 }
3112
3113 static void
3114 va_TraceProcFilterParameterBufferColorBalance(
3115     VADisplay dpy,
3116     VAContextID context,
3117     VAProcFilterParameterBufferBase *base
3118 )
3119 {
3120     VAProcFilterParameterBufferColorBalance *color_balance = (VAProcFilterParameterBufferColorBalance *)base;
3121
3122     DPY2TRACECTX(dpy);
3123
3124     va_TraceMsg(trace_ctx, "\t    type = %d\n", color_balance->type);
3125     va_TraceMsg(trace_ctx, "\t    attrib = %d\n", color_balance->attrib);
3126     va_TraceMsg(trace_ctx, "\t    value = %f\n", color_balance->value);
3127 }
3128
3129 static void
3130 va_TraceProcFilterParameterBufferBase(
3131     VADisplay dpy,
3132     VAContextID context,
3133     VAProcFilterParameterBufferBase *base
3134 )
3135 {
3136     DPY2TRACECTX(dpy);
3137
3138     va_TraceMsg(trace_ctx, "\t    type = %d\n", base->type);
3139 }
3140
3141 static void
3142 va_TraceProcFilterParameterBuffer(
3143     VADisplay dpy,
3144     VAContextID context,
3145     VABufferID *filters,
3146     unsigned int num_filters
3147 )
3148 {
3149     VABufferType type;
3150     unsigned int size;
3151     unsigned int num_elements;
3152     VAProcFilterParameterBufferBase *base_filter = NULL;
3153     int i;
3154
3155     DPY2TRACECTX(dpy);
3156
3157     if (num_filters == 0 || filters == NULL) {
3158         va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
3159         va_TraceMsg(trace_ctx, "\t  filters = %p\n", filters);
3160         return;
3161     }
3162
3163     va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
3164
3165     /* get buffer type information */
3166     for (i = 0; i < num_filters; i++) {
3167         vaBufferInfo(dpy, context, filters[i], &type, &size, &num_elements);
3168
3169         if (type != VAProcFilterParameterBufferType) {
3170             va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x (INVALID)\n", i, filters[i]);
3171             return;
3172         } else {
3173             va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x\n", i, filters[i]);
3174         }
3175
3176         base_filter = NULL;
3177         vaMapBuffer(dpy, filters[i], (void **)&base_filter);
3178
3179         if (base_filter == NULL) {
3180             vaUnmapBuffer(dpy, filters[i]);
3181             return;
3182         }
3183
3184         switch (base_filter->type) {
3185         case VAProcFilterDeinterlacing:
3186             va_TraceProcFilterParameterBufferDeinterlacing(dpy,
3187                                                            context,
3188                                                            base_filter);
3189             break;
3190         case VAProcFilterColorBalance:
3191             va_TraceProcFilterParameterBufferColorBalance(dpy,
3192                                                           context,
3193                                                           base_filter);
3194             break;
3195         default:
3196             va_TraceProcFilterParameterBufferBase(dpy,
3197                                                   context,
3198                                                   base_filter);
3199             break;
3200         }
3201
3202         vaUnmapBuffer(dpy, filters[i]);
3203     }
3204 }
3205
3206 static void
3207 va_TraceVAProcPipelineParameterBuffer(
3208     VADisplay dpy,
3209     VAContextID context,
3210     VABufferID buffer,
3211     VABufferType type,
3212     unsigned int size,
3213     unsigned int num_elements,
3214     void *data
3215 )
3216 {
3217     VAProcPipelineParameterBuffer *p = (VAProcPipelineParameterBuffer *)data;
3218     int i;
3219
3220     DPY2TRACECTX(dpy);
3221
3222     va_TraceMsg(trace_ctx, "\t--VAProcPipelineParameterBuffer\n");
3223
3224     va_TraceMsg(trace_ctx, "\t  surface = 0x%08x\n", p->surface);
3225
3226     if (p->surface_region) {
3227         va_TraceMsg(trace_ctx, "\t  surface_region\n");
3228         va_TraceMsg(trace_ctx, "\t    x = %d\n", p->surface_region->x);
3229         va_TraceMsg(trace_ctx, "\t    y = %d\n", p->surface_region->y);
3230         va_TraceMsg(trace_ctx, "\t    width = %d\n", p->surface_region->width);
3231         va_TraceMsg(trace_ctx, "\t    height = %d\n", p->surface_region->height);
3232     } else {
3233         va_TraceMsg(trace_ctx, "\t  surface_region = (NULL)\n");
3234     }
3235
3236     va_TraceMsg(trace_ctx, "\t  surface_color_standard = %d\n", p->surface_color_standard);
3237
3238     if (p->output_region) {
3239         va_TraceMsg(trace_ctx, "\t  output_region\n");
3240         va_TraceMsg(trace_ctx, "\t    x = %d\n", p->output_region->x);
3241         va_TraceMsg(trace_ctx, "\t    y = %d\n", p->output_region->y);
3242         va_TraceMsg(trace_ctx, "\t    width = %d\n", p->output_region->width);
3243         va_TraceMsg(trace_ctx, "\t    height = %d\n", p->output_region->height);
3244     } else {
3245         va_TraceMsg(trace_ctx, "\t  output_region = (NULL)\n");
3246     }
3247
3248     va_TraceMsg(trace_ctx, "\t  output_background_color = 0x%08x\n", p->output_background_color);
3249     va_TraceMsg(trace_ctx, "\t  output_color_standard = %d\n", p->output_color_standard);
3250     va_TraceMsg(trace_ctx, "\t  pipeline_flags = 0x%08x\n", p->pipeline_flags);
3251     va_TraceMsg(trace_ctx, "\t  filter_flags = 0x%08x\n", p->filter_flags);
3252
3253     va_TraceProcFilterParameterBuffer(dpy, context, p->filters, p->num_filters);
3254
3255     va_TraceMsg(trace_ctx, "\t  num_forward_references = 0x%08x\n", p->num_forward_references);
3256
3257     if (p->num_forward_references) {
3258         va_TraceMsg(trace_ctx, "\t  forward_references\n");
3259
3260         if (p->forward_references) {
3261             /* only dump the first 5 forward references */
3262             for (i = 0; i < p->num_forward_references && i < 5; i++) {
3263                 va_TraceMsg(trace_ctx, "\t    forward_references[%d] = 0x%08x\n", i, p->forward_references[i]);
3264             }
3265         } else {
3266             for (i = 0; i < p->num_forward_references && i < 5; i++) {
3267                 va_TraceMsg(trace_ctx, "\t    forward_references[%d] = (NULL)\n", i);
3268             }
3269         }
3270     }
3271
3272     va_TraceMsg(trace_ctx, "\t  num_backward_references = 0x%08x\n", p->num_backward_references);
3273
3274     if (p->num_backward_references) {
3275         va_TraceMsg(trace_ctx, "\t  backward_references\n");
3276
3277         if (p->backward_references) {
3278             /* only dump the first 5 backward references */
3279             for (i = 0; i < p->num_backward_references && i < 5; i++) {
3280                 va_TraceMsg(trace_ctx, "\t    backward_references[%d] = 0x%08x\n", i, p->backward_references[i]);
3281             }
3282         } else {
3283             for (i = 0; i < p->num_backward_references && i < 5; i++) {
3284                 va_TraceMsg(trace_ctx, "\t    backward_references[%d] = (NULL)\n", i);
3285             }
3286         }
3287     }
3288
3289     /* FIXME: add other info later */
3290
3291     va_TraceMsg(trace_ctx, NULL);
3292 }
3293
3294 static void
3295 va_TraceNoneBuf(
3296     VADisplay dpy,
3297     VAContextID context,
3298     VABufferID buffer,
3299     VABufferType type,
3300     unsigned int size,
3301     unsigned int num_elements,
3302     void *pbuf
3303 )
3304 {
3305     DPY2TRACECTX(dpy);
3306
3307     switch (type) {
3308     case VAProcPipelineParameterBufferType:
3309         va_TraceVAProcPipelineParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3310         break;
3311     default:
3312         va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3313         break;
3314     }
3315 }
3316
3317 void va_TraceRenderPicture(
3318     VADisplay dpy,
3319     VAContextID context,
3320     VABufferID *buffers,
3321     int num_buffers
3322 )
3323 {
3324     VABufferType type;
3325     unsigned int size;
3326     unsigned int num_elements;
3327     int i;
3328     DPY2TRACECTX(dpy);
3329
3330     TRACE_FUNCNAME(idx);
3331     
3332     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
3333     va_TraceMsg(trace_ctx, "\tnum_buffers = %d\n", num_buffers);
3334     if (buffers == NULL)
3335         return;
3336     
3337     for (i = 0; i < num_buffers; i++) {
3338         unsigned char *pbuf = NULL;
3339         unsigned int j;
3340         
3341         /* get buffer type information */
3342         vaBufferInfo(dpy, context, buffers[i], &type, &size, &num_elements);
3343
3344         va_TraceMsg(trace_ctx, "\t---------------------------\n");
3345         va_TraceMsg(trace_ctx, "\tbuffers[%d] = 0x%08x\n", i, buffers[i]);
3346         va_TraceMsg(trace_ctx, "\t  type = %s\n", buffer_type_to_string(type));
3347         va_TraceMsg(trace_ctx, "\t  size = %d\n", size);
3348         va_TraceMsg(trace_ctx, "\t  num_elements = %d\n", num_elements);
3349
3350         vaMapBuffer(dpy, buffers[i], (void **)&pbuf);
3351         if (pbuf == NULL)
3352             continue;
3353         
3354         switch (trace_ctx->trace_profile) {
3355         case VAProfileMPEG2Simple:
3356         case VAProfileMPEG2Main:
3357             for (j=0; j<num_elements; j++) {
3358                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3359                 va_TraceMPEG2Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3360             }
3361             break;
3362         case VAProfileMPEG4Simple:
3363         case VAProfileMPEG4AdvancedSimple:
3364         case VAProfileMPEG4Main:
3365             for (j=0; j<num_elements; j++) {
3366                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3367                 va_TraceMPEG4Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3368             }
3369             break;
3370         case VAProfileH264Baseline:
3371         case VAProfileH264Main:
3372         case VAProfileH264High:
3373         case VAProfileH264ConstrainedBaseline:
3374             for (j=0; j<num_elements; j++) {
3375                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3376                 
3377                 va_TraceH264Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3378             }
3379             break;
3380         case VAProfileVC1Simple:
3381         case VAProfileVC1Main:
3382         case VAProfileVC1Advanced:
3383             for (j=0; j<num_elements; j++) {
3384                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3385                 
3386                 va_TraceVC1Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3387             }
3388             break;
3389         case VAProfileH263Baseline:
3390             for (j=0; j<num_elements; j++) {
3391                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3392                 
3393                 va_TraceH263Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3394             }
3395             break;
3396         case VAProfileJPEGBaseline:
3397             for (j=0; j<num_elements; j++) {
3398                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3399                 
3400                 va_TraceJPEGBuf (dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3401             }
3402             break;
3403
3404         case VAProfileNone:
3405             for (j=0; j<num_elements; j++) {
3406                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3407
3408                 va_TraceNoneBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3409             }
3410             break;
3411
3412         case VAProfileVP8Version0_3:
3413             for (j=0; j<num_elements; j++) {
3414                 va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3415
3416                 va_TraceVP8Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3417             }
3418             break;
3419
3420         case VAProfileHEVCMain:
3421         case VAProfileHEVCMain10:
3422             for (j=0; j<num_elements; j++) {
3423                 va_TraceMsg(trace_ctx, "\telement[%d] = ", j);
3424
3425                 va_TraceHEVCBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3426             }
3427             break;
3428         default:
3429             break;
3430         }
3431
3432         vaUnmapBuffer(dpy, buffers[i]);
3433     }
3434
3435     va_TraceMsg(trace_ctx, NULL);
3436 }
3437
3438 void va_TraceEndPicture(
3439     VADisplay dpy,
3440     VAContextID context,
3441     int endpic_done
3442 )
3443 {
3444     int encode, decode, jpeg;
3445     DPY2TRACECTX(dpy);
3446
3447     TRACE_FUNCNAME(idx);
3448
3449     va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", context);
3450     va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", trace_ctx->trace_rendertarget);
3451
3452     /* avoid to create so many empty files */
3453     encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
3454     decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
3455     jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
3456
3457     /* trace encode source surface, can do it before HW completes rendering */
3458     if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE))||
3459         (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG)))
3460         va_TraceSurface(dpy);
3461     
3462     /* trace decoded surface, do it after HW completes rendering */
3463     if (decode && ((trace_flag & VA_TRACE_FLAG_SURFACE_DECODE))) {
3464         vaSyncSurface(dpy, trace_ctx->trace_rendertarget);
3465         va_TraceSurface(dpy);
3466     }
3467
3468     va_TraceMsg(trace_ctx, NULL);
3469 }
3470
3471
3472 void va_TraceSyncSurface(
3473     VADisplay dpy,
3474     VASurfaceID render_target
3475 )
3476 {
3477     DPY2TRACECTX(dpy);
3478
3479     TRACE_FUNCNAME(idx);
3480
3481     va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target);
3482     va_TraceMsg(trace_ctx, NULL);
3483 }
3484
3485 void va_TraceQuerySurfaceAttributes(
3486     VADisplay           dpy,
3487     VAConfigID          config,
3488     VASurfaceAttrib    *attrib_list,
3489     unsigned int       *num_attribs
3490 )
3491 {
3492     DPY2TRACECTX(dpy);
3493
3494     TRACE_FUNCNAME(idx);
3495     va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config);
3496     va_TraceSurfaceAttributes(trace_ctx, attrib_list, num_attribs);
3497     
3498     va_TraceMsg(trace_ctx, NULL);
3499
3500 }
3501
3502
3503 void va_TraceQuerySurfaceStatus(
3504     VADisplay dpy,
3505     VASurfaceID render_target,
3506     VASurfaceStatus *status    /* out */
3507 )
3508 {
3509     DPY2TRACECTX(dpy);
3510
3511     TRACE_FUNCNAME(idx);
3512
3513     va_TraceMsg(trace_ctx, "\trender_target = 0x%08x\n", render_target);
3514     if (status)
3515         va_TraceMsg(trace_ctx, "\tstatus = 0x%08x\n", *status);
3516     va_TraceMsg(trace_ctx, NULL);
3517 }
3518
3519
3520 void va_TraceQuerySurfaceError(
3521     VADisplay dpy,
3522     VASurfaceID surface,
3523     VAStatus error_status,
3524     void **error_info       /*out*/
3525 )
3526 {
3527     DPY2TRACECTX(dpy);
3528
3529     TRACE_FUNCNAME(idx);
3530     va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
3531     va_TraceMsg(trace_ctx, "\terror_status = 0x%08x\n", error_status);
3532     if (error_info && (error_status == VA_STATUS_ERROR_DECODING_ERROR)) {
3533         VASurfaceDecodeMBErrors *p = *error_info;
3534         while (p && (p->status != -1)) {
3535             va_TraceMsg(trace_ctx, "\t\tstatus = %d\n", p->status);
3536             va_TraceMsg(trace_ctx, "\t\tstart_mb = %d\n", p->start_mb);
3537             va_TraceMsg(trace_ctx, "\t\tend_mb = %d\n", p->end_mb);
3538             p++; /* next error record */
3539         }
3540     }
3541     va_TraceMsg(trace_ctx, NULL);
3542 }
3543
3544 void va_TraceMaxNumDisplayAttributes (
3545     VADisplay dpy,
3546     int number
3547 )
3548 {
3549     DPY2TRACECTX(dpy);
3550
3551     TRACE_FUNCNAME(idx);
3552     
3553     va_TraceMsg(trace_ctx, "\tmax_display_attributes = %d\n", number);
3554     va_TraceMsg(trace_ctx, NULL);
3555 }
3556
3557 void va_TraceQueryDisplayAttributes (
3558     VADisplay dpy,
3559     VADisplayAttribute *attr_list,    /* out */
3560     int *num_attributes               /* out */
3561 )
3562 {
3563     int i;
3564     
3565     DPY2TRACECTX(dpy);
3566     
3567     if (attr_list == NULL || num_attributes == NULL)
3568         return;
3569
3570     va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", *num_attributes);
3571     
3572     for (i=0; i<*num_attributes; i++) {
3573         va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n");
3574         va_TraceMsg(trace_ctx, "\t  typ = 0x%08x\n", attr_list[i].type);
3575         va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
3576         va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
3577         va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
3578         va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
3579     }
3580     va_TraceMsg(trace_ctx, NULL);
3581 }
3582
3583
3584 static void va_TraceDisplayAttributes (
3585     VADisplay dpy,
3586     VADisplayAttribute *attr_list,
3587     int num_attributes
3588 )
3589 {
3590     int i;
3591     
3592     DPY2TRACECTX(dpy);
3593     
3594     va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", num_attributes);
3595     if (attr_list == NULL)
3596         return;
3597     
3598     for (i=0; i<num_attributes; i++) {
3599         va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n");
3600         va_TraceMsg(trace_ctx, "\t  typ = 0x%08x\n", attr_list[i].type);
3601         va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
3602         va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
3603         va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
3604         va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
3605     }
3606     va_TraceMsg(trace_ctx, NULL);
3607 }
3608
3609
3610 void va_TraceGetDisplayAttributes (
3611     VADisplay dpy,
3612     VADisplayAttribute *attr_list,
3613     int num_attributes
3614 )
3615 {
3616     DPY2TRACECTX(dpy);
3617
3618     TRACE_FUNCNAME(idx);
3619
3620     va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
3621 }
3622
3623 void va_TraceSetDisplayAttributes (
3624     VADisplay dpy,
3625     VADisplayAttribute *attr_list,
3626     int num_attributes
3627 )
3628 {
3629     DPY2TRACECTX(dpy);
3630
3631     TRACE_FUNCNAME(idx);
3632
3633     va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
3634 }
3635
3636
3637 void va_TracePutSurface (
3638     VADisplay dpy,
3639     VASurfaceID surface,
3640     void *draw, /* the target Drawable */
3641     short srcx,
3642     short srcy,
3643     unsigned short srcw,
3644     unsigned short srch,
3645     short destx,
3646     short desty,
3647     unsigned short destw,
3648     unsigned short desth,
3649     VARectangle *cliprects, /* client supplied clip list */
3650     unsigned int number_cliprects, /* number of clip rects in the clip list */
3651     unsigned int flags /* de-interlacing flags */
3652 )
3653 {
3654     DPY2TRACECTX(dpy);
3655
3656     TRACE_FUNCNAME(idx);
3657     
3658     va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
3659     va_TraceMsg(trace_ctx, "\tdraw = 0x%08x\n", draw);
3660     va_TraceMsg(trace_ctx, "\tsrcx = %d\n", srcx);
3661     va_TraceMsg(trace_ctx, "\tsrcy = %d\n", srcy);
3662     va_TraceMsg(trace_ctx, "\tsrcw = %d\n", srcw);
3663     va_TraceMsg(trace_ctx, "\tsrch = %d\n", srch);
3664     va_TraceMsg(trace_ctx, "\tdestx = %d\n", destx);
3665     va_TraceMsg(trace_ctx, "\tdesty = %d\n", desty);
3666     va_TraceMsg(trace_ctx, "\tdestw = %d\n", destw);
3667     va_TraceMsg(trace_ctx, "\tdesth = %d\n", desth);
3668     va_TraceMsg(trace_ctx, "\tcliprects = 0x%08x\n", cliprects);
3669     va_TraceMsg(trace_ctx, "\tnumber_cliprects = %d\n", number_cliprects);
3670     va_TraceMsg(trace_ctx, "\tflags = 0x%08x\n", flags);
3671     va_TraceMsg(trace_ctx, NULL);
3672 }