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