From patchwork Tue Jun 27 06:38:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Fort X-Patchwork-Id: 4131 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.76 with SMTP id 73csp1719751vsb; Mon, 26 Jun 2017 23:44:15 -0700 (PDT) X-Received: by 10.28.143.208 with SMTP id r199mr1342239wmd.86.1498545855144; Mon, 26 Jun 2017 23:44:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1498545855; cv=none; d=google.com; s=arc-20160816; b=TpzRi4ihE0Hwywkybm+AcaG+iDuum7BlYVSojIdkR+Rjd1kquten+1UB3ymwLdk0hh djAOh5iV+fHh87KP9Gut0ef6Jz3df0/YJoGXUAQhmkDUxS/VkjxdSxVx4Bt6jtdTITZ3 7lDM/07IhuQnIs8/IBtwsz+eA/nisyiGnCEYbv3Dsny7oZD0AOLWKe6cnCqVNcCZIxPA qBg+y9D0Vd6K6wmN8XfWSJeWGqIPnH9UQGPCfcXkBuIV9NU1YLVRgByk570PVZKbWHHk tGPKLvW9ED/GcBjizdHi/JQ3mXYtdjPCN4ecEgASsIwFxjhG1sEaOBqrlpQO7T38yRmD LbuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=RLgiryKNx9Qj/qJgbp5T+FItYE/FRWDUL5d8ugvWN2c=; b=h7JU3EHlUZoPPGH1458cJ5f6k9V5Mf6GZrDUZiylDPin43sMuYWflrA0LuBicfSxH4 l3vnGs3yXc/xB9i40fqiK10AmgpbRI9WWJC81eH8syc+XMmOJm5QSlc529Noi7SgokVv YeTrcCwqtPa2QG0116MtNAVPkoHs0YF0TSBJPXBBX68OpQfaaKo061PuM0Vt3/UrACC9 3634DHNvd0LBe7bVJhz0v4mmndbZ4EpIzMFX0ouMgZ709UKvtBSfH8Ly8rW2pjNJBmLv Zf8vnMDPGiVJzMEDRdPgesbS8ydoTvpge06DtQgekCd/eClVOUFTPQjq5oXXnJ59HJ29 6IvA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.b=kAYfw58o; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n64si1761633wme.42.2017.06.26.23.44.13; Mon, 26 Jun 2017 23:44:15 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.b=kAYfw58o; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8E7EA68A36C; Tue, 27 Jun 2017 09:44:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2265368A35B for ; Tue, 27 Jun 2017 09:44:03 +0300 (EEST) Received: by mail-wm0-f65.google.com with SMTP id 131so3945280wmq.2 for ; Mon, 26 Jun 2017 23:44:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=SiW7hr8MagMwmXkcT5emQj9FZ5+fP9OcScjUTLrwgqw=; b=kAYfw58oxelSh6leBDDIMnzIzoDjFhFV+yzQZxdfTWw7U3GeUTaElWLxjAAHbTkos3 mLqYdslwwmfv9OKiwfed2tmZaX8MCt2fAAXPlpbUfgKppLQl3/rzw8iV9qe/NJjbLN0g zFnp/cZqw15vgHVKLObMbOAE/oknhPxiJXnPn1SyO2VeHKOdHFttoGnN5Fpipg8NyWI/ PICCK0lXEqf7gB6Hw0Pq42P2R3B+wmTmeKEeNUSJ0nv/sUygGpNOSpcmE5uz5K8V6F4U rj7U7JAsSaedb+04fUtmBQbuJ1FuSNq3YW6e5s7Adu8RsXqr+zALuvsEdigy4tYa8Kxr rtzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=SiW7hr8MagMwmXkcT5emQj9FZ5+fP9OcScjUTLrwgqw=; b=HFTNZ6Vz6LIP1EtrGHwMkJDPT7LS1+nP1+HaRZEfdxu3jhwiHpyZ0R7Vg1kdQLFoKX O2N1Uiodki55iFkAVt00TsKhfrm6SuJNB1gIqg2ZUjQQMJzi9cfXZsWZeQsv7qiedlra ItAX+As7mmrjO8gymeDcxQSJH1N8MgDWGp4sKPf9bOvaYB2mhcdauASgIf2VZ+5wYyq/ 72dWETxGSiNZQ6rxVHeKhg7QFq07avWiLyRC+hFwnyogxXkTilFfTqDCaXTCMN/UMJ2z xtNFyHFmyIGgF+uwEx+m0wEbvK8wFhbbzvO+HlAPEzhv98RUUUCsxmVu+qCs3uRIz97P sbfg== X-Gm-Message-State: AKS2vOwd0wHmsbkRKZeRo69iTCd+M5Lz8f4UP5L9jIoCyVba3PWBPiIH yb/CIN++y6z9RyQC X-Received: by 10.28.51.212 with SMTP id z203mr2111245wmz.103.1498545525693; Mon, 26 Jun 2017 23:38:45 -0700 (PDT) Received: from djinn64.lamazure.fr (ARennes-655-1-6-173.w109-218.abo.wanadoo.fr. [109.218.93.173]) by smtp.gmail.com with ESMTPSA id y9sm18448292wry.32.2017.06.26.23.38.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 26 Jun 2017 23:38:45 -0700 (PDT) From: David Fort X-Google-Original-From: David Fort To: ffmpeg-devel@ffmpeg.org Date: Tue, 27 Jun 2017 08:38:43 +0200 Message-Id: <1498545523-5725-1-git-send-email-contact@hardening-consulting.com> X-Mailer: git-send-email 2.7.4 Subject: [FFmpeg-devel] [PATCH] Add wayland support for VAAPI X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: David Fort MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Wayland environment became quite popular with gnome 3. This patch adds the ability to initialize the VAAPI accelerator from a wayland display. Signed-off-by: David Fort --- configure | 4 ++++ libavutil/hwcontext_vaapi.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/configure b/configure index 6ca919b..b2e8b1c 100755 --- a/configure +++ b/configure @@ -2072,6 +2072,7 @@ HAVE_LIST=" threads vaapi_drm vaapi_x11 + vaapi_wayland vdpau_x11 winrt " @@ -6132,6 +6133,9 @@ enabled vaapi && disable vaapi enabled vaapi && + check_lib vaapi_wayland "va/va.h va/va_wayland.h" vaGetDisplayWl -lva -lva-wayland -lwayland-client + +enabled vaapi && check_lib vaapi_drm "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm enabled vaapi && diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index 3970726..5fb607f 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -24,6 +24,9 @@ #if HAVE_VAAPI_DRM # include #endif +#if HAVE_VAAPI_WAYLAND +# include +#endif #include #if HAVE_UNISTD_H @@ -47,6 +50,9 @@ typedef struct VAAPIDevicePriv { #endif int drm_fd; +#if HAVE_VAAPI_WAYLAND + struct wl_display *wl_display; +#endif } VAAPIDevicePriv; typedef struct VAAPISurfaceFormat { @@ -905,6 +911,10 @@ static void vaapi_device_free(AVHWDeviceContext *ctx) if (hwctx->display) vaTerminate(hwctx->display); +#if HAVE_VAAPI_WAYLAND + if (priv->wl_display) + wl_display_disconnect(priv->wl_display); +#endif #if HAVE_VAAPI_X11 if (priv->x11_display) XCloseDisplay(priv->x11_display); @@ -934,6 +944,29 @@ static int vaapi_device_create(AVHWDeviceContext *ctx, const char *device, ctx->user_opaque = priv; ctx->free = vaapi_device_free; +#if HAVE_VAAPI_WAYLAND + // Try to open the device as a wayland display. + if (!display && !(device && device[0] == '/')) { + priv->wl_display = wl_display_connect(device); + if (!priv->wl_display) { + av_log(ctx, AV_LOG_VERBOSE, "Cannot open wayland display " + "%s.\n", device); + } else { + wl_display_roundtrip (priv->wl_display); + + display = vaGetDisplayWl(priv->wl_display); + if (!display) { + av_log(ctx, AV_LOG_ERROR, "Cannot open a VA display " + "from wayland display %s.\n", device); + return AVERROR_UNKNOWN; + } + + av_log(ctx, AV_LOG_VERBOSE, "Opened VA display via " + "wayland display %s.\n", device); + } + } +#endif + #if HAVE_VAAPI_X11 if (!display && !(device && device[0] == '/')) { // Try to open the device as an X11 display.