Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

query the caps before calling vaCopy #235

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 9 additions & 40 deletions videoprocess/vacopy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
}
using namespace std;
static VADisplay va_dpy = NULL;
static VAContextID context_id = 0;

typedef struct _SurfInfo
{
Expand All @@ -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];

Expand Down Expand Up @@ -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 */;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would consider adding new attribs reporting in vainfo.

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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

at line 540 we do:
option.bits.va_copy_mode = g_copy_method; // VA_COPY_MODE_BALANCE;
It would be better :

  1. to make it parametrized via cmd line:
  2. to check if the specified mode (even if it's hardcoded) matches attributes returned from vaGetDisplayAttributes

return VA_STATUS_ERROR_ATTR_NOT_SUPPORTED;


/* Render target surface format check */
VAConfigAttrib attrib;
Expand All @@ -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;
}

Expand All @@ -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);
Expand Down