Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Side by Side Diff: third_party/libva/va/va_trace.c

Issue 10375035: Add libva to chromium third_party. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2009-2011 Intel Corporation. All Rights Reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
14 * of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25 #define _GNU_SOURCE 1
26 #include "va.h"
27 #include "va_backend.h"
28 #include "va_trace.h"
29
30 #include <assert.h>
31 #include <stdarg.h>
32 #include <stdlib.h>
33 #include <stdio.h>
34 #include <string.h>
35 #include <dlfcn.h>
36 #include <unistd.h>
37 #include <sys/types.h>
38 #include <sys/stat.h>
39 #include <unistd.h>
40 #include <time.h>
41 #include <errno.h>
42
43 /*
44 * Env. to debug some issue, e.g. the decode/encode issue in a video conference scenerio:
45 * .LIBVA_TRACE=log_file: general VA parameters saved into log_file
46 * .LIBVA_TRACE_BUFDATA: dump VA buffer data into log_file (if not set, just cal culate a checksum)
47 * .LIBVA_TRACE_CODEDBUF=coded_clip_file: save the coded clip into file coded_cl ip_file
48 * .LIBVA_TRACE_SURFACE=yuv_file: save surface YUV into file yuv_file. Use file name to determine
49 * decode/encode or jpeg surfaces
50 * .LIBVA_TRACE_LOGSIZE=numeric number: truncate the log_file or coded_clip_file , or decoded_yuv_file
51 * when the size is bigger than the number
52 */
53
54 /* global settings */
55
56 /* LIBVA_TRACE */
57 int trace_flag = 0;
58
59 /* LIBVA_TRACE_LOGSIZE */
60 static unsigned int trace_logsize = 0xffffffff; /* truncate the log when the siz e is bigger than it */
61
62 #define TRACE_CONTEXT_MAX 4
63 /* per context settings */
64 static struct _trace_context {
65 VADisplay dpy; /* should use context as the key */
66
67 /* LIBVA_TRACE */
68 FILE *trace_fp_log; /* save the log into a file */
69 char *trace_log_fn; /* file name */
70
71 /* LIBVA_TRACE_CODEDBUF */
72 FILE *trace_fp_codedbuf; /* save the encode result into a file */
73 char *trace_codedbuf_fn; /* file name */
74
75 /* LIBVA_TRACE_SURFACE */
76 FILE *trace_fp_surface; /* save the surface YUV into a file */
77 char *trace_surface_fn; /* file name */
78
79 VAContextID trace_context; /* current context */
80
81 VASurfaceID trace_rendertarget; /* current render target */
82 VAProfile trace_profile; /* current profile for buffers */
83 VAEntrypoint trace_entrypoint; /* current entrypoint */
84 VABufferID trace_codedbuf;
85
86 unsigned int trace_frame_no; /* current frame NO */
87 unsigned int trace_slice_no; /* current slice NO */
88 unsigned int trace_slice_size; /* current slice buffer size */
89
90 unsigned int trace_frame_width; /* current frame width */
91 unsigned int trace_frame_height; /* current frame height */
92 unsigned int trace_sequence_start; /* get a new sequence for encoding or not */
93 } trace_context[TRACE_CONTEXT_MAX]; /* trace five context at the same time */
94
95 #define DPY2INDEX(dpy) \
96 int idx; \
97 \
98 for (idx = 0; idx < TRACE_CONTEXT_MAX; idx++) \
99 if (trace_context[idx].dpy == dpy) \
100 break; \
101 \
102 if (idx == TRACE_CONTEXT_MAX) \
103 return;
104
105 #define TRACE_FUNCNAME(idx) va_TraceMsg(idx, "==========%s\n", __func__);
106
107 /* Prototype declarations (functions defined in va.c) */
108
109 void va_errorMessage(const char *msg, ...);
110 void va_infoMessage(const char *msg, ...);
111
112 int va_parseConfig(char *env, char *env_value);
113
114 VAStatus vaBufferInfo(
115 VADisplay dpy,
116 VAContextID context, /* in */
117 VABufferID buf_id, /* in */
118 VABufferType *type, /* out */
119 unsigned int *size, /* out */
120 unsigned int *num_elements /* out */
121 );
122
123 VAStatus vaLockSurface(VADisplay dpy,
124 VASurfaceID surface,
125 unsigned int *fourcc, /* following are output argument */
126 unsigned int *luma_stride,
127 unsigned int *chroma_u_stride,
128 unsigned int *chroma_v_stride,
129 unsigned int *luma_offset,
130 unsigned int *chroma_u_offset,
131 unsigned int *chroma_v_offset,
132 unsigned int *buffer_name,
133 void **buffer
134 );
135
136 VAStatus vaUnlockSurface(VADisplay dpy,
137 VASurfaceID surface
138 );
139
140 #define FILE_NAME_SUFFIX(env_value) \
141 do { \
142 int tmp = strnlen(env_value, sizeof(env_value)); \
143 int left = sizeof(env_value) - tmp; \
144 \
145 snprintf(env_value+tmp, \
146 left, \
147 ".%04d.%05d", \
148 trace_index, \
149 suffix); \
150 } while (0)
151
152 void va_TraceInit(VADisplay dpy)
153 {
154 char env_value[1024];
155 unsigned short suffix = 0xffff & ((unsigned int)time(NULL));
156 int trace_index = 0;
157 FILE *tmp;
158
159 for (trace_index = 0; trace_index < TRACE_CONTEXT_MAX; trace_index++)
160 if (trace_context[trace_index].dpy == 0)
161 break;
162
163 if (trace_index == TRACE_CONTEXT_MAX)
164 return;
165
166 memset(&trace_context[trace_index], 0, sizeof(struct _trace_context));
167 if (va_parseConfig("LIBVA_TRACE", &env_value[0]) == 0) {
168 FILE_NAME_SUFFIX(env_value);
169 trace_context[trace_index].trace_log_fn = strdup(env_value);
170
171 tmp = fopen(env_value, "w");
172 if (tmp) {
173 trace_context[trace_index].trace_fp_log = tmp;
174 va_infoMessage("LIBVA_TRACE is on, save log into %s\n", trace_contex t[trace_index].trace_log_fn);
175 trace_flag = VA_TRACE_FLAG_LOG;
176 } else
177 va_errorMessage("Open file %s failed (%s)\n", env_value, strerror(er rno));
178 }
179
180 /* may re-get the global settings for multiple context */
181 if (va_parseConfig("LIBVA_TRACE_LOGSIZE", &env_value[0]) == 0) {
182 trace_logsize = atoi(env_value);
183 va_infoMessage("LIBVA_TRACE_LOGSIZE is on, size is %d\n", trace_logsize) ;
184 }
185
186 if ((trace_flag & VA_TRACE_FLAG_LOG) && (va_parseConfig("LIBVA_TRACE_BUFDATA ", NULL) == 0)) {
187 trace_flag |= VA_TRACE_FLAG_BUFDATA;
188 va_infoMessage("LIBVA_TRACE_BUFDATA is on, dump buffer into log file\n") ;
189 }
190
191 /* per-context setting */
192 if (va_parseConfig("LIBVA_TRACE_CODEDBUF", &env_value[0]) == 0) {
193 FILE_NAME_SUFFIX(env_value);
194 trace_context[trace_index].trace_codedbuf_fn = strdup(env_value);
195 va_infoMessage("LIBVA_TRACE_CODEDBUF is on, save codedbuf into log file %s\n",
196 trace_context[trace_index].trace_codedbuf_fn);
197 trace_flag |= VA_TRACE_FLAG_CODEDBUF;
198 }
199
200 if (va_parseConfig("LIBVA_TRACE_SURFACE", &env_value[0]) == 0) {
201 FILE_NAME_SUFFIX(env_value);
202 trace_context[trace_index].trace_surface_fn = strdup(env_value);
203
204 va_infoMessage("LIBVA_TRACE_SURFACE is on, save surface into %s\n",
205 trace_context[trace_index].trace_surface_fn);
206
207 /* for surface data dump, it is time-consume, and may
208 * cause some side-effect, so only trace the needed surfaces
209 * to trace encode surface, set the trace file name to sth like *enc*
210 * to trace decode surface, set the trace file name to sth like *dec*
211 * if no dec/enc in file name, set both
212 */
213 if (strstr(env_value, "dec"))
214 trace_flag |= VA_TRACE_FLAG_SURFACE_DECODE;
215 if (strstr(env_value, "enc"))
216 trace_flag |= VA_TRACE_FLAG_SURFACE_ENCODE;
217 if (strstr(env_value, "jpeg") || strstr(env_value, "jpg"))
218 trace_flag |= VA_TRACE_FLAG_SURFACE_JPEG;
219 }
220
221 trace_context[trace_index].dpy = dpy;
222 }
223
224
225 void va_TraceEnd(VADisplay dpy)
226 {
227 DPY2INDEX(dpy);
228
229 if (trace_context[idx].trace_fp_log)
230 fclose(trace_context[idx].trace_fp_log);
231
232 if (trace_context[idx].trace_fp_codedbuf)
233 fclose(trace_context[idx].trace_fp_codedbuf);
234
235 if (trace_context[idx].trace_fp_surface)
236 fclose(trace_context[idx].trace_fp_surface);
237
238 if (trace_context[idx].trace_log_fn)
239 free(trace_context[idx].trace_log_fn);
240
241 if (trace_context[idx].trace_codedbuf_fn)
242 free(trace_context[idx].trace_codedbuf_fn);
243
244 if (trace_context[idx].trace_surface_fn)
245 free(trace_context[idx].trace_surface_fn);
246
247 memset(&trace_context[idx], 0, sizeof(struct _trace_context));
248 }
249
250
251 static unsigned int file_size(FILE *fp)
252 {
253 struct stat buf;
254
255 fstat(fileno(fp), &buf);
256
257 return buf.st_size;
258 }
259
260
261 static void truncate_file(FILE *fp)
262 {
263 ftruncate(fileno(fp), 0);
264 rewind(fp);
265 }
266
267 void va_TraceMsg(int idx, const char *msg, ...)
268 {
269 va_list args;
270
271 if (!(trace_flag & VA_TRACE_FLAG_LOG))
272 return;
273
274 if (file_size(trace_context[idx].trace_fp_log) >= trace_logsize)
275 truncate_file(trace_context[idx].trace_fp_log);
276 if (msg) {
277 va_start(args, msg);
278 vfprintf(trace_context[idx].trace_fp_log, msg, args);
279 va_end(args);
280 } else
281 fflush(trace_context[idx].trace_fp_log);
282 }
283
284 void va_TraceCodedBuf(VADisplay dpy)
285 {
286 VACodedBufferSegment *buf_list = NULL;
287 VAStatus va_status;
288 unsigned char check_sum = 0;
289 DPY2INDEX(dpy);
290
291 /* can only truncate at a sequence boudary */
292 if (((file_size(trace_context[idx].trace_fp_log) >= trace_logsize))
293 && trace_context[idx].trace_sequence_start) {
294 va_TraceMsg(idx, "==========truncate file %s\n", trace_context[idx].trac e_codedbuf_fn);
295 truncate_file(trace_context[idx].trace_fp_log);
296 }
297
298
299 trace_context[idx].trace_sequence_start = 0; /* only truncate coded file whe n meet next new sequence */
300
301 va_status = vaMapBuffer(dpy, trace_context[idx].trace_codedbuf, (void **)(&b uf_list));
302 if (va_status != VA_STATUS_SUCCESS)
303 return;
304
305 va_TraceMsg(idx, "==========dump codedbuf into file %s\n", trace_context[idx ].trace_codedbuf_fn);
306
307 while (buf_list != NULL) {
308 unsigned int i;
309
310 va_TraceMsg(idx, "\tsize = %d\n", buf_list->size);
311 if (trace_context[idx].trace_fp_log)
312 fwrite(buf_list->buf, buf_list->size, 1, trace_context[idx].trace_fp _codedbuf);
313
314 for (i=0; i<buf_list->size; i++)
315 check_sum ^= *((unsigned char *)buf_list->buf + i);
316
317 buf_list = buf_list->next;
318 }
319 vaUnmapBuffer(dpy,trace_context[idx].trace_codedbuf);
320
321 va_TraceMsg(idx, "\tchecksum = 0x%02x\n", check_sum);
322 va_TraceMsg(idx, NULL);
323 }
324
325
326 void va_TraceSurface(VADisplay dpy)
327 {
328 unsigned int i, j;
329 unsigned int fourcc; /* following are output argument */
330 unsigned int luma_stride;
331 unsigned int chroma_u_stride;
332 unsigned int chroma_v_stride;
333 unsigned int luma_offset;
334 unsigned int chroma_u_offset;
335 unsigned int chroma_v_offset;
336 unsigned int buffer_name;
337 void *buffer = NULL;
338 unsigned char *Y_data, *UV_data, *tmp;
339 VAStatus va_status;
340 unsigned char check_sum = 0;
341 DPY2INDEX(dpy);
342
343 va_TraceMsg(idx, "==========dump surface data in file %s\n", trace_context[i dx].trace_surface_fn);
344
345 if ((file_size(trace_context[idx].trace_fp_surface) >= trace_logsize)) {
346 va_TraceMsg(idx, "==========truncate file %s\n", trace_context[idx].trac e_surface_fn);
347 truncate_file(trace_context[idx].trace_fp_surface);
348 }
349 va_TraceMsg(idx, NULL);
350
351 va_status = vaLockSurface(
352 dpy,
353 trace_context[idx].trace_rendertarget,
354 &fourcc,
355 &luma_stride, &chroma_u_stride, &chroma_v_stride,
356 &luma_offset, &chroma_u_offset, &chroma_v_offset,
357 &buffer_name, &buffer);
358
359 if (va_status != VA_STATUS_SUCCESS) {
360 va_TraceMsg(idx, "Error:vaLockSurface failed\n");
361 return;
362 }
363
364 va_TraceMsg(idx, "\tfourcc = 0x%08x\n", fourcc);
365 va_TraceMsg(idx, "\twidth = %d\n", trace_context[idx].trace_frame_width);
366 va_TraceMsg(idx, "\theight = %d\n", trace_context[idx].trace_frame_height);
367 va_TraceMsg(idx, "\tluma_stride = %d\n", luma_stride);
368 va_TraceMsg(idx, "\tchroma_u_stride = %d\n", chroma_u_stride);
369 va_TraceMsg(idx, "\tchroma_v_stride = %d\n", chroma_v_stride);
370 va_TraceMsg(idx, "\tluma_offset = %d\n", luma_offset);
371 va_TraceMsg(idx, "\tchroma_u_offset = %d\n", chroma_u_offset);
372 va_TraceMsg(idx, "\tchroma_v_offset = %d\n", chroma_v_offset);
373
374 if (buffer == NULL) {
375 va_TraceMsg(idx, "Error:vaLockSurface return NULL buffer\n");
376 va_TraceMsg(idx, NULL);
377
378 vaUnlockSurface(dpy, trace_context[idx].trace_rendertarget);
379 return;
380 }
381 va_TraceMsg(idx, "\tbuffer location = 0x%08x\n", buffer);
382 va_TraceMsg(idx, NULL);
383
384 Y_data = (unsigned char*)buffer;
385 UV_data = (unsigned char*)buffer + chroma_u_offset;
386
387 tmp = Y_data;
388 for (i=0; i<trace_context[idx].trace_frame_height; i++) {
389 if (trace_context[idx].trace_fp_surface)
390 fwrite(tmp, trace_context[idx].trace_frame_width, 1, trace_context[i dx].trace_fp_surface);
391
392 tmp = Y_data + i * luma_stride;
393 }
394 tmp = UV_data;
395 if (fourcc == VA_FOURCC_NV12) {
396 for (i=0; i<trace_context[idx].trace_frame_height/2; i++) {
397 if (trace_context[idx].trace_fp_surface)
398 fwrite(tmp, trace_context[idx].trace_frame_width, 1, trace_conte xt[idx].trace_fp_surface);
399
400 tmp = UV_data + i * chroma_u_stride;
401 }
402 }
403
404 vaUnlockSurface(dpy, trace_context[idx].trace_rendertarget);
405
406 va_TraceMsg(idx, NULL);
407 }
408
409
410 void va_TraceInitialize (
411 VADisplay dpy,
412 int *major_version, /* out */
413 int *minor_version /* out */
414 )
415 {
416 DPY2INDEX(dpy);
417 TRACE_FUNCNAME(idx);
418 }
419
420 void va_TraceTerminate (
421 VADisplay dpy
422 )
423 {
424 DPY2INDEX(dpy);
425 TRACE_FUNCNAME(idx);
426 }
427
428
429 void va_TraceCreateConfig(
430 VADisplay dpy,
431 VAProfile profile,
432 VAEntrypoint entrypoint,
433 VAConfigAttrib *attrib_list,
434 int num_attribs,
435 VAConfigID *config_id /* out */
436 )
437 {
438 int i;
439 int encode, decode, jpeg;
440 DPY2INDEX(dpy);
441
442 TRACE_FUNCNAME(idx);
443
444 va_TraceMsg(idx, "\tprofile = %d\n", profile);
445 va_TraceMsg(idx, "\tentrypoint = %d\n", entrypoint);
446 va_TraceMsg(idx, "\tnum_attribs = %d\n", num_attribs);
447 for (i = 0; i < num_attribs; i++) {
448 va_TraceMsg(idx, "\t\tattrib_list[%d].type = 0x%08x\n", i, attrib_list[i ].type);
449 va_TraceMsg(idx, "\t\tattrib_list[%d].value = 0x%08x\n", i, attrib_list[ i].value);
450 }
451 va_TraceMsg(idx, NULL);
452
453 trace_context[idx].trace_profile = profile;
454 trace_context[idx].trace_entrypoint = entrypoint;
455
456 /* avoid to create so many empty files */
457 encode = (trace_context[idx].trace_entrypoint == VAEntrypointEncSlice);
458 decode = (trace_context[idx].trace_entrypoint == VAEntrypointVLD);
459 jpeg = (trace_context[idx].trace_entrypoint == VAEntrypointEncPicture);
460 if ((encode && (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE)) ||
461 (decode && (trace_flag & VA_TRACE_FLAG_SURFACE_DECODE)) ||
462 (jpeg && (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG))) {
463 FILE *tmp = fopen(trace_context[idx].trace_surface_fn, "w");
464
465 if (tmp)
466 trace_context[idx].trace_fp_surface = tmp;
467 else {
468 va_errorMessage("Open file %s failed (%s)\n",
469 trace_context[idx].trace_surface_fn,
470 strerror(errno));
471 trace_context[idx].trace_fp_surface = NULL;
472 trace_flag &= ~(VA_TRACE_FLAG_SURFACE);
473 }
474 }
475
476 if (encode && (trace_flag & VA_TRACE_FLAG_CODEDBUF)) {
477 FILE *tmp = fopen(trace_context[idx].trace_codedbuf_fn, "w");
478
479 if (tmp)
480 trace_context[idx].trace_fp_codedbuf = tmp;
481 else {
482 va_errorMessage("Open file %s failed (%s)\n",
483 trace_context[idx].trace_codedbuf_fn,
484 strerror(errno));
485 trace_context[idx].trace_fp_codedbuf = NULL;
486 trace_flag &= ~VA_TRACE_FLAG_CODEDBUF;
487 }
488 }
489 }
490
491
492 void va_TraceCreateSurface(
493 VADisplay dpy,
494 int width,
495 int height,
496 int format,
497 int num_surfaces,
498 VASurfaceID *surfaces /* out */
499 )
500 {
501 int i;
502 DPY2INDEX(dpy);
503
504 TRACE_FUNCNAME(idx);
505
506 va_TraceMsg(idx, "\twidth = %d\n", width);
507 va_TraceMsg(idx, "\theight = %d\n", height);
508 va_TraceMsg(idx, "\tformat = %d\n", format);
509 va_TraceMsg(idx, "\tnum_surfaces = %d\n", num_surfaces);
510
511 for (i = 0; i < num_surfaces; i++)
512 va_TraceMsg(idx, "\t\tsurfaces[%d] = 0x%08x\n", i, surfaces[i]);
513
514 va_TraceMsg(idx, NULL);
515 }
516
517
518 void va_TraceCreateContext(
519 VADisplay dpy,
520 VAConfigID config_id,
521 int picture_width,
522 int picture_height,
523 int flag,
524 VASurfaceID *render_targets,
525 int num_render_targets,
526 VAContextID *context /* out */
527 )
528 {
529 int i;
530 DPY2INDEX(dpy);
531
532 TRACE_FUNCNAME(idx);
533
534 va_TraceMsg(idx, "\twidth = %d\n", picture_width);
535 va_TraceMsg(idx, "\theight = %d\n", picture_height);
536 va_TraceMsg(idx, "\tflag = 0x%08x\n", flag);
537 va_TraceMsg(idx, "\tnum_render_targets = %d\n", num_render_targets);
538 for (i=0; i<num_render_targets; i++)
539 va_TraceMsg(idx, "\t\trender_targets[%d] = 0x%08x\n", i, render_targets[ i]);
540 va_TraceMsg(idx, "\tcontext = 0x%08x\n", *context);
541 va_TraceMsg(idx, NULL);
542
543 trace_context[idx].trace_context = *context;
544
545 trace_context[idx].trace_frame_no = 0;
546 trace_context[idx].trace_slice_no = 0;
547
548 trace_context[idx].trace_frame_width = picture_width;
549 trace_context[idx].trace_frame_height = picture_height;
550 }
551
552
553 static char * buffer_type_to_string(int type)
554 {
555 switch (type) {
556 case VAPictureParameterBufferType: return "VAPictureParameterBufferType";
557 case VAIQMatrixBufferType: return "VAIQMatrixBufferType";
558 case VABitPlaneBufferType: return "VABitPlaneBufferType";
559 case VASliceGroupMapBufferType: return "VASliceGroupMapBufferType";
560 case VASliceParameterBufferType: return "VASliceParameterBufferType";
561 case VASliceDataBufferType: return "VASliceDataBufferType";
562 case VAProtectedSliceDataBufferType: return "VAProtectedSliceDataBufferType" ;
563 case VAMacroblockParameterBufferType: return "VAMacroblockParameterBufferTyp e";
564 case VAResidualDataBufferType: return "VAResidualDataBufferType";
565 case VADeblockingParameterBufferType: return "VADeblockingParameterBufferTyp e";
566 case VAImageBufferType: return "VAImageBufferType";
567 case VAEncCodedBufferType: return "VAEncCodedBufferType";
568 case VAEncSequenceParameterBufferType: return "VAEncSequenceParameterBufferT ype";
569 case VAEncPictureParameterBufferType: return "VAEncPictureParameterBufferTyp e";
570 case VAEncSliceParameterBufferType: return "VAEncSliceParameterBufferType";
571 case VAEncMiscParameterBufferType: return "VAEncMiscParameterBufferType";
572 default: return "UnknowBuffer";
573 }
574 }
575
576 void va_TraceMapBuffer (
577 VADisplay dpy,
578 VABufferID buf_id, /* in */
579 void **pbuf /* out */
580 )
581 {
582 VABufferType type;
583 unsigned int size;
584 unsigned int num_elements;
585
586 VACodedBufferSegment *buf_list;
587 int i = 0;
588
589 DPY2INDEX(dpy);
590
591 vaBufferInfo(dpy, trace_context[idx].trace_context, buf_id, &type, &size, &n um_elements);
592 /*
593 va_TraceMsg(idx, "\tbuf_id=0x%x\n", buf_id);
594 va_TraceMsg(idx, "\tbuf_type=%s\n", buffer_type_to_string(type));
595 va_TraceMsg(idx, "\tbuf_size=%s\n", size);
596 va_TraceMsg(idx, "\tbuf_elements=%s\n", &num_elements);
597 */
598
599 /* only trace CodedBuffer */
600 if (type != VAEncCodedBufferType)
601 return;
602
603 buf_list = (VACodedBufferSegment *)(*pbuf);
604 while (buf_list != NULL) {
605 va_TraceMsg(idx, "\tCodedbuf[%d] =\n", i++);
606
607 va_TraceMsg(idx, "\t size = %d\n", buf_list->size);
608 va_TraceMsg(idx, "\t bit_offset = %d\n", buf_list->bit_offset);
609 va_TraceMsg(idx, "\t status = 0x%08x\n", buf_list->status);
610 va_TraceMsg(idx, "\t reserved = 0x%08x\n", buf_list->reserved);
611 va_TraceMsg(idx, "\t buf = 0x%08x\n", buf_list->buf);
612
613 buf_list = buf_list->next;
614 }
615 va_TraceMsg(idx, NULL);
616 }
617
618 static void va_TraceVABuffers(
619 VADisplay dpy,
620 VAContextID context,
621 VABufferID buffer,
622 VABufferType type,
623 unsigned int size,
624 unsigned int num_elements,
625 void *pbuf
626 )
627 {
628 unsigned int i;
629 unsigned char *p = pbuf;
630 unsigned char check_sum = 0;
631 DPY2INDEX(dpy);
632
633 va_TraceMsg(idx, "%s\n", buffer_type_to_string(type));
634
635 for (i=0; i<size; i++) {
636 unsigned char value = p[i];
637
638 if ((trace_flag & VA_TRACE_FLAG_BUFDATA) && ((i%16) == 0))
639 va_TraceMsg(idx, "\n0x%08x:", i);
640
641 if (trace_flag & VA_TRACE_FLAG_BUFDATA)
642 va_TraceMsg(idx, " %02x", value);
643
644 check_sum ^= value;
645 }
646
647 va_TraceMsg(idx, "\tchecksum = 0x%02x\n", check_sum & 0xff);
648 va_TraceMsg(idx, NULL);
649
650 return;
651 }
652
653
654 static void va_TraceVAPictureParameterBufferMPEG2(
655 VADisplay dpy,
656 VAContextID context,
657 VABufferID buffer,
658 VABufferType type,
659 unsigned int size,
660 unsigned int num_elements,
661 void *data)
662 {
663 VAPictureParameterBufferMPEG2 *p=(VAPictureParameterBufferMPEG2 *)data;
664 DPY2INDEX(dpy);
665
666 va_TraceMsg(idx,"VAPictureParameterBufferMPEG2\n");
667
668 va_TraceMsg(idx,"\thorizontal size= %d\n", p->horizontal_size);
669 va_TraceMsg(idx,"\tvertical size= %d\n", p->vertical_size);
670 va_TraceMsg(idx,"\tforward reference picture= %d\n", p->forward_reference_pi cture);
671 va_TraceMsg(idx,"\tbackward reference picture= %d\n", p->backward_reference_ picture);
672 va_TraceMsg(idx,"\tpicture coding type= %d\n", p->picture_coding_type);
673 va_TraceMsg(idx,"\tf mode= %d\n", p->f_code);
674
675 va_TraceMsg(idx,"\tpicture coding extension = %d\n", p->picture_coding_exten sion.value);
676 va_TraceMsg(idx,"\tintra_dc_precision= %d\n", p->picture_coding_extension.bi ts.intra_dc_precision);
677 va_TraceMsg(idx,"\tpicture_structure= %d\n", p->picture_coding_extension.bit s.picture_structure);
678 va_TraceMsg(idx,"\ttop_field_first= %d\n", p->picture_coding_extension.bits. top_field_first);
679 va_TraceMsg(idx,"\tframe_pred_frame_dct= %d\n", p->picture_coding_extension. bits.frame_pred_frame_dct);
680 va_TraceMsg(idx,"\tconcealment_motion_vectors= %d\n", p->picture_coding_exte nsion.bits.concealment_motion_vectors);
681 va_TraceMsg(idx,"\tq_scale_type= %d\n", p->picture_coding_extension.bits.q_s cale_type);
682 va_TraceMsg(idx,"\tintra_vlc_format= %d\n", p->picture_coding_extension.bits .intra_vlc_format);
683 va_TraceMsg(idx,"\talternate_scan= %d\n", p->picture_coding_extension.bits.a lternate_scan);
684 va_TraceMsg(idx,"\trepeat_first_field= %d\n", p->picture_coding_extension.bi ts.repeat_first_field);
685 va_TraceMsg(idx,"\tprogressive_frame= %d\n", p->picture_coding_extension.bit s.progressive_frame);
686 va_TraceMsg(idx,"\tis_first_field= %d\n", p->picture_coding_extension.bits.i s_first_field);
687 va_TraceMsg(idx, NULL);
688
689 return;
690 }
691
692
693 static void va_TraceVAIQMatrixBufferMPEG2(
694 VADisplay dpy,
695 VAContextID context,
696 VABufferID buffer,
697 VABufferType type,
698 unsigned int size,
699 unsigned int num_elements,
700 void *data)
701 {
702 VAIQMatrixBufferMPEG2 *p=(VAIQMatrixBufferMPEG2 *)data;
703 DPY2INDEX(dpy);
704
705 va_TraceMsg(idx,"VAIQMatrixBufferMPEG2\n");
706
707 va_TraceMsg(idx,"\tload_intra_quantiser_matrix = %d\n", p->load_intra_quanti ser_matrix);
708 va_TraceMsg(idx,"\tload_non_intra_quantiser_matrix = %d\n", p->load_non_intr a_quantiser_matrix);
709 va_TraceMsg(idx,"\tload_chroma_intra_quantiser_matrix = %d\n", p->load_chrom a_intra_quantiser_matrix);
710 va_TraceMsg(idx,"\tload_chroma_non_intra_quantiser_matrix = %d\n", p->load_c hroma_non_intra_quantiser_matrix);
711 va_TraceMsg(idx,"\tintra_quantiser_matrix = %d\n", p->intra_quantiser_matrix );
712 va_TraceMsg(idx,"\tnon_intra_quantiser_matrix = %d\n", p->non_intra_quantise r_matrix);
713 va_TraceMsg(idx,"\tchroma_intra_quantiser_matrix = %d\n", p->chroma_intra_qu antiser_matrix);
714 va_TraceMsg(idx,"\tchroma_non_intra_quantiser_matrix = %d\n", p->chroma_non_ intra_quantiser_matrix);
715 va_TraceMsg(idx, NULL);
716
717 return;
718 }
719
720
721 static void va_TraceVASliceParameterBufferMPEG2(
722 VADisplay dpy,
723 VAContextID context,
724 VABufferID buffer,
725 VABufferType type,
726 unsigned int size,
727 unsigned int num_elements,
728 void *data)
729 {
730 VASliceParameterBufferMPEG2 *p=(VASliceParameterBufferMPEG2 *)data;
731
732 DPY2INDEX(dpy);
733
734 trace_context[idx].trace_slice_no++;
735
736 trace_context[idx].trace_slice_size = p->slice_data_size;
737
738 va_TraceMsg(idx,"VASliceParameterBufferMPEG2\n");
739
740 va_TraceMsg(idx,"\tslice_data_size = %d\n", p->slice_data_size);
741 va_TraceMsg(idx,"\tslice_data_offset = %d\n", p->slice_data_offset);
742 va_TraceMsg(idx,"\tslice_data_flag = %d\n", p->slice_data_flag);
743 va_TraceMsg(idx,"\tmacroblock_offset = %d\n", p->macroblock_offset);
744 va_TraceMsg(idx,"\tslice_horizontal_position = %d\n", p->slice_horizontal_po sition);
745 va_TraceMsg(idx,"\tslice_vertical_position = %d\n", p->slice_vertical_positi on);
746 va_TraceMsg(idx,"\tquantiser_scale_code = %d\n", p->quantiser_scale_code);
747 va_TraceMsg(idx,"\tintra_slice_flag = %d\n", p->intra_slice_flag);
748 va_TraceMsg(idx, NULL);
749
750 return;
751 }
752
753
754 static void va_TraceVAPictureParameterBufferMPEG4(
755 VADisplay dpy,
756 VAContextID context,
757 VABufferID buffer,
758 VABufferType type,
759 unsigned int size,
760 unsigned int num_elements,
761 void *data)
762 {
763 int i;
764 VAPictureParameterBufferMPEG4 *p=(VAPictureParameterBufferMPEG4 *)data;
765
766 DPY2INDEX(dpy);
767
768 va_TraceMsg(idx,"*VAPictureParameterBufferMPEG4\n");
769 va_TraceMsg(idx,"\tvop_width = %d\n", p->vop_width);
770 va_TraceMsg(idx,"\tvop_height = %d\n", p->vop_height);
771 va_TraceMsg(idx,"\tforward_reference_picture = %d\n", p->forward_reference_p icture);
772 va_TraceMsg(idx,"\tbackward_reference_picture = %d\n", p->backward_reference _picture);
773 va_TraceMsg(idx,"\tvol_fields value = %d\n", p->vol_fields.value);
774 va_TraceMsg(idx,"\tshort_video_header= %d\n", p->vol_fields.bits.short_video _header);
775 va_TraceMsg(idx,"\tchroma_format= %d\n", p->vol_fields.bits.chroma_format);
776 va_TraceMsg(idx,"\tinterlaced= %d\n", p->vol_fields.bits.interlaced);
777 va_TraceMsg(idx,"\tobmc_disable= %d\n", p->vol_fields.bits.obmc_disable);
778 va_TraceMsg(idx,"\tsprite_enable= %d\n", p->vol_fields.bits.sprite_enable);
779 va_TraceMsg(idx,"\tsprite_warping_accuracy= %d\n", p->vol_fields.bits.sprite _warping_accuracy);
780 va_TraceMsg(idx,"\tquant_type= %d\n", p->vol_fields.bits.quant_type);
781 va_TraceMsg(idx,"\tquarter_sample= %d\n", p->vol_fields.bits.quarter_sample) ;
782 va_TraceMsg(idx,"\tdata_partitioned= %d\n", p->vol_fields.bits.data_partitio ned);
783 va_TraceMsg(idx,"\treversible_vlc= %d\n", p->vol_fields.bits.reversible_vlc) ;
784 va_TraceMsg(idx,"\tresync_marker_disable= %d\n", p->vol_fields.bits.resync_m arker_disable);
785 va_TraceMsg(idx,"\tno_of_sprite_warping_points = %d\n", p->no_of_sprite_warp ing_points);
786 va_TraceMsg(idx,"\tsprite_trajectory_du =");
787 for(i=0;i<3;i++)
788 va_TraceMsg(idx,"\t%d", p->sprite_trajectory_du[i]);
789
790 va_TraceMsg(idx,"\n");
791 va_TraceMsg(idx,"\tsprite_trajectory_dv =");
792 for(i=0;i<3;i++)
793 va_TraceMsg(idx,"\t%d", p->sprite_trajectory_dv[i]);
794 va_TraceMsg(idx,"\n");
795 va_TraceMsg(idx,"\tvop_fields value = %d\n", p->vop_fields.value);
796 va_TraceMsg(idx,"\tvop_coding_type= %d\n", p->vop_fields.bits.vop_coding_typ e);
797 va_TraceMsg(idx,"\tbackward_reference_vop_coding_type= %d\n", p->vop_fields. bits.backward_reference_vop_coding_type);
798 va_TraceMsg(idx,"\tvop_rounding_type= %d\n", p->vop_fields.bits.vop_rounding _type);
799 va_TraceMsg(idx,"\tintra_dc_vlc_thr= %d\n", p->vop_fields.bits.intra_dc_vlc_ thr);
800 va_TraceMsg(idx,"\ttop_field_first= %d\n", p->vop_fields.bits.top_field_firs t);
801 va_TraceMsg(idx,"\talternate_vertical_scan_flag= %d\n", p->vop_fields.bits.a lternate_vertical_scan_flag);
802 va_TraceMsg(idx,"\tvop_fcode_forward = %d\n", p->vop_fcode_forward);
803 va_TraceMsg(idx,"\tvop_fcode_backward = %d\n", p->vop_fcode_backward);
804 va_TraceMsg(idx,"\tnum_gobs_in_vop = %d\n", p->num_gobs_in_vop);
805 va_TraceMsg(idx,"\tnum_macroblocks_in_gob = %d\n", p->num_macroblocks_in_gob );
806 va_TraceMsg(idx,"\tTRB = %d\n", p->TRB);
807 va_TraceMsg(idx,"\tTRD = %d\n", p->TRD);
808 va_TraceMsg(idx, NULL);
809
810 return;
811 }
812
813
814 static void va_TraceVAIQMatrixBufferMPEG4(
815 VADisplay dpy,
816 VAContextID context,
817 VABufferID buffer,
818 VABufferType type,
819 unsigned int size,
820 unsigned int num_elements,
821 void *data)
822 {
823 int i;
824 VAIQMatrixBufferMPEG4 *p=(VAIQMatrixBufferMPEG4 *)data;
825 DPY2INDEX(dpy);
826
827 va_TraceMsg(idx,"VAIQMatrixBufferMPEG4\n");
828
829 va_TraceMsg(idx,"\tload_intra_quant_mat = %d\n", p->load_intra_quant_mat);
830 va_TraceMsg(idx,"\tload_non_intra_quant_mat = %d\n", p->load_non_intra_quant _mat);
831 va_TraceMsg(idx,"\tintra_quant_mat =\n");
832 for(i=0;i<64;i++)
833 va_TraceMsg(idx,"\t\t%d\n", p->intra_quant_mat[i]);
834
835 va_TraceMsg(idx,"\tnon_intra_quant_mat =\n");
836 for(i=0;i<64;i++)
837 va_TraceMsg(idx,"\t\t%d\n", p->non_intra_quant_mat[i]);
838 va_TraceMsg(idx, NULL);
839
840 return;
841 }
842
843 static void va_TraceVAEncSequenceParameterBufferMPEG4(
844 VADisplay dpy,
845 VAContextID context,
846 VABufferID buffer,
847 VABufferType type,
848 unsigned int size,
849 unsigned int num_elements,
850 void *data)
851 {
852 VAEncSequenceParameterBufferMPEG4 *p = (VAEncSequenceParameterBufferMPEG4 *) data;
853 DPY2INDEX(dpy);
854
855 va_TraceMsg(idx, "VAEncSequenceParameterBufferMPEG4\n");
856
857 va_TraceMsg(idx, "\tprofile_and_level_indication = %d\n", p->profile_and_lev el_indication);
858 va_TraceMsg(idx, "\tintra_period = %d\n", p->intra_period);
859 va_TraceMsg(idx, "\tvideo_object_layer_width = %d\n", p->video_object_layer_ width);
860 va_TraceMsg(idx, "\tvideo_object_layer_height = %d\n", p->video_object_layer _height);
861 va_TraceMsg(idx, "\tvop_time_increment_resolution = %d\n", p->vop_time_incre ment_resolution);
862 va_TraceMsg(idx, "\tfixed_vop_rate = %d\n", p->fixed_vop_rate);
863 va_TraceMsg(idx, "\tfixed_vop_time_increment = %d\n", p->fixed_vop_time_incr ement);
864 va_TraceMsg(idx, "\tbits_per_second = %d\n", p->bits_per_second);
865 va_TraceMsg(idx, "\tframe_rate = %d\n", p->frame_rate);
866 va_TraceMsg(idx, "\tinitial_qp = %d\n", p->initial_qp);
867 va_TraceMsg(idx, "\tmin_qp = %d\n", p->min_qp);
868 va_TraceMsg(idx, NULL);
869
870 /* start a new sequce, coded log file can be truncated */
871 trace_context[idx].trace_sequence_start = 1;
872
873 return;
874 }
875
876 static void va_TraceVAEncPictureParameterBufferMPEG4(
877 VADisplay dpy,
878 VAContextID context,
879 VABufferID buffer,
880 VABufferType type,
881 unsigned int size,
882 unsigned int num_elements,
883 void *data)
884 {
885 VAEncPictureParameterBufferMPEG4 *p = (VAEncPictureParameterBufferMPEG4 *)da ta;
886 DPY2INDEX(dpy);
887
888 va_TraceMsg(idx, "VAEncPictureParameterBufferMPEG4\n");
889 va_TraceMsg(idx, "\treference_picture = 0x%08x\n", p->reference_picture);
890 va_TraceMsg(idx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_pict ure);
891 va_TraceMsg(idx, "\tcoded_buf = %08x\n", p->coded_buf);
892 va_TraceMsg(idx, "\tpicture_width = %d\n", p->picture_width);
893 va_TraceMsg(idx, "\tpicture_height = %d\n", p->picture_height);
894 va_TraceMsg(idx, "\tmodulo_time_base = %d\n", p->modulo_time_base);
895 va_TraceMsg(idx, "\tvop_time_increment = %d\n", p->vop_time_increment);
896 va_TraceMsg(idx, "\tpicture_type = %d\n", p->picture_type);
897 va_TraceMsg(idx, NULL);
898
899 trace_context[idx].trace_codedbuf = p->coded_buf;
900
901 return;
902 }
903
904
905 static void va_TraceVASliceParameterBufferMPEG4(
906 VADisplay dpy,
907 VAContextID context,
908 VABufferID buffer,
909 VABufferType type,
910 unsigned int size,
911 unsigned int num_elements,
912 void *data)
913 {
914 VASliceParameterBufferMPEG4 *p=(VASliceParameterBufferMPEG4 *)data;
915
916 DPY2INDEX(dpy);
917
918 trace_context[idx].trace_slice_no++;
919
920 trace_context[idx].trace_slice_size = p->slice_data_size;
921
922 va_TraceMsg(idx,"VASliceParameterBufferMPEG4\n");
923
924 va_TraceMsg(idx,"\tslice_data_size = %d\n", p->slice_data_size);
925 va_TraceMsg(idx,"\tslice_data_offset = %d\n", p->slice_data_offset);
926 va_TraceMsg(idx,"\tslice_data_flag = %d\n", p->slice_data_flag);
927 va_TraceMsg(idx,"\tmacroblock_offset = %d\n", p->macroblock_offset);
928 va_TraceMsg(idx,"\tmacroblock_number = %d\n", p->macroblock_number);
929 va_TraceMsg(idx,"\tquant_scale = %d\n", p->quant_scale);
930 va_TraceMsg(idx, NULL);
931
932 return;
933 }
934
935
936 static inline void va_TraceFlagIfNotZero(
937 int idx, /* in */
938 const char *name, /* in */
939 unsigned int flag /* in */
940 )
941 {
942 if (flag != 0) {
943 va_TraceMsg(idx, "%s = %x\n", name, flag);
944 }
945 }
946
947
948 static void va_TraceVAPictureParameterBufferH264(
949 VADisplay dpy,
950 VAContextID context,
951 VABufferID buffer,
952 VABufferType type,
953 unsigned int size,
954 unsigned int num_elements,
955 void *data)
956 {
957 int i;
958 VAPictureParameterBufferH264 *p = (VAPictureParameterBufferH264*)data;
959
960 DPY2INDEX(dpy);
961
962 va_TraceMsg(idx, "VAPictureParameterBufferH264\n");
963
964 va_TraceMsg(idx, "\tCurrPic.picture_id = 0x%08x\n", p->CurrPic.picture_id);
965 va_TraceMsg(idx, "\tCurrPic.frame_idx = %d\n", p->CurrPic.frame_idx);
966 va_TraceMsg(idx, "\tCurrPic.flags = %d\n", p->CurrPic.flags);
967 va_TraceMsg(idx, "\tCurrPic.TopFieldOrderCnt = %d\n", p->CurrPic.TopFieldOrd erCnt);
968 va_TraceMsg(idx, "\tCurrPic.BottomFieldOrderCnt = %d\n", p->CurrPic.BottomFi eldOrderCnt);
969
970 va_TraceMsg(idx, "\tReferenceFrames (TopFieldOrderCnt-BottomFieldOrderCnt-pi cture_id-frame_idx:\n");
971 for (i = 0; i < 16; i++)
972 {
973 if (p->ReferenceFrames[i].flags != VA_PICTURE_H264_INVALID) {
974 va_TraceMsg(idx, "\t\t%d-%d-0x%08x-%d\n",
975 p->ReferenceFrames[i].TopFieldOrderCnt,
976 p->ReferenceFrames[i].BottomFieldOrderCnt,
977 p->ReferenceFrames[i].picture_id,
978 p->ReferenceFrames[i].frame_idx);
979 } else
980 va_TraceMsg(idx, "\t\tinv-inv-inv-inv\n");
981 }
982 va_TraceMsg(idx, "\n");
983
984 va_TraceMsg(idx, "\tpicture_width_in_mbs_minus1 = %d\n", p->picture_width_in _mbs_minus1);
985 va_TraceMsg(idx, "\tpicture_height_in_mbs_minus1 = %d\n", p->picture_height_ in_mbs_minus1);
986 va_TraceMsg(idx, "\tbit_depth_luma_minus8 = %d\n", p->bit_depth_luma_minus8) ;
987 va_TraceMsg(idx, "\tbit_depth_chroma_minus8 = %d\n", p->bit_depth_chroma_min us8);
988 va_TraceMsg(idx, "\tnum_ref_frames = %d\n", p->num_ref_frames);
989 va_TraceMsg(idx, "\tseq fields = %d\n", p->seq_fields.value);
990 va_TraceMsg(idx, "\tchroma_format_idc = %d\n", p->seq_fields.bits.chroma_for mat_idc);
991 va_TraceMsg(idx, "\tresidual_colour_transform_flag = %d\n", p->seq_fields.bi ts.residual_colour_transform_flag);
992 va_TraceMsg(idx, "\tframe_mbs_only_flag = %d\n", p->seq_fields.bits.frame_mb s_only_flag);
993 va_TraceMsg(idx, "\tmb_adaptive_frame_field_flag = %d\n", p->seq_fields.bits .mb_adaptive_frame_field_flag);
994 va_TraceMsg(idx, "\tdirect_8x8_inference_flag = %d\n", p->seq_fields.bits.di rect_8x8_inference_flag);
995 va_TraceMsg(idx, "\tMinLumaBiPredSize8x8 = %d\n", p->seq_fields.bits.MinLuma BiPredSize8x8);
996 va_TraceMsg(idx, "\tnum_slice_groups_minus1 = %d\n", p->num_slice_groups_min us1);
997 va_TraceMsg(idx, "\tslice_group_map_type = %d\n", p->slice_group_map_type);
998 va_TraceMsg(idx, "\tslice_group_change_rate_minus1 = %d\n", p->slice_group_c hange_rate_minus1);
999 va_TraceMsg(idx, "\tpic_init_qp_minus26 = %d\n", p->pic_init_qp_minus26);
1000 va_TraceMsg(idx, "\tpic_init_qs_minus26 = %d\n", p->pic_init_qs_minus26);
1001 va_TraceMsg(idx, "\tchroma_qp_index_offset = %d\n", p->chroma_qp_index_offse t);
1002 va_TraceMsg(idx, "\tsecond_chroma_qp_index_offset = %d\n", p->second_chroma_ qp_index_offset);
1003 va_TraceMsg(idx, "\tpic_fields = 0x%03x\n", p->pic_fields.value);
1004 va_TraceFlagIfNotZero(idx, "\t\tentropy_coding_mode_flag", p->pic_fields.bit s.entropy_coding_mode_flag);
1005 va_TraceFlagIfNotZero(idx, "\t\tweighted_pred_flag", p->pic_fields.bits.weig hted_pred_flag);
1006 va_TraceFlagIfNotZero(idx, "\t\tweighted_bipred_idc", p->pic_fields.bits.wei ghted_bipred_idc);
1007 va_TraceFlagIfNotZero(idx, "\t\ttransform_8x8_mode_flag", p->pic_fields.bits .transform_8x8_mode_flag);
1008 va_TraceFlagIfNotZero(idx, "\t\tfield_pic_flag", p->pic_fields.bits.field_pi c_flag);
1009 va_TraceFlagIfNotZero(idx, "\t\tconstrained_intra_pred_flag", p->pic_fields. bits.constrained_intra_pred_flag);
1010 va_TraceFlagIfNotZero(idx, "\t\tpic_order_present_flag", p->pic_fields.bits. pic_order_present_flag);
1011 va_TraceFlagIfNotZero(idx, "\t\tdeblocking_filter_control_present_flag", p-> pic_fields.bits.deblocking_filter_control_present_flag);
1012 va_TraceFlagIfNotZero(idx, "\t\tredundant_pic_cnt_present_flag", p->pic_fiel ds.bits.redundant_pic_cnt_present_flag);
1013 va_TraceFlagIfNotZero(idx, "\t\treference_pic_flag", p->pic_fields.bits.refe rence_pic_flag);
1014 va_TraceMsg(idx, "\tframe_num = %d\n", p->frame_num);
1015 va_TraceMsg(idx, NULL);
1016
1017 return;
1018 }
1019
1020 static void va_TraceVASliceParameterBufferH264(
1021 VADisplay dpy,
1022 VAContextID context,
1023 VABufferID buffer,
1024 VABufferType type,
1025 unsigned int size,
1026 unsigned int num_elements,
1027 void *data)
1028 {
1029 int i;
1030 VASliceParameterBufferH264* p = (VASliceParameterBufferH264*)data;
1031 DPY2INDEX(dpy);
1032
1033 trace_context[idx].trace_slice_no++;
1034 trace_context[idx].trace_slice_size = p->slice_data_size;
1035
1036 va_TraceMsg(idx, "VASliceParameterBufferH264\n");
1037 va_TraceMsg(idx, "\tslice_data_size = %d\n", p->slice_data_size);
1038 va_TraceMsg(idx, "\tslice_data_offset = %d\n", p->slice_data_offset);
1039 va_TraceMsg(idx, "\tslice_data_flag = %d\n", p->slice_data_flag);
1040 va_TraceMsg(idx, "\tslice_data_bit_offset = %d\n", p->slice_data_bit_offset) ;
1041 va_TraceMsg(idx, "\tfirst_mb_in_slice = %d\n", p->first_mb_in_slice);
1042 va_TraceMsg(idx, "\tslice_type = %d\n", p->slice_type);
1043 va_TraceMsg(idx, "\tdirect_spatial_mv_pred_flag = %d\n", p->direct_spatial_m v_pred_flag);
1044 va_TraceMsg(idx, "\tnum_ref_idx_l0_active_minus1 = %d\n", p->num_ref_idx_l0_ active_minus1);
1045 va_TraceMsg(idx, "\tnum_ref_idx_l1_active_minus1 = %d\n", p->num_ref_idx_l1_ active_minus1);
1046 va_TraceMsg(idx, "\tcabac_init_idc = %d\n", p->cabac_init_idc);
1047 va_TraceMsg(idx, "\tslice_qp_delta = %d\n", p->slice_qp_delta);
1048 va_TraceMsg(idx, "\tdisable_deblocking_filter_idc = %d\n", p->disable_debloc king_filter_idc);
1049 va_TraceMsg(idx, "\tslice_alpha_c0_offset_div2 = %d\n", p->slice_alpha_c0_of fset_div2);
1050 va_TraceMsg(idx, "\tslice_beta_offset_div2 = %d\n", p->slice_beta_offset_div 2);
1051
1052 if (p->slice_type == 0 || p->slice_type == 1) {
1053 va_TraceMsg(idx, "\tRefPicList0 =");
1054 for (i = 0; i < p->num_ref_idx_l0_active_minus1 + 1; i++) {
1055 va_TraceMsg(idx, "%d-%d-0x%08x-%d\n", p->RefPicList0[i].TopFieldOrde rCnt, p->RefPicList0[i].BottomFieldOrderCnt, p->RefPicList0[i].picture_id, p->Re fPicList0[i].frame_idx);
1056 }
1057 if (p->slice_type == 1) {
1058 va_TraceMsg(idx, "\tRefPicList1 =");
1059 for (i = 0; i < p->num_ref_idx_l1_active_minus1 + 1; i++)
1060 {
1061 va_TraceMsg(idx, "%d-%d-0x%08x-%d\n", p->RefPicList1[i].TopField OrderCnt, p->RefPicList1[i].BottomFieldOrderCnt, p->RefPicList1[i].picture_id, p ->RefPicList1[i].frame_idx);
1062 }
1063 }
1064 }
1065
1066 va_TraceMsg(idx, "\tluma_log2_weight_denom = %d\n", p->luma_log2_weight_deno m);
1067 va_TraceMsg(idx, "\tchroma_log2_weight_denom = %d\n", p->chroma_log2_weight_ denom);
1068 va_TraceMsg(idx, "\tluma_weight_l0_flag = %d\n", p->luma_weight_l0_flag);
1069 if (p->luma_weight_l0_flag) {
1070 for (i = 0; i <= p->num_ref_idx_l0_active_minus1; i++) {
1071 va_TraceMsg(idx, "\t%d ", p->luma_weight_l0[i]);
1072 va_TraceMsg(idx, "\t%d ", p->luma_offset_l0[i]);
1073 }
1074 }
1075
1076 va_TraceMsg(idx, "\tchroma_weight_l0_flag = %d\n", p->chroma_weight_l0_flag) ;
1077 if (p->chroma_weight_l0_flag) {
1078 for (i = 0; i <= p->num_ref_idx_l0_active_minus1; i++) {
1079 va_TraceMsg(idx, "\t\t%d ", p->chroma_weight_l0[i][0]);
1080 va_TraceMsg(idx, "\t\t%d ", p->chroma_offset_l0[i][0]);
1081 va_TraceMsg(idx, "\t\t%d ", p->chroma_weight_l0[i][1]);
1082 va_TraceMsg(idx, "\t\t%d ", p->chroma_offset_l0[i][1]);
1083 }
1084 }
1085
1086 va_TraceMsg(idx, "\tluma_weight_l1_flag = %d\n", p->luma_weight_l1_flag);
1087 if (p->luma_weight_l1_flag) {
1088 for (i = 0; i <= p->num_ref_idx_l1_active_minus1; i++) {
1089 va_TraceMsg(idx, "\t\t%d ", p->luma_weight_l1[i]);
1090 va_TraceMsg(idx, "\t\t%d ", p->luma_offset_l1[i]);
1091 }
1092 }
1093
1094 va_TraceMsg(idx, "\tchroma_weight_l1_flag = %d\n", p->chroma_weight_l1_flag) ;
1095 if (p->chroma_weight_l1_flag) {
1096 for (i = 0; i <= p->num_ref_idx_l1_active_minus1; i++) {
1097 va_TraceMsg(idx, "\t\t%d ", p->chroma_weight_l1[i][0]);
1098 va_TraceMsg(idx, "\t\t%d ", p->chroma_offset_l1[i][0]);
1099 va_TraceMsg(idx, "\t\t%d ", p->chroma_weight_l1[i][1]);
1100 va_TraceMsg(idx, "\t\t%d ", p->chroma_offset_l1[i][1]);
1101 }
1102 va_TraceMsg(idx, "\n");
1103 }
1104 va_TraceMsg(idx, NULL);
1105 }
1106
1107 static void va_TraceVAIQMatrixBufferH264(
1108 VADisplay dpy,
1109 VAContextID context,
1110 VABufferID buffer,
1111 VABufferType type,
1112 unsigned int size,
1113 unsigned int num_elements,
1114 void *data
1115 )
1116 {
1117 int i, j;
1118 VAIQMatrixBufferH264* p = (VAIQMatrixBufferH264* )data;
1119
1120 DPY2INDEX(dpy);
1121
1122 va_TraceMsg(idx, "VAIQMatrixBufferH264\n");
1123
1124 va_TraceMsg(idx, "\tScalingList4x4[6][16]=\n");
1125 for (i = 0; i < 6; i++) {
1126 for (j = 0; j < 16; j++) {
1127 va_TraceMsg(idx, "\t%d\t", p->ScalingList4x4[i][j]);
1128 if ((j + 1) % 8 == 0)
1129 va_TraceMsg(idx, "\n");
1130 }
1131 }
1132
1133 va_TraceMsg(idx, "\tScalingList8x8[2][64]=\n");
1134 for (i = 0; i < 2; i++) {
1135 for (j = 0; j < 64; j++) {
1136 va_TraceMsg(idx, "\t%d", p->ScalingList8x8[i][j]);
1137 if ((j + 1) % 8 == 0)
1138 va_TraceMsg(idx, "\n");
1139 }
1140 }
1141
1142 va_TraceMsg(idx, NULL);
1143 }
1144
1145 static void va_TraceVAEncSequenceParameterBufferH264(
1146 VADisplay dpy,
1147 VAContextID context,
1148 VABufferID buffer,
1149 VABufferType type,
1150 unsigned int size,
1151 unsigned int num_elements,
1152 void *data)
1153 {
1154 VAEncSequenceParameterBufferH264 *p = (VAEncSequenceParameterBufferH264 *)da ta;
1155 DPY2INDEX(dpy);
1156
1157 va_TraceMsg(idx, "VAEncSequenceParameterBufferH264\n");
1158
1159 va_TraceMsg(idx, "\tseq_parameter_set_id = %d\n", p->seq_parameter_set_id);
1160 va_TraceMsg(idx, "\tlevel_idc = %d\n", p->level_idc);
1161 va_TraceMsg(idx, "\tintra_period = %d\n", p->intra_period);
1162 va_TraceMsg(idx, "\tintra_idr_period = %d\n", p->intra_idr_period);
1163 va_TraceMsg(idx, "\tmax_num_ref_frames = %d\n", p->max_num_ref_frames);
1164 va_TraceMsg(idx, "\tpicture_width_in_mbs = %d\n", p->picture_width_in_mbs);
1165 va_TraceMsg(idx, "\tpicture_height_in_mbs = %d\n", p->picture_height_in_mbs) ;
1166 va_TraceMsg(idx, "\tbits_per_second = %d\n", p->bits_per_second);
1167 va_TraceMsg(idx, "\tframe_rate = %d\n", p->frame_rate);
1168 va_TraceMsg(idx, "\tinitial_qp = %d\n", p->initial_qp);
1169 va_TraceMsg(idx, "\tmin_qp = %d\n", p->min_qp);
1170 va_TraceMsg(idx, "\tbasic_unit_size = %d\n", p->basic_unit_size);
1171 va_TraceMsg(idx, "\tvui_flag = %d\n", p->vui_flag);
1172 va_TraceMsg(idx, NULL);
1173
1174 /* start a new sequce, coded log file can be truncated */
1175 trace_context[idx].trace_sequence_start = 1;
1176
1177 return;
1178 }
1179
1180 static void va_TraceVAEncPictureParameterBufferH264(
1181 VADisplay dpy,
1182 VAContextID context,
1183 VABufferID buffer,
1184 VABufferType type,
1185 unsigned int size,
1186 unsigned int num_elements,
1187 void *data)
1188 {
1189 VAEncPictureParameterBufferH264 *p = (VAEncPictureParameterBufferH264 *)data ;
1190 DPY2INDEX(dpy);
1191
1192 va_TraceMsg(idx, "VAEncPictureParameterBufferH264\n");
1193 va_TraceMsg(idx, "\treference_picture = 0x%08x\n", p->reference_picture);
1194 va_TraceMsg(idx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_pict ure);
1195 va_TraceMsg(idx, "\tcoded_buf = %08x\n", p->coded_buf);
1196 va_TraceMsg(idx, "\tpicture_width = %d\n", p->picture_width);
1197 va_TraceMsg(idx, "\tpicture_height = %d\n", p->picture_height);
1198 va_TraceMsg(idx, "\tlast_picture = 0x%08x\n", p->last_picture);
1199 va_TraceMsg(idx, NULL);
1200
1201 trace_context[idx].trace_codedbuf = p->coded_buf;
1202
1203 return;
1204 }
1205
1206
1207 static void va_TraceVAEncSliceParameterBuffer(
1208 VADisplay dpy,
1209 VAContextID context,
1210 VABufferID buffer,
1211 VABufferType type,
1212 unsigned int size,
1213 unsigned int num_elements,
1214 void *data)
1215 {
1216 VAEncSliceParameterBuffer* p = (VAEncSliceParameterBuffer*)data;
1217 DPY2INDEX(dpy);
1218
1219 va_TraceMsg(idx, "VAEncSliceParameterBuffer\n");
1220
1221 va_TraceMsg(idx, "\tstart_row_number = %d\n", p->start_row_number);
1222 va_TraceMsg(idx, "\tslice_height = %d\n", p->slice_height);
1223 va_TraceMsg(idx, "\tslice_flags.is_intra = %d\n", p->slice_flags.bits.is_int ra);
1224 va_TraceMsg(idx, "\tslice_flags.disable_deblocking_filter_idc = %d\n", p->sl ice_flags.bits.disable_deblocking_filter_idc);
1225 va_TraceMsg(idx, "\tslice_flags.uses_long_term_ref = %d\n", p->slice_flags.b its.uses_long_term_ref);
1226 va_TraceMsg(idx, "\tslice_flags.is_long_term_ref = %d\n", p->slice_flags.bit s.is_long_term_ref);
1227 va_TraceMsg(idx, NULL);
1228
1229 return;
1230 }
1231
1232 static void va_TraceVAEncMiscParameterBuffer(
1233 VADisplay dpy,
1234 VAContextID context,
1235 VABufferID buffer,
1236 VABufferType type,
1237 unsigned int size,
1238 unsigned int num_elements,
1239 void *data)
1240 {
1241 VAEncMiscParameterBuffer* tmp = (VAEncMiscParameterBuffer*)data;
1242 DPY2INDEX(dpy);
1243
1244 switch (tmp->type) {
1245 case VAEncMiscParameterTypeFrameRate:
1246 {
1247 VAEncMiscParameterFrameRate *p = (VAEncMiscParameterFrameRate *)tmp->dat a;
1248 va_TraceMsg(idx, "VAEncMiscParameterFrameRate\n");
1249 va_TraceMsg(idx, "\tframerate = %d\n", p->framerate);
1250
1251 break;
1252 }
1253 case VAEncMiscParameterTypeRateControl:
1254 {
1255 VAEncMiscParameterRateControl *p = (VAEncMiscParameterRateControl *)tmp- >data;
1256
1257 va_TraceMsg(idx, "VAEncMiscParameterRateControl\n");
1258 va_TraceMsg(idx, "\tbits_per_second = %d\n", p->bits_per_second);
1259 va_TraceMsg(idx, "\twindow_size = %d\n", p->window_size);
1260 va_TraceMsg(idx, "\tinitial_qp = %d\n", p->initial_qp);
1261 va_TraceMsg(idx, "\tmin_qp = %d\n", p->min_qp);
1262 break;
1263 }
1264 case VAEncMiscParameterTypeMaxSliceSize:
1265 {
1266 VAEncMiscParameterMaxSliceSize *p = (VAEncMiscParameterMaxSliceSize *)tm p->data;
1267
1268 va_TraceMsg(idx, "VAEncMiscParameterTypeMaxSliceSize\n");
1269 va_TraceMsg(idx, "\tmax_slice_size = %d\n", p->max_slice_size);
1270 break;
1271 }
1272 case VAEncMiscParameterTypeAIR:
1273 {
1274 VAEncMiscParameterAIR *p = (VAEncMiscParameterAIR *)tmp->data;
1275
1276 va_TraceMsg(idx, "VAEncMiscParameterAIR\n");
1277 va_TraceMsg(idx, "\tair_num_mbs = %d\n", p->air_num_mbs);
1278 va_TraceMsg(idx, "\tair_threshold = %d\n", p->air_threshold);
1279 va_TraceMsg(idx, "\tair_auto = %d\n", p->air_auto);
1280 break;
1281 }
1282 default:
1283 va_TraceMsg(idx, "invalid VAEncMiscParameterBuffer type = %d\n", tmp->ty pe);
1284 break;
1285 }
1286 va_TraceMsg(idx, NULL);
1287
1288 return;
1289 }
1290
1291
1292 static void va_TraceVAPictureParameterBufferVC1(
1293 VADisplay dpy,
1294 VAContextID context,
1295 VABufferID buffer,
1296 VABufferType type,
1297 unsigned int size,
1298 unsigned int num_elements,
1299 void *data
1300 )
1301 {
1302 VAPictureParameterBufferVC1* p = (VAPictureParameterBufferVC1*)data;
1303 DPY2INDEX(dpy);
1304
1305 va_TraceMsg(idx, "VAPictureParameterBufferVC1\n");
1306
1307 va_TraceMsg(idx, "\tforward_reference_picture = 0x%08x\n", p->forward_refere nce_picture);
1308 va_TraceMsg(idx, "\tbackward_reference_picture = 0x%08x\n", p->backward_refe rence_picture);
1309 va_TraceMsg(idx, "\tinloop_decoded_picture = 0x%08x\n", p->inloop_decoded_pi cture);
1310
1311 va_TraceMsg(idx, "\tpulldown = %d\n", p->sequence_fields.bits.pulldown);
1312 va_TraceMsg(idx, "\tinterlace = %d\n", p->sequence_fields.bits.interlace);
1313 va_TraceMsg(idx, "\ttfcntrflag = %d\n", p->sequence_fields.bits.tfcntrflag);
1314 va_TraceMsg(idx, "\tfinterpflag = %d\n", p->sequence_fields.bits.finterpflag );
1315 va_TraceMsg(idx, "\tpsf = %d\n", p->sequence_fields.bits.psf);
1316 va_TraceMsg(idx, "\tmultires = %d\n", p->sequence_fields.bits.multires);
1317 va_TraceMsg(idx, "\toverlap = %d\n", p->sequence_fields.bits.overlap);
1318 va_TraceMsg(idx, "\tsyncmarker = %d\n", p->sequence_fields.bits.syncmarker);
1319 va_TraceMsg(idx, "\trangered = %d\n", p->sequence_fields.bits.rangered);
1320 va_TraceMsg(idx, "\tmax_b_frames = %d\n", p->sequence_fields.bits.max_b_fram es);
1321 va_TraceMsg(idx, "\tprofile = %d\n", p->sequence_fields.bits.profile);
1322 va_TraceMsg(idx, "\tcoded_width = %d\n", p->coded_width);
1323 va_TraceMsg(idx, "\tcoded_height = %d\n", p->coded_height);
1324 va_TraceMsg(idx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_e ntry);
1325 va_TraceMsg(idx, "\tbroken_link = %d\n", p->entrypoint_fields.bits.broken_li nk);
1326 va_TraceMsg(idx, "\tclosed_entry = %d\n", p->entrypoint_fields.bits.closed_e ntry);
1327 va_TraceMsg(idx, "\tpanscan_flag = %d\n", p->entrypoint_fields.bits.panscan_ flag);
1328 va_TraceMsg(idx, "\tloopfilter = %d\n", p->entrypoint_fields.bits.loopfilter );
1329 va_TraceMsg(idx, "\tconditional_overlap_flag = %d\n", p->conditional_overlap _flag);
1330 va_TraceMsg(idx, "\tfast_uvmc_flag = %d\n", p->fast_uvmc_flag);
1331 va_TraceMsg(idx, "\trange_mapping_luma_flag = %d\n", p->range_mapping_fields .bits.luma_flag);
1332 va_TraceMsg(idx, "\trange_mapping_luma = %d\n", p->range_mapping_fields.bits .luma);
1333 va_TraceMsg(idx, "\trange_mapping_chroma_flag = %d\n", p->range_mapping_fiel ds.bits.chroma_flag);
1334 va_TraceMsg(idx, "\trange_mapping_chroma = %d\n", p->range_mapping_fields.bi ts.chroma);
1335 va_TraceMsg(idx, "\tb_picture_fraction = %d\n", p->b_picture_fraction);
1336 va_TraceMsg(idx, "\tcbp_table = %d\n", p->cbp_table);
1337 va_TraceMsg(idx, "\tmb_mode_table = %d\n", p->mb_mode_table);
1338 va_TraceMsg(idx, "\trange_reduction_frame = %d\n", p->range_reduction_frame) ;
1339 va_TraceMsg(idx, "\trounding_control = %d\n", p->rounding_control);
1340 va_TraceMsg(idx, "\tpost_processing = %d\n", p->post_processing);
1341 va_TraceMsg(idx, "\tpicture_resolution_index = %d\n", p->picture_resolution_ index);
1342 va_TraceMsg(idx, "\tluma_scale = %d\n", p->luma_scale);
1343 va_TraceMsg(idx, "\tluma_shift = %d\n", p->luma_shift);
1344 va_TraceMsg(idx, "\tpicture_type = %d\n", p->picture_fields.bits.picture_typ e);
1345 va_TraceMsg(idx, "\tframe_coding_mode = %d\n", p->picture_fields.bits.frame_ coding_mode);
1346 va_TraceMsg(idx, "\ttop_field_first = %d\n", p->picture_fields.bits.top_fiel d_first);
1347 va_TraceMsg(idx, "\tis_first_field = %d\n", p->picture_fields.bits.is_first_ field);
1348 va_TraceMsg(idx, "\tintensity_compensation = %d\n", p->picture_fields.bits.i ntensity_compensation);
1349 va_TraceMsg(idx, "\tmv_type_mb = %d\n", p->raw_coding.flags.mv_type_mb);
1350 va_TraceMsg(idx, "\tdirect_mb = %d\n", p->raw_coding.flags.direct_mb);
1351 va_TraceMsg(idx, "\tskip_mb = %d\n", p->raw_coding.flags.skip_mb);
1352 va_TraceMsg(idx, "\tfield_tx = %d\n", p->raw_coding.flags.field_tx);
1353 va_TraceMsg(idx, "\tforward_mb = %d\n", p->raw_coding.flags.forward_mb);
1354 va_TraceMsg(idx, "\tac_pred = %d\n", p->raw_coding.flags.ac_pred);
1355 va_TraceMsg(idx, "\toverflags = %d\n", p->raw_coding.flags.overflags);
1356 va_TraceMsg(idx, "\tbp_mv_type_mb = %d\n", p->bitplane_present.flags.bp_mv_t ype_mb);
1357 va_TraceMsg(idx, "\tbp_direct_mb = %d\n", p->bitplane_present.flags.bp_direc t_mb);
1358 va_TraceMsg(idx, "\tbp_skip_mb = %d\n", p->bitplane_present.flags.bp_skip_mb );
1359 va_TraceMsg(idx, "\tbp_field_tx = %d\n", p->bitplane_present.flags.bp_field_ tx);
1360 va_TraceMsg(idx, "\tbp_forward_mb = %d\n", p->bitplane_present.flags.bp_forw ard_mb);
1361 va_TraceMsg(idx, "\tbp_ac_pred = %d\n", p->bitplane_present.flags.bp_ac_pred );
1362 va_TraceMsg(idx, "\tbp_overflags = %d\n", p->bitplane_present.flags.bp_overf lags);
1363 va_TraceMsg(idx, "\treference_distance_flag = %d\n", p->reference_fields.bit s.reference_distance_flag);
1364 va_TraceMsg(idx, "\treference_distance = %d\n", p->reference_fields.bits.ref erence_distance);
1365 va_TraceMsg(idx, "\tnum_reference_pictures = %d\n", p->reference_fields.bits .num_reference_pictures);
1366 va_TraceMsg(idx, "\treference_field_pic_indicator = %d\n", p->reference_fiel ds.bits.reference_field_pic_indicator);
1367 va_TraceMsg(idx, "\tmv_mode = %d\n", p->mv_fields.bits.mv_mode);
1368 va_TraceMsg(idx, "\tmv_mode2 = %d\n", p->mv_fields.bits.mv_mode2);
1369 va_TraceMsg(idx, "\tmv_table = %d\n", p->mv_fields.bits.mv_table);
1370 va_TraceMsg(idx, "\ttwo_mv_block_pattern_table = %d\n", p->mv_fields.bits.tw o_mv_block_pattern_table);
1371 va_TraceMsg(idx, "\tfour_mv_switch = %d\n", p->mv_fields.bits.four_mv_switch );
1372 va_TraceMsg(idx, "\tfour_mv_block_pattern_table = %d\n", p->mv_fields.bits.f our_mv_block_pattern_table);
1373 va_TraceMsg(idx, "\textended_mv_flag = %d\n", p->mv_fields.bits.extended_mv_ flag);
1374 va_TraceMsg(idx, "\textended_mv_range = %d\n", p->mv_fields.bits.extended_mv _range);
1375 va_TraceMsg(idx, "\textended_dmv_flag = %d\n", p->mv_fields.bits.extended_dm v_flag);
1376 va_TraceMsg(idx, "\textended_dmv_range = %d\n", p->mv_fields.bits.extended_d mv_range);
1377 va_TraceMsg(idx, "\tdquant = %d\n", p->pic_quantizer_fields.bits.dquant);
1378 va_TraceMsg(idx, "\tquantizer = %d\n", p->pic_quantizer_fields.bits.quantize r);
1379 va_TraceMsg(idx, "\thalf_qp = %d\n", p->pic_quantizer_fields.bits.half_qp);
1380 va_TraceMsg(idx, "\tpic_quantizer_scale = %d\n", p->pic_quantizer_fields.bit s.pic_quantizer_scale);
1381 va_TraceMsg(idx, "\tpic_quantizer_type = %d\n", p->pic_quantizer_fields.bits .pic_quantizer_type);
1382 va_TraceMsg(idx, "\tdq_frame = %d\n", p->pic_quantizer_fields.bits.dq_frame) ;
1383 va_TraceMsg(idx, "\tdq_profile = %d\n", p->pic_quantizer_fields.bits.dq_prof ile);
1384 va_TraceMsg(idx, "\tdq_sb_edge = %d\n", p->pic_quantizer_fields.bits.dq_sb_e dge);
1385 va_TraceMsg(idx, "\tdq_db_edge = %d\n", p->pic_quantizer_fields.bits.dq_db_e dge);
1386 va_TraceMsg(idx, "\tdq_binary_level = %d\n", p->pic_quantizer_fields.bits.dq _binary_level);
1387 va_TraceMsg(idx, "\talt_pic_quantizer = %d\n", p->pic_quantizer_fields.bits. alt_pic_quantizer);
1388 va_TraceMsg(idx, "\tvariable_sized_transform_flag = %d\n", p->transform_fiel ds.bits.variable_sized_transform_flag);
1389 va_TraceMsg(idx, "\tmb_level_transform_type_flag = %d\n", p->transform_field s.bits.mb_level_transform_type_flag);
1390 va_TraceMsg(idx, "\tframe_level_transform_type = %d\n", p->transform_fields. bits.frame_level_transform_type);
1391 va_TraceMsg(idx, "\ttransform_ac_codingset_idx1 = %d\n", p->transform_fields .bits.transform_ac_codingset_idx1);
1392 va_TraceMsg(idx, "\ttransform_ac_codingset_idx2 = %d\n", p->transform_fields .bits.transform_ac_codingset_idx2);
1393 va_TraceMsg(idx, "\tintra_transform_dc_table = %d\n", p->transform_fields.bi ts.intra_transform_dc_table);
1394 va_TraceMsg(idx, NULL);
1395 }
1396
1397 static void va_TraceVASliceParameterBufferVC1(
1398 VADisplay dpy,
1399 VAContextID context,
1400 VABufferID buffer,
1401 VABufferType type,
1402 unsigned int size,
1403 unsigned int num_elements,
1404 void* data
1405 )
1406 {
1407 VASliceParameterBufferVC1 *p = (VASliceParameterBufferVC1*)data;
1408 DPY2INDEX(dpy);
1409
1410 trace_context[idx].trace_slice_no++;
1411 trace_context[idx].trace_slice_size = p->slice_data_size;
1412
1413 va_TraceMsg(idx, "VASliceParameterBufferVC1\n");
1414 va_TraceMsg(idx, "\tslice_data_size = %d\n", p->slice_data_size);
1415 va_TraceMsg(idx, "\tslice_data_offset = %d\n", p->slice_data_offset);
1416 va_TraceMsg(idx, "\tslice_data_flag = %d\n", p->slice_data_flag);
1417 va_TraceMsg(idx, "\tmacroblock_offset = %d\n", p->macroblock_offset);
1418 va_TraceMsg(idx, "\tslice_vertical_position = %d\n", p->slice_vertical_posit ion);
1419 va_TraceMsg(idx, NULL);
1420 }
1421
1422 void va_TraceBeginPicture(
1423 VADisplay dpy,
1424 VAContextID context,
1425 VASurfaceID render_target
1426 )
1427 {
1428 DPY2INDEX(dpy);
1429
1430 TRACE_FUNCNAME(idx);
1431
1432 va_TraceMsg(idx, "\tcontext = 0x%08x\n", context);
1433 va_TraceMsg(idx, "\trender_targets = 0x%08x\n", render_target);
1434 va_TraceMsg(idx, "\tframe_count = #%d\n", trace_context[idx].trace_frame_no );
1435 va_TraceMsg(idx, NULL);
1436
1437 trace_context[idx].trace_rendertarget = render_target; /* for surface data d ump after vaEndPicture */
1438
1439 trace_context[idx].trace_frame_no++;
1440 trace_context[idx].trace_slice_no = 0;
1441 }
1442
1443 static void va_TraceMPEG2Buf(
1444 VADisplay dpy,
1445 VAContextID context,
1446 VABufferID buffer,
1447 VABufferType type,
1448 unsigned int size,
1449 unsigned int num_elements,
1450 void *pbuf
1451 )
1452 {
1453 switch (type) {
1454 case VAPictureParameterBufferType:
1455 va_TraceVAPictureParameterBufferMPEG2(dpy, context, buffer, type, size, num_elements, pbuf);
1456 break;
1457 case VAIQMatrixBufferType:
1458 va_TraceVAIQMatrixBufferMPEG2(dpy, context, buffer, type, size, num_elem ents, pbuf);
1459 break;
1460 case VABitPlaneBufferType:
1461 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1462 break;
1463 case VASliceGroupMapBufferType:
1464 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1465 break;
1466 case VASliceParameterBufferType:
1467 va_TraceVASliceParameterBufferMPEG2(dpy, context, buffer, type, size, nu m_elements, pbuf);
1468 break;
1469 case VASliceDataBufferType:
1470 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1471 break;
1472 case VAMacroblockParameterBufferType:
1473 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1474 break;
1475 case VAResidualDataBufferType:
1476 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1477 break;
1478 case VADeblockingParameterBufferType:
1479 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1480 break;
1481 case VAImageBufferType:
1482 break;
1483 case VAProtectedSliceDataBufferType:
1484 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1485 break;
1486 case VAEncCodedBufferType:
1487 break;
1488 case VAEncSequenceParameterBufferType:
1489 break;
1490 case VAEncPictureParameterBufferType:
1491 break;
1492 case VAEncSliceParameterBufferType:
1493 break;
1494 case VAEncH264VUIBufferType:
1495 break;
1496 case VAEncH264SEIBufferType:
1497 break;
1498 default:
1499 break;
1500 }
1501 }
1502
1503 static void va_TraceVAEncSequenceParameterBufferH263(
1504 VADisplay dpy,
1505 VAContextID context,
1506 VABufferID buffer,
1507 VABufferType type,
1508 unsigned int size,
1509 unsigned int num_elements,
1510 void *data)
1511 {
1512 VAEncSequenceParameterBufferH263 *p = (VAEncSequenceParameterBufferH263 *)da ta;
1513 DPY2INDEX(dpy);
1514
1515 va_TraceMsg(idx, "VAEncSequenceParameterBufferH263\n");
1516
1517 va_TraceMsg(idx, "\tintra_period = %d\n", p->intra_period);
1518 va_TraceMsg(idx, "\tbits_per_second = %d\n", p->bits_per_second);
1519 va_TraceMsg(idx, "\tframe_rate = %d\n", p->frame_rate);
1520 va_TraceMsg(idx, "\tinitial_qp = %d\n", p->initial_qp);
1521 va_TraceMsg(idx, "\tmin_qp = %d\n", p->min_qp);
1522 va_TraceMsg(idx, NULL);
1523
1524 /* start a new sequce, coded log file can be truncated */
1525 trace_context[idx].trace_sequence_start = 1;
1526
1527 return;
1528 }
1529
1530
1531 static void va_TraceVAEncPictureParameterBufferH263(
1532 VADisplay dpy,
1533 VAContextID context,
1534 VABufferID buffer,
1535 VABufferType type,
1536 unsigned int size,
1537 unsigned int num_elements,
1538 void *data)
1539 {
1540 VAEncPictureParameterBufferH263 *p = (VAEncPictureParameterBufferH263 *)data ;
1541 DPY2INDEX(dpy);
1542
1543 va_TraceMsg(idx, "VAEncPictureParameterBufferH263\n");
1544 va_TraceMsg(idx, "\treference_picture = 0x%08x\n", p->reference_picture);
1545 va_TraceMsg(idx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_pict ure);
1546 va_TraceMsg(idx, "\tcoded_buf = %08x\n", p->coded_buf);
1547 va_TraceMsg(idx, "\tpicture_width = %d\n", p->picture_width);
1548 va_TraceMsg(idx, "\tpicture_height = %d\n", p->picture_height);
1549 va_TraceMsg(idx, "\tpicture_type = 0x%08x\n", p->picture_type);
1550 va_TraceMsg(idx, NULL);
1551
1552 trace_context[idx].trace_codedbuf = p->coded_buf;
1553
1554 return;
1555 }
1556
1557 static void va_TraceVAEncPictureParameterBufferJPEG(
1558 VADisplay dpy,
1559 VAContextID context,
1560 VABufferID buffer,
1561 VABufferType type,
1562 unsigned int size,
1563 unsigned int num_elements,
1564 void *data)
1565 {
1566 VAEncPictureParameterBufferJPEG *p = (VAEncPictureParameterBufferJPEG *)data ;
1567 DPY2INDEX(dpy);
1568
1569 va_TraceMsg(idx, "VAEncPictureParameterBufferJPEG\n");
1570 va_TraceMsg(idx, "\treconstructed_picture = 0x%08x\n", p->reconstructed_pict ure);
1571 va_TraceMsg(idx, "\tcoded_buf = %08x\n", p->coded_buf);
1572 va_TraceMsg(idx, "\tpicture_width = %d\n", p->picture_width);
1573 va_TraceMsg(idx, "\tpicture_height = %d\n", p->picture_height);
1574 va_TraceMsg(idx, NULL);
1575
1576 trace_context[idx].trace_codedbuf = p->coded_buf;
1577
1578 return;
1579 }
1580
1581 static void va_TraceVAEncQMatrixBufferJPEG(
1582 VADisplay dpy,
1583 VAContextID context,
1584 VABufferID buffer,
1585 VABufferType type,
1586 unsigned int size,
1587 unsigned int num_elements,
1588 void *data)
1589 {
1590 VAQMatrixBufferJPEG *p = (VAQMatrixBufferJPEG *)data;
1591 DPY2INDEX(dpy);
1592
1593 va_TraceMsg(idx, "VAQMatrixBufferJPEG\n");
1594 va_TraceMsg(idx, "\tload_lum_quantiser_matrix = %d", p->load_lum_quantiser_m atrix);
1595 if (p->load_lum_quantiser_matrix) {
1596 int i;
1597 for (i = 0; i < 64; i++) {
1598 if ((i % 8) == 0)
1599 va_TraceMsg(idx, "\n\t");
1600 va_TraceMsg(idx, "\t0x%02x", p->lum_quantiser_matrix[i]);
1601 }
1602 va_TraceMsg(idx, "\n");
1603 }
1604 va_TraceMsg(idx, "\tload_chroma_quantiser_matrix = %08x\n", p->load_chroma_q uantiser_matrix);
1605 if (p->load_chroma_quantiser_matrix) {
1606 int i;
1607 for (i = 0; i < 64; i++) {
1608 if ((i % 8) == 0)
1609 va_TraceMsg(idx, "\n\t");
1610 va_TraceMsg(idx, "\t0x%02x", p->chroma_quantiser_matrix[i]);
1611 }
1612 va_TraceMsg(idx, "\n");
1613 }
1614
1615 va_TraceMsg(idx, NULL);
1616
1617 return;
1618 }
1619
1620 static void va_TraceH263Buf(
1621 VADisplay dpy,
1622 VAContextID context,
1623 VABufferID buffer,
1624 VABufferType type,
1625 unsigned int size,
1626 unsigned int num_elements,
1627 void *pbuf
1628 )
1629 {
1630 switch (type) {
1631 case VAPictureParameterBufferType:/* print MPEG4 buffer */
1632 va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
1633 break;
1634 case VAIQMatrixBufferType:/* print MPEG4 buffer */
1635 va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elem ents, pbuf);
1636 break;
1637 case VABitPlaneBufferType:/* print MPEG4 buffer */
1638 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1639 break;
1640 case VASliceGroupMapBufferType:
1641 break;
1642 case VASliceParameterBufferType:/* print MPEG4 buffer */
1643 va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, nu m_elements, pbuf);
1644 break;
1645 case VASliceDataBufferType:
1646 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1647 break;
1648 case VAMacroblockParameterBufferType:
1649 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1650 break;
1651 case VAResidualDataBufferType:
1652 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1653 break;
1654 case VADeblockingParameterBufferType:
1655 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1656 break;
1657 case VAImageBufferType:
1658 break;
1659 case VAProtectedSliceDataBufferType:
1660 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1661 break;
1662 case VAEncCodedBufferType:
1663 break;
1664 case VAEncSequenceParameterBufferType:
1665 va_TraceVAEncSequenceParameterBufferH263(dpy, context, buffer, type, siz e, num_elements, pbuf);
1666 break;
1667 case VAEncPictureParameterBufferType:
1668 va_TraceVAEncPictureParameterBufferH263(dpy, context, buffer, type, size , num_elements, pbuf);
1669 break;
1670 case VAEncSliceParameterBufferType:
1671 va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_ elements, pbuf);
1672 break;
1673 default:
1674 break;
1675 }
1676 }
1677
1678
1679 static void va_TraceJPEGBuf(
1680 VADisplay dpy,
1681 VAContextID context,
1682 VABufferID buffer,
1683 VABufferType type,
1684 unsigned int size,
1685 unsigned int num_elements,
1686 void *pbuf
1687 )
1688 {
1689 switch (type) {
1690 case VAPictureParameterBufferType:/* print MPEG4 buffer */
1691 case VAIQMatrixBufferType:/* print MPEG4 buffer */
1692 case VABitPlaneBufferType:/* print MPEG4 buffer */
1693 case VASliceGroupMapBufferType:
1694 case VASliceParameterBufferType:/* print MPEG4 buffer */
1695 case VASliceDataBufferType:
1696 case VAMacroblockParameterBufferType:
1697 case VAResidualDataBufferType:
1698 case VADeblockingParameterBufferType:
1699 case VAImageBufferType:
1700 case VAProtectedSliceDataBufferType:
1701 case VAEncCodedBufferType:
1702 case VAEncSequenceParameterBufferType:
1703 case VAEncSliceParameterBufferType:
1704 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1705 break;
1706 case VAEncPictureParameterBufferType:
1707 va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size , num_elements, pbuf);
1708 break;
1709 case VAQMatrixBufferType:
1710 va_TraceVAEncQMatrixBufferJPEG(dpy, context, buffer, type, size, num_ele ments, pbuf);
1711 break;
1712 default:
1713 break;
1714 }
1715 }
1716
1717 static void va_TraceMPEG4Buf(
1718 VADisplay dpy,
1719 VAContextID context,
1720 VABufferID buffer,
1721 VABufferType type,
1722 unsigned int size,
1723 unsigned int num_elements,
1724 void *pbuf
1725 )
1726 {
1727 switch (type) {
1728 case VAPictureParameterBufferType:
1729 va_TraceVAPictureParameterBufferMPEG4(dpy, context, buffer, type, size, num_elements, pbuf);
1730 break;
1731 case VAIQMatrixBufferType:
1732 va_TraceVAIQMatrixBufferMPEG4(dpy, context, buffer, type, size, num_elem ents, pbuf);
1733 break;
1734 case VABitPlaneBufferType:
1735 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1736 break;
1737 case VASliceGroupMapBufferType:
1738 break;
1739 case VASliceParameterBufferType:
1740 va_TraceVASliceParameterBufferMPEG4(dpy, context, buffer, type, size, nu m_elements, pbuf);
1741 break;
1742 case VASliceDataBufferType:
1743 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1744 break;
1745 case VAMacroblockParameterBufferType:
1746 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1747 break;
1748 case VAResidualDataBufferType:
1749 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1750 break;
1751 case VADeblockingParameterBufferType:
1752 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1753 break;
1754 case VAImageBufferType:
1755 break;
1756 case VAProtectedSliceDataBufferType:
1757 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1758 break;
1759 case VAEncCodedBufferType:
1760 break;
1761 case VAEncSequenceParameterBufferType:
1762 va_TraceVAEncSequenceParameterBufferMPEG4(dpy, context, buffer, type, si ze, num_elements, pbuf);
1763 break;
1764 case VAEncPictureParameterBufferType:
1765 va_TraceVAEncPictureParameterBufferMPEG4(dpy, context, buffer, type, siz e, num_elements, pbuf);
1766 break;
1767 case VAEncSliceParameterBufferType:
1768 va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_ elements, pbuf);
1769 break;
1770 case VAEncH264VUIBufferType:
1771 break;
1772 case VAEncH264SEIBufferType:
1773 break;
1774 default:
1775 break;
1776 }
1777 }
1778
1779
1780 static void va_TraceH264Buf(
1781 VADisplay dpy,
1782 VAContextID context,
1783 VABufferID buffer,
1784 VABufferType type,
1785 unsigned int size,
1786 unsigned int num_elements,
1787 void *pbuf
1788 )
1789 {
1790 DPY2INDEX(dpy);
1791
1792 switch (type) {
1793 case VAPictureParameterBufferType:
1794 va_TraceVAPictureParameterBufferH264(dpy, context, buffer, type, size, n um_elements, pbuf);
1795 break;
1796 case VAIQMatrixBufferType:
1797 va_TraceVAIQMatrixBufferH264(dpy, context, buffer, type, size, num_eleme nts, pbuf);
1798 break;
1799 case VABitPlaneBufferType:
1800 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1801 break;
1802 case VASliceGroupMapBufferType:
1803 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1804 break;
1805 case VASliceParameterBufferType:
1806 va_TraceVASliceParameterBufferH264(dpy, context, buffer, type, size, num _elements, pbuf);
1807 break;
1808 case VASliceDataBufferType:
1809 va_TraceVABuffers(dpy, context, buffer, type, trace_context[idx].trace_s lice_size, num_elements, pbuf);
1810 break;
1811 case VAMacroblockParameterBufferType:
1812 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1813 break;
1814 case VAResidualDataBufferType:
1815 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1816 break;
1817 case VADeblockingParameterBufferType:
1818 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1819 break;
1820 case VAImageBufferType:
1821 break;
1822 case VAProtectedSliceDataBufferType:
1823 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1824 break;
1825 case VAEncCodedBufferType:
1826 break;
1827 case VAEncSequenceParameterBufferType:
1828 va_TraceVAEncSequenceParameterBufferH264(dpy, context, buffer, type, siz e, num_elements, pbuf);
1829 break;
1830 case VAEncPictureParameterBufferType:
1831 va_TraceVAEncPictureParameterBufferH264(dpy, context, buffer, type, size , num_elements, pbuf);
1832 break;
1833 case VAEncSliceParameterBufferType:
1834 va_TraceVAEncSliceParameterBuffer(dpy, context, buffer, type, size, num_ elements, pbuf);
1835 break;
1836 case VAEncH264VUIBufferType:
1837 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1838 break;
1839 case VAEncH264SEIBufferType:
1840 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1841 break;
1842 case VAEncMiscParameterBufferType:
1843 va_TraceVAEncMiscParameterBuffer(dpy, context, buffer, type, size, num_e lements, pbuf);
1844 break;
1845 default:
1846 break;
1847 }
1848 }
1849
1850
1851 static void va_TraceVC1Buf(
1852 VADisplay dpy,
1853 VAContextID context,
1854 VABufferID buffer,
1855 VABufferType type,
1856 unsigned int size,
1857 unsigned int num_elements,
1858 void *pbuf
1859 )
1860 {
1861 DPY2INDEX(dpy);
1862
1863 switch (type) {
1864 case VAPictureParameterBufferType:
1865 va_TraceVAPictureParameterBufferVC1(dpy, context, buffer, type, size, nu m_elements, pbuf);
1866 break;
1867 case VAIQMatrixBufferType:
1868 break;
1869 case VABitPlaneBufferType:
1870 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1871 break;
1872 case VASliceGroupMapBufferType:
1873 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1874 break;
1875 case VASliceParameterBufferType:
1876 va_TraceVASliceParameterBufferVC1(dpy, context, buffer, type, size, num_ elements, pbuf);
1877 break;
1878 case VASliceDataBufferType:
1879 va_TraceVABuffers(dpy, context, buffer, type, trace_context[idx].trace_s lice_size, num_elements, pbuf);
1880 break;
1881 case VAMacroblockParameterBufferType:
1882 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1883 break;
1884 case VAResidualDataBufferType:
1885 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1886 break;
1887 case VADeblockingParameterBufferType:
1888 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1889 break;
1890 case VAImageBufferType:
1891 break;
1892 case VAProtectedSliceDataBufferType:
1893 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1894 break;
1895 case VAEncCodedBufferType:
1896 break;
1897 case VAEncSequenceParameterBufferType:
1898 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1899 break;
1900 case VAEncPictureParameterBufferType:
1901 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1902 break;
1903 case VAEncSliceParameterBufferType:
1904 va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf);
1905 break;
1906 default:
1907 break;
1908 }
1909 }
1910
1911 void va_TraceRenderPicture(
1912 VADisplay dpy,
1913 VAContextID context,
1914 VABufferID *buffers,
1915 int num_buffers
1916 )
1917 {
1918 VABufferType type;
1919 unsigned int size;
1920 unsigned int num_elements;
1921 int i;
1922 DPY2INDEX(dpy);
1923
1924 TRACE_FUNCNAME(idx);
1925
1926 va_TraceMsg(idx, "\tcontext = 0x%08x\n", context);
1927 va_TraceMsg(idx, "\tnum_buffers = %d\n", num_buffers);
1928 for (i = 0; i < num_buffers; i++) {
1929 unsigned char *pbuf;
1930 unsigned int j;
1931
1932 /* get buffer type information */
1933 vaBufferInfo(dpy, context, buffers[i], &type, &size, &num_elements);
1934
1935 va_TraceMsg(idx, "\t---------------------------\n");
1936 va_TraceMsg(idx, "\tbuffers[%d] = 0x%08x\n", i, buffers[i]);
1937 va_TraceMsg(idx, "\t type = %s\n", buffer_type_to_string(type));
1938 va_TraceMsg(idx, "\t size = %d\n", size);
1939 va_TraceMsg(idx, "\t num_elements = %d\n", num_elements);
1940
1941 vaMapBuffer(dpy, buffers[i], (void **)&pbuf);
1942
1943 switch (trace_context[idx].trace_profile) {
1944 case VAProfileMPEG2Simple:
1945 case VAProfileMPEG2Main:
1946 for (j=0; j<num_elements; j++) {
1947 va_TraceMsg(idx, "\t---------------------------\n", j);
1948 va_TraceMsg(idx, "\telement[%d] = ", j);
1949 va_TraceMPEG2Buf(dpy, context, buffers[i], type, size, num_eleme nts, pbuf + size*j);
1950 }
1951 break;
1952 case VAProfileMPEG4Simple:
1953 case VAProfileMPEG4AdvancedSimple:
1954 case VAProfileMPEG4Main:
1955 for (j=0; j<num_elements; j++) {
1956 va_TraceMsg(idx, "\t---------------------------\n", j);
1957 va_TraceMsg(idx, "\telement[%d] = ", j);
1958 va_TraceMPEG4Buf(dpy, context, buffers[i], type, size, num_eleme nts, pbuf + size*j);
1959 }
1960 break;
1961 case VAProfileH264Baseline:
1962 case VAProfileH264Main:
1963 case VAProfileH264High:
1964 case VAProfileH264ConstrainedBaseline:
1965 for (j=0; j<num_elements; j++) {
1966 va_TraceMsg(idx, "\t---------------------------\n", j);
1967 va_TraceMsg(idx, "\telement[%d] = ", j);
1968
1969 va_TraceH264Buf(dpy, context, buffers[i], type, size, num_elemen ts, pbuf + size*j);
1970 }
1971 break;
1972 case VAProfileVC1Simple:
1973 case VAProfileVC1Main:
1974 case VAProfileVC1Advanced:
1975 for (j=0; j<num_elements; j++) {
1976 va_TraceMsg(idx, "\t---------------------------\n", j);
1977 va_TraceMsg(idx, "\telement[%d] = ", j);
1978
1979 va_TraceVC1Buf(dpy, context, buffers[i], type, size, num_element s, pbuf + size*j);
1980 }
1981 break;
1982 case VAProfileH263Baseline:
1983 for (j=0; j<num_elements; j++) {
1984 va_TraceMsg(idx, "\t---------------------------\n", j);
1985 va_TraceMsg(idx, "\telement[%d] = ", j);
1986
1987 va_TraceH263Buf(dpy, context, buffers[i], type, size, num_elemen ts, pbuf + size*j);
1988 }
1989 break;
1990 case VAProfileJPEGBaseline:
1991 for (j=0; j<num_elements; j++) {
1992 va_TraceMsg(idx, "\t---------------------------\n", j);
1993 va_TraceMsg(idx, "\telement[%d] = ", j);
1994
1995 va_TraceJPEGBuf(dpy, context, buffers[i], type, size, num_elemen ts, pbuf + size*j);
1996 }
1997 break;
1998 default:
1999 break;
2000 }
2001
2002 vaUnmapBuffer(dpy, buffers[i]);
2003 }
2004
2005 va_TraceMsg(idx, NULL);
2006 }
2007
2008 void va_TraceEndPicture(
2009 VADisplay dpy,
2010 VAContextID context,
2011 int endpic_done
2012 )
2013 {
2014 int encode, decode, jpeg;
2015 DPY2INDEX(dpy);
2016
2017 TRACE_FUNCNAME(idx);
2018
2019 if (endpic_done == 0) {
2020 va_TraceMsg(idx, "\tcontext = 0x%08x\n", context);
2021 va_TraceMsg(idx, "\trender_targets = 0x%08x\n", trace_context[idx].trace _rendertarget);
2022 }
2023
2024 encode = (trace_context[idx].trace_entrypoint == VAEntrypointEncSlice) &&
2025 (trace_flag & VA_TRACE_FLAG_SURFACE_ENCODE);
2026 decode = (trace_context[idx].trace_entrypoint == VAEntrypointVLD) &&
2027 (trace_flag & VA_TRACE_FLAG_SURFACE_DECODE);
2028 jpeg = (trace_context[idx].trace_entrypoint == VAEntrypointEncPicture) &&
2029 (trace_flag & VA_TRACE_FLAG_SURFACE_JPEG);
2030
2031 /* want to trace encode source surface, do it before vaEndPicture */
2032 if ((encode || jpeg) && (endpic_done == 0))
2033 va_TraceSurface(dpy);
2034
2035 /* want to trace encoode codedbuf, do it after vaEndPicture */
2036 if ((encode || jpeg) && (endpic_done == 1)) {
2037 /* force the pipleline finish rendering */
2038 vaSyncSurface(dpy, trace_context[idx].trace_rendertarget);
2039 va_TraceCodedBuf(dpy);
2040 }
2041
2042 /* want to trace decode dest surface, do it after vaEndPicture */
2043 if (decode && (endpic_done == 1)) {
2044 /* force the pipleline finish rendering */
2045 vaSyncSurface(dpy, trace_context[idx].trace_rendertarget);
2046 va_TraceSurface(dpy);
2047 }
2048 va_TraceMsg(idx, NULL);
2049 }
2050
2051 void va_TraceSyncSurface(
2052 VADisplay dpy,
2053 VASurfaceID render_target
2054 )
2055 {
2056 DPY2INDEX(dpy);
2057
2058 TRACE_FUNCNAME(idx);
2059
2060 va_TraceMsg(idx, "\trender_target = 0x%08x\n", render_target);
2061 va_TraceMsg(idx, NULL);
2062 }
2063
2064
2065 void va_TraceQuerySurfaceStatus(
2066 VADisplay dpy,
2067 VASurfaceID render_target,
2068 VASurfaceStatus *status /* out */
2069 )
2070 {
2071 DPY2INDEX(dpy);
2072
2073 TRACE_FUNCNAME(idx);
2074
2075 va_TraceMsg(idx, "\trender_target = 0x%08x\n", render_target);
2076 va_TraceMsg(idx, "\tstatus = 0x%08x\n", *status);
2077 va_TraceMsg(idx, NULL);
2078 }
2079
2080
2081 void va_TraceQuerySurfaceError(
2082 VADisplay dpy,
2083 VASurfaceID surface,
2084 VAStatus error_status,
2085 void **error_info /*out*/
2086 )
2087 {
2088 DPY2INDEX(dpy);
2089
2090 TRACE_FUNCNAME(idx);
2091 va_TraceMsg(idx, "\tsurface = 0x%08x\n", surface);
2092 va_TraceMsg(idx, "\terror_status = 0x%08x\n", error_status);
2093 if (error_status == VA_STATUS_ERROR_DECODING_ERROR) {
2094 VASurfaceDecodeMBErrors *p = *error_info;
2095 while (p->status != -1) {
2096 va_TraceMsg(idx, "\t\tstatus = %d\n", p->status);
2097 va_TraceMsg(idx, "\t\tstart_mb = %d\n", p->start_mb);
2098 va_TraceMsg(idx, "\t\tend_mb = %d\n", p->end_mb);
2099 p++; /* next error record */
2100 }
2101 }
2102 va_TraceMsg(idx, NULL);
2103 }
2104
2105 void va_TraceMaxNumDisplayAttributes (
2106 VADisplay dpy,
2107 int number
2108 )
2109 {
2110 DPY2INDEX(dpy);
2111
2112 TRACE_FUNCNAME(idx);
2113
2114 va_TraceMsg(idx, "\tmax_display_attributes = %d\n", number);
2115 va_TraceMsg(idx, NULL);
2116 }
2117
2118 void va_TraceQueryDisplayAttributes (
2119 VADisplay dpy,
2120 VADisplayAttribute *attr_list, /* out */
2121 int *num_attributes /* out */
2122 )
2123 {
2124 int i;
2125
2126 DPY2INDEX(dpy);
2127
2128 va_TraceMsg(idx, "\tnum_attributes = %d\n", *num_attributes);
2129
2130 for (i=0; i<*num_attributes; i++) {
2131 va_TraceMsg(idx, "\tattr_list[%d] =\n");
2132 va_TraceMsg(idx, "\t typ = 0x%08x\n", attr_list[i].type);
2133 va_TraceMsg(idx, "\t min_value = %d\n", attr_list[i].min_value);
2134 va_TraceMsg(idx, "\t max_value = %d\n", attr_list[i].max_value);
2135 va_TraceMsg(idx, "\t value = %d\n", attr_list[i].value);
2136 va_TraceMsg(idx, "\t flags = %d\n", attr_list[i].flags);
2137 }
2138 va_TraceMsg(idx, NULL);
2139 }
2140
2141
2142 static void va_TraceDisplayAttributes (
2143 VADisplay dpy,
2144 VADisplayAttribute *attr_list,
2145 int num_attributes
2146 )
2147 {
2148 int i;
2149
2150 DPY2INDEX(dpy);
2151
2152 va_TraceMsg(idx, "\tnum_attributes = %d\n", num_attributes);
2153 for (i=0; i<num_attributes; i++) {
2154 va_TraceMsg(idx, "\tattr_list[%d] =\n");
2155 va_TraceMsg(idx, "\t typ = 0x%08x\n", attr_list[i].type);
2156 va_TraceMsg(idx, "\t min_value = %d\n", attr_list[i].min_value);
2157 va_TraceMsg(idx, "\t max_value = %d\n", attr_list[i].max_value);
2158 va_TraceMsg(idx, "\t value = %d\n", attr_list[i].value);
2159 va_TraceMsg(idx, "\t flags = %d\n", attr_list[i].flags);
2160 }
2161 va_TraceMsg(idx, NULL);
2162 }
2163
2164
2165 void va_TraceGetDisplayAttributes (
2166 VADisplay dpy,
2167 VADisplayAttribute *attr_list,
2168 int num_attributes
2169 )
2170 {
2171 DPY2INDEX(dpy);
2172
2173 TRACE_FUNCNAME(idx);
2174
2175 va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
2176 }
2177
2178 void va_TraceSetDisplayAttributes (
2179 VADisplay dpy,
2180 VADisplayAttribute *attr_list,
2181 int num_attributes
2182 )
2183 {
2184 DPY2INDEX(dpy);
2185
2186 TRACE_FUNCNAME(idx);
2187
2188 va_TraceDisplayAttributes (dpy, attr_list, num_attributes);
2189 }
2190
2191
2192 void va_TracePutSurface (
2193 VADisplay dpy,
2194 VASurfaceID surface,
2195 void *draw, /* the target Drawable */
2196 short srcx,
2197 short srcy,
2198 unsigned short srcw,
2199 unsigned short srch,
2200 short destx,
2201 short desty,
2202 unsigned short destw,
2203 unsigned short desth,
2204 VARectangle *cliprects, /* client supplied clip list */
2205 unsigned int number_cliprects, /* number of clip rects in the clip list */
2206 unsigned int flags /* de-interlacing flags */
2207 )
2208 {
2209 DPY2INDEX(dpy);
2210
2211 TRACE_FUNCNAME(idx);
2212
2213 va_TraceMsg(idx, "\tsurface = 0x%08x\n", surface);
2214 va_TraceMsg(idx, "\tdraw = 0x%08x\n", draw);
2215 va_TraceMsg(idx, "\tsrcx = %d\n", srcx);
2216 va_TraceMsg(idx, "\tsrcy = %d\n", srcy);
2217 va_TraceMsg(idx, "\tsrcw = %d\n", srcw);
2218 va_TraceMsg(idx, "\tsrch = %d\n", srch);
2219 va_TraceMsg(idx, "\tdestx = %d\n", destx);
2220 va_TraceMsg(idx, "\tdesty = %d\n", desty);
2221 va_TraceMsg(idx, "\tdestw = %d\n", destw);
2222 va_TraceMsg(idx, "\tdesth = %d\n", desth);
2223 va_TraceMsg(idx, "\tcliprects = 0x%08x\n", cliprects);
2224 va_TraceMsg(idx, "\tnumber_cliprects = %d\n", number_cliprects);
2225 va_TraceMsg(idx, "\tflags = 0x%08x\n", flags);
2226 va_TraceMsg(idx, NULL);
2227 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698