From patchwork Tue Jan 16 13:08:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: wm4 X-Patchwork-Id: 7298 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.78.2 with SMTP id r2csp4184718jaa; Tue, 16 Jan 2018 05:08:40 -0800 (PST) X-Google-Smtp-Source: ACJfBosGDTogL6NN2jbXVEsWqHf7ivEPg45eMPQtG6nPswi0v52sPdReQYX9NCFhH0pRHebs6fI7 X-Received: by 10.28.109.139 with SMTP id b11mr14504553wmi.17.1516108120499; Tue, 16 Jan 2018 05:08:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516108120; cv=none; d=google.com; s=arc-20160816; b=HbpG0X4WYkG9CqLvEa1inNEv0vVxIz0Aw9xwiX/at6fm3OOkAaMR5QuLnYctoV0PuC eVGU6uNnvkCUyu+9ZBSXSNpfPXSjdQ9+vBINxZhoRthYrGxydroXQC6OvuJOxi0jGZZm 1fDQfUY9ksOsYjU07gO6yPqhZBgRheciCez81rXdSpX/dzVvig2ODF9QxTXnM1GClJu9 iIhIPBh9LJS12cUuLzg6qjwbDRnuSOYnzYCIGsPBBT5kDdYCbQ66jvhl3HAaOeibqMcN gyDxqvcuURkdnob0HYT93HR61uQvtldG3NR8Ekcez5YGCqlSs/KCE2zcDDuG/bf1C54z KDSQ== 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=cZd2dVU24jgWne2ImxrgPzU633F+w4g++KT+hbS6NUY=; b=sQOQnY6OdDMYQv5pq9U+S+t6NNsgFnqvbYoIk7RKZjc1i9whKxryK96904qfepWuFq F4AWYkUiqZVTeAI0TkVEncBChhXsL1e4RHXF9xtCBZhuHAFqx0AQWi+ItOiO/VxflUB+ MxRUY1AHEQOd7MwpcxQQvj80uAe0OQBghS3xuaiG6m+NdeebZQ7VJchARdkOypgJibWX p2WHfha4Xye4TgTfq+LOBFtFgLlZLIF8TRdwn58R6i3Mf/NzIAL4AxNcSw+z5LyU8rwK hVIguhu6/bwMFxfB9jbRCHb3Ug4K0+sHvdfqg75dZhkv3KfJJlkSUNiO3rd95lCGraXK +4ZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@googlemail.com header.s=20161025 header.b=nKMrORb6; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w11si1928632wrg.493.2018.01.16.05.08.39; Tue, 16 Jan 2018 05:08:40 -0800 (PST) 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=@googlemail.com header.s=20161025 header.b=nKMrORb6; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1DD92689EC6; Tue, 16 Jan 2018 15:08:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f53.google.com (mail-wm0-f53.google.com [74.125.82.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 717B66891D0 for ; Tue, 16 Jan 2018 15:08:29 +0200 (EET) Received: by mail-wm0-f53.google.com with SMTP id i186so8226945wmi.4 for ; Tue, 16 Jan 2018 05:08:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=sH/xJmoWap8VHICnVSbJqWmRIhggTh7fa7iovwEJ54U=; b=nKMrORb6Ol2uceyADriPn9bJnKtuxXkalq7CqBBImi54bergLTS8CZc2ekHBnPjRhp 02gtsNf22klCcosjH+MriNcVY5I6cadbegbT7V3+GrZgsWq9O2TYFoX87nGqHGq4QCwQ AY2v0Ru1vtmfovOlb5BseWaUe31epSB1QuSVUYoedGpkDqv2APVeVzX22Y7uwAAovJZy R7PWuGwk7yNqC+fm/MBE+5YnXGYn6wuN+ffrOnoKtCue7WYZPLlHrFPHYGvzYOGQcMON j3tBS+ABOebMsqhU7+NWMsdTUOfi/d5uU2brpm8bj4r+qbC+pAFJGSDVruRXNfiX/BaC J6sQ== 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=sH/xJmoWap8VHICnVSbJqWmRIhggTh7fa7iovwEJ54U=; b=Rry9L//ZawssH4YjrRSzEknWVMYxMmurjfORtNmyTbG0Seg67GOl/9EKIin0lGNpEt xGl3Uth75alS3i4rIAUTWKsTGkNANCw/iM+qTlU1XCp6cXnG0GFLkVvqNFgcilPIc+3i o9lBWk2qOGYK+zJs18NTOrXZ68f/z3gvJPdL85gTn4tePZwirWxdOb0uJOEtjQuZN+Cy C6kO+I92IdHYCbxCIAc8zAexSbg0BVBs4xz+lYpt57yweUwki+sUvdVsxanUIdJGKYhB g0oi5ue0wZI7jMhY8ojtseWxeWXoCFw3VZCpcExBp8fHOdgalm62eByDclkfgWR4X/j8 EcuQ== X-Gm-Message-State: AKwxytdXG7IMSLQD+GlEjVMRKQd6E7hDtu8A9J3l1q2y6FW6AbrmLZlY /ticuFHSDpEGez6YyU/h9thIRQ== X-Received: by 10.28.112.13 with SMTP id l13mr13552932wmc.16.1516108110626; Tue, 16 Jan 2018 05:08:30 -0800 (PST) Received: from debian.speedport.ip (p2003006CCD4EDC542090E2A8DCD919CC.dip0.t-ipconnect.de. [2003:6c:cd4e:dc54:2090:e2a8:dcd9:19cc]) by smtp.googlemail.com with ESMTPSA id p21sm1594946wmc.45.2018.01.16.05.08.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Jan 2018 05:08:29 -0800 (PST) From: wm4 To: ffmpeg-devel@ffmpeg.org Date: Tue, 16 Jan 2018 14:08:37 +0100 Message-Id: <20180116130837.22233-1-nfxjfg@googlemail.com> X-Mailer: git-send-email 2.15.1 Subject: [FFmpeg-devel] [PATCH] hwcontext_d3d11va: implement av_hwdevice_get_hwframe_constraints() 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: wm4 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" D3D11 has rather fine grained per texture format capabilities for different uses that can be queried at runtime. Since we don't know at the time av_hwdevice_get_hwframe_constraints() is called what the user wants to do with this, we simply return all formats that have the most basic support. --- libavutil/hwcontext_d3d11va.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c index 2f97156a54..960883c9d8 100644 --- a/libavutil/hwcontext_d3d11va.c +++ b/libavutil/hwcontext_d3d11va.c @@ -120,6 +120,38 @@ static void d3d11va_frames_uninit(AVHWFramesContext *ctx) s->staging_texture = NULL; } +static int d3d11va_frames_get_constraints(AVHWDeviceContext *ctx, + const void *hwconfig, + AVHWFramesConstraints *constraints) +{ + AVD3D11VADeviceContext *device_hwctx = ctx->hwctx; + int nb_sw_formats = 0; + HRESULT hr; + int i; + + constraints->valid_sw_formats = av_malloc_array(FF_ARRAY_ELEMS(supported_formats) + 1, + sizeof(*constraints->valid_sw_formats)); + if (!constraints->valid_sw_formats) + return AVERROR(ENOMEM); + + for (i = 0; i < FF_ARRAY_ELEMS(supported_formats); i++) { + UINT format_support = 0; + hr = ID3D11Device_CheckFormatSupport(device_hwctx->device, supported_formats[i].d3d_format, &format_support); + if (SUCCEEDED(hr) && (format_support & D3D11_FORMAT_SUPPORT_TEXTURE2D)) + constraints->valid_sw_formats[nb_sw_formats++] = supported_formats[i].pix_fmt; + } + constraints->valid_sw_formats[nb_sw_formats] = AV_PIX_FMT_NONE; + + constraints->valid_hw_formats = av_malloc_array(2, sizeof(*constraints->valid_hw_formats)); + if (!constraints->valid_hw_formats) + return AVERROR(ENOMEM); + + constraints->valid_hw_formats[0] = AV_PIX_FMT_D3D11; + constraints->valid_hw_formats[1] = AV_PIX_FMT_NONE; + + return 0; +} + static void free_texture(void *opaque, uint8_t *data) { ID3D11Texture2D_Release((ID3D11Texture2D *)opaque); @@ -576,6 +608,7 @@ const HWContextType ff_hwcontext_type_d3d11va = { .device_create = d3d11va_device_create, .device_init = d3d11va_device_init, .device_uninit = d3d11va_device_uninit, + .frames_get_constraints = d3d11va_frames_get_constraints, .frames_init = d3d11va_frames_init, .frames_uninit = d3d11va_frames_uninit, .frames_get_buffer = d3d11va_get_buffer,