diff options
author | Carl Zhang <carl.zhang@intel.com> | 2019-12-10 10:34:08 -0500 |
---|---|---|
committer | XinfengZhang <carl.zhang@intel.com> | 2019-12-25 14:31:12 +0800 |
commit | fbd16a1604b1a7a8e4d0ea20d500cfef43b63a3d (patch) | |
tree | b484f8515332a973e9aaed201a16b392495c6c7b | |
parent | 6650b390d1c21ce4abc78234fbc74e02cf25ddca (diff) | |
download | libva-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.c | 56 |
1 files changed, 18 insertions, 38 deletions
@@ -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); |