summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Zhang <carl.zhang@intel.com>2019-12-10 10:34:08 -0500
committerXinfengZhang <carl.zhang@intel.com>2019-12-25 14:31:12 +0800
commitfbd16a1604b1a7a8e4d0ea20d500cfef43b63a3d (patch)
treeb484f8515332a973e9aaed201a16b392495c6c7b
parent6650b390d1c21ce4abc78234fbc74e02cf25ddca (diff)
downloadlibva-fbd16a1604b1a7a8e4d0ea20d500cfef43b63a3d.tar.gz
enable the mutiple driver selection logic inside vaInitialize
add multiple backend driver support part 2 try to open driver one by one 1. get candidates number 2. try to load driver one by one until one driver loaded successfully Signed-off-by: Carl Zhang <carl.zhang@intel.com>
-rw-r--r--va/va.c56
1 files changed, 18 insertions, 38 deletions
diff --git a/va/va.c b/va/va.c
index 39a72dc..952cfd9 100644
--- a/va/va.c
+++ b/va/va.c
@@ -699,15 +699,13 @@ VAStatus vaInitialize (
int *minor_version /* out */
)
{
- const char *driver_name_env = NULL;
char *driver_name = NULL;
+ int num_candidates = 1;
+ int candidate_index = 0;
VAStatus vaStatus;
- VADriverContextP ctx;
CHECK_DISPLAY(dpy);
- ctx = CTX(dpy);
-
va_TraceInit(dpy);
va_FoolInit(dpy);
@@ -716,45 +714,27 @@ VAStatus vaInitialize (
va_infoMessage(dpy, "VA-API version %s\n", VA_VERSION_S);
- vaStatus = va_getDriverNameByIndex(dpy, &driver_name, 0);
-
- if (!ctx->override_driver_name) {
- va_infoMessage(dpy, "va_getDriverNameByIndex() returns %d\n", vaStatus);
-
- driver_name_env = getenv("LIBVA_DRIVER_NAME");
- } else if (vaStatus == VA_STATUS_SUCCESS) {
- if (driver_name)
- free(driver_name);
-
- driver_name = strdup(ctx->override_driver_name);
- if (!driver_name) {
- vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
- va_errorMessage(dpy, "vaInitialize() failed with %s, out of memory\n",
- vaErrorStr(vaStatus));
- return vaStatus;
- }
- va_infoMessage(dpy, "User requested driver '%s'\n", driver_name);
+ vaStatus = va_getDriverNumCandidates(dpy, &num_candidates);
+ if (vaStatus != VA_STATUS_SUCCESS) {
+ num_candidates = 1;
}
+ for (candidate_index = 0; candidate_index < num_candidates; candidate_index ++) {
+ vaStatus = va_getDriverNameByIndex(dpy, &driver_name, candidate_index);
+ if(vaStatus != VA_STATUS_SUCCESS) {
+ va_errorMessage(dpy, "vaGetDriverNameByIndex() failed with %s, driver_name = %s\n", vaErrorStr(vaStatus), driver_name);
+ break;
+ }
+ vaStatus = va_openDriver(dpy, driver_name);
+ va_infoMessage(dpy, "va_openDriver() returns %d\n", vaStatus);
- if (driver_name_env && (geteuid() == getuid())) {
- /* Don't allow setuid apps to use LIBVA_DRIVER_NAME */
- if (driver_name) /* memory is allocated in va_getDriverNameByIndex */
- free(driver_name);
+ if (vaStatus == VA_STATUS_SUCCESS) {
+ break;
+ }
- driver_name = strdup(driver_name_env);
- vaStatus = VA_STATUS_SUCCESS;
- va_infoMessage(dpy, "User requested driver '%s'\n", driver_name);
}
- if ((VA_STATUS_SUCCESS == vaStatus) && (driver_name != NULL)) {
- vaStatus = va_openDriver(dpy, driver_name);
- va_infoMessage(dpy, "va_openDriver() returns %d\n", vaStatus);
-
- *major_version = VA_MAJOR_VERSION;
- *minor_version = VA_MINOR_VERSION;
- } else
- va_errorMessage(dpy, "va_getDriverNameByIndex() failed with %s,driver_name=%s\n",
- vaErrorStr(vaStatus), driver_name);
+ *major_version = VA_MAJOR_VERSION;
+ *minor_version = VA_MINOR_VERSION;
if (driver_name)
free(driver_name);