summaryrefslogtreecommitdiff
path: root/va/va.c
diff options
context:
space:
mode:
Diffstat (limited to 'va/va.c')
-rw-r--r--va/va.c135
1 files changed, 124 insertions, 11 deletions
diff --git a/va/va.c b/va/va.c
index c0722ba..0320ed3 100644
--- a/va/va.c
+++ b/va/va.c
@@ -26,6 +26,7 @@
#include "va.h"
#include "va_backend.h"
#include "va_trace.h"
+#include "va_fool.h"
#include "config.h"
#include <assert.h>
@@ -57,17 +58,65 @@
extern int trace_flag;
#define VA_TRACE(trace_func,...) \
if (trace_flag) { \
- va_TraceMsg("========%s========\n", __func__); \
trace_func(__VA_ARGS__); \
}
+/*
+ * read a config "env" for libva.conf or from environment setting
+ * liva.conf has higher priority
+ * return 0: the "env" is set, and the value is copied into env_value
+ * 1: the env is not set
+ */
+int va_parseConfig(char *env, char *env_value)
+{
+ char *token, *value, *saveptr;
+ char oneline[1024];
+ FILE *fp=NULL;
+
+
+ if (env == NULL)
+ return 1;
+
+ fp = fopen("/etc/libva.conf", "r");
+ while (fp && (fgets(oneline, 1024, fp) != NULL)) {
+ if (strlen(oneline) == 1)
+ continue;
+ token = strtok_r(oneline, "=\n", &saveptr);
+ value = strtok_r(NULL, "=\n", &saveptr);
+
+ if (NULL == token || NULL == value)
+ continue;
+
+ if (strcmp(token, env) == 0) {
+ if (env_value)
+ strncpy(env_value,value, 1024);
+
+ fclose(fp);
+
+ return 0;
+ }
+ }
+ if (fp)
+ fclose(fp);
+
+ /* no setting in config file, use env setting */
+ if (getenv(env)) {
+ if (env_value)
+ strncpy(env_value, getenv(env), 1024);
+
+ return 0;
+ }
+
+ return 1;
+}
+
int vaDisplayIsValid(VADisplay dpy)
{
VADisplayContextP pDisplayContext = (VADisplayContextP)dpy;
return pDisplayContext && (pDisplayContext->vadpy_magic == VA_DISPLAY_MAGIC) && pDisplayContext->vaIsValid(pDisplayContext);
}
-static void va_errorMessage(const char *msg, ...)
+void va_errorMessage(const char *msg, ...)
{
va_list args;
@@ -77,7 +126,7 @@ static void va_errorMessage(const char *msg, ...)
va_end(args);
}
-static void va_infoMessage(const char *msg, ...)
+void va_infoMessage(const char *msg, ...)
{
va_list args;
@@ -340,7 +389,9 @@ VAStatus vaInitialize (
CHECK_DISPLAY(dpy);
- va_TraceInit();
+ va_TraceInit(dpy);
+
+ va_FoolInit(dpy);
va_infoMessage("libva version %s\n", VA_VERSION_S);
@@ -397,7 +448,9 @@ VAStatus vaTerminate (
if (VA_STATUS_SUCCESS == vaStatus)
pDisplayContext->vaDestroy(pDisplayContext);
- va_TraceEnd();
+ va_TraceEnd(dpy);
+
+ va_FoolEnd(dpy);
return vaStatus;
}
@@ -511,6 +564,7 @@ VAStatus vaCreateConfig (
ctx = CTX(dpy);
VA_TRACE(va_TraceCreateConfig, dpy, profile, entrypoint, attrib_list, num_attribs, config_id);
+ va_FoolCreateConfig(dpy, profile, entrypoint, attrib_list, num_attribs, config_id);
return ctx->vtable.vaCreateConfig ( ctx, profile, entrypoint, attrib_list, num_attribs, config_id );
}
@@ -552,11 +606,15 @@ VAStatus vaCreateSurfaces (
)
{
VADriverContextP ctx;
+ VAStatus ret;
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
VA_TRACE(va_TraceCreateSurface, dpy, width, height, format, num_surfaces, surfaces);
- return ctx->vtable.vaCreateSurfaces( ctx, width, height, format, num_surfaces, surfaces );
+
+ ret = ctx->vtable.vaCreateSurfaces( ctx, width, height, format, num_surfaces, surfaces );
+ va_FoolCreateSurfaces(dpy, width, height, format, num_surfaces, surfaces);
+ return ret;
}
@@ -619,6 +677,8 @@ VAStatus vaCreateBuffer (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
+ if (va_FoolCreateBuffer(dpy, context, type, size, num_elements, data, buf_id))
+ return VA_STATUS_SUCCESS;
return ctx->vtable.vaCreateBuffer( ctx, context, type, size, num_elements, data, buf_id);
}
@@ -643,10 +703,19 @@ VAStatus vaMapBuffer (
)
{
VADriverContextP ctx;
+ VAStatus va_status;
+
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
+
+ if (va_FoolMapBuffer(dpy, buf_id, pbuf))
+ return VA_STATUS_SUCCESS;
+ va_status = ctx->vtable.vaMapBuffer( ctx, buf_id, pbuf );
- return ctx->vtable.vaMapBuffer( ctx, buf_id, pbuf );
+ if (va_status == VA_STATUS_SUCCESS)
+ VA_TRACE(va_TraceMapBuffer, dpy, buf_id, pbuf);
+
+ return va_status;
}
VAStatus vaUnmapBuffer (
@@ -658,6 +727,8 @@ VAStatus vaUnmapBuffer (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
+ if (va_FoolUnmapBuffer(dpy, buf_id))
+ return VA_STATUS_SUCCESS;
return ctx->vtable.vaUnmapBuffer( ctx, buf_id );
}
@@ -699,7 +770,11 @@ VAStatus vaBeginPicture (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
- VA_TRACE(va_TraceBeginPicture, ctx, context, render_target);
+ VA_TRACE(va_TraceBeginPicture, dpy, context, render_target);
+
+ if (va_FoolBeginPicture(dpy, context, render_target))
+ return VA_STATUS_SUCCESS;
+
return ctx->vtable.vaBeginPicture( ctx, context, render_target );
}
@@ -714,7 +789,11 @@ VAStatus vaRenderPicture (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
+ if (va_FoolRenderPicture(dpy, context, buffers, num_buffers))
+ return VA_STATUS_SUCCESS;
+
VA_TRACE(va_TraceRenderPicture, dpy, context, buffers, num_buffers);
+
return ctx->vtable.vaRenderPicture( ctx, context, buffers, num_buffers );
}
@@ -728,8 +807,15 @@ VAStatus vaEndPicture (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
+ if (va_FoolEndPicture(dpy, context)) {
+ VA_TRACE(va_TraceEndPicture, dpy, context);
+ return VA_STATUS_SUCCESS;
+ }
+
va_status = ctx->vtable.vaEndPicture( ctx, context );
+
VA_TRACE(va_TraceEndPicture, dpy, context);
+
return va_status;
}
@@ -742,6 +828,9 @@ VAStatus vaSyncSurface (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
+ if (va_FoolSyncSurface( dpy, render_target))
+ return VA_STATUS_SUCCESS;
+
return ctx->vtable.vaSyncSurface( ctx, render_target );
}
@@ -953,6 +1042,8 @@ VAStatus vaQuerySubpictureFormats (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
+ if (va_FoolQuerySubpictureFormats(dpy, format_list, flags, num_formats))
+ return VA_STATUS_SUCCESS;
return ctx->vtable.vaQuerySubpictureFormats ( ctx, format_list, flags, num_formats);
}
@@ -1096,10 +1187,16 @@ int vaMaxNumDisplayAttributes (
VADisplay dpy
)
{
+ int tmp;
+
if( !vaDisplayIsValid(dpy) )
return 0;
- return CTX(dpy)->max_display_attributes;
+ tmp = CTX(dpy)->max_display_attributes;
+
+ VA_TRACE(va_TraceMaxNumDisplayAttributes, dpy, tmp);
+
+ return tmp;
}
/*
@@ -1118,7 +1215,14 @@ VAStatus vaQueryDisplayAttributes (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
- return ctx->vtable.vaQueryDisplayAttributes ( ctx, attr_list, num_attributes );
+ VAStatus va_status;
+
+ va_status = ctx->vtable.vaQueryDisplayAttributes ( ctx, attr_list, num_attributes );
+
+ VA_TRACE(va_TraceQueryDisplayAttributes, dpy, attr_list, num_attributes);
+
+ return va_status;
+
}
/*
@@ -1137,7 +1241,13 @@ VAStatus vaGetDisplayAttributes (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
- return ctx->vtable.vaGetDisplayAttributes ( ctx, attr_list, num_attributes );
+ VAStatus va_status;
+
+ va_status = ctx->vtable.vaGetDisplayAttributes ( ctx, attr_list, num_attributes );
+
+ VA_TRACE(va_TraceGetDisplayAttributes, dpy, attr_list, num_attributes);
+
+ return va_status;
}
/*
@@ -1156,6 +1266,9 @@ VAStatus vaSetDisplayAttributes (
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
+ VA_TRACE(va_TraceSetDisplayAttributes, dpy, attr_list, num_attributes);
+
+
return ctx->vtable.vaSetDisplayAttributes ( ctx, attr_list, num_attributes );
}