[Mesa-dev] [PATCH] st/va: Default to YUV420 RT format when creating a config

Mark Thompson sw at jkqxz.net
Mon Oct 17 14:42:05 UTC 2016


The default will only be used if the VAConfigRTFormat attribute is not
provided by the user.
---
On 17/10/16 15:21, Julien Isorce wrote:
> Hi Mark,
> 
> Thx for the patch. I can see it has already landed.
> 
> I just tried it with gstreamer-vaapi and it causes problem since they create the
> config like this for VPP:
> 
> va_status = vaCreateConfig (filter->va_display, VAProfileNone,
>       VAEntrypointVideoProc, NULL, 0, &filter->va_config);
> 
> As you can see num attrivs is 0 so it makes vaQuerySurfaceAttributes to return
> no supported format
> because config->rt_format is 0.
> 
> So I plan to make a patch that looks like this:
> 
> 
> --- a/src/gallium/state_trackers/va/surface.c
> +++ b/src/gallium/state_trackers/va/surface.c
> @@ -419,7 +419,7 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID
> config_id,
>     /* vlVaCreateConfig returns PIPE_VIDEO_PROFILE_UNKNOWN
>      * only for VAEntrypointVideoProc. */
>     if (config->profile == PIPE_VIDEO_PROFILE_UNKNOWN) {
> -      if (config->rt_format == VA_RT_FORMAT_RGB32) {
> +      if (!config->rt_format || config->rt_format == VA_RT_FORMAT_RGB32) {
>           for (j = 0; j < ARRAY_SIZE(vpp_surface_formats); ++j) {
>              attribs[i].type = VASurfaceAttribPixelFormat;
>              attribs[i].value.type = VAGenericValueTypeInteger;
> @@ -427,7 +427,8 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID
> config_id,
>              attribs[i].value.value.i =
> PipeFormatToVaFourcc(vpp_surface_formats[j]);
>              i++;
>           }
> -      } else if (config->rt_format == VA_RT_FORMAT_YUV420) {
> +      }
> +      if (!config->rt_format || config->rt_format == VA_RT_FORMAT_YUV420) {
>           attribs[i].type = VASurfaceAttribPixelFormat;
>           attribs[i].value.type = VAGenericValueTypeInteger;
>           attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE |
> VA_SURFACE_ATTRIB_SETTABLE;
> 
> 
> Will it be ok for whatever test application you are using ?
> 
> Not that the intel va driver always return the full list for vpp.
> 
> Cheers
> Julien

Hi Julien,

On vaCreateConfig(), va.h says:
/**
 * Create a configuration for the decode pipeline
 * it passes in the attribute list that specifies the attributes it cares
 * about, with the rest taking default values.
 */

I think that means that it should be fixed there instead?  That is, if we don't
pass the render target format attribute, just assume a default value which I
suppose should be VA_RT_FORMAT_YUV420.

So, something like the enclosing patch?  (Not tested.)

Thanks,

- Mark


 src/gallium/state_trackers/va/config.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gallium/state_trackers/va/config.c
b/src/gallium/state_trackers/va/config.c
index 2f96eb6..f2a89b7 100644
--- a/src/gallium/state_trackers/va/config.c
+++ b/src/gallium/state_trackers/va/config.c
@@ -182,6 +182,9 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile,
VAEntrypoint entrypoin
    if (!config)
       return VA_STATUS_ERROR_ALLOCATION_FAILED;

+   // Default value, overwritten by the VAConfigRTformat attribute if present.
+   config->rt_format = VA_RT_FORMAT_YUV420;
+
    if (profile == VAProfileNone && entrypoint == VAEntrypointVideoProc) {
       config->entrypoint = VAEntrypointVideoProc;
       config->profile = PIPE_VIDEO_PROFILE_UNKNOWN;
-- 
2.7.4




More information about the mesa-dev mailing list