[Mesa-dev] [PATCH 14/14] st/va/postproc: implement the DRM prime grabber

Leo Liu leo.liu at amd.com
Tue Sep 19 19:05:05 UTC 2017


---
 src/gallium/state_trackers/va/postproc.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/va/postproc.c b/src/gallium/state_trackers/va/postproc.c
index d99fc78..b20f334 100644
--- a/src/gallium/state_trackers/va/postproc.c
+++ b/src/gallium/state_trackers/va/postproc.c
@@ -119,9 +119,15 @@ static VAStatus vlVaPostProcBlit(vlVaDriver *drv, vlVaContext *context,
    struct u_rect src_rect;
    struct u_rect dst_rect;
    bool scale = false;
+   bool grab = false;
    unsigned i;
 
-   if (src->interlaced != dst->interlaced && dst->interlaced)
+   if ((src->buffer_format == PIPE_FORMAT_B8G8R8A8_UNORM ||
+        src->buffer_format == PIPE_FORMAT_B8G8R8X8_UNORM) &&
+       !src->interlaced)
+      grab = true;
+
+   if (src->interlaced != dst->interlaced && dst->interlaced && !grab)
       return VA_STATUS_ERROR_INVALID_SURFACE;
 
    if ((src->width != dst->width || src->height != dst->height) &&
@@ -132,7 +138,7 @@ static VAStatus vlVaPostProcBlit(vlVaDriver *drv, vlVaContext *context,
    if (!src_surfaces || !src_surfaces[0])
       return VA_STATUS_ERROR_INVALID_SURFACE;
 
-   if (scale) {
+   if (scale || (grab && dst->interlaced)) {
       vlVaSurface *surf;
 
       surf = handle_table_get(drv->htab, context->target_id);
@@ -159,6 +165,14 @@ static VAStatus vlVaPostProcBlit(vlVaDriver *drv, vlVaContext *context,
    dst_rect.x1 = dst_region->x + dst_region->width;
    dst_rect.y1 = dst_region->y + dst_region->height;
 
+   if (grab) {
+      vl_compositor_convert_rgb_to_yuv(&drv->cstate, &drv->compositor, 0,
+                                       ((struct vl_video_buffer *)src)->resources[0],
+                                       dst, &src_rect, &dst_rect);
+
+      return VA_STATUS_SUCCESS;
+   }
+
    if (src->interlaced != dst->interlaced) {
       vl_compositor_yuv_deint_full(&drv->cstate, &drv->compositor,
                                    src, dst, &src_rect, &dst_rect,
-- 
2.7.4



More information about the mesa-dev mailing list