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