diff options
author | Austin Yuan <shengquan.yuan@intel.com> | 2013-06-08 11:16:03 +0800 |
---|---|---|
committer | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2013-08-27 11:16:44 +0200 |
commit | 8ed7d80a922caa06d0dbdc437ef342695ad837ec (patch) | |
tree | f4922f4a6517b59252ac18ca9bb706c2c3e2e8ca | |
parent | 2a5258204d71cd9eee0eb1142dade0a3fc9a8121 (diff) | |
download | libva-8ed7d80a922caa06d0dbdc437ef342695ad837ec.tar.gz |
vatrace: trace JPEG encode parameters and vaQuerySurfaceAttributes
Signed-off-by: Austin Yuan <shengquan.yuan@intel.com>
-rw-r--r-- | va/va.c | 34 | ||||
-rw-r--r-- | va/va_trace.c | 192 | ||||
-rw-r--r-- | va/va_trace.h | 7 |
3 files changed, 199 insertions, 34 deletions
@@ -827,11 +827,14 @@ vaQuerySurfaceAttributes( return VA_STATUS_ERROR_INVALID_DISPLAY; if (!ctx->vtable->vaQuerySurfaceAttributes) - return va_impl_query_surface_attributes(ctx, config, - attrib_list, num_attribs); + vaStatus = va_impl_query_surface_attributes(ctx, config, + attrib_list, num_attribs); + else + vaStatus = ctx->vtable->vaQuerySurfaceAttributes(ctx, config, + attrib_list, num_attribs); + + VA_TRACE_LOG(va_TraceQuerySurfaceAttributes, dpy, config, attrib_list, num_attribs); - vaStatus = ctx->vtable->vaQuerySurfaceAttributes(ctx, config, - attrib_list, num_attribs); return vaStatus; } @@ -856,16 +859,14 @@ vaCreateSurfaces( return VA_STATUS_ERROR_INVALID_DISPLAY; if (ctx->vtable->vaCreateSurfaces2) - return ctx->vtable->vaCreateSurfaces2(ctx, format, width, height, + vaStatus = ctx->vtable->vaCreateSurfaces2(ctx, format, width, height, surfaces, num_surfaces, attrib_list, num_attribs); - - if (attrib_list && num_attribs > 0) - return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; - - vaStatus = ctx->vtable->vaCreateSurfaces(ctx, width, height, format, - num_surfaces, surfaces); - + else if (attrib_list && num_attribs > 0) + vaStatus = VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; + else + vaStatus = ctx->vtable->vaCreateSurfaces(ctx, width, height, format, + num_surfaces, surfaces); VA_TRACE_LOG(va_TraceCreateSurfaces, dpy, width, height, format, num_surfaces, surfaces, attrib_list, num_attribs); @@ -881,10 +882,17 @@ VAStatus vaDestroySurfaces ( ) { VADriverContextP ctx; + VAStatus vaStatus; + CHECK_DISPLAY(dpy); ctx = CTX(dpy); - return ctx->vtable->vaDestroySurfaces( ctx, surface_list, num_surfaces ); + VA_TRACE_LOG(va_TraceDestroySurfaces, + dpy, surface_list, num_surfaces); + + vaStatus = ctx->vtable->vaDestroySurfaces( ctx, surface_list, num_surfaces ); + + return vaStatus; } VAStatus vaCreateContext ( diff --git a/va/va_trace.c b/va/va_trace.c index 3883a1d..7c06a52 100644 --- a/va/va_trace.c +++ b/va/va_trace.c @@ -476,9 +476,11 @@ void va_TraceCreateConfig( va_TraceMsg(idx, "\tprofile = %d\n", profile); va_TraceMsg(idx, "\tentrypoint = %d\n", entrypoint); va_TraceMsg(idx, "\tnum_attribs = %d\n", num_attribs); - for (i = 0; i < num_attribs; i++) { - va_TraceMsg(idx, "\t\tattrib_list[%d].type = 0x%08x\n", i, attrib_list[i].type); - va_TraceMsg(idx, "\t\tattrib_list[%d].value = 0x%08x\n", i, attrib_list[i].value); + if (attrib_list) { + for (i = 0; i < num_attribs; i++) { + va_TraceMsg(idx, "\t\tattrib_list[%d].type = 0x%08x\n", i, attrib_list[i].type); + va_TraceMsg(idx, "\t\tattrib_list[%d].value = 0x%08x\n", i, attrib_list[i].value); + } } va_TraceMsg(idx, NULL); @@ -520,6 +522,41 @@ void va_TraceCreateConfig( } } +static void va_TraceSurfaceAttributes( + int idx, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs +) +{ + int i, num; + VASurfaceAttrib *p; + + if (!attrib_list || !num_attribs) + return; + + p = attrib_list; + num = *num_attribs; + if (num > VASurfaceAttribCount) + num = VASurfaceAttribCount; + + for (i=0; i<num; i++) { + va_TraceMsg(idx, "\tattrib_list[%i] =\n", i); + + va_TraceMsg(idx, "\t\ttype = %d\n", p->type); + va_TraceMsg(idx, "\t\tflags = %d\n", p->flags); + va_TraceMsg(idx, "\t\tvalue.type = %d\n", p->value.type); + if (p->value.type == VAGenericValueTypeInteger) + va_TraceMsg(idx, "\t\tvalue.value.i = 0x%08x\n", p->value.value.i); + else if (p->value.type == VAGenericValueTypeFloat) + va_TraceMsg(idx, "\t\tvalue.value.f = %f\n", p->value.value.f); + else if (p->value.type == VAGenericValueTypePointer) + va_TraceMsg(idx, "\t\tvalue.value.p = %p\n", p->value.value.p); + else if (p->value.type == VAGenericValueTypeFunc) + va_TraceMsg(idx, "\t\tvalue.value.fn = %p\n", p->value.value.fn); + + p++; + } +} void va_TraceCreateSurfaces( VADisplay dpy, @@ -542,9 +579,33 @@ void va_TraceCreateSurfaces( va_TraceMsg(idx, "\tformat = %d\n", format); va_TraceMsg(idx, "\tnum_surfaces = %d\n", num_surfaces); - for (i = 0; i < num_surfaces; i++) - va_TraceMsg(idx, "\t\tsurfaces[%d] = 0x%08x\n", i, surfaces[i]); + if (surfaces) { + for (i = 0; i < num_surfaces; i++) + va_TraceMsg(idx, "\t\tsurfaces[%d] = 0x%08x\n", i, surfaces[i]); + } + + va_TraceSurfaceAttributes(idx, attrib_list, &num_attribs); + + va_TraceMsg(idx, NULL); +} + + +void va_TraceDestroySurfaces( + VADisplay dpy, + VASurfaceID *surface_list, + int num_surfaces +) +{ + int i; + DPY2INDEX(dpy); + + TRACE_FUNCNAME(idx); + if (surface_list) { + for (i = 0; i < num_surfaces; i++) + va_TraceMsg(idx, "\t\tsurfaces[%d] = 0x%08x\n", i, surface_list[i]); + } + va_TraceMsg(idx, NULL); } @@ -564,18 +625,22 @@ void va_TraceCreateContext( DPY2INDEX(dpy); TRACE_FUNCNAME(idx); - + + va_TraceMsg(idx, "\tconfig = 0x%08x\n", config_id); va_TraceMsg(idx, "\twidth = %d\n", picture_width); va_TraceMsg(idx, "\theight = %d\n", picture_height); va_TraceMsg(idx, "\tflag = 0x%08x\n", flag); va_TraceMsg(idx, "\tnum_render_targets = %d\n", num_render_targets); - for (i=0; i<num_render_targets; i++) - va_TraceMsg(idx, "\t\trender_targets[%d] = 0x%08x\n", i, render_targets[i]); - va_TraceMsg(idx, "\tcontext = 0x%08x\n", *context); - va_TraceMsg(idx, NULL); - - trace_context[idx].trace_context = *context; - + if (render_targets) { + for (i=0; i<num_render_targets; i++) + va_TraceMsg(idx, "\t\trender_targets[%d] = 0x%08x\n", i, render_targets[i]); + } + if (context) { + va_TraceMsg(idx, "\tcontext = 0x%08x\n", *context); + trace_context[idx].trace_context = *context; + } else + trace_context[idx].trace_context = VA_INVALID_ID; + trace_context[idx].trace_frame_no = 0; trace_context[idx].trace_slice_no = 0; @@ -639,7 +704,8 @@ void va_TraceCreateBuffer ( TRACE_FUNCNAME(idx); va_TraceMsg(idx, "\tbuf_type=%s\n", buffer_type_to_string(type)); - va_TraceMsg(idx, "\tbuf_id=0x%x\n", *buf_id); + if (buf_id) + va_TraceMsg(idx, "\tbuf_id=0x%x\n", *buf_id); va_TraceMsg(idx, "\tsize=%d\n", size); va_TraceMsg(idx, "\tnum_elements=%d\n", num_elements); @@ -700,6 +766,9 @@ void va_TraceMapBuffer ( TRACE_FUNCNAME(idx); va_TraceMsg(idx, "\tbuf_id=0x%x\n", buf_id); va_TraceMsg(idx, "\tbuf_type=%s\n", buffer_type_to_string(type)); + if ((pbuf == NULL) || (*pbuf == NULL)) + return; + buf_list = (VACodedBufferSegment *)(*pbuf); while (buf_list != NULL) { va_TraceMsg(idx, "\tCodedbuf[%d] =\n", i++); @@ -2013,6 +2082,8 @@ static void va_TraceVAEncPictureParameterBufferJPEG( void *data) { VAEncPictureParameterBufferJPEG *p = (VAEncPictureParameterBufferJPEG *)data; + int i; + DPY2INDEX(dpy); va_TraceMsg(idx, "VAEncPictureParameterBufferJPEG\n"); @@ -2020,6 +2091,24 @@ static void va_TraceVAEncPictureParameterBufferJPEG( va_TraceMsg(idx, "\tcoded_buf = %08x\n", p->coded_buf); va_TraceMsg(idx, "\tpicture_width = %d\n", p->picture_width); va_TraceMsg(idx, "\tpicture_height = %d\n", p->picture_height); + va_TraceMsg(idx, "\tpic_flags.bits.profile = %d\n", p->pic_flags.bits.profile); + va_TraceMsg(idx, "\tpic_flags.bits.progressive = %d\n", p->pic_flags.bits.profile); + va_TraceMsg(idx, "\tpic_flags.bits.huffman = %d\n", p->pic_flags.bits.huffman); + va_TraceMsg(idx, "\tpic_flags.bits.interleaved = %d\n", p->pic_flags.bits.interleaved); + va_TraceMsg(idx, "\tpic_flags.bits.differential = %d\n", p->pic_flags.bits.differential); + va_TraceMsg(idx, "\tsample_bit_depth = %d\n", p->sample_bit_depth); + va_TraceMsg(idx, "\tnum_scan = %d\n", p->num_scan); + va_TraceMsg(idx, "\tnum_components = %d\n", p->num_components); + va_TraceMsg(idx, "\tcomponent_id[] = "); + for (i=0; i<4; i++) + va_TraceMsg(idx, "%d\t", p->component_id[i]); + va_TraceMsg(idx, "\n"); + va_TraceMsg(idx, "\tquantiser_table_selector[] = "); + for (i=0; i<4; i++) + va_TraceMsg(idx, "%d\t", p->quantiser_table_selector[i]); + va_TraceMsg(idx, "\n"); + va_TraceMsg(idx, "\tquality = %d\n", p->picture_height); + va_TraceMsg(idx, NULL); trace_context[idx].trace_codedbuf = p->coded_buf; @@ -2066,6 +2155,37 @@ static void va_TraceVAEncQMatrixBufferJPEG( return; } + +static void va_TraceVAEncSliceParameterBufferJPEG( + VADisplay dpy, + VAContextID context, + VABufferID buffer, + VABufferType type, + unsigned int size, + unsigned int num_elements, + void *data) +{ + VAEncSliceParameterBufferJPEG *p = (VAEncSliceParameterBufferJPEG *)data; + int i; + + DPY2INDEX(dpy); + + va_TraceMsg(idx, "VAEncSliceParameterBufferJPEG\n"); + va_TraceMsg(idx, "\trestart_interval = 0x%04x\n", p->restart_interval); + va_TraceMsg(idx, "\tnum_components = 0x%08x\n", p->num_components); + for (i=0; i<4; i++) { + va_TraceMsg(idx, "\tcomponents[%i] =\n "); + va_TraceMsg(idx, "\t\tcomponent_selector = %d\n", p->components[i].component_selector); + va_TraceMsg(idx, "\t\tdc_table_selector = %d\n", p->components[i].dc_table_selector); + va_TraceMsg(idx, "\t\tac_table_selector = %d\n", p->components[i].ac_table_selector); + } + + va_TraceMsg(idx, NULL); + + return; +} + + static void va_TraceH263Buf( VADisplay dpy, VAContextID context, @@ -2150,9 +2270,11 @@ static void va_TraceJPEGBuf( case VAProtectedSliceDataBufferType: case VAEncCodedBufferType: case VAEncSequenceParameterBufferType: - case VAEncSliceParameterBufferType: va_TraceVABuffers(dpy, context, buffer, type, size, num_elements, pbuf); break; + case VAEncSliceParameterBufferType: + va_TraceVAEncPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); + break; case VAPictureParameterBufferType: va_TraceVAPictureParameterBufferJPEG(dpy, context, buffer, type, size, num_elements, pbuf); break; @@ -2388,8 +2510,11 @@ void va_TraceRenderPicture( va_TraceMsg(idx, "\tcontext = 0x%08x\n", context); va_TraceMsg(idx, "\tnum_buffers = %d\n", num_buffers); + if (buffers == NULL) + return; + for (i = 0; i < num_buffers; i++) { - unsigned char *pbuf; + unsigned char *pbuf = NULL; unsigned int j; /* get buffer type information */ @@ -2402,7 +2527,9 @@ void va_TraceRenderPicture( va_TraceMsg(idx, "\t num_elements = %d\n", num_elements); vaMapBuffer(dpy, buffers[i], (void **)&pbuf); - + if (pbuf == NULL) + continue; + switch (trace_context[idx].trace_profile) { case VAProfileMPEG2Simple: case VAProfileMPEG2Main: @@ -2515,6 +2642,23 @@ void va_TraceSyncSurface( va_TraceMsg(idx, NULL); } +void va_TraceQuerySurfaceAttributes( + VADisplay dpy, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs +) +{ + DPY2INDEX(dpy); + + TRACE_FUNCNAME(idx); + va_TraceMsg(idx, "\tconfig = 0x%08x\n", config); + va_TraceSurfaceAttributes(idx, attrib_list, num_attribs); + + va_TraceMsg(idx, NULL); + +} + void va_TraceQuerySurfaceStatus( VADisplay dpy, @@ -2527,7 +2671,8 @@ void va_TraceQuerySurfaceStatus( TRACE_FUNCNAME(idx); va_TraceMsg(idx, "\trender_target = 0x%08x\n", render_target); - va_TraceMsg(idx, "\tstatus = 0x%08x\n", *status); + if (status) + va_TraceMsg(idx, "\tstatus = 0x%08x\n", *status); va_TraceMsg(idx, NULL); } @@ -2544,9 +2689,9 @@ void va_TraceQuerySurfaceError( TRACE_FUNCNAME(idx); va_TraceMsg(idx, "\tsurface = 0x%08x\n", surface); va_TraceMsg(idx, "\terror_status = 0x%08x\n", error_status); - if (error_status == VA_STATUS_ERROR_DECODING_ERROR) { + if (error_info && (error_status == VA_STATUS_ERROR_DECODING_ERROR)) { VASurfaceDecodeMBErrors *p = *error_info; - while (p->status != -1) { + while (p && (p->status != -1)) { va_TraceMsg(idx, "\t\tstatus = %d\n", p->status); va_TraceMsg(idx, "\t\tstart_mb = %d\n", p->start_mb); va_TraceMsg(idx, "\t\tend_mb = %d\n", p->end_mb); @@ -2580,7 +2725,9 @@ void va_TraceQueryDisplayAttributes ( DPY2INDEX(dpy); va_TraceMsg(idx, "\tnum_attributes = %d\n", *num_attributes); - + if (attr_list == NULL || num_attributes == NULL) + return; + for (i=0; i<*num_attributes; i++) { va_TraceMsg(idx, "\tattr_list[%d] =\n"); va_TraceMsg(idx, "\t typ = 0x%08x\n", attr_list[i].type); @@ -2604,6 +2751,9 @@ static void va_TraceDisplayAttributes ( DPY2INDEX(dpy); va_TraceMsg(idx, "\tnum_attributes = %d\n", num_attributes); + if (attr_list == NULL) + return; + for (i=0; i<num_attributes; i++) { va_TraceMsg(idx, "\tattr_list[%d] =\n"); va_TraceMsg(idx, "\t typ = 0x%08x\n", attr_list[i].type); diff --git a/va/va_trace.h b/va/va_trace.h index 70c3847..1465e42 100644 --- a/va/va_trace.h +++ b/va/va_trace.h @@ -142,6 +142,13 @@ void va_TraceSyncSurface( VASurfaceID render_target ); +void va_TraceQuerySurfaceAttributes( + VADisplay dpy, + VAConfigID config, + VASurfaceAttrib *attrib_list, + unsigned int *num_attribs +); + void va_TraceQuerySurfaceStatus( VADisplay dpy, VASurfaceID render_target, |