Dear mailing list, Please find in the attaches patch an enhancement to vainfo to report VPP capabilities.
Best regards, Josep Torra
From e5dbc1df83ad82eac0232d51bf125c8f5284b277 Mon Sep 17 00:00:00 2001 From: Josep Torra <[email protected]> Date: Sat, 15 Aug 2015 18:11:13 +0200 Subject: [PATCH] Add reporting of VPP capabilities to vainfo Make vainfo report about the video post processing capabilities supported by the system. --- test/vainfo/vainfo.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 2 deletions(-) diff --git a/test/vainfo/vainfo.c b/test/vainfo/vainfo.c index 4ccfe60..8c0e80b 100644 --- a/test/vainfo/vainfo.c +++ b/test/vainfo/vainfo.c @@ -29,6 +29,7 @@ #include <stdlib.h> #include "va_display.h" #include "va/sysdeps.h" +#include "va/va_vpp.h" #define CHECK_VASTATUS(va_status,func, ret) \ if (va_status != VA_STATUS_SUCCESS) { \ @@ -86,6 +87,37 @@ static char * entrypoint_string(VAEntrypoint entrypoint) return "<unknown entrypoint>"; } +static char * deinterlacing_string (VAProcDeinterlacingType type) +{ + switch (type) { + case VAProcDeinterlacingNone: return "VAProcDeinterlacingNone"; + case VAProcDeinterlacingBob: return "VAProcDeinterlacingBob"; + case VAProcDeinterlacingWeave: return "VAProcDeinterlacingWeave"; + case VAProcDeinterlacingMotionAdaptive: return "VAProcDeinterlacingMotionAdaptive"; + case VAProcDeinterlacingMotionCompensated: return "VAProcDeinterlacingMotionCompensated"; + default: + break; + } + return "<unknown deinterlacing>"; +} + +static char * colorbalance_string (VAProcColorBalanceType type) +{ + switch (type) { + case VAProcColorBalanceNone: return "VAProcColorBalanceNone"; + case VAProcColorBalanceHue: return "VAProcColorBalanceHue"; + case VAProcColorBalanceSaturation: return "VAProcColorBalanceSaturation"; + case VAProcColorBalanceBrightness: return "VAProcColorBalanceBrightness"; + case VAProcColorBalanceContrast: return "VAProcColorBalanceContrast"; + case VAProcColorBalanceAutoSaturation: return "VAProcColorBalanceAutoSaturation"; + case VAProcColorBalanceAutoBrightness: return "VAProcColorBalanceAutoBrightness"; + case VAProcColorBalanceAutoContrast: return "VAProcColorBalanceAutoContrast"; + default: + break; + } + return "<unknown colorbalance>"; +} + int main(int argc, const char* argv[]) { VADisplay va_dpy; @@ -94,11 +126,15 @@ int main(int argc, const char* argv[]) const char *driver; const char *name = strrchr(argv[0], '/'); VAProfile profile, *profile_list = NULL; - int num_profiles, max_num_profiles, i; + int num_profiles, max_num_profiles, i, j; VAEntrypoint entrypoint, entrypoints[10]; int num_entrypoint; int ret_val = 0; - + VAConfigID va_config = VA_INVALID_ID; + VAContextID vpp_ctx = VA_INVALID_ID; + VAProcFilterType *filters = NULL; + int num_filters = VAProcFilterCount; + if (name) name++; else @@ -148,8 +184,89 @@ int main(int argc, const char* argv[]) for (entrypoint = 0; entrypoint < num_entrypoint; entrypoint++) printf(" %-32s: %s\n", profile_str, entrypoint_string(entrypoints[entrypoint])); } + + va_status = vaCreateConfig(va_dpy, VAProfileNone, + VAEntrypointVideoProc, NULL, 0, &va_config); + + va_status = vaCreateContext(va_dpy, va_config, 0, 0, 0, + NULL, 0, &vpp_ctx); + + filters = malloc(num_filters * sizeof(*filters)); + if (!filters) + goto error; + va_status = vaQueryVideoProcFilters(va_dpy, vpp_ctx, filters, &num_filters); + + if (va_status == VA_STATUS_ERROR_MAX_NUM_EXCEEDED) { + VAProcFilterType * const new_filters = + realloc(filters, num_filters * sizeof(*new_filters)); + if (!new_filters) + goto error; + filters = new_filters; + + va_status = vaQueryVideoProcFilters(va_dpy, vpp_ctx, filters, &num_filters); + } + + printf("\n%s: Supported VPP filters\n", name); + for (i = 0; i < num_filters; i++) { + switch (filters[i]) { + case VAProcFilterNoiseReduction: + { + unsigned int num = 1; + VAProcFilterCap caps[num]; + vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, filters[i], &caps, &num); + printf (" %-32s: %4.2f %4.2f %4.2f %4.5f\n", + "VAProcFilterNoiseReduction", caps[0].range.min_value, + caps[0].range.max_value, caps[0].range.default_value, + caps[0].range.step); + break; + } + case VAProcFilterDeinterlacing: + { + unsigned int num = VAProcDeinterlacingCount; + VAProcFilterCapDeinterlacing caps[num]; + vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, filters[i], &caps, &num); + printf (" %-32s:\n", "VAProcFilterDeinterlacing"); + for (j = 0; j < num; j++) + printf (" %s\n", deinterlacing_string (caps[j].type)); + break; + } + case VAProcFilterSharpening: + { + unsigned int num = 1; + VAProcFilterCap caps[num]; + vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, filters[i], &caps, &num); + printf (" %-32s: %4.2f %4.2f %4.2f %4.5f\n", + "VAProcFilterSharpening", caps[0].range.min_value, + caps[0].range.max_value, caps[0].range.default_value, + caps[0].range.step); + break; + } + case VAProcFilterColorBalance: + { + unsigned int num = VAProcColorBalanceCount; + VAProcFilterCapColorBalance caps[num]; + vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx, filters[i], &caps, &num); + printf (" %-32s:\n", "VAProcFilterColorBalance"); + for (j = 0; j < num; j++) + printf (" %-28s: %4.2f %4.2f %4.2f %4.2f\n", + colorbalance_string (caps[j].type), caps[j].range.min_value, + caps[j].range.max_value, caps[j].range.default_value, + caps[j].range.step); + break; + } + default: + break; + } + } error: + if (filters) + free (filters); + if (vpp_ctx != VA_INVALID_ID) + vaDestroyContext(va_dpy, vpp_ctx); + if (va_config != VA_INVALID_ID) + vaDestroyConfig(va_dpy, va_config); + free(profile_list); vaTerminate(va_dpy); va_close_display(va_dpy); -- 2.5.0
_______________________________________________ Libva mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libva
