frontends/va: fix gst videotestsrc h264 enc fail issue.
authorRuijing Dong <ruijing.dong@amd.com>
Thu, 8 Dec 2022 21:10:14 +0000 (16:10 -0500)
committerEric Engestrom <eric@engestrom.ch>
Wed, 14 Dec 2022 20:47:01 +0000 (20:47 +0000)
problem:
when doing "gst-launch-1.0 -v videotestsrc num-buffer=10 !
   vaapih264enc ! fakeink"

The command will fail due to gst will fetch the first
available supported format in the list, it becomes P010_LE
due to the commit in

[0b02db3007]
frontends/va: fixed av1 decoding 10bit ffmpeg output YUV issue

fix:
move the P010_LE code block to the end of the function, the sequence
of the supported formats restored to its original.

cc: mesa-stable

Reviewed-by: Boyuan Zhang <Boyuan.Zhang@amd.com>
Signed-off-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20242>
(cherry picked from commit a73e86e0a5eb58e2f25f7b7419a78c122cc5ab1a)

.pick_status.json
src/gallium/frontends/va/surface.c

index f175404..2cb6b52 100644 (file)
         "description": "frontends/va: fix gst videotestsrc h264 enc fail issue.",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
index b2c745a..94a2194 100644 (file)
@@ -495,42 +495,43 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config_id,
       attribs[i].value.value.i = VA_FOURCC_NV12;
       i++;
    }
-   if (config->rt_format & VA_RT_FORMAT_YUV420_10 ||
-       (config->rt_format & VA_RT_FORMAT_YUV420 &&
-        config->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE)) {
+
+   if (config->rt_format & VA_RT_FORMAT_YUV400) {
       attribs[i].type = VASurfaceAttribPixelFormat;
       attribs[i].value.type = VAGenericValueTypeInteger;
       attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE;
-      attribs[i].value.value.i = VA_FOURCC_P010;
+      attribs[i].value.value.i = VA_FOURCC_Y800;
       i++;
+   }
+
+   if (config->rt_format & VA_RT_FORMAT_YUV422) {
       attribs[i].type = VASurfaceAttribPixelFormat;
       attribs[i].value.type = VAGenericValueTypeInteger;
       attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE;
-      attribs[i].value.value.i = VA_FOURCC_P016;
+      attribs[i].value.value.i = VA_FOURCC_YUY2;
       i++;
    }
 
-   if (config->rt_format & VA_RT_FORMAT_YUV400) {
+   if (config->rt_format & VA_RT_FORMAT_YUV444) {
       attribs[i].type = VASurfaceAttribPixelFormat;
       attribs[i].value.type = VAGenericValueTypeInteger;
       attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE;
-      attribs[i].value.value.i = VA_FOURCC_Y800;
+      attribs[i].value.value.i = VA_FOURCC_444P;
       i++;
    }
 
-   if (config->rt_format & VA_RT_FORMAT_YUV422) {
+   if (config->rt_format & VA_RT_FORMAT_YUV420_10 ||
+       (config->rt_format & VA_RT_FORMAT_YUV420 &&
+        config->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE)) {
       attribs[i].type = VASurfaceAttribPixelFormat;
       attribs[i].value.type = VAGenericValueTypeInteger;
       attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE;
-      attribs[i].value.value.i = VA_FOURCC_YUY2;
+      attribs[i].value.value.i = VA_FOURCC_P010;
       i++;
-   }
-
-   if (config->rt_format & VA_RT_FORMAT_YUV444) {
       attribs[i].type = VASurfaceAttribPixelFormat;
       attribs[i].value.type = VAGenericValueTypeInteger;
       attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE;
-      attribs[i].value.value.i = VA_FOURCC_444P;
+      attribs[i].value.value.i = VA_FOURCC_P016;
       i++;
    }