From 53eaef6777662db738476559c0a3dda9ecc7ede3 Mon Sep 17 00:00:00 2001 From: Carl Zhang Date: Sun, 25 Apr 2021 13:27:23 -0400 Subject: [PATCH] query the caps before calling vaCopy Signed-off-by: Carl Zhang --- videoprocess/vacopy.cpp | 49 ++++++++--------------------------------- 1 file changed, 9 insertions(+), 40 deletions(-) diff --git a/videoprocess/vacopy.cpp b/videoprocess/vacopy.cpp index 8bee4c69..9b01c53b 100644 --- a/videoprocess/vacopy.cpp +++ b/videoprocess/vacopy.cpp @@ -49,7 +49,6 @@ } using namespace std; static VADisplay va_dpy = NULL; -static VAContextID context_id = 0; typedef struct _SurfInfo { @@ -69,7 +68,6 @@ typedef struct _SurfInfo static SurfInfo g_src; static SurfInfo g_dst; -static VAConfigID config_id = 0; static FILE* g_config_file_fd = NULL; static char g_config_file_name[MAX_LEN]; @@ -561,25 +559,15 @@ vpp_context_create() va_status = vaInitialize(va_dpy, &major_ver, &minor_ver); assert(va_status == VA_STATUS_SUCCESS); - /* Check whether VPP is supported by driver */ - VAEntrypoint entrypoints[5]; - int32_t num_entrypoints; - num_entrypoints = vaMaxNumEntrypoints(va_dpy); - va_status = vaQueryConfigEntrypoints(va_dpy, - VAProfileNone, - entrypoints, - &num_entrypoints); - CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints"); - - for (j = 0; j < num_entrypoints; j++) { - if (entrypoints[j] == VAEntrypointVideoProc) - break; - } - - if (j == num_entrypoints) { - printf("VPP is not supported by driver\n"); - assert(0); - } + /* Check whether vaCopy is supported by driver */; + VADisplayAttribute va_disp_attr; + va_disp_attr.type = VADisplayAttribCopy; + va_status = vaGetDisplayAttributes(va_dpy, &va_disp_attr, 1); + + CHECK_VASTATUS(va_status, "vaGetDisplayAttrib"); + if(va_disp_attr.value == VA_ATTRIB_NOT_SUPPORTED || va_disp_attr.value == 0) + return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED; + /* Render target surface format check */ VAConfigAttrib attrib; @@ -602,23 +590,6 @@ vpp_context_create() va_status = create_surface(&g_out_surface_id, g_dst); CHECK_VASTATUS(va_status, "vaCreateSurfaces for output"); - va_status = vaCreateConfig(va_dpy, - VAProfileNone, - VAEntrypointVideoProc, - &attrib, - 1, - &config_id); - CHECK_VASTATUS(va_status, "vaCreateConfig"); - - va_status = vaCreateContext(va_dpy, - config_id, - g_dst.width, - g_dst.height, - VA_PROGRESSIVE, - &g_out_surface_id, - 1, - &context_id); - CHECK_VASTATUS(va_status, "vaCreateContext"); return va_status; } @@ -628,8 +599,6 @@ vpp_context_destroy() /* Release resource */ vaDestroySurfaces(va_dpy, &g_in_surface_id, 1); vaDestroySurfaces(va_dpy, &g_out_surface_id, 1); - vaDestroyContext(va_dpy, context_id); - vaDestroyConfig(va_dpy, config_id); vaTerminate(va_dpy); va_close_display(va_dpy);