From patchwork Mon May 18 20:29:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: galinart X-Patchwork-Id: 19760 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id ECFB644B999 for ; Mon, 18 May 2020 23:31:08 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D76CB68AB91; Mon, 18 May 2020 23:31:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5EA5668AAF0 for ; Mon, 18 May 2020 23:31:01 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id j5so13418351wrq.2 for ; Mon, 18 May 2020 13:31:01 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=kv4s0LJpIN6NG5yVRpwdIrY4s2hHgz84vGlLecsRg9s=; b=DyIe19ixqyjCPqsR78doNQqT4UvZ4onCJhUzs+SBD7JLEeH1TeN+ekHjjLyV6x2cSJ T36RmabKRrUrjAUiyszg2zLEHK0liY8brG9XNafWFogCHaGENwdNgfQ7ZnXkv0LAw89/ YDkT2L1C7UO2y1ZwjWIKrGp5WCwZPatfDAXybKXO2X+qOZTCXB53CjLGS0uvWS9Y4DSN qEguCFzYl0jNO5alJRg4knj7+WdLBppOGYuEiXQf8XygC0dQqXg62ZfI3x7VQz+d4XpB rj04xMVtUlmsQ8Rbf+trv5mRiL77GLaO/oB1F29OUTYDcIFYO3mcrkA4JPpnMUVPOcGl eRiA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=kv4s0LJpIN6NG5yVRpwdIrY4s2hHgz84vGlLecsRg9s=; b=m7MDFu6W48qSvVNCu5lOejOBKmnfyQAMvM3QkRyrULZIKzFAaC4gMadFlX+qwsmV2I 3vIAg38VWk5M38XLaVDwPE14pazV5dM5O7EnRT5LWI4VuKX7MOMtkit+4OrmPj1GbvME Ueuwx+9O+pmJ8dU5mB0+EjqkRKI3ztzCnsyMQgHVYn6ADWg1NXhuEm5SNB0yDhhpd5tP /3aE98EYGXC5bGX0YC6oZmLuQPu/YC70n9ggYV2OV4zfUdYSppF1wiXyEd7AGJigGEMG StW/9WwbaiUsIEoxuLYz+wFHqdkZ+QI+wrS1nCX2QCPmukf73giSwK/CsfrTZlx0zaE7 3Dhw== X-Gm-Message-State: AOAM5310W8sZa+ggrfAp0vfAiPHsK05fXKPe97wXmwZTt2AxoQgt0ABc OHdH7DBrJLu0WsLSkYIk812m7wYCN5bo9g== X-Google-Smtp-Source: ABdhPJynKcAkL1xt+zZaZig120AD7fn6Kv/QQdeCn+cLclyLKs6S1X0sGsXhLStCstSawkCM0Mu6Lw== X-Received: by 2002:a05:6000:1048:: with SMTP id c8mr21714822wrx.1.1589833860524; Mon, 18 May 2020 13:31:00 -0700 (PDT) Received: from localhost.localdomain ([2a02:c7d:3e2e:7400:bc2c:26b1:105a:3e19]) by smtp.googlemail.com with ESMTPSA id q4sm884330wma.9.2020.05.18.13.30.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2020 13:30:59 -0700 (PDT) From: artem.galin@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 18 May 2020 21:29:30 +0100 Message-Id: <20200518202934.49601-5-artem.galin@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200518202934.49601-1-artem.galin@gmail.com> References: <20200415130741.27263-1-artem.galin@gmail.com> <20200518202934.49601-1-artem.galin@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v6 5/9] libavutil/hwcontext_qsv: enabling d3d11va usage by default, add usage child_device_type argument 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: Artem Galin , robux4@ycbcr.xyz Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Artem Galin Makes selection of d3d11va device type by default and over DirectX 9, which might break users with older drivers/systems. DCH driver with Gen6th support should be still fine. Decode, encode, transcode have been validated. child_device_type option is responsible for d3d11va/dxva2 device selection Usage examples: DirectX 11 -init_hw_device qsv:hw,child_device_type=d3d11va DirectX 9 is still supported but requires explicit selection -init_hw_device qsv:hw,child_device_type=dxva2 Signed-off-by: Artem Galin --- libavutil/hwcontext_qsv.c | 59 +++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index f6dba898b5..488655b686 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -1439,28 +1439,59 @@ static int qsv_device_create(AVHWDeviceContext *ctx, const char *device, ctx->user_opaque = priv; ctx->free = qsv_device_free; - e = av_dict_get(opts, "child_device", NULL, 0); - - child_device_opts = NULL; - if (CONFIG_VAAPI) { + e = av_dict_get(opts, "child_device_type", NULL, 0); + if (e) { + child_device_type = av_hwdevice_find_type_by_name(e ? e->value : NULL); + if (child_device_type == AV_HWDEVICE_TYPE_NONE) { + av_log(ctx, AV_LOG_ERROR, "Unknown child device type " + "\"%s\".\n", e ? e->value : NULL); + return AVERROR(EINVAL); + } + } else if (CONFIG_VAAPI) { child_device_type = AV_HWDEVICE_TYPE_VAAPI; - // libmfx does not actually implement VAAPI properly, rather it - // depends on the specific behaviour of a matching iHD driver when - // used on recent Intel hardware. Set options to the VAAPI device - // creation so that we should pick a usable setup by default if - // possible, even when multiple devices and drivers are available. - av_dict_set(&child_device_opts, "kernel_driver", "i915", 0); - av_dict_set(&child_device_opts, "driver", "iHD", 0); - } else if (CONFIG_DXVA2) + } else if (CONFIG_D3D11VA) { + child_device_type = AV_HWDEVICE_TYPE_D3D11VA; + } else if (CONFIG_DXVA2) { child_device_type = AV_HWDEVICE_TYPE_DXVA2; - else { + } else { av_log(ctx, AV_LOG_ERROR, "No supported child device type is enabled\n"); return AVERROR(ENOSYS); } + child_device_opts = NULL; + switch (child_device_type) { +#if CONFIG_VAAPI + case AV_HWDEVICE_TYPE_VAAPI: + { + // libmfx does not actually implement VAAPI properly, rather it + // depends on the specific behaviour of a matching iHD driver when + // used on recent Intel hardware. Set options to the VAAPI device + // creation so that we should pick a usable setup by default if + // possible, even when multiple devices and drivers are available. + av_dict_set(&child_device_opts, "kernel_driver", "i915", 0); + av_dict_set(&child_device_opts, "driver", "iHD", 0); + } + break; +#endif +#if CONFIG_D3D11VA + case AV_HWDEVICE_TYPE_D3D11VA: + break; +#endif +#if CONFIG_DXVA2 + case AV_HWDEVICE_TYPE_DXVA2: + break; +#endif + default: + { + av_log(ctx, AV_LOG_ERROR, "No supported child device type is enabled\n"); + return AVERROR(ENOSYS); + } + break; + } + + e = av_dict_get(opts, "child_device", NULL, 0); ret = av_hwdevice_ctx_create(&priv->child_device_ctx, child_device_type, e ? e->value : NULL, child_device_opts, 0); - av_dict_free(&child_device_opts); if (ret < 0) return ret;