vdpau: allow state tracker to report a lower number of macroblocks
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 7 May 2021 01:13:46 +0000 (21:13 -0400)
committerMarge Bot <eric+marge@anholt.net>
Sun, 6 Jun 2021 19:09:44 +0000 (19:09 +0000)
NVIDIA hardware can process tall or wide videos, but not both at the
same time (for some gens). This limit is provided in units of
macroblocks.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Leo Liu <leo.liu@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10677>

src/gallium/frontends/vdpau/query.c
src/gallium/include/pipe/p_video_enums.h

index 701d9f2..a1e67e3 100644 (file)
@@ -205,7 +205,11 @@ vlVdpDecoderQueryCapabilities(VdpDevice device, VdpDecoderProfile profile,
                                              PIPE_VIDEO_CAP_MAX_HEIGHT);
       *max_level = pscreen->get_video_param(pscreen, p_profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
                                             PIPE_VIDEO_CAP_MAX_LEVEL);
-      *max_macroblocks = (*max_width/16)*(*max_height/16);
+      *max_macroblocks = pscreen->get_video_param(pscreen, p_profile, PIPE_VIDEO_ENTRYPOINT_BITSTREAM,
+                                            PIPE_VIDEO_CAP_MAX_MACROBLOCKS);
+      if (*max_macroblocks == 0) {
+         *max_macroblocks = (*max_width/16)*(*max_height/16);
+      }
    } else {
       *max_width = 0;
       *max_height = 0;
index 8719b1f..e26f73f 100644 (file)
@@ -88,7 +88,8 @@ enum pipe_video_cap
    PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE = 6,
    PIPE_VIDEO_CAP_SUPPORTS_INTERLACED = 7,
    PIPE_VIDEO_CAP_MAX_LEVEL = 8,
-   PIPE_VIDEO_CAP_STACKED_FRAMES = 9
+   PIPE_VIDEO_CAP_STACKED_FRAMES = 9,
+   PIPE_VIDEO_CAP_MAX_MACROBLOCKS = 10,
 };
 
 enum pipe_video_entrypoint