ffmpeg | branch: master | Mark Thompson <s...@jkqxz.net> | Fri Aug 28 23:15:41 
2020 +0100| [303d252a4b4c104685dc46152c26abaf7ff2ce60] | committer: Mark 
Thompson

hwcontext_vaapi: Don't require a render node when deriving from DRM

The V4L2 driver does not actually have an associated DRM device at all, so
users work around the requirement by giving libva an unrelated display-only
device instead (which is fine, because it doesn't actually do anything with
that device).  This was broken by bc9b6358fb7315c0173de322472641766f6289da
forcing a render node, because the display-only device did not have an
associated render node to use.  Fix that by just passing through the
original non-render DRM fd if we can't find a render node.

Reported-by: Paul Kocialkowski <paul.kocialkow...@bootlin.com>
Tested-by: Paul Kocialkowski <paul.kocialkow...@bootlin.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=303d252a4b4c104685dc46152c26abaf7ff2ce60
---

 libavutil/hwcontext_vaapi.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
index 38bdeb7820..2227d6ed69 100644
--- a/libavutil/hwcontext_vaapi.c
+++ b/libavutil/hwcontext_vaapi.c
@@ -1677,20 +1677,24 @@ static int vaapi_device_derive(AVHWDeviceContext *ctx,
             } else {
                 render_node = drmGetRenderDeviceNameFromFd(src_hwctx->fd);
                 if (!render_node) {
-                    av_log(ctx, AV_LOG_ERROR, "Failed to find a render node "
-                           "matching the DRM device.\n");
-                    return AVERROR(ENODEV);
-                }
-                fd = open(render_node, O_RDWR);
-                if (fd < 0) {
-                    av_log(ctx, AV_LOG_ERROR, "Failed to open render node %s"
-                           "matching the DRM device.\n", render_node);
+                    av_log(ctx, AV_LOG_VERBOSE, "Using non-render node "
+                           "because the device does not have an "
+                           "associated render node.\n");
+                    fd = src_hwctx->fd;
+                } else {
+                    fd = open(render_node, O_RDWR);
+                    if (fd < 0) {
+                        av_log(ctx, AV_LOG_VERBOSE, "Using non-render node "
+                               "because the associated render node "
+                               "could not be opened.\n");
+                        fd = src_hwctx->fd;
+                    } else {
+                        av_log(ctx, AV_LOG_VERBOSE, "Using render node %s "
+                               "in place of non-render DRM device.\n",
+                               render_node);
+                    }
                     free(render_node);
-                    return AVERROR(errno);
                 }
-                av_log(ctx, AV_LOG_VERBOSE, "Using render node %s in place "
-                       "of non-render DRM device.\n", render_node);
-                free(render_node);
             }
         }
 #else

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

To unsubscribe, visit link above, or email
ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to