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#define LIBVA_TRACE_FILE "/data/mediadrm/libva.log"
51
52/*
53 * Env. to debug some issue, e.g. the decode/encode issue in a video conference scenerio:
54 * .LIBVA_TRACE=log_file: general VA parameters saved into log_file
55 * .LIBVA_TRACE_BUFDATA: dump all VA data buffer into log_file
56 * .LIBVA_TRACE_CODEDBUF=coded_clip_file: save the coded clip into file coded_clip_file
57 * .LIBVA_TRACE_SURFACE=yuv_file: save surface YUV into file yuv_file. Use file name to determine
58 *                                decode/encode or jpeg surfaces
59 * .LIBVA_TRACE_SURFACE_GEOMETRY=WIDTHxHEIGHT+XOFF+YOFF: only save part of surface context into file
60 *                                due to storage bandwidth limitation
61 */
62
63/* global settings */
64
65/* LIBVA_TRACE */
66int trace_flag = 0;
67
68/* per context settings */
69struct trace_context {
70    /* LIBVA_TRACE */
71    FILE *trace_fp_log; /* save the log into a file */
72    char *trace_log_fn; /* file name */
73
74    /* LIBVA_TRACE_CODEDBUF */
75    FILE *trace_fp_codedbuf; /* save the encode result into a file */
76    char *trace_codedbuf_fn; /* file name */
77
78    /* LIBVA_TRACE_SURFACE */
79    FILE *trace_fp_surface; /* save the surface YUV into a file */
80    char *trace_surface_fn; /* file name */
81
82    VAContextID  trace_context; /* current context */
83
84    VASurfaceID  trace_rendertarget; /* current render target */
85    VAProfile trace_profile; /* current profile for buffers */
86    VAEntrypoint trace_entrypoint; /* current entrypoint */
87
88    unsigned int trace_frame_no; /* current frame NO */
89    unsigned int trace_slice_no; /* current slice NO */
90    unsigned int trace_slice_size; /* current slice buffer size */
91
92    unsigned int trace_surface_width; /* surface dumping geometry */
93    unsigned int trace_surface_height;
94    unsigned int trace_surface_xoff;
95    unsigned int trace_surface_yoff;
96
97    unsigned int trace_frame_width; /* current frame width */
98    unsigned int trace_frame_height; /* current frame height */
99};
100
101#define TRACE_CTX(dpy) ((struct trace_context *)((VADisplayContextP)dpy)->vatrace)
102
103#define DPY2TRACECTX(dpy)                               \
104    struct trace_context *trace_ctx = TRACE_CTX(dpy);   \
105                                                        \
106    if (trace_ctx == NULL)                              \
107        return;                                         \
108
109#define TRACE_FUNCNAME(idx)    va_TraceMsg(trace_ctx, "==========%s\n", __func__);
110
111/* Prototype declarations (functions defined in va.c) */
112
113void va_errorMessage(const char *msg, ...);
114void va_infoMessage(const char *msg, ...);
115
116int va_parseConfig(char *env, char *env_value);
117
118VAStatus vaBufferInfo(
119    VADisplay dpy,
120    VAContextID context,        /* in */
121    VABufferID buf_id,          /* in */
122    VABufferType *type,         /* out */
123    unsigned int *size,         /* out */
124    unsigned int *num_elements  /* out */
125    );
126
127VAStatus vaLockSurface(VADisplay dpy,
128                       VASurfaceID surface,
129                       unsigned int *fourcc, /* following are output argument */
130                       unsigned int *luma_stride,
131                       unsigned int *chroma_u_stride,
132                       unsigned int *chroma_v_stride,
133                       unsigned int *luma_offset,
134                       unsigned int *chroma_u_offset,
135                       unsigned int *chroma_v_offset,
136                       unsigned int *buffer_name,
137                       void **buffer
138                       );
139
140VAStatus vaUnlockSurface(VADisplay dpy,
141                         VASurfaceID surface
142                         );
143
144#define FILE_NAME_SUFFIX(env_value)                      \
145do {                                                    \
146    int tmp = strnlen(env_value, sizeof(env_value));    \
147    int left = sizeof(env_value) - tmp;                 \
148                                                        \
149    snprintf(env_value+tmp,                             \
150             left,                                      \
151             ".%04d.%08lx",                             \
152             suffix,                                    \
153             (unsigned long)trace_ctx);                 \
154} while (0)
155
156void va_TraceInit(VADisplay dpy)
157{
158    char env_value[1024] = {0};
159    // It's used to get value from libva.conf, just use to check value.
160    char va_value[1024] = {0};
161    unsigned short suffix = 0xffff & ((unsigned int)time(NULL));
162    FILE *tmp;
163    struct trace_context *trace_ctx = calloc(sizeof(struct trace_context), 1);
164
165    if (trace_ctx == NULL)
166        return;
167
168    if (va_parseConfig("LIBVA_TRACE", &va_value[0]) == 0) {
169        strcpy(env_value, LIBVA_TRACE_FILE);
170        FILE_NAME_SUFFIX(env_value);
171        trace_ctx->trace_log_fn = strdup(env_value);
172
173        tmp = fopen(env_value, "w");
174        if (tmp) {
175            trace_ctx->trace_fp_log = tmp;
176            va_infoMessage("LIBVA_TRACE is on, save log into %s\n", trace_ctx->trace_log_fn);
177            trace_flag = VA_TRACE_FLAG_LOG;
178        } else
179            va_errorMessage("Open file %s failed (%s)\n", env_value, strerror(errno));
180    }
181
182    /* may re-get the global settings for multiple context */
183    if ((trace_flag & VA_TRACE_FLAG_LOG) && (va_parseConfig("LIBVA_TRACE_BUFDATA", NULL) == 0)) {
184        trace_flag |= VA_TRACE_FLAG_BUFDATA;
185        va_infoMessage("LIBVA_TRACE_BUFDATA is on, dump buffer into log file\n");
186    }
187
188    /* per-context setting */
189    if (va_parseConfig("LIBVA_TRACE_CODEDBUF", &env_value[0]) == 0) {
190        FILE_NAME_SUFFIX(env_value);
191        trace_ctx->trace_codedbuf_fn = strdup(env_value);
192        va_infoMessage("LIBVA_TRACE_CODEDBUF is on, save codedbuf into log file %s\n",
193                       trace_ctx->trace_codedbuf_fn);
194        trace_flag |= VA_TRACE_FLAG_CODEDBUF;
195    }
196
197    if (va_parseConfig("LIBVA_TRACE_SURFACE", &env_value[0]) == 0) {
198        FILE_NAME_SUFFIX(env_value);
199        trace_ctx->trace_surface_fn = strdup(env_value);
200
201        va_infoMessage("LIBVA_TRACE_SURFACE is on, save surface into %s\n",
202                       trace_ctx->trace_surface_fn);
203
204        /* for surface data dump, it is time-consume, and may
205         * cause some side-effect, so only trace the needed surfaces
206         * to trace encode surface, set the trace file name to sth like *enc*
207         * to trace decode surface, set the trace file name to sth like *dec*
208         * if no dec/enc in file name, set both
209         */
210        if (strstr(env_value, "dec"))
211            trace_flag |= VA_TRACE_FLAG_SURFACE_DECODE;
212        if (strstr(env_value, "enc"))
213            trace_flag |= VA_TRACE_FLAG_SURFACE_ENCODE;
214        if (strstr(env_value, "jpeg") || strstr(env_value, "jpg"))
215            trace_flag |= VA_TRACE_FLAG_SURFACE_JPEG;
216
217        if (va_parseConfig("LIBVA_TRACE_SURFACE_GEOMETRY", &env_value[0]) == 0) {
218            char *p = env_value, *q;
219
220            trace_ctx->trace_surface_width = strtod(p, &q);
221            p = q+1; /* skip "x" */
222            trace_ctx->trace_surface_height = strtod(p, &q);
223            p = q+1; /* skip "+" */
224            trace_ctx->trace_surface_xoff = strtod(p, &q);
225            p = q+1; /* skip "+" */
226            trace_ctx->trace_surface_yoff = strtod(p, &q);
227
228            va_infoMessage("LIBVA_TRACE_SURFACE_GEOMETRY is on, only dump surface %dx%d+%d+%d content\n",
229                           trace_ctx->trace_surface_width,
230                           trace_ctx->trace_surface_height,
231                           trace_ctx->trace_surface_xoff,
232                           trace_ctx->trace_surface_yoff);
233        }
234    }
235
236    ((VADisplayContextP)dpy)->vatrace = trace_ctx;
237}
238
239
240void va_TraceEnd(VADisplay dpy)
241{
242    DPY2TRACECTX(dpy);
243
244    if (trace_ctx->trace_fp_log)
245        fclose(trace_ctx->trace_fp_log);
246
247    if (trace_ctx->trace_fp_codedbuf)
248        fclose(trace_ctx->trace_fp_codedbuf);
249
250    if (trace_ctx->trace_fp_surface)
251        fclose(trace_ctx->trace_fp_surface);
252
253    if (trace_ctx->trace_log_fn)
254        free(trace_ctx->trace_log_fn);
255
256    if (trace_ctx->trace_codedbuf_fn)
257        free(trace_ctx->trace_codedbuf_fn);
258
259    if (trace_ctx->trace_surface_fn)
260        free(trace_ctx->trace_surface_fn);
261
262    free(trace_ctx);
263    ((VADisplayContextP)dpy)->vatrace = NULL;
264}
265
266
267void va_TraceMsg(struct trace_context *trace_ctx, const char *msg, ...)
268{
269    va_list args;
270
271    if (!(trace_flag & VA_TRACE_FLAG_LOG))
272        return;
273
274    if (msg)  {
275        struct timeval tv;
276
277        if (gettimeofday(&tv, NULL) == 0)
278            fprintf(trace_ctx->trace_fp_log, "[%04d.%06d] ",
279                    (unsigned int)tv.tv_sec & 0xffff, (unsigned int)tv.tv_usec);
280        va_start(args, msg);
281        vfprintf(trace_ctx->trace_fp_log, msg, args);
282        va_end(args);
283    } else
284        fflush(trace_ctx->trace_fp_log);
285}
286
287
288void va_TraceSurface(VADisplay dpy)
289{
290    unsigned int i;
291    unsigned int fourcc; /* following are output argument */
292    unsigned int luma_stride;
293    unsigned int chroma_u_stride;
294    unsigned int chroma_v_stride;
295    unsigned int luma_offset;
296    unsigned int chroma_u_offset;
297    unsigned int chroma_v_offset;
298    unsigned int buffer_name;
299    void *buffer = NULL;
300    unsigned char *Y_data, *UV_data, *tmp;
301    VAStatus va_status;
302    DPY2TRACECTX(dpy);
303
304    if (!trace_ctx->trace_fp_surface)
305        return;
306
307    va_TraceMsg(trace_ctx, "==========dump surface data in file %s\n", trace_ctx->trace_surface_fn);
308
309    va_TraceMsg(trace_ctx, NULL);
310
311    va_status = vaLockSurface(
312        dpy,
313        trace_ctx->trace_rendertarget,
314        &fourcc,
315        &luma_stride, &chroma_u_stride, &chroma_v_stride,
316        &luma_offset, &chroma_u_offset, &chroma_v_offset,
317        &buffer_name, &buffer);
318
319    if (va_status != VA_STATUS_SUCCESS) {
320        va_TraceMsg(trace_ctx, "Error:vaLockSurface failed\n");
321        return;
322    }
323
324    va_TraceMsg(trace_ctx, "\tfourcc = 0x%08x\n", fourcc);
325    va_TraceMsg(trace_ctx, "\twidth = %d\n", trace_ctx->trace_frame_width);
326    va_TraceMsg(trace_ctx, "\theight = %d\n", trace_ctx->trace_frame_height);
327    va_TraceMsg(trace_ctx, "\tluma_stride = %d\n", luma_stride);
328    va_TraceMsg(trace_ctx, "\tchroma_u_stride = %d\n", chroma_u_stride);
329    va_TraceMsg(trace_ctx, "\tchroma_v_stride = %d\n", chroma_v_stride);
330    va_TraceMsg(trace_ctx, "\tluma_offset = %d\n", luma_offset);
331    va_TraceMsg(trace_ctx, "\tchroma_u_offset = %d\n", chroma_u_offset);
332    va_TraceMsg(trace_ctx, "\tchroma_v_offset = %d\n", chroma_v_offset);
333
334    if (buffer == NULL) {
335        va_TraceMsg(trace_ctx, "Error:vaLockSurface return NULL buffer\n");
336        va_TraceMsg(trace_ctx, NULL);
337
338        vaUnlockSurface(dpy, trace_ctx->trace_rendertarget);
339        return;
340    }
341    va_TraceMsg(trace_ctx, "\tbuffer location = 0x%08x\n", buffer);
342    va_TraceMsg(trace_ctx, NULL);
343
344    Y_data = (unsigned char*)buffer;
345    UV_data = (unsigned char*)buffer + chroma_u_offset;
346
347    tmp = Y_data + luma_stride * trace_ctx->trace_surface_yoff;
348    for (i=0; i<trace_ctx->trace_surface_height; i++) {
349        fwrite(tmp + trace_ctx->trace_surface_xoff,
350               trace_ctx->trace_surface_width,
351               1, trace_ctx->trace_fp_surface);
352
353        tmp += luma_stride;
354    }
355    tmp = UV_data + chroma_u_stride * trace_ctx->trace_surface_yoff / 2;
356    if (fourcc == VA_FOURCC_NV12) {
357        for (i=0; i<trace_ctx->trace_surface_height/2; i++) {
358            fwrite(tmp + trace_ctx->trace_surface_xoff,
359                   trace_ctx->trace_surface_width,
360                   1, trace_ctx->trace_fp_surface);
361
362            tmp += chroma_u_stride;
363        }
364    }
365
366    vaUnlockSurface(dpy, trace_ctx->trace_rendertarget);
367
368    va_TraceMsg(trace_ctx, NULL);
369}
370
371
372void va_TraceInitialize (
373    VADisplay dpy,
374    int __maybe_unused *major_version,     /* out */
375    int __maybe_unused *minor_version      /* out */
376)
377{
378    DPY2TRACECTX(dpy);
379
380    TRACE_FUNCNAME(idx);
381}
382
383void va_TraceTerminate (
384    VADisplay dpy
385)
386{
387    DPY2TRACECTX(dpy);
388    TRACE_FUNCNAME(idx);
389}
390
391
392void va_TraceCreateConfig(
393    VADisplay dpy,
394    VAProfile profile,
395    VAEntrypoint entrypoint,
396    VAConfigAttrib *attrib_list,
397    int num_attribs,
398    VAConfigID __maybe_unused *config_id /* out */
399)
400{
401    int i;
402    int encode, decode, jpeg;
403    DPY2TRACECTX(dpy);
404
405    TRACE_FUNCNAME(idx);
406
407    va_TraceMsg(trace_ctx, "\tprofile = %d\n", profile);
408    va_TraceMsg(trace_ctx, "\tentrypoint = %d\n", entrypoint);
409    va_TraceMsg(trace_ctx, "\tnum_attribs = %d\n", num_attribs);
410    if (attrib_list) {
411        for (i = 0; i < num_attribs; i++) {
412            va_TraceMsg(trace_ctx, "\t\tattrib_list[%d].type = 0x%08x\n", i, attrib_list[i].type);
413            va_TraceMsg(trace_ctx, "\t\tattrib_list[%d].value = 0x%08x\n", i, attrib_list[i].value);
414        }
415    }
416    va_TraceMsg(trace_ctx, NULL);
417
418    trace_ctx->trace_profile = profile;
419    trace_ctx->trace_entrypoint = entrypoint;
420
421    /* avoid to create so many empty files */
422    encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
423    decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
424    jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
425    if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE)) ||
426        (decode && (trace_flag & VA_TRACE_FLAG_SURFACE_DECODE)) ||
427        (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG))) {
428        FILE *tmp = fopen(trace_ctx->trace_surface_fn, "w");
429
430        if (tmp)
431            trace_ctx->trace_fp_surface = tmp;
432        else {
433            va_errorMessage("Open file %s failed (%s)\n",
434                            trace_ctx->trace_surface_fn,
435                            strerror(errno));
436            trace_ctx->trace_fp_surface = NULL;
437            trace_flag &= ~(VA_TRACE_FLAG_SURFACE);
438        }
439    }
440
441    if (encode && (trace_flag & VA_TRACE_FLAG_CODEDBUF)) {
442        FILE *tmp = fopen(trace_ctx->trace_codedbuf_fn, "w");
443
444        if (tmp)
445            trace_ctx->trace_fp_codedbuf = tmp;
446        else {
447            va_errorMessage("Open file %s failed (%s)\n",
448                            trace_ctx->trace_codedbuf_fn,
449                            strerror(errno));
450            trace_ctx->trace_fp_codedbuf = NULL;
451            trace_flag &= ~VA_TRACE_FLAG_CODEDBUF;
452        }
453    }
454}
455
456static void va_TraceSurfaceAttributes(
457    struct trace_context *trace_ctx,
458    VASurfaceAttrib    *attrib_list,
459    unsigned int       *num_attribs
460)
461{
462    int i, num;
463    VASurfaceAttrib *p;
464
465    if (!attrib_list || !num_attribs)
466        return;
467
468    p = attrib_list;
469    num = *num_attribs;
470    if (num > VASurfaceAttribCount)
471        num = VASurfaceAttribCount;
472
473    for (i=0; i<num; i++) {
474        int type = p->value.type;
475
476        va_TraceMsg(trace_ctx, "\tattrib_list[%i] =\n", i);
477
478        va_TraceMsg(trace_ctx, "\t\ttype = %d\n", p->type);
479        va_TraceMsg(trace_ctx, "\t\tflags = %d\n", p->flags);
480        va_TraceMsg(trace_ctx, "\t\tvalue.type = %d\n", type);
481        switch (type) {
482        case VAGenericValueTypeInteger:
483            va_TraceMsg(trace_ctx, "\t\tvalue.value.i = 0x%08x\n", p->value.value.i);
484            break;
485        case VAGenericValueTypeFloat:
486            va_TraceMsg(trace_ctx, "\t\tvalue.value.f = %f\n", p->value.value.f);
487            break;
488        case VAGenericValueTypePointer:
489            va_TraceMsg(trace_ctx, "\t\tvalue.value.p = %p\n", p->value.value.p);
490            if ((p->type == VASurfaceAttribExternalBufferDescriptor) && p->value.value.p) {
491                VASurfaceAttribExternalBuffers *tmp = (VASurfaceAttribExternalBuffers *) p->value.value.p;
492                unsigned int j;
493
494                va_TraceMsg(trace_ctx, "\t\t--VASurfaceAttribExternalBufferDescriptor\n");
495                va_TraceMsg(trace_ctx, "\t\t  pixel_format=0x%08x\n", tmp->pixel_format);
496                va_TraceMsg(trace_ctx, "\t\t  width=%d\n", tmp->width);
497                va_TraceMsg(trace_ctx, "\t\t  height=%d\n", tmp->height);
498                va_TraceMsg(trace_ctx, "\t\t  data_size=%d\n", tmp->data_size);
499                va_TraceMsg(trace_ctx, "\t\t  num_planes=%d\n", tmp->num_planes);
500                va_TraceMsg(trace_ctx, "\t\t  pitches[4]=%d %d %d %d\n",
501                            tmp->pitches[0], tmp->pitches[1], tmp->pitches[2], tmp->pitches[3]);
502                va_TraceMsg(trace_ctx, "\t\t  offsets[4]=%d %d %d %d\n",
503                            tmp->offsets[0], tmp->offsets[1], tmp->offsets[2], tmp->offsets[3]);
504                va_TraceMsg(trace_ctx, "\t\t  flags=0x%08x\n", tmp->flags);
505                va_TraceMsg(trace_ctx, "\t\t  num_buffers=0x%08x\n", tmp->num_buffers);
506                va_TraceMsg(trace_ctx, "\t\t  buffers=%p\n", tmp->buffers);
507                for (j = 0; j < tmp->num_buffers; j++) {
508                    va_TraceMsg(trace_ctx, "\t\t\tbuffers[%d]=%p\n", j, tmp->buffers[j]);
509                }
510            }
511            break;
512        case VAGenericValueTypeFunc:
513            va_TraceMsg(trace_ctx, "\t\tvalue.value.fn = %p\n", p->value.value.fn);
514            break;
515        default:
516            break;
517        }
518
519        p++;
520    }
521}
522
523void va_TraceCreateSurfaces(
524    VADisplay dpy,
525    int width,
526    int height,
527    int format,
528    int num_surfaces,
529    VASurfaceID *surfaces,    /* out */
530    VASurfaceAttrib    *attrib_list,
531    unsigned int        num_attribs
532)
533{
534    int i;
535    DPY2TRACECTX(dpy);
536
537    TRACE_FUNCNAME(idx);
538
539    va_TraceMsg(trace_ctx, "\twidth = %d\n", width);
540    va_TraceMsg(trace_ctx, "\theight = %d\n", height);
541    va_TraceMsg(trace_ctx, "\tformat = %d\n", format);
542    va_TraceMsg(trace_ctx, "\tnum_surfaces = %d\n", num_surfaces);
543
544    if (surfaces) {
545        for (i = 0; i < num_surfaces; i++)
546            va_TraceMsg(trace_ctx, "\t\tsurfaces[%d] = 0x%08x\n", i, surfaces[i]);
547    }
548
549    va_TraceSurfaceAttributes(trace_ctx, attrib_list, &num_attribs);
550
551    va_TraceMsg(trace_ctx, NULL);
552}
553
554
555void va_TraceDestroySurfaces(
556    VADisplay dpy,
557    VASurfaceID *surface_list,
558    int num_surfaces
559)
560{
561    int i;
562    DPY2TRACECTX(dpy);
563
564    TRACE_FUNCNAME(idx);
565
566    if (surface_list) {
567        for (i = 0; i < num_surfaces; i++)
568            va_TraceMsg(trace_ctx, "\t\tsurfaces[%d] = 0x%08x\n", i, surface_list[i]);
569    }
570
571    va_TraceMsg(trace_ctx, NULL);
572}
573
574
575void va_TraceCreateContext(
576    VADisplay dpy,
577    VAConfigID config_id,
578    int picture_width,
579    int picture_height,
580    int flag,
581    VASurfaceID *render_targets,
582    int num_render_targets,
583    VAContextID *context        /* out */
584)
585{
586    int i;
587    DPY2TRACECTX(dpy);
588
589    TRACE_FUNCNAME(idx);
590
591    va_TraceMsg(trace_ctx, "\tconfig = 0x%08x\n", config_id);
592    va_TraceMsg(trace_ctx, "\twidth = %d\n", picture_width);
593    va_TraceMsg(trace_ctx, "\theight = %d\n", picture_height);
594    va_TraceMsg(trace_ctx, "\tflag = 0x%08x\n", flag);
595    va_TraceMsg(trace_ctx, "\tnum_render_targets = %d\n", num_render_targets);
596    if (render_targets) {
597        for (i=0; i<num_render_targets; i++)
598            va_TraceMsg(trace_ctx, "\t\trender_targets[%d] = 0x%08x\n", i, render_targets[i]);
599    }
600    if (context) {
601        va_TraceMsg(trace_ctx, "\tcontext = 0x%08x\n", *context);
602        trace_ctx->trace_context = *context;
603    } else
604        trace_ctx->trace_context = VA_INVALID_ID;
605
606    trace_ctx->trace_frame_no = 0;
607    trace_ctx->trace_slice_no = 0;
608
609    trace_ctx->trace_frame_width = picture_width;
610    trace_ctx->trace_frame_height = picture_height;
611
612    if (trace_ctx->trace_surface_width == 0)
613        trace_ctx->trace_surface_width = picture_width;
614    if (trace_ctx->trace_surface_height == 0)
615        trace_ctx->trace_surface_height = picture_height;
616}
617
618
619static char * buffer_type_to_string(int type)
620{
621    switch (type) {
622    case VAPictureParameterBufferType: return "VAPictureParameterBufferType";
623    case VAIQMatrixBufferType: return "VAIQMatrixBufferType";
624    case VABitPlaneBufferType: return "VABitPlaneBufferType";
625    case VASliceGroupMapBufferType: return "VASliceGroupMapBufferType";
626    case VASliceParameterBufferType: return "VASliceParameterBufferType";
627    case VASliceDataBufferType: return "VASliceDataBufferType";
628    case VAProtectedSliceDataBufferType: return "VAProtectedSliceDataBufferType";
629    case VAMacroblockParameterBufferType: return "VAMacroblockParameterBufferType";
630    case VAResidualDataBufferType: return "VAResidualDataBufferType";
631    case VADeblockingParameterBufferType: return "VADeblockingParameterBufferType";
632    case VAImageBufferType: return "VAImageBufferType";
633    case VAQMatrixBufferType: return "VAQMatrixBufferType";
634    case VAHuffmanTableBufferType: return "VAHuffmanTableBufferType";
635    case VAProbabilityBufferType: return "VAProbabilityBufferType";
636/* Following are encode buffer types */
637    case VAEncCodedBufferType: return "VAEncCodedBufferType";
638    case VAEncSequenceParameterBufferType: return "VAEncSequenceParameterBufferType";
639    case VAEncPictureParameterBufferType: return "VAEncPictureParameterBufferType";
640    case VAEncSliceParameterBufferType: return "VAEncSliceParameterBufferType";
641    case VAEncPackedHeaderParameterBufferType: return "VAEncPackedHeaderParameterBufferType";
642    case VAEncPackedHeaderDataBufferType: return "VAEncPackedHeaderDataBufferType";
643    case VAEncMiscParameterBufferType: return "VAEncMiscParameterBufferType";
644    case VAEncMacroblockParameterBufferType: return "VAEncMacroblockParameterBufferType";
645    case VAProcPipelineParameterBufferType: return "VAProcPipelineParameterBufferType";
646    case VAProcFilterParameterBufferType: return "VAProcFilterParameterBufferType";
647    default: return "UnknowBuffer";
648    }
649}
650
651void va_TraceCreateBuffer (
652    VADisplay dpy,
653    VAContextID __maybe_unused context,	/* in */
654    VABufferType type,		/* in */
655    unsigned int size,		/* in */
656    unsigned int num_elements,	/* in */
657    void __maybe_unused *data,			/* in */
658    VABufferID *buf_id		/* out */
659)
660{
661    DPY2TRACECTX(dpy);
662
663    /* only trace CodedBuffer */
664    if (type != VAEncCodedBufferType)
665        return;
666
667    TRACE_FUNCNAME(idx);
668    va_TraceMsg(trace_ctx, "\tbuf_type=%s\n", buffer_type_to_string(type));
669    if (buf_id)
670        va_TraceMsg(trace_ctx, "\tbuf_id=0x%x\n", *buf_id);
671    va_TraceMsg(trace_ctx, "\tsize=%d\n", size);
672    va_TraceMsg(trace_ctx, "\tnum_elements=%d\n", num_elements);
673
674    va_TraceMsg(trace_ctx, NULL);
675}
676
677void va_TraceDestroyBuffer (
678    VADisplay dpy,
679    VABufferID buf_id    /* in */
680)
681{
682    VABufferType type;
683    unsigned int size;
684    unsigned int num_elements;
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
704void 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
751static 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
797static 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
835static 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
862static 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
893static 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
918static 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
947static 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
976static 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
1022static 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
1082static 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
1111static 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
1140static 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
1167static 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
1198static 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
1210static 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
1285static 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
1378static 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
1422static 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
1485static 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
1548static 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
1573static 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
1691static 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
1703    if (!p)
1704        return;
1705    va_TraceMsg(trace_ctx, "\t--VAEncPackedHeaderParameterBuffer\n");
1706    va_TraceMsg(trace_ctx, "\ttype = 0x%08x\n", p->type);
1707    va_TraceMsg(trace_ctx, "\tbit_length = %d\n", p->bit_length);
1708    va_TraceMsg(trace_ctx, "\thas_emulation_bytes = %d\n", p->has_emulation_bytes);
1709    va_TraceMsg(trace_ctx, NULL);
1710
1711    return;
1712}
1713
1714static void va_TraceVAEncMiscParameterBuffer(
1715    VADisplay dpy,
1716    VAContextID context,
1717    VABufferID buffer,
1718    VABufferType type,
1719    unsigned int size,
1720    unsigned int num_elements,
1721    void *data)
1722{
1723    VAEncMiscParameterBuffer* tmp = (VAEncMiscParameterBuffer*)data;
1724    DPY2TRACECTX(dpy);
1725    uint32_t i;
1726
1727    switch (tmp->type) {
1728    case VAEncMiscParameterTypeFrameRate:
1729    {
1730        VAEncMiscParameterFrameRate *p = (VAEncMiscParameterFrameRate *)tmp->data;
1731        va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterFrameRate\n");
1732        va_TraceMsg(trace_ctx, "\tframerate = %d\n", p->framerate);
1733
1734        break;
1735    }
1736    case VAEncMiscParameterTypeRateControl:
1737    {
1738        VAEncMiscParameterRateControl *p = (VAEncMiscParameterRateControl *)tmp->data;
1739
1740        va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterRateControl\n");
1741        va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
1742        va_TraceMsg(trace_ctx, "\ttarget_percentage = %d\n", p->target_percentage);
1743        va_TraceMsg(trace_ctx, "\twindow_size = %d\n", p->window_size);
1744        va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
1745        va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
1746        va_TraceMsg(trace_ctx, "\tbasic_unit_size = %d\n", p->basic_unit_size);
1747        va_TraceMsg(trace_ctx, "\trc_flags.reset = %d \n", p->rc_flags.bits.reset);
1748        va_TraceMsg(trace_ctx, "\trc_flags.disable_frame_skip = %d\n", p->rc_flags.bits.disable_frame_skip);
1749        va_TraceMsg(trace_ctx, "\trc_flags.disable_bit_stuffing = %d\n", p->rc_flags.bits.disable_bit_stuffing);
1750        break;
1751    }
1752    case VAEncMiscParameterTypeMaxSliceSize:
1753    {
1754        VAEncMiscParameterMaxSliceSize *p = (VAEncMiscParameterMaxSliceSize *)tmp->data;
1755
1756        va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxSliceSize\n");
1757        va_TraceMsg(trace_ctx, "\tmax_slice_size = %d\n", p->max_slice_size);
1758        break;
1759    }
1760    case VAEncMiscParameterTypeAIR:
1761    {
1762        VAEncMiscParameterAIR *p = (VAEncMiscParameterAIR *)tmp->data;
1763
1764        va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterAIR\n");
1765        va_TraceMsg(trace_ctx, "\tair_num_mbs = %d\n", p->air_num_mbs);
1766        va_TraceMsg(trace_ctx, "\tair_threshold = %d\n", p->air_threshold);
1767        va_TraceMsg(trace_ctx, "\tair_auto = %d\n", p->air_auto);
1768        break;
1769    }
1770    case VAEncMiscParameterTypeHRD:
1771    {
1772        VAEncMiscParameterHRD *p = (VAEncMiscParameterHRD *)tmp->data;
1773
1774        va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterHRD\n");
1775        va_TraceMsg(trace_ctx, "\tinitial_buffer_fullness = %d\n", p->initial_buffer_fullness);
1776        va_TraceMsg(trace_ctx, "\tbuffer_size = %d\n", p->buffer_size);
1777        break;
1778    }
1779    case VAEncMiscParameterTypeMaxFrameSize:
1780    {
1781        VAEncMiscParameterBufferMaxFrameSize *p = (VAEncMiscParameterBufferMaxFrameSize *)tmp->data;
1782
1783        va_TraceMsg(trace_ctx, "\t--VAEncMiscParameterTypeMaxFrameSize\n");
1784        va_TraceMsg(trace_ctx, "\tmax_frame_size = %d\n", p->max_frame_size);
1785        break;
1786    }
1787    case VAEncMiscParameterTypeTemporalLayerStructure:
1788    {
1789        VAEncMiscParameterTemporalLayerStructure *p = (VAEncMiscParameterTemporalLayerStructure *)tmp->data;
1790        va_TraceMsg(trace_ctx,"\t--VAEncMiscParameterTypeTemporalLayerStructure\n");
1791        va_TraceMsg(trace_ctx,"\tnumber_of_layers = %d\n", p->number_of_layers);
1792        va_TraceMsg(trace_ctx,"\tperiodicity = %d\n", p->periodicity);
1793        for(i=0;i<p->periodicity;i++)
1794                va_TraceMsg(trace_ctx,"\tlayer_id[%d] = %d\n", i, p->layer_id[i]);
1795        break;
1796    }
1797    default:
1798        va_TraceMsg(trace_ctx, "Unknown VAEncMiscParameterBuffer(type = %d):\n", tmp->type);
1799        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, data);
1800        break;
1801    }
1802    va_TraceMsg(trace_ctx, NULL);
1803
1804    return;
1805}
1806
1807
1808static void va_TraceVAPictureParameterBufferVC1(
1809    VADisplay dpy,
1810    VAContextID context,
1811    VABufferID buffer,
1812    VABufferType type,
1813    unsigned int size,
1814    unsigned int num_elements,
1815    void *data
1816)
1817{
1818    VAPictureParameterBufferVC1* p = (VAPictureParameterBufferVC1*)data;
1819    DPY2TRACECTX(dpy);
1820
1821    va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVC1\n");
1822    va_TraceMsg(trace_ctx, "\t    context = %d, buffer = %d, type = %d, size = %d, num_elements = %d\n",
1823                context, buffer, type, size, num_elements);
1824    va_TraceMsg(trace_ctx, "\tforward_reference_picture = 0x%08x\n", p->forward_reference_picture);
1825    va_TraceMsg(trace_ctx, "\tbackward_reference_picture = 0x%08x\n", p->backward_reference_picture);
1826    va_TraceMsg(trace_ctx, "\tinloop_decoded_picture = 0x%08x\n", p->inloop_decoded_picture);
1827
1828    va_TraceMsg(trace_ctx, "\tpulldown = %d\n", p->sequence_fields.bits.pulldown);
1829    va_TraceMsg(trace_ctx, "\tinterlace = %d\n", p->sequence_fields.bits.interlace);
1830    va_TraceMsg(trace_ctx, "\ttfcntrflag = %d\n", p->sequence_fields.bits.tfcntrflag);
1831    va_TraceMsg(trace_ctx, "\tfinterpflag = %d\n", p->sequence_fields.bits.finterpflag);
1832    va_TraceMsg(trace_ctx, "\tpsf = %d\n", p->sequence_fields.bits.psf);
1833    va_TraceMsg(trace_ctx, "\tmultires = %d\n", p->sequence_fields.bits.multires);
1834    va_TraceMsg(trace_ctx, "\toverlap = %d\n", p->sequence_fields.bits.overlap);
1835    va_TraceMsg(trace_ctx, "\tsyncmarker = %d\n", p->sequence_fields.bits.syncmarker);
1836    va_TraceMsg(trace_ctx, "\trangered = %d\n", p->sequence_fields.bits.rangered);
1837    va_TraceMsg(trace_ctx, "\tmax_b_frames = %d\n", p->sequence_fields.bits.max_b_frames);
1838    va_TraceMsg(trace_ctx, "\tprofile = %d\n", p->sequence_fields.bits.profile);
1839    va_TraceMsg(trace_ctx, "\tcoded_width = %d\n", p->coded_width);
1840    va_TraceMsg(trace_ctx, "\tcoded_height = %d\n", p->coded_height);
1841    va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry);
1842    va_TraceMsg(trace_ctx, "\tbroken_link = %d\n", p->entrypoint_fields.bits.broken_link);
1843    va_TraceMsg(trace_ctx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_entry);
1844    va_TraceMsg(trace_ctx, "\tpanscan_flag = %d\n", p->entrypoint_fields.bits.panscan_flag);
1845    va_TraceMsg(trace_ctx, "\tloopfilter = %d\n", p->entrypoint_fields.bits.loopfilter);
1846    va_TraceMsg(trace_ctx, "\tconditional_overlap_flag = %d\n", p->conditional_overlap_flag);
1847    va_TraceMsg(trace_ctx, "\tfast_uvmc_flag = %d\n", p->fast_uvmc_flag);
1848    va_TraceMsg(trace_ctx, "\trange_mapping_luma_flag = %d\n", p->range_mapping_fields.bits.luma_flag);
1849    va_TraceMsg(trace_ctx, "\trange_mapping_luma = %d\n", p->range_mapping_fields.bits.luma);
1850    va_TraceMsg(trace_ctx, "\trange_mapping_chroma_flag = %d\n", p->range_mapping_fields.bits.chroma_flag);
1851    va_TraceMsg(trace_ctx, "\trange_mapping_chroma = %d\n", p->range_mapping_fields.bits.chroma);
1852    va_TraceMsg(trace_ctx, "\tb_picture_fraction = %d\n", p->b_picture_fraction);
1853    va_TraceMsg(trace_ctx, "\tcbp_table = %d\n", p->cbp_table);
1854    va_TraceMsg(trace_ctx, "\tmb_mode_table = %d\n", p->mb_mode_table);
1855    va_TraceMsg(trace_ctx, "\trange_reduction_frame = %d\n", p->range_reduction_frame);
1856    va_TraceMsg(trace_ctx, "\trounding_control = %d\n", p->rounding_control);
1857    va_TraceMsg(trace_ctx, "\tpost_processing = %d\n", p->post_processing);
1858    va_TraceMsg(trace_ctx, "\tpicture_resolution_index = %d\n", p->picture_resolution_index);
1859    va_TraceMsg(trace_ctx, "\tluma_scale = %d\n", p->luma_scale);
1860    va_TraceMsg(trace_ctx, "\tluma_shift = %d\n", p->luma_shift);
1861    va_TraceMsg(trace_ctx, "\tpicture_type = %d\n", p->picture_fields.bits.picture_type);
1862    va_TraceMsg(trace_ctx, "\tframe_coding_mode = %d\n", p->picture_fields.bits.frame_coding_mode);
1863    va_TraceMsg(trace_ctx, "\ttop_field_first = %d\n", p->picture_fields.bits.top_field_first);
1864    va_TraceMsg(trace_ctx, "\tis_first_field = %d\n", p->picture_fields.bits.is_first_field);
1865    va_TraceMsg(trace_ctx, "\tintensity_compensation = %d\n", p->picture_fields.bits.intensity_compensation);
1866    va_TraceMsg(trace_ctx, "\tmv_type_mb = %d\n", p->raw_coding.flags.mv_type_mb);
1867    va_TraceMsg(trace_ctx, "\tdirect_mb = %d\n", p->raw_coding.flags.direct_mb);
1868    va_TraceMsg(trace_ctx, "\tskip_mb = %d\n", p->raw_coding.flags.skip_mb);
1869    va_TraceMsg(trace_ctx, "\tfield_tx = %d\n", p->raw_coding.flags.field_tx);
1870    va_TraceMsg(trace_ctx, "\tforward_mb = %d\n", p->raw_coding.flags.forward_mb);
1871    va_TraceMsg(trace_ctx, "\tac_pred = %d\n", p->raw_coding.flags.ac_pred);
1872    va_TraceMsg(trace_ctx, "\toverflags = %d\n", p->raw_coding.flags.overflags);
1873    va_TraceMsg(trace_ctx, "\tbp_mv_type_mb = %d\n", p->bitplane_present.flags.bp_mv_type_mb);
1874    va_TraceMsg(trace_ctx, "\tbp_direct_mb = %d\n", p->bitplane_present.flags.bp_direct_mb);
1875    va_TraceMsg(trace_ctx, "\tbp_skip_mb = %d\n", p->bitplane_present.flags.bp_skip_mb);
1876    va_TraceMsg(trace_ctx, "\tbp_field_tx = %d\n", p->bitplane_present.flags.bp_field_tx);
1877    va_TraceMsg(trace_ctx, "\tbp_forward_mb = %d\n", p->bitplane_present.flags.bp_forward_mb);
1878    va_TraceMsg(trace_ctx, "\tbp_ac_pred = %d\n", p->bitplane_present.flags.bp_ac_pred);
1879    va_TraceMsg(trace_ctx, "\tbp_overflags = %d\n", p->bitplane_present.flags.bp_overflags);
1880    va_TraceMsg(trace_ctx, "\treference_distance_flag = %d\n", p->reference_fields.bits.reference_distance_flag);
1881    va_TraceMsg(trace_ctx, "\treference_distance = %d\n", p->reference_fields.bits.reference_distance);
1882    va_TraceMsg(trace_ctx, "\tnum_reference_pictures = %d\n", p->reference_fields.bits.num_reference_pictures);
1883    va_TraceMsg(trace_ctx, "\treference_field_pic_indicator = %d\n", p->reference_fields.bits.reference_field_pic_indicator);
1884    va_TraceMsg(trace_ctx, "\tmv_mode = %d\n", p->mv_fields.bits.mv_mode);
1885    va_TraceMsg(trace_ctx, "\tmv_mode2 = %d\n", p->mv_fields.bits.mv_mode2);
1886    va_TraceMsg(trace_ctx, "\tmv_table = %d\n", p->mv_fields.bits.mv_table);
1887    va_TraceMsg(trace_ctx, "\ttwo_mv_block_pattern_table = %d\n", p->mv_fields.bits.two_mv_block_pattern_table);
1888    va_TraceMsg(trace_ctx, "\tfour_mv_switch = %d\n", p->mv_fields.bits.four_mv_switch);
1889    va_TraceMsg(trace_ctx, "\tfour_mv_block_pattern_table = %d\n", p->mv_fields.bits.four_mv_block_pattern_table);
1890    va_TraceMsg(trace_ctx, "\textended_mv_flag = %d\n", p->mv_fields.bits.extended_mv_flag);
1891    va_TraceMsg(trace_ctx, "\textended_mv_range = %d\n", p->mv_fields.bits.extended_mv_range);
1892    va_TraceMsg(trace_ctx, "\textended_dmv_flag = %d\n", p->mv_fields.bits.extended_dmv_flag);
1893    va_TraceMsg(trace_ctx, "\textended_dmv_range = %d\n", p->mv_fields.bits.extended_dmv_range);
1894    va_TraceMsg(trace_ctx, "\tdquant = %d\n", p->pic_quantizer_fields.bits.dquant);
1895    va_TraceMsg(trace_ctx, "\tquantizer = %d\n", p->pic_quantizer_fields.bits.quantizer);
1896    va_TraceMsg(trace_ctx, "\thalf_qp = %d\n", p->pic_quantizer_fields.bits.half_qp);
1897    va_TraceMsg(trace_ctx, "\tpic_quantizer_scale = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_scale);
1898    va_TraceMsg(trace_ctx, "\tpic_quantizer_type = %d\n", p->pic_quantizer_fields.bits.pic_quantizer_type);
1899    va_TraceMsg(trace_ctx, "\tdq_frame = %d\n", p->pic_quantizer_fields.bits.dq_frame);
1900    va_TraceMsg(trace_ctx, "\tdq_profile = %d\n", p->pic_quantizer_fields.bits.dq_profile);
1901    va_TraceMsg(trace_ctx, "\tdq_sb_edge = %d\n", p->pic_quantizer_fields.bits.dq_sb_edge);
1902    va_TraceMsg(trace_ctx, "\tdq_db_edge = %d\n", p->pic_quantizer_fields.bits.dq_db_edge);
1903    va_TraceMsg(trace_ctx, "\tdq_binary_level = %d\n", p->pic_quantizer_fields.bits.dq_binary_level);
1904    va_TraceMsg(trace_ctx, "\talt_pic_quantizer = %d\n", p->pic_quantizer_fields.bits.alt_pic_quantizer);
1905    va_TraceMsg(trace_ctx, "\tvariable_sized_transform_flag = %d\n", p->transform_fields.bits.variable_sized_transform_flag);
1906    va_TraceMsg(trace_ctx, "\tmb_level_transform_type_flag = %d\n", p->transform_fields.bits.mb_level_transform_type_flag);
1907    va_TraceMsg(trace_ctx, "\tframe_level_transform_type = %d\n", p->transform_fields.bits.frame_level_transform_type);
1908    va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx1 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx1);
1909    va_TraceMsg(trace_ctx, "\ttransform_ac_codingset_idx2 = %d\n", p->transform_fields.bits.transform_ac_codingset_idx2);
1910    va_TraceMsg(trace_ctx, "\tintra_transform_dc_table = %d\n", p->transform_fields.bits.intra_transform_dc_table);
1911    va_TraceMsg(trace_ctx, NULL);
1912}
1913
1914static void va_TraceVASliceParameterBufferVC1(
1915    VADisplay dpy,
1916    VAContextID __maybe_unused context,
1917    VABufferID __maybe_unused buffer,
1918    VABufferType __maybe_unused type,
1919    unsigned int __maybe_unused size,
1920    unsigned int __maybe_unused num_elements,
1921    void* data
1922)
1923{
1924    VASliceParameterBufferVC1 *p = (VASliceParameterBufferVC1*)data;
1925    DPY2TRACECTX(dpy);
1926
1927    trace_ctx->trace_slice_no++;
1928    trace_ctx->trace_slice_size = p->slice_data_size;
1929
1930    va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVC1\n");
1931    va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
1932    va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
1933    va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
1934    va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
1935    va_TraceMsg(trace_ctx, "\tslice_vertical_position = %d\n", p->slice_vertical_position);
1936    va_TraceMsg(trace_ctx, NULL);
1937}
1938
1939static void va_TraceVAEncSequenceParameterBufferVP8(
1940    VADisplay dpy,
1941    VAContextID __maybe_unused context,
1942    VABufferID __maybe_unused buffer,
1943    VABufferType __maybe_unused type,
1944    unsigned int __maybe_unused size,
1945    unsigned int __maybe_unused num_elements,
1946    void *data)
1947{
1948    VAEncSequenceParameterBufferVP8 *p = (VAEncSequenceParameterBufferVP8 *)data;
1949    DPY2TRACECTX(dpy);
1950    int i;
1951
1952    va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferVP8\n");
1953
1954    va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
1955    va_TraceMsg(trace_ctx, "\terror_resilient = %d\n", p->error_resilient);
1956    va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
1957    va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
1958    va_TraceMsg(trace_ctx, "\tframe_height_scale = %d\n", p->frame_height_scale);
1959    va_TraceMsg(trace_ctx, "\tframe_width_scale = %d\n", p->frame_width_scale);
1960    va_TraceMsg(trace_ctx, "\tkf_auto = %d\n", p->kf_auto);
1961    va_TraceMsg(trace_ctx, "\tkf_max_dist = %d\n", p->kf_max_dist);
1962    va_TraceMsg(trace_ctx, "\tkf_min_dist = %d\n", p->kf_min_dist);
1963    va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
1964
1965    for(i = 0; i<4; ++i)
1966        va_TraceMsg(trace_ctx, "\treference_frames[%d] = 0x%08x\n", i, p->reference_frames[i]);
1967
1968    va_TraceMsg(trace_ctx, NULL);
1969
1970    return;
1971}
1972
1973static void va_TraceVAEncPictureParameterBufferVP8(
1974    VADisplay dpy,
1975    VAContextID __maybe_unused context,
1976    VABufferID __maybe_unused uffer,
1977    VABufferType __maybe_unused type,
1978    unsigned int __maybe_unused size,
1979    unsigned int __maybe_unused num_elements,
1980    void *data)
1981{
1982    VAEncPictureParameterBufferVP8 *p = (VAEncPictureParameterBufferVP8 *)data;
1983    DPY2TRACECTX(dpy);
1984    int i;
1985
1986    va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferVP8\n");
1987
1988    va_TraceMsg(trace_ctx, "\treconstructed_frame = 0x%08x\n", p->reconstructed_frame);
1989    va_TraceMsg(trace_ctx, "\tref_last_frame = 0x%08x\n", p->ref_last_frame);
1990    va_TraceMsg(trace_ctx, "\tref_gf_frame = 0x%08x\n", p->ref_gf_frame);
1991    va_TraceMsg(trace_ctx, "\tref_arf_frame = 0x%08x\n", p->ref_arf_frame);
1992    va_TraceMsg(trace_ctx, "\tcoded_buf = 0x%08x\n", p->coded_buf);
1993
1994    va_TraceMsg(trace_ctx, "\tref_flags.bits.force_kf = %d\n", p->ref_flags.bits.force_kf);
1995    va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_last = %d\n", p->ref_flags.bits.no_ref_last);
1996    va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_gf = %d\n", p->ref_flags.bits.no_ref_gf);
1997    va_TraceMsg(trace_ctx, "\tref_flags.bits.no_ref_arf = %d\n", p->ref_flags.bits.no_ref_arf);
1998    va_TraceMsg(trace_ctx, "\tref_flags.bits.reserved = 0x%08x\n", p->ref_flags.bits.reserved);
1999
2000    va_TraceMsg(trace_ctx, "\tpic_flags.bits.frame_type = %d\n", p->pic_flags.bits.frame_type);
2001    va_TraceMsg(trace_ctx, "\tpic_flags.bits.version = %d\n", p->pic_flags.bits.version);
2002    va_TraceMsg(trace_ctx, "\tpic_flags.bits.show_frame = %d\n", p->pic_flags.bits.show_frame);
2003    va_TraceMsg(trace_ctx, "\tpic_flags.bits.color_space = %d\n", p->pic_flags.bits.color_space);
2004    va_TraceMsg(trace_ctx, "\tpic_flags.bits.recon_filter_type = %d\n", p->pic_flags.bits.recon_filter_type);
2005    va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_type = %d\n", p->pic_flags.bits.loop_filter_type);
2006    va_TraceMsg(trace_ctx, "\tpic_flags.bits.auto_partitions = %d\n", p->pic_flags.bits.auto_partitions);
2007    va_TraceMsg(trace_ctx, "\tpic_flags.bits.num_token_partitions = %d\n", p->pic_flags.bits.num_token_partitions);
2008    va_TraceMsg(trace_ctx, "\tpic_flags.bits.clamping_type = %d\n", p->pic_flags.bits.clamping_type);
2009    va_TraceMsg(trace_ctx, "\tpic_flags.bits.segmentation_enabled = %d\n", p->pic_flags.bits.segmentation_enabled);
2010    va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_mb_segmentation_map = %d\n", p->pic_flags.bits.update_mb_segmentation_map);
2011    va_TraceMsg(trace_ctx, "\tpic_flags.bits.update_segment_feature_data = %d\n", p->pic_flags.bits.update_segment_feature_data);
2012    va_TraceMsg(trace_ctx, "\tpic_flags.bits.loop_filter_adj_enable = %d\n", p->pic_flags.bits.loop_filter_adj_enable);
2013    va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_entropy_probs = %d\n", p->pic_flags.bits.refresh_entropy_probs);
2014    va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_golden_frame = %d\n", p->pic_flags.bits.refresh_golden_frame);
2015    va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_alternate_frame = %d\n", p->pic_flags.bits.refresh_alternate_frame);
2016    va_TraceMsg(trace_ctx, "\tpic_flags.bits.refresh_last = %d\n", p->pic_flags.bits.refresh_last);
2017    va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_golden = %d\n", p->pic_flags.bits.copy_buffer_to_golden);
2018    va_TraceMsg(trace_ctx, "\tpic_flags.bits.copy_buffer_to_alternate = %d\n", p->pic_flags.bits.copy_buffer_to_alternate);
2019
2020    va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_golden = %d\n", p->pic_flags.bits.sign_bias_golden);
2021    va_TraceMsg(trace_ctx, "\tpic_flags.bits.sign_bias_alternate = %d\n", p->pic_flags.bits.sign_bias_alternate);
2022    va_TraceMsg(trace_ctx, "\tpic_flags.bits.mb_no_coeff_skip = %d\n", p->pic_flags.bits.mb_no_coeff_skip);
2023    va_TraceMsg(trace_ctx, "\tpic_flags.bits.forced_lf_adjustment = %d\n", p->pic_flags.bits.forced_lf_adjustment);
2024    va_TraceMsg(trace_ctx, "\tpic_flags.bits.reserved = %d\n", p->pic_flags.bits.reserved);
2025
2026
2027    for(i=0;i<4;i++)
2028       va_TraceMsg(trace_ctx, "\tloop_filter_level[%d] = %d\n", i, p->loop_filter_level[i]);
2029    for(i=0;i<4;i++)
2030       va_TraceMsg(trace_ctx, "\tref_lf_delta[%d] = %d\n", i, p->ref_lf_delta[i]);
2031    for(i=0;i<4;i++)
2032       va_TraceMsg(trace_ctx, "\tmode_lf_delta[%d] = %d\n", i, p->mode_lf_delta[i]);
2033
2034    va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->sharpness_level);
2035    va_TraceMsg(trace_ctx, "\tclamp_qindex_high = %d\n", p->clamp_qindex_high);
2036    va_TraceMsg(trace_ctx, "\tclamp_qindex_low = %d\n", p->clamp_qindex_low);
2037
2038    va_TraceMsg(trace_ctx, NULL);
2039
2040    return;
2041}
2042
2043static void va_TraceVAPictureParameterBufferVP8(
2044    VADisplay dpy,
2045    VAContextID __maybe_unused context,
2046    VABufferID __maybe_unused buffer,
2047    VABufferType __maybe_unused type,
2048    unsigned int __maybe_unused size,
2049    unsigned int __maybe_unused num_elements,
2050    void *data)
2051{
2052    char tmp[1024];
2053    VAPictureParameterBufferVP8 *p = (VAPictureParameterBufferVP8 *)data;
2054    DPY2TRACECTX(dpy);
2055    int i,j;
2056
2057    va_TraceMsg(trace_ctx, "\t--VAPictureParameterBufferVP8\n");
2058
2059    va_TraceMsg(trace_ctx, "\tframe_width = %d\n", p->frame_width);
2060    va_TraceMsg(trace_ctx, "\tframe_height = %d\n", p->frame_height);
2061    va_TraceMsg(trace_ctx, "\tlast_ref_frame = %x\n", p->last_ref_frame);
2062    va_TraceMsg(trace_ctx, "\tgolden_ref_frame = %x\n", p->golden_ref_frame);
2063    va_TraceMsg(trace_ctx, "\talt_ref_frame = %x\n", p->alt_ref_frame);
2064    va_TraceMsg(trace_ctx, "\tout_of_loop_frame = %x\n", p->out_of_loop_frame);
2065
2066    va_TraceMsg(trace_ctx, "\tkey_frame = %d\n", p->pic_fields.bits.key_frame);
2067    va_TraceMsg(trace_ctx, "\tversion = %d\n", p->pic_fields.bits.version);
2068    va_TraceMsg(trace_ctx, "\tsegmentation_enabled = %d\n", p->pic_fields.bits.segmentation_enabled);
2069    va_TraceMsg(trace_ctx, "\tupdate_mb_segmentation_map = %d\n", p->pic_fields.bits.update_mb_segmentation_map);
2070    va_TraceMsg(trace_ctx, "\tupdate_segment_feature_data = %d\n", p->pic_fields.bits.update_segment_feature_data);
2071    va_TraceMsg(trace_ctx, "\tfilter_type = %d\n", p->pic_fields.bits.filter_type);
2072    va_TraceMsg(trace_ctx, "\tsharpness_level = %d\n", p->pic_fields.bits.sharpness_level);
2073    va_TraceMsg(trace_ctx, "\tloop_filter_adj_enable = %d\n", p->pic_fields.bits.loop_filter_adj_enable);
2074    va_TraceMsg(trace_ctx, "\tmode_ref_lf_delta_update = %d\n", p->pic_fields.bits.mode_ref_lf_delta_update);
2075    va_TraceMsg(trace_ctx, "\tsign_bias_golden = %d\n", p->pic_fields.bits.sign_bias_golden);
2076    va_TraceMsg(trace_ctx, "\tsign_bias_alternate = %d\n", p->pic_fields.bits.sign_bias_alternate);
2077    va_TraceMsg(trace_ctx, "\tmb_no_coeff_skip = %d\n", p->pic_fields.bits.mb_no_coeff_skip);
2078    va_TraceMsg(trace_ctx, "\tloop_filter_disable = %d\n", p->pic_fields.bits.loop_filter_disable);
2079
2080    va_TraceMsg(trace_ctx, "\tmb_segment_tree_probs: 0x%2x, 0x%2x, 0x%2x\n",
2081        p->mb_segment_tree_probs[0], p->mb_segment_tree_probs[1], p->mb_segment_tree_probs[2]);
2082
2083    va_TraceMsg(trace_ctx, "\tloop_filter_level: %d, %d, %d, %d\n",
2084        p->loop_filter_level[0], p->loop_filter_level[1], p->loop_filter_level[2], p->loop_filter_level[3]);
2085
2086    va_TraceMsg(trace_ctx, "\tloop_filter_deltas_ref_frame: %d, %d, %d, %d\n",
2087        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]);
2088
2089    va_TraceMsg(trace_ctx, "\tloop_filter_deltas_mode: %d, %d, %d, %d\n",
2090        p->loop_filter_deltas_mode[0], p->loop_filter_deltas_mode[1], p->loop_filter_deltas_mode[2], p->loop_filter_deltas_mode[3]);
2091
2092    va_TraceMsg(trace_ctx, "\tprob_skip_false = %2x\n", p->prob_skip_false);
2093    va_TraceMsg(trace_ctx, "\tprob_intra = %2x\n", p->prob_intra);
2094    va_TraceMsg(trace_ctx, "\tprob_last = %2x\n", p->prob_last);
2095    va_TraceMsg(trace_ctx, "\tprob_gf = %2x\n", p->prob_gf);
2096
2097    va_TraceMsg(trace_ctx, "\ty_mode_probs: 0x%2x, 0x%2x, 0x%2x, 0x%2x\n",
2098        p->y_mode_probs[0], p->y_mode_probs[1], p->y_mode_probs[2], p->y_mode_probs[3]);
2099
2100    va_TraceMsg(trace_ctx, "\tuv_mode_probs: 0x%2x, 0x%2x, 0x%2x\n",
2101        p->uv_mode_probs[0], p->uv_mode_probs[1], p->uv_mode_probs[2]);
2102
2103    va_TraceMsg(trace_ctx, "\tmv_probs[2][19]:\n");
2104    for(i = 0; i<2; ++i) {
2105        memset(tmp, 0, sizeof tmp);
2106        for (j=0; j<19; j++)
2107            sprintf(tmp + strlen(tmp), "%2x ", p->mv_probs[i][j]);
2108        va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
2109    }
2110
2111    va_TraceMsg(trace_ctx, "\tbool_coder_ctx: range = %02x, value = %02x, count = %d\n",
2112        p->bool_coder_ctx.range, p->bool_coder_ctx.value, p->bool_coder_ctx.count);
2113
2114    va_TraceMsg(trace_ctx, NULL);
2115
2116    return;
2117}
2118
2119static void va_TraceVASliceParameterBufferVP8(
2120    VADisplay dpy,
2121    VAContextID __maybe_unused context,
2122    VABufferID __maybe_unused buffer,
2123    VABufferType __maybe_unused type,
2124    unsigned int __maybe_unused size,
2125    unsigned int __maybe_unused num_elements,
2126    void *data)
2127{
2128    VASliceParameterBufferVP8 *p = (VASliceParameterBufferVP8 *)data;
2129    DPY2TRACECTX(dpy);
2130    int i;
2131
2132    va_TraceMsg(trace_ctx, "\t--VASliceParameterBufferVP8\n");
2133
2134    va_TraceMsg(trace_ctx, "\tslice_data_size = %d\n", p->slice_data_size);
2135    va_TraceMsg(trace_ctx, "\tslice_data_offset = %d\n", p->slice_data_offset);
2136    va_TraceMsg(trace_ctx, "\tslice_data_flag = %d\n", p->slice_data_flag);
2137    va_TraceMsg(trace_ctx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
2138    va_TraceMsg(trace_ctx, "\tnum_of_partitions = %d\n", p->num_of_partitions);
2139
2140    for(i = 0; i<9; ++i)
2141        va_TraceMsg(trace_ctx, "\tpartition_size[%d] = %d\n", i, p->partition_size[i]);
2142
2143    va_TraceMsg(trace_ctx, NULL);
2144
2145    return;
2146}
2147
2148static void va_TraceVAIQMatrixBufferVP8(
2149    VADisplay dpy,
2150    VAContextID __maybe_unused context,
2151    VABufferID __maybe_unused buffer,
2152    VABufferType __maybe_unused type,
2153    unsigned int __maybe_unused size,
2154    unsigned int __maybe_unused num_elements,
2155    void *data)
2156{
2157    char tmp[1024];
2158    VAIQMatrixBufferVP8 *p = (VAIQMatrixBufferVP8 *)data;
2159    DPY2TRACECTX(dpy);
2160    int i,j;
2161
2162    va_TraceMsg(trace_ctx, "\t--VAIQMatrixBufferVP8\n");
2163
2164    va_TraceMsg(trace_ctx, "\tquantization_index[4][6]=\n");
2165    for (i = 0; i < 4; i++) {
2166        memset(tmp, 0, sizeof tmp);
2167        for (j = 0; j < 6; j++)
2168            sprintf(tmp + strlen(tmp), "%4x, ", p->quantization_index[i][j]);
2169        va_TraceMsg(trace_ctx,"\t\t[%d] = %s\n", i, tmp);
2170    }
2171
2172    va_TraceMsg(trace_ctx, NULL);
2173
2174    return;
2175}
2176static void va_TraceVAProbabilityBufferVP8(
2177    VADisplay dpy,
2178    VAContextID __maybe_unused context,
2179    VABufferID __maybe_unused buffer,
2180    VABufferType __maybe_unused type,
2181    unsigned int __maybe_unused size,
2182    unsigned int __maybe_unused num_elements,
2183    void *data)
2184{
2185    char tmp[1024];
2186    VAProbabilityDataBufferVP8 *p = (VAProbabilityDataBufferVP8 *)data;
2187    DPY2TRACECTX(dpy);
2188    int i,j,k,l;
2189
2190    va_TraceMsg(trace_ctx, "\t--VAProbabilityDataBufferVP8\n");
2191
2192    for (i = 0; i < 4; i++)
2193        for (j = 0; j < 8; j++) {
2194            memset(tmp, 0, sizeof tmp);
2195            for (k=0; k<3; k++)
2196                for (l=0; l<11; l++)
2197                    sprintf(tmp + strlen(tmp), "%2x, ", p->dct_coeff_probs[i][j][k][l]);
2198            va_TraceMsg(trace_ctx,"\t\t[%d, %d] = %s\n", i, j, tmp);
2199        }
2200
2201    va_TraceMsg(trace_ctx, NULL);
2202
2203    return;
2204}
2205
2206void va_TraceBeginPicture(
2207    VADisplay dpy,
2208    VAContextID __maybe_unused context,
2209    VASurfaceID render_target
2210)
2211{
2212    DPY2TRACECTX(dpy);
2213
2214    TRACE_FUNCNAME(idx);
2215
2216    va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", render_target);
2217    va_TraceMsg(trace_ctx, "\tframe_count  = #%d\n", trace_ctx->trace_frame_no);
2218    va_TraceMsg(trace_ctx, NULL);
2219
2220    trace_ctx->trace_rendertarget = render_target; /* for surface data dump after vaEndPicture */
2221
2222    trace_ctx->trace_frame_no++;
2223    trace_ctx->trace_slice_no = 0;
2224}
2225
2226static void va_TraceMPEG2Buf(
2227    VADisplay dpy,
2228    VAContextID context,
2229    VABufferID buffer,
2230    VABufferType type,
2231    unsigned int size,
2232    unsigned int num_elements,
2233    void *pbuf
2234)
2235{
2236    switch (type) {
2237    case VAPictureParameterBufferType:
2238        va_TraceVAPictureParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2239        break;
2240    case VAIQMatrixBufferType:
2241        va_TraceVAIQMatrixBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2242        break;
2243    case VABitPlaneBufferType:
2244        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2245        break;
2246    case VASliceGroupMapBufferType:
2247        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2248        break;
2249    case VASliceParameterBufferType:
2250        va_TraceVASliceParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
2251        break;
2252    case VASliceDataBufferType:
2253        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2254        break;
2255    case VAMacroblockParameterBufferType:
2256        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2257        break;
2258    case VAResidualDataBufferType:
2259        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2260        break;
2261    case VADeblockingParameterBufferType:
2262        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2263        break;
2264    case VAImageBufferType:
2265        break;
2266    case VAProtectedSliceDataBufferType:
2267        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2268        break;
2269    case VAEncCodedBufferType:
2270        break;
2271    case VAEncSequenceParameterBufferType:
2272        break;
2273    case VAEncPictureParameterBufferType:
2274        break;
2275    case VAEncSliceParameterBufferType:
2276        break;
2277    default:
2278        break;
2279    }
2280}
2281
2282static void va_TraceVAEncSequenceParameterBufferH263(
2283    VADisplay dpy,
2284    VAContextID __maybe_unused context,
2285    VABufferID __maybe_unused buffer,
2286    VABufferType __maybe_unused type,
2287    unsigned int __maybe_unused size,
2288    unsigned int __maybe_unused num_elements,
2289    void *data)
2290{
2291    VAEncSequenceParameterBufferH263 *p = (VAEncSequenceParameterBufferH263 *)data;
2292    DPY2TRACECTX(dpy);
2293
2294    va_TraceMsg(trace_ctx, "\t--VAEncSequenceParameterBufferH263\n");
2295
2296    va_TraceMsg(trace_ctx, "\tintra_period = %d\n", p->intra_period);
2297    va_TraceMsg(trace_ctx, "\tbits_per_second = %d\n", p->bits_per_second);
2298    va_TraceMsg(trace_ctx, "\tframe_rate = %d\n", p->frame_rate);
2299    va_TraceMsg(trace_ctx, "\tinitial_qp = %d\n", p->initial_qp);
2300    va_TraceMsg(trace_ctx, "\tmin_qp = %d\n", p->min_qp);
2301    va_TraceMsg(trace_ctx, NULL);
2302
2303    return;
2304}
2305
2306
2307static void va_TraceVAEncPictureParameterBufferH263(
2308    VADisplay dpy,
2309    VAContextID __maybe_unused context,
2310    VABufferID __maybe_unused buffer,
2311    VABufferType __maybe_unused type,
2312    unsigned int __maybe_unused size,
2313    unsigned int __maybe_unused num_elements,
2314    void *data)
2315{
2316    VAEncPictureParameterBufferH263 *p = (VAEncPictureParameterBufferH263 *)data;
2317    DPY2TRACECTX(dpy);
2318
2319    va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferH263\n");
2320    va_TraceMsg(trace_ctx, "\treference_picture = 0x%08x\n", p->reference_picture);
2321    va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2322    va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2323    va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2324    va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2325    va_TraceMsg(trace_ctx, "\tpicture_type = 0x%08x\n", p->picture_type);
2326    va_TraceMsg(trace_ctx, NULL);
2327
2328    return;
2329}
2330
2331static void va_TraceVAEncPictureParameterBufferJPEG(
2332    VADisplay dpy,
2333    VAContextID __maybe_unused context,
2334    VABufferID __maybe_unused buffer,
2335    VABufferType __maybe_unused type,
2336    unsigned int __maybe_unused size,
2337    unsigned int __maybe_unused num_elements,
2338    void *data)
2339{
2340    VAEncPictureParameterBufferJPEG *p = (VAEncPictureParameterBufferJPEG *)data;
2341    int i;
2342
2343    DPY2TRACECTX(dpy);
2344
2345    va_TraceMsg(trace_ctx, "\t--VAEncPictureParameterBufferJPEG\n");
2346    va_TraceMsg(trace_ctx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_picture);
2347    va_TraceMsg(trace_ctx, "\tcoded_buf = %08x\n", p->coded_buf);
2348    va_TraceMsg(trace_ctx, "\tpicture_width = %d\n", p->picture_width);
2349    va_TraceMsg(trace_ctx, "\tpicture_height = %d\n", p->picture_height);
2350    va_TraceMsg(trace_ctx, "\tpic_flags.bits.profile = %d\n", p->pic_flags.bits.profile);
2351    va_TraceMsg(trace_ctx, "\tpic_flags.bits.progressive = %d\n", p->pic_flags.bits.profile);
2352    va_TraceMsg(trace_ctx, "\tpic_flags.bits.huffman = %d\n", p->pic_flags.bits.huffman);
2353    va_TraceMsg(trace_ctx, "\tpic_flags.bits.interleaved = %d\n", p->pic_flags.bits.interleaved);
2354    va_TraceMsg(trace_ctx, "\tpic_flags.bits.differential = %d\n", p->pic_flags.bits.differential);
2355    va_TraceMsg(trace_ctx, "\tsample_bit_depth = %d\n", p->sample_bit_depth);
2356    va_TraceMsg(trace_ctx, "\tnum_scan = %d\n", p->num_scan);
2357    va_TraceMsg(trace_ctx, "\tnum_components = %d\n", p->num_components);
2358    for (i=0; i<p->num_components; i++)
2359        va_TraceMsg(trace_ctx, "\tcomponent_id[%d] = %d\n", i, p->component_id[i]);
2360
2361    if (p->quality > 0)
2362        va_TraceMsg(trace_ctx, "\tquality = %d\n", p->quality);
2363    else
2364        va_TraceMsg(trace_ctx, "\tquantiser_table_selector[] = %d %d %d %d\n",
2365                    p->quantiser_table_selector[0],
2366                    p->quantiser_table_selector[1],
2367                    p->quantiser_table_selector[2],
2368                    p->quantiser_table_selector[3]);
2369
2370    va_TraceMsg(trace_ctx, NULL);
2371
2372    return;
2373}
2374
2375static void va_TraceVAEncQMatrixBufferJPEG(
2376    VADisplay dpy,
2377    VAContextID __maybe_unused context,
2378    VABufferID __maybe_unused buffer,
2379    VABufferType __maybe_unused type,
2380    unsigned int __maybe_unused size,
2381    unsigned int __maybe_unused num_elements,
2382    void *data)
2383{
2384    VAQMatrixBufferJPEG *p = (VAQMatrixBufferJPEG *)data;
2385    DPY2TRACECTX(dpy);
2386
2387    va_TraceMsg(trace_ctx, "\t--VAQMatrixBufferJPEG\n");
2388    va_TraceMsg(trace_ctx, "\tload_lum_quantiser_matrix = %d\n", p->load_lum_quantiser_matrix);
2389    if (p->load_lum_quantiser_matrix) {
2390        int i;
2391        for (i = 0; i < 8; i++) {
2392            va_TraceMsg(trace_ctx,
2393                        "\t\t0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n",
2394                        p->lum_quantiser_matrix[i*8],
2395                        p->lum_quantiser_matrix[i*8 + 1],
2396                        p->lum_quantiser_matrix[i*8 + 2],
2397                        p->lum_quantiser_matrix[i*8 + 3],
2398                        p->lum_quantiser_matrix[i*8 + 4],
2399                        p->lum_quantiser_matrix[i*8 + 5],
2400                        p->lum_quantiser_matrix[i*8 + 6],
2401                        p->lum_quantiser_matrix[i*8 + 7]);
2402        }
2403    }
2404
2405    va_TraceMsg(trace_ctx, "\tload_chroma_quantiser_matrix = %d\n", p->load_chroma_quantiser_matrix);
2406    if (p->load_chroma_quantiser_matrix) {
2407        int i;
2408        for (i = 0; i < 8; i++) {
2409            va_TraceMsg(trace_ctx,
2410                        "\t\t0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n",
2411                        p->chroma_quantiser_matrix[i*8],
2412                        p->chroma_quantiser_matrix[i*8 + 1],
2413                        p->chroma_quantiser_matrix[i*8 + 2],
2414                        p->chroma_quantiser_matrix[i*8 + 3],
2415                        p->chroma_quantiser_matrix[i*8 + 4],
2416                        p->chroma_quantiser_matrix[i*8 + 5],
2417                        p->chroma_quantiser_matrix[i*8 + 6],
2418                        p->chroma_quantiser_matrix[i*8 + 7]);
2419        }
2420    }
2421
2422    va_TraceMsg(trace_ctx, NULL);
2423
2424    return;
2425}
2426
2427
2428static void va_TraceH263Buf(
2429    VADisplay dpy,
2430    VAContextID __maybe_unused context,
2431    VABufferID __maybe_unused buffer,
2432    VABufferType __maybe_unused type,
2433    unsigned int __maybe_unused size,
2434    unsigned int __maybe_unused num_elements,
2435    void *pbuf
2436)
2437{
2438    DPY2TRACECTX(dpy);
2439
2440    switch (type) {
2441    case VAPictureParameterBufferType:/* print MPEG4 buffer */
2442        va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2443        break;
2444    case VAIQMatrixBufferType:/* print MPEG4 buffer */
2445        va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2446        break;
2447    case VABitPlaneBufferType:/* print MPEG4 buffer */
2448        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2449        break;
2450    case VASliceGroupMapBufferType:
2451        break;
2452    case VASliceParameterBufferType:/* print MPEG4 buffer */
2453        va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2454        break;
2455    case VASliceDataBufferType:
2456        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2457        break;
2458    case VAMacroblockParameterBufferType:
2459        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2460        break;
2461    case VAResidualDataBufferType:
2462        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2463        break;
2464    case VADeblockingParameterBufferType:
2465        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2466        break;
2467    case VAImageBufferType:
2468        break;
2469    case VAProtectedSliceDataBufferType:
2470        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2471        break;
2472    case VAEncCodedBufferType:
2473        break;
2474    case VAEncSequenceParameterBufferType:
2475        va_TraceVAEncSequenceParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
2476        break;
2477    case VAEncPictureParameterBufferType:
2478        va_TraceVAEncPictureParameterBufferH263(dpy, context, buffer, type, size, num_elements, pbuf);
2479        break;
2480    case VAEncSliceParameterBufferType:
2481        va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2482        break;
2483    case VAEncPackedHeaderParameterBufferType:
2484        va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
2485        break;
2486    default:
2487        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2488        break;
2489    }
2490}
2491
2492
2493static void va_TraceJPEGBuf(
2494    VADisplay dpy,
2495    VAContextID context,
2496    VABufferID buffer,
2497    VABufferType type,
2498    unsigned int size,
2499    unsigned int num_elements,
2500    void *pbuf
2501)
2502{
2503    switch (type) {
2504    case VABitPlaneBufferType:
2505    case VASliceGroupMapBufferType:
2506    case VASliceDataBufferType:
2507    case VAMacroblockParameterBufferType:
2508    case VAResidualDataBufferType:
2509    case VADeblockingParameterBufferType:
2510    case VAImageBufferType:
2511    case VAProtectedSliceDataBufferType:
2512    case VAEncCodedBufferType:
2513    case VAEncSequenceParameterBufferType:
2514        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2515        break;
2516    case VAEncSliceParameterBufferType:
2517        va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2518        break;
2519    case VAPictureParameterBufferType:
2520        va_TraceVAPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2521        break;
2522    case VAIQMatrixBufferType:
2523        va_TraceVAIQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2524        break;
2525    case VASliceParameterBufferType:
2526        va_TraceVASliceParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2527        break;
2528    case VAHuffmanTableBufferType:
2529        va_TraceVAHuffmanTableBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2530        break;
2531    case VAEncPictureParameterBufferType:
2532        va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2533        break;
2534    case VAQMatrixBufferType:
2535        va_TraceVAEncQMatrixBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf);
2536        break;
2537    default:
2538        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2539        break;
2540    }
2541}
2542
2543static void va_TraceMPEG4Buf(
2544    VADisplay dpy,
2545    VAContextID context,
2546    VABufferID buffer,
2547    VABufferType type,
2548    unsigned int size,
2549    unsigned int num_elements,
2550    void *pbuf
2551)
2552{
2553    switch (type) {
2554    case VAPictureParameterBufferType:
2555        va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2556        break;
2557    case VAIQMatrixBufferType:
2558        va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2559        break;
2560    case VABitPlaneBufferType:
2561        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2562        break;
2563    case VASliceGroupMapBufferType:
2564        break;
2565    case VASliceParameterBufferType:
2566        va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2567        break;
2568    case VASliceDataBufferType:
2569        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2570        break;
2571    case VAMacroblockParameterBufferType:
2572        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2573        break;
2574    case VAResidualDataBufferType:
2575        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2576        break;
2577    case VADeblockingParameterBufferType:
2578        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2579        break;
2580    case VAImageBufferType:
2581        break;
2582    case VAProtectedSliceDataBufferType:
2583        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2584        break;
2585    case VAEncCodedBufferType:
2586        break;
2587    case VAEncSequenceParameterBufferType:
2588        va_TraceVAEncSequenceParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2589        break;
2590    case VAEncPictureParameterBufferType:
2591        va_TraceVAEncPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
2592        break;
2593    case VAEncSliceParameterBufferType:
2594        va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2595        break;
2596    default:
2597        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2598        break;
2599    }
2600}
2601
2602
2603static void va_TraceH264Buf(
2604    VADisplay dpy,
2605    VAContextID context,
2606    VABufferID buffer,
2607    VABufferType type,
2608    unsigned int size,
2609    unsigned int num_elements,
2610    void *pbuf
2611)
2612{
2613    DPY2TRACECTX(dpy);
2614
2615    switch (type) {
2616    case VAPictureParameterBufferType:
2617        va_TraceVAPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2618        break;
2619    case VAIQMatrixBufferType:
2620        va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2621        break;
2622    case VABitPlaneBufferType:
2623        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2624        break;
2625    case VASliceGroupMapBufferType:
2626        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2627        break;
2628    case VASliceParameterBufferType:
2629        va_TraceVASliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2630        break;
2631    case VASliceDataBufferType:
2632        va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
2633        break;
2634    case VAMacroblockParameterBufferType:
2635        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2636        break;
2637    case VAResidualDataBufferType:
2638        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2639        break;
2640    case VADeblockingParameterBufferType:
2641        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2642        break;
2643    case VAImageBufferType:
2644        break;
2645    case VAProtectedSliceDataBufferType:
2646        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2647        break;
2648    case VAEncCodedBufferType:
2649        break;
2650    case VAEncSequenceParameterBufferType:
2651        va_TraceVAEncSequenceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2652        break;
2653    case VAEncPictureParameterBufferType:
2654        va_TraceVAEncPictureParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2655        break;
2656    case VAEncSliceParameterBufferType:
2657        if (size == sizeof(VAEncSliceParameterBuffer))
2658            va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2659        else
2660            va_TraceVAEncSliceParameterBufferH264(dpy, context, buffer, type, size, num_elements, pbuf);
2661        break;
2662    case VAEncPackedHeaderParameterBufferType:
2663        va_TraceVAEncPackedHeaderParameterBufferType(dpy, context, buffer, type, size, num_elements, pbuf);
2664        break;
2665
2666    case VAEncMiscParameterBufferType:
2667        va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2668        break;
2669    default:
2670        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2671        break;
2672    }
2673}
2674
2675static void va_TraceVP8Buf(
2676    VADisplay dpy,
2677    VAContextID context,
2678    VABufferID buffer,
2679    VABufferType type,
2680    unsigned int size,
2681    unsigned int num_elements,
2682    void *pbuf
2683)
2684{
2685    DPY2TRACECTX(dpy);
2686
2687    switch (type) {
2688    case VAPictureParameterBufferType:
2689        va_TraceVAPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2690        break;
2691    case VAIQMatrixBufferType:
2692        va_TraceVAIQMatrixBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2693        break;
2694    case VABitPlaneBufferType:
2695        break;
2696    case VASliceGroupMapBufferType:
2697        break;
2698    case VASliceParameterBufferType:
2699        va_TraceVASliceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2700        break;
2701    case VASliceDataBufferType:
2702        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2703        break;
2704    case VAProbabilityBufferType:
2705        va_TraceVAProbabilityBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2706        break;
2707    case VAMacroblockParameterBufferType:
2708        break;
2709    case VAResidualDataBufferType:
2710        break;
2711    case VADeblockingParameterBufferType:
2712        break;
2713    case VAImageBufferType:
2714        break;
2715    case VAProtectedSliceDataBufferType:
2716        break;
2717    case VAEncCodedBufferType:
2718        break;
2719    case VAEncSequenceParameterBufferType:
2720        va_TraceVAEncSequenceParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2721        break;
2722    case VAEncPictureParameterBufferType:
2723        va_TraceVAEncPictureParameterBufferVP8(dpy, context, buffer, type, size, num_elements, pbuf);
2724        break;
2725    case VAEncSliceParameterBufferType:
2726        break;
2727    case VAEncPackedHeaderParameterBufferType:
2728        break;
2729    case VAEncMiscParameterBufferType:
2730        va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
2731        break;
2732    default:
2733        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2734        break;
2735    }
2736}
2737
2738
2739static void va_TraceVC1Buf(
2740    VADisplay dpy,
2741    VAContextID context,
2742    VABufferID buffer,
2743    VABufferType type,
2744    unsigned int size,
2745    unsigned int num_elements,
2746    void *pbuf
2747)
2748{
2749    DPY2TRACECTX(dpy);
2750
2751    switch (type) {
2752    case VAPictureParameterBufferType:
2753        va_TraceVAPictureParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
2754        break;
2755    case VAIQMatrixBufferType:
2756        break;
2757    case VABitPlaneBufferType:
2758        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2759        break;
2760    case VASliceGroupMapBufferType:
2761        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2762        break;
2763    case VASliceParameterBufferType:
2764        va_TraceVASliceParameterBufferVC1(dpy, context, buffer, type, size, num_elements, pbuf);
2765        break;
2766    case VASliceDataBufferType:
2767        va_TraceVABuffers(dpy, context, buffer, type, trace_ctx->trace_slice_size, num_elements, pbuf);
2768        break;
2769    case VAMacroblockParameterBufferType:
2770        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2771        break;
2772    case VAResidualDataBufferType:
2773        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2774        break;
2775    case VADeblockingParameterBufferType:
2776        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2777        break;
2778    case VAImageBufferType:
2779        break;
2780    case VAProtectedSliceDataBufferType:
2781        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2782        break;
2783    case VAEncCodedBufferType:
2784        break;
2785    case VAEncSequenceParameterBufferType:
2786        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2787        break;
2788    case VAEncPictureParameterBufferType:
2789        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2790        break;
2791    case VAEncSliceParameterBufferType:
2792        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2793        break;
2794    default:
2795        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
2796        break;
2797    }
2798}
2799
2800static void
2801va_TraceProcFilterParameterBufferDeinterlacing(
2802    VADisplay dpy,
2803    VAContextID __maybe_unused context,
2804    VAProcFilterParameterBufferBase *base
2805)
2806{
2807    VAProcFilterParameterBufferDeinterlacing *deint = (VAProcFilterParameterBufferDeinterlacing *)base;
2808
2809    DPY2TRACECTX(dpy);
2810
2811    va_TraceMsg(trace_ctx, "\t    type = %d\n", deint->type);
2812    va_TraceMsg(trace_ctx, "\t    algorithm = %d\n", deint->algorithm);
2813    va_TraceMsg(trace_ctx, "\t    flags = %d\n", deint->flags);
2814}
2815
2816static void
2817va_TraceProcFilterParameterBufferColorBalance(
2818    VADisplay dpy,
2819    VAContextID __maybe_unused context,
2820    VAProcFilterParameterBufferBase *base
2821)
2822{
2823    VAProcFilterParameterBufferColorBalance *color_balance = (VAProcFilterParameterBufferColorBalance *)base;
2824
2825    DPY2TRACECTX(dpy);
2826
2827    va_TraceMsg(trace_ctx, "\t    type = %d\n", color_balance->type);
2828    va_TraceMsg(trace_ctx, "\t    attrib = %d\n", color_balance->attrib);
2829    va_TraceMsg(trace_ctx, "\t    value = %f\n", color_balance->value);
2830}
2831
2832static void
2833va_TraceProcFilterParameterBufferBase(
2834    VADisplay dpy,
2835    VAContextID context,
2836    VAProcFilterParameterBufferBase *base
2837)
2838{
2839    DPY2TRACECTX(dpy);
2840
2841    va_TraceMsg(trace_ctx, "\t    type = %d, context = %d\n", base->type, context);
2842}
2843
2844static void
2845va_TraceProcFilterParameterBuffer(
2846    VADisplay dpy,
2847    VAContextID context,
2848    VABufferID *filters,
2849    unsigned int num_filters
2850)
2851{
2852    VABufferType type;
2853    unsigned int size;
2854    unsigned int num_elements;
2855    VAProcFilterParameterBufferBase *base_filter = NULL;
2856    unsigned int i;
2857
2858    DPY2TRACECTX(dpy);
2859
2860    if (num_filters == 0 || filters == NULL) {
2861        va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
2862        va_TraceMsg(trace_ctx, "\t  filters = %p\n", filters);
2863        return;
2864    }
2865
2866    va_TraceMsg(trace_ctx, "\t  num_filters = %d\n", num_filters);
2867
2868    /* get buffer type information */
2869    for (i = 0; i < num_filters; i++) {
2870        vaBufferInfo(dpy, context, filters[i], &type, &size, &num_elements);
2871
2872        if (type != VAProcFilterParameterBufferType) {
2873            va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x (INVALID)\n", i, filters[i]);
2874            return;
2875        } else {
2876            va_TraceMsg(trace_ctx, "\t  filters[%d] = 0x%08x\n", i, filters[i]);
2877        }
2878
2879        base_filter = NULL;
2880        vaMapBuffer(dpy, filters[i], (void **)&base_filter);
2881
2882        if (base_filter == NULL) {
2883            vaUnmapBuffer(dpy, filters[i]);
2884            return;
2885        }
2886
2887        switch (base_filter->type) {
2888        case VAProcFilterDeinterlacing:
2889            va_TraceProcFilterParameterBufferDeinterlacing(dpy,
2890                                                           context,
2891                                                           base_filter);
2892            break;
2893        case VAProcFilterColorBalance:
2894            va_TraceProcFilterParameterBufferColorBalance(dpy,
2895                                                          context,
2896                                                          base_filter);
2897            break;
2898        default:
2899            va_TraceProcFilterParameterBufferBase(dpy,
2900                                                  context,
2901                                                  base_filter);
2902            break;
2903        }
2904
2905        vaUnmapBuffer(dpy, filters[i]);
2906    }
2907}
2908
2909static void
2910va_TraceVAProcPipelineParameterBuffer(
2911    VADisplay dpy,
2912    VAContextID context,
2913    VABufferID __maybe_unused buffer,
2914    VABufferType __maybe_unused type,
2915    unsigned int __maybe_unused size,
2916    unsigned int __maybe_unused num_elements,
2917    void *data
2918)
2919{
2920    VAProcPipelineParameterBuffer *p = (VAProcPipelineParameterBuffer *)data;
2921    unsigned int i;
2922
2923    DPY2TRACECTX(dpy);
2924
2925    va_TraceMsg(trace_ctx, "\t--VAProcPipelineParameterBuffer\n");
2926
2927    va_TraceMsg(trace_ctx, "\t  surface = 0x%08x\n", p->surface);
2928
2929    if (p->surface_region) {
2930        va_TraceMsg(trace_ctx, "\t  surface_region\n");
2931        va_TraceMsg(trace_ctx, "\t    x = %d\n", p->surface_region->x);
2932        va_TraceMsg(trace_ctx, "\t    y = %d\n", p->surface_region->y);
2933        va_TraceMsg(trace_ctx, "\t    width = %d\n", p->surface_region->width);
2934        va_TraceMsg(trace_ctx, "\t    height = %d\n", p->surface_region->height);
2935    } else {
2936        va_TraceMsg(trace_ctx, "\t  surface_region = (NULL)\n");
2937    }
2938
2939    va_TraceMsg(trace_ctx, "\t  surface_color_standard = %d\n", p->surface_color_standard);
2940
2941    if (p->output_region) {
2942        va_TraceMsg(trace_ctx, "\t  output_region\n");
2943        va_TraceMsg(trace_ctx, "\t    x = %d\n", p->output_region->x);
2944        va_TraceMsg(trace_ctx, "\t    y = %d\n", p->output_region->y);
2945        va_TraceMsg(trace_ctx, "\t    width = %d\n", p->output_region->width);
2946        va_TraceMsg(trace_ctx, "\t    height = %d\n", p->output_region->height);
2947    } else {
2948        va_TraceMsg(trace_ctx, "\t  output_region = (NULL)\n");
2949    }
2950
2951    va_TraceMsg(trace_ctx, "\t  output_background_color = 0x%08x\n", p->output_background_color);
2952    va_TraceMsg(trace_ctx, "\t  output_color_standard = %d\n", p->output_color_standard);
2953    va_TraceMsg(trace_ctx, "\t  pipeline_flags = 0x%08x\n", p->pipeline_flags);
2954    va_TraceMsg(trace_ctx, "\t  filter_flags = 0x%08x\n", p->filter_flags);
2955
2956    va_TraceProcFilterParameterBuffer(dpy, context, p->filters, p->num_filters);
2957
2958    va_TraceMsg(trace_ctx, "\t  num_forward_references = 0x%08x\n", p->num_forward_references);
2959
2960    if (p->num_forward_references) {
2961        va_TraceMsg(trace_ctx, "\t  forward_references\n");
2962
2963        if (p->forward_references) {
2964            /* only dump the first 5 forward references */
2965            for (i = 0; i < p->num_forward_references && i < 5; i++) {
2966                va_TraceMsg(trace_ctx, "\t    forward_references[%d] = 0x%08x\n", i, p->forward_references[i]);
2967            }
2968        } else {
2969            for (i = 0; i < p->num_forward_references && i < 5; i++) {
2970                va_TraceMsg(trace_ctx, "\t    forward_references[%d] = (NULL)\n", i);
2971            }
2972        }
2973    }
2974
2975    va_TraceMsg(trace_ctx, "\t  num_backward_references = 0x%08x\n", p->num_backward_references);
2976
2977    if (p->num_backward_references) {
2978        va_TraceMsg(trace_ctx, "\t  backward_references\n");
2979
2980        if (p->backward_references) {
2981            /* only dump the first 5 backward references */
2982            for (i = 0; i < p->num_backward_references && i < 5; i++) {
2983                va_TraceMsg(trace_ctx, "\t    backward_references[%d] = 0x%08x\n", i, p->backward_references[i]);
2984            }
2985        } else {
2986            for (i = 0; i < p->num_backward_references && i < 5; i++) {
2987                va_TraceMsg(trace_ctx, "\t    backward_references[%d] = (NULL)\n", i);
2988            }
2989        }
2990    }
2991
2992    /* FIXME: add other info later */
2993
2994    va_TraceMsg(trace_ctx, NULL);
2995}
2996
2997static void
2998va_TraceNoneBuf(
2999    VADisplay dpy,
3000    VAContextID context,
3001    VABufferID buffer,
3002    VABufferType type,
3003    unsigned int size,
3004    unsigned int num_elements,
3005    void *pbuf
3006)
3007{
3008    DPY2TRACECTX(dpy);
3009
3010    switch (type) {
3011    case VAProcPipelineParameterBufferType:
3012        va_TraceVAProcPipelineParameterBuffer(dpy, context, buffer, type, size, num_elements, pbuf);
3013        break;
3014    default:
3015        va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
3016        break;
3017    }
3018}
3019
3020void va_TraceRenderPicture(
3021    VADisplay dpy,
3022    VAContextID __maybe_unused context,
3023    VABufferID *buffers,
3024    int num_buffers
3025)
3026{
3027    VABufferType type;
3028    unsigned int size;
3029    unsigned int num_elements;
3030    int i;
3031    DPY2TRACECTX(dpy);
3032
3033    TRACE_FUNCNAME(idx);
3034
3035    va_TraceMsg(trace_ctx, "\tnum_buffers = %d\n", num_buffers);
3036    if (buffers == NULL)
3037        return;
3038
3039    for (i = 0; i < num_buffers; i++) {
3040        unsigned char *pbuf = NULL;
3041        unsigned int j;
3042
3043        /* get buffer type information */
3044        vaBufferInfo(dpy, context, buffers[i], &type, &size, &num_elements);
3045
3046        va_TraceMsg(trace_ctx, "\t---------------------------\n");
3047        va_TraceMsg(trace_ctx, "\tbuffers[%d] = 0x%08x\n", i, buffers[i]);
3048        va_TraceMsg(trace_ctx, "\t  type = %s\n", buffer_type_to_string(type));
3049        va_TraceMsg(trace_ctx, "\t  size = %d\n", size);
3050        va_TraceMsg(trace_ctx, "\t  num_elements = %d\n", num_elements);
3051
3052        vaMapBuffer(dpy, buffers[i], (void **)&pbuf);
3053        if (pbuf == NULL)
3054            continue;
3055
3056        switch (trace_ctx->trace_profile) {
3057        case VAProfileMPEG2Simple:
3058        case VAProfileMPEG2Main:
3059            for (j=0; j<num_elements; j++) {
3060                va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3061                va_TraceMPEG2Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3062            }
3063            break;
3064        case VAProfileMPEG4Simple:
3065        case VAProfileMPEG4AdvancedSimple:
3066        case VAProfileMPEG4Main:
3067            for (j=0; j<num_elements; j++) {
3068                va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3069                va_TraceMPEG4Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3070            }
3071            break;
3072        case VAProfileH264Baseline:
3073        case VAProfileH264Main:
3074        case VAProfileH264High:
3075        case VAProfileH264ConstrainedBaseline:
3076            for (j=0; j<num_elements; j++) {
3077                va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3078
3079                va_TraceH264Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3080            }
3081            break;
3082        case VAProfileVC1Simple:
3083        case VAProfileVC1Main:
3084        case VAProfileVC1Advanced:
3085            for (j=0; j<num_elements; j++) {
3086                va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3087
3088                va_TraceVC1Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3089            }
3090            break;
3091        case VAProfileH263Baseline:
3092            for (j=0; j<num_elements; j++) {
3093                va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3094
3095                va_TraceH263Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3096            }
3097            break;
3098        case VAProfileJPEGBaseline:
3099            for (j=0; j<num_elements; j++) {
3100                va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3101
3102                va_TraceJPEGBuf (dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3103            }
3104            break;
3105        case VAProfileVP8Version0_3:
3106            for (j=0; j<num_elements; j++) {
3107                va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3108
3109                va_TraceVP8Buf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3110            }
3111            break;
3112        case VAProfileNone:
3113            for (j=0; j<num_elements; j++) {
3114                va_TraceMsg(trace_ctx, "\telement[%d] =\n", j);
3115
3116                va_TraceNoneBuf(dpy, context, buffers[i], type, size, num_elements, pbuf + size*j);
3117            }
3118            break;
3119        default:
3120            break;
3121        }
3122
3123        vaUnmapBuffer(dpy, buffers[i]);
3124    }
3125
3126    va_TraceMsg(trace_ctx, NULL);
3127}
3128
3129void va_TraceEndPicture(
3130    VADisplay dpy,
3131    VAContextID __maybe_unused context,
3132    int __maybe_unused endpic_done
3133)
3134{
3135    int encode, decode, jpeg;
3136    DPY2TRACECTX(dpy);
3137
3138    TRACE_FUNCNAME(idx);
3139
3140    va_TraceMsg(trace_ctx, "\trender_targets = 0x%08x\n", trace_ctx->trace_rendertarget);
3141
3142    /* avoid to create so many empty files */
3143    encode = (trace_ctx->trace_entrypoint == VAEntrypointEncSlice);
3144    decode = (trace_ctx->trace_entrypoint == VAEntrypointVLD);
3145    jpeg = (trace_ctx->trace_entrypoint == VAEntrypointEncPicture);
3146
3147    /* trace encode source surface, can do it before HW completes rendering */
3148    if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE))||
3149        (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG)))
3150        va_TraceSurface(dpy);
3151
3152    /* trace decoded surface, do it after HW completes rendering */
3153    if (decode && ((trace_flag & VA_TRACE_FLAG_SURFACE_DECODE))) {
3154        vaSyncSurface(dpy, trace_ctx->trace_rendertarget);
3155        va_TraceSurface(dpy);
3156    }
3157
3158    va_TraceMsg(trace_ctx, NULL);
3159}
3160
3161
3162void va_TraceSyncSurface(
3163    VADisplay dpy,
3164    VASurfaceID __maybe_unused render_target
3165)
3166{
3167    DPY2TRACECTX(dpy);
3168
3169    TRACE_FUNCNAME(idx);
3170
3171    va_TraceMsg(trace_ctx, NULL);
3172}
3173
3174void va_TraceQuerySurfaceAttributes(
3175    VADisplay           dpy,
3176    VAConfigID          __maybe_unused config,
3177    VASurfaceAttrib    *attrib_list,
3178    unsigned int       *num_attribs
3179)
3180{
3181    DPY2TRACECTX(dpy);
3182
3183    TRACE_FUNCNAME(idx);
3184    va_TraceSurfaceAttributes(trace_ctx, attrib_list, num_attribs);
3185
3186    va_TraceMsg(trace_ctx, NULL);
3187
3188}
3189
3190
3191void va_TraceQuerySurfaceStatus(
3192    VADisplay dpy,
3193    VASurfaceID __maybe_unused render_target,
3194    VASurfaceStatus *status    /* out */
3195)
3196{
3197    DPY2TRACECTX(dpy);
3198
3199    TRACE_FUNCNAME(idx);
3200
3201    if (status)
3202        va_TraceMsg(trace_ctx, "\tstatus = 0x%08x\n", *status);
3203    va_TraceMsg(trace_ctx, NULL);
3204}
3205
3206
3207void va_TraceQuerySurfaceError(
3208    VADisplay dpy,
3209    VASurfaceID surface,
3210    VAStatus error_status,
3211    void **error_info       /*out*/
3212)
3213{
3214    DPY2TRACECTX(dpy);
3215
3216    TRACE_FUNCNAME(idx);
3217    va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
3218    va_TraceMsg(trace_ctx, "\terror_status = 0x%08x\n", error_status);
3219    if (error_info && (error_status == VA_STATUS_ERROR_DECODING_ERROR)) {
3220        VASurfaceDecodeMBErrors *p = *error_info;
3221        while (p && (p->status != -1)) {
3222            va_TraceMsg(trace_ctx, "\t\tstatus = %d\n", p->status);
3223            va_TraceMsg(trace_ctx, "\t\tstart_mb = %d\n", p->start_mb);
3224            va_TraceMsg(trace_ctx, "\t\tend_mb = %d\n", p->end_mb);
3225            p++; /* next error record */
3226        }
3227    }
3228    va_TraceMsg(trace_ctx, NULL);
3229}
3230
3231void va_TraceMaxNumDisplayAttributes (
3232    VADisplay dpy,
3233    int number
3234)
3235{
3236    DPY2TRACECTX(dpy);
3237
3238    TRACE_FUNCNAME(idx);
3239
3240    va_TraceMsg(trace_ctx, "\tmax_display_attributes = %d\n", number);
3241    va_TraceMsg(trace_ctx, NULL);
3242}
3243
3244void va_TraceQueryDisplayAttributes (
3245    VADisplay dpy,
3246    VADisplayAttribute *attr_list,    /* out */
3247    int *num_attributes               /* out */
3248)
3249{
3250    int i;
3251
3252    DPY2TRACECTX(dpy);
3253
3254    if (attr_list == NULL || num_attributes == NULL)
3255        return;
3256
3257    va_TraceMsg(trace_ctx, "\tnum_attributes = %d\n", *num_attributes);
3258
3259    for (i=0; i<*num_attributes; i++) {
3260        va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n");
3261        va_TraceMsg(trace_ctx, "\t  typ = 0x%08x\n", attr_list[i].type);
3262        va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
3263        va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
3264        va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
3265        va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
3266    }
3267    va_TraceMsg(trace_ctx, NULL);
3268}
3269
3270
3271static void va_TraceDisplayAttributes (
3272    VADisplay dpy,
3273    VADisplayAttribute *attr_list,
3274    int __maybe_unused num_attributes
3275)
3276{
3277    int i;
3278
3279    DPY2TRACECTX(dpy);
3280
3281    if (attr_list == NULL)
3282        return;
3283
3284    for (i=0; i<num_attributes; i++) {
3285        va_TraceMsg(trace_ctx, "\tattr_list[%d] =\n");
3286        va_TraceMsg(trace_ctx, "\t  typ = 0x%08x\n", attr_list[i].type);
3287        va_TraceMsg(trace_ctx, "\t  min_value = %d\n", attr_list[i].min_value);
3288        va_TraceMsg(trace_ctx, "\t  max_value = %d\n", attr_list[i].max_value);
3289        va_TraceMsg(trace_ctx, "\t  value = %d\n", attr_list[i].value);
3290        va_TraceMsg(trace_ctx, "\t  flags = %d\n", attr_list[i].flags);
3291    }
3292    va_TraceMsg(trace_ctx, NULL);
3293}
3294
3295
3296void va_TraceGetDisplayAttributes (
3297    VADisplay dpy,
3298    VADisplayAttribute *attr_list,
3299    int num_attributes
3300)
3301{
3302    DPY2TRACECTX(dpy);
3303
3304    TRACE_FUNCNAME(idx);
3305
3306    va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
3307}
3308
3309void va_TraceSetDisplayAttributes (
3310    VADisplay dpy,
3311    VADisplayAttribute *attr_list,
3312    int num_attributes
3313)
3314{
3315    DPY2TRACECTX(dpy);
3316
3317    TRACE_FUNCNAME(idx);
3318
3319    va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
3320}
3321
3322
3323void va_TracePutSurface (
3324    VADisplay dpy,
3325    VASurfaceID surface,
3326    void *draw, /* the target Drawable */
3327    short srcx,
3328    short srcy,
3329    unsigned short srcw,
3330    unsigned short srch,
3331    short destx,
3332    short desty,
3333    unsigned short destw,
3334    unsigned short desth,
3335    VARectangle *cliprects, /* client supplied clip list */
3336    unsigned int number_cliprects, /* number of clip rects in the clip list */
3337    unsigned int flags /* de-interlacing flags */
3338)
3339{
3340    DPY2TRACECTX(dpy);
3341
3342    TRACE_FUNCNAME(idx);
3343
3344    va_TraceMsg(trace_ctx, "\tsurface = 0x%08x\n", surface);
3345    va_TraceMsg(trace_ctx, "\tdraw = 0x%08x\n", draw);
3346    va_TraceMsg(trace_ctx, "\tsrcx = %d\n", srcx);
3347    va_TraceMsg(trace_ctx, "\tsrcy = %d\n", srcy);
3348    va_TraceMsg(trace_ctx, "\tsrcw = %d\n", srcw);
3349    va_TraceMsg(trace_ctx, "\tsrch = %d\n", srch);
3350    va_TraceMsg(trace_ctx, "\tdestx = %d\n", destx);
3351    va_TraceMsg(trace_ctx, "\tdesty = %d\n", desty);
3352    va_TraceMsg(trace_ctx, "\tdestw = %d\n", destw);
3353    va_TraceMsg(trace_ctx, "\tdesth = %d\n", desth);
3354    va_TraceMsg(trace_ctx, "\tcliprects = 0x%08x\n", cliprects);
3355    va_TraceMsg(trace_ctx, "\tnumber_cliprects = %d\n", number_cliprects);
3356    va_TraceMsg(trace_ctx, "\tflags = 0x%08x\n", flags);
3357    va_TraceMsg(trace_ctx, NULL);
3358}
3359