From patchwork Fri Dec 8 16:15:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 6611 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp738756jah; Fri, 8 Dec 2017 08:22:46 -0800 (PST) X-Google-Smtp-Source: AGs4zMbtyCx2T5Af3ylAPlErnIsimQNjVQiA/L5hSosYgrsvL8kXXtEeB5mXo4vk6sZ/sRXvQbtk X-Received: by 10.223.161.14 with SMTP id o14mr28381081wro.111.1512750166152; Fri, 08 Dec 2017 08:22:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1512750166; cv=none; d=google.com; s=arc-20160816; b=ToK8Y5p7Zl4c3Y1j+5N7EPcjl9Tv38/GmnWC+Czw1+pVsr8stvwdE59+VzyMALavhp WW2kliUTEbMRy+fDHk9HtDOsvmShGV/iNbyVoxS4q2QiXITxm1Jh9hc4CFNMspZef6aK FIlt08ZWBN+84nFO8gmSwARig+42ZXTPkp7thc7fs3BmQVe9sqXuCmwfP+83U3BddYoI 2QxguJyPqTedcX7IdPoD1XFUI8BtPY0yqjuiMZ3Fvv5ubhwjVQ/OrZdMak4jkmK4NjO2 /CG2/8vrl3r25hr1qiId2rDOJV7x2UapCKxkedZsc2AVoJml1BNkwcrt4E+SzpgFiz/8 cCaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:content-language:in-reply-to :mime-version:user-agent:date:message-id:from:references:to :dkim-signature:delivered-to:arc-authentication-results; bh=+rOLSp3MiQD89NWiqLx5vUyoooY3TRt7inmBxZrceK8=; b=NgDHC2OFBYaRkcbp5rpsHJc+Lqa6yOVw1yV3qJ2y6RoI+O8ZUTsdfcfLIA+rSa8g3c x6ikpxYFES7kfCfPGdk7qJ6m25WK16ur5k+A8EGuK4I4nRGAC+xi2dLuQnAPaW64g23B qZggsAmVstDf4aoGjZ8aeBjr/oXKLwIHLRf7mqICZo6dQdxBi5iSN+jTRnTYKMOd/QwF T7db7Va69GQ0dMx60j54n7xFEiwFm0r962v0hBFrrnYZk/lBBIRDX8f0khLuWmhS9ht/ 85ba+1Qhu1aUnXULpCRYWJA8PD0eEEjVVWMo9/S91TSdKrk2CSWidSyI7eLVvdcbOS62 dKGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=ivfBqaT3; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p12si5745857wrh.443.2017.12.08.08.22.45; Fri, 08 Dec 2017 08:22:46 -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=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=ivfBqaT3; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7DD9868A4E5; Fri, 8 Dec 2017 18:22:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8484768A47F for ; Fri, 8 Dec 2017 18:22:31 +0200 (EET) Received: by mail-wm0-f68.google.com with SMTP id f9so4059762wmh.0 for ; Fri, 08 Dec 2017 08:22:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=jwx9IwSdv5LOYrGtED3dFhjA3oChFXOLrbTrWPHo73Y=; b=ivfBqaT3TyCaOsbnH4UU4/Bp8+BSIbO5D+2km/cT4rvVoNi/Q68aYLyok86knGl3/+ LsfOjqTjReu73WlpOnpBbh8XIX1TDP3mrsgqpdWTf/kKtNRqWPJ6IqeE4dLhHTgqPlev EpUitly67AhxMMx4owDtqkstgOrvWN/+dXtX1ogqp8RkWRA8G1kYffSjn+V1UTLh01pN yT/82USR8VtHJDC+1eE1YnoZRIZjAuWxdv/DMEqc5F0Ga7DsZFg6nTlL3cQEgpHv25KL bLD198NtHZ7DWzxXrm2PmE79wLgJq1KQ3GDxxVeURQSs8iIkYjZMBFMgBDJbD4qEQRJR /lFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=jwx9IwSdv5LOYrGtED3dFhjA3oChFXOLrbTrWPHo73Y=; b=Kd8UjxQ92KF9cEZp+KUmIoP+oiVeAA/czEHW/STYnIVi7ztlYMJmuJC6bVzmrZHqpH XhyOQeZVNDhhhcPMN+Ue/G84RHJolZ7jSwhR6OYUreAW7ZOCd90U7HCZNIgE9yWxotXb WakYbVkfZaw9QJmVujQ/+a+9Iwc/rqg1O01A3vy19rVpuqvxFzZpc6om82vrJAlPCJBc vMBYiwJzUp9y7jZsAgfLWZrCNx5cFstidi3acCyaorMdT0t6iRBHHALXTzMVvG4Gu8KI 0D2a8VKWSkWLPbk3R7KOFuQLTL/TcrlsvMiqhJBR3NhVvZgzdQ+eLiBillDBvaLsw3Xx iw8A== X-Gm-Message-State: AKGB3mJcgKGGzExfxT0ZLeMr2sld1zmDzKWw26FhoIOMp2LFNrR15IDT LUnY3uosaB/7fnmqRvy9lWdwVA== X-Received: by 10.28.234.80 with SMTP id i77mr4282434wmh.76.1512749728487; Fri, 08 Dec 2017 08:15:28 -0800 (PST) Received: from [192.168.0.9] (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id o2sm1864015wmf.27.2017.12.08.08.15.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Dec 2017 08:15:27 -0800 (PST) To: ffmpeg-devel@ffmpeg.org References: <20171207122528.16411-1-thomas@gllm.fr> From: Mark Thompson Message-ID: <3bdbc310-1dda-4836-831d-4fb201d054e2@jkqxz.net> Date: Fri, 8 Dec 2017 16:15:26 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171207122528.16411-1-thomas@gllm.fr> Content-Language: en-US Subject: [FFmpeg-devel] [PATCH] lavc: Make hardware config method support more explicit for hwaccels 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: Thomas Guillem Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Thomas Guillem This fixes the use of old ad-hoc methods which are still supported by some hwaccels which also support newer methods (DXVA2, VAAPI, VDPAU, videotoolbox) - without the method being visible here, ff_get_format() would refuse to use it. Signed-off-by: Mark Thompson --- On 07/12/17 12:25, Thomas Guillem wrote: > Add a boolean to specify if an API can work with > AV_CODEC_HW_CONFIG_METHOD_AD_HOC. > --- > libavcodec/hwaccel.h | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/libavcodec/hwaccel.h b/libavcodec/hwaccel.h > index ae55527c2f..16ee822920 100644 > --- a/libavcodec/hwaccel.h > +++ b/libavcodec/hwaccel.h > @@ -42,12 +42,13 @@ typedef struct AVCodecHWConfigInternal { > > // These macros are used to simplify AVCodecHWConfigInternal definitions. > > -#define HW_CONFIG_HWACCEL(format, device, name) \ > +#define HW_CONFIG_HWACCEL(format, ad_hoc, device, name) \ > &(const AVCodecHWConfigInternal) { \ > .public = { \ > .pix_fmt = AV_PIX_FMT_ ## format, \ > .methods = AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX | \ > - AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, \ > + AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX | \ > + ad_hoc ? AV_CODEC_HW_CONFIG_METHOD_AD_HOC : 0, \ > .device_type = AV_HWDEVICE_TYPE_ ## device, \ > }, \ > .hwaccel = &name, \ Once we're having extra arguments in the macros like that I think I would prefer all the methods to be specified explicitly (which conveniently also lets us delete the second macro). How about this? Thanks, - Mark libavcodec/hwaccel.h | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/libavcodec/hwaccel.h b/libavcodec/hwaccel.h index ae55527c2f..3aaa92571c 100644 --- a/libavcodec/hwaccel.h +++ b/libavcodec/hwaccel.h @@ -42,13 +42,14 @@ typedef struct AVCodecHWConfigInternal { // These macros are used to simplify AVCodecHWConfigInternal definitions. -#define HW_CONFIG_HWACCEL(format, device, name) \ +#define HW_CONFIG_HWACCEL(device, frames, ad_hoc, format, device_type_, name) \ &(const AVCodecHWConfigInternal) { \ .public = { \ .pix_fmt = AV_PIX_FMT_ ## format, \ - .methods = AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX | \ - AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, \ - .device_type = AV_HWDEVICE_TYPE_ ## device, \ + .methods = (device ? AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX : 0) | \ + (frames ? AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX : 0) | \ + (ad_hoc ? AV_CODEC_HW_CONFIG_METHOD_AD_HOC : 0), \ + .device_type = AV_HWDEVICE_TYPE_ ## device_type_, \ }, \ .hwaccel = &name, \ } @@ -63,32 +64,21 @@ typedef struct AVCodecHWConfigInternal { .hwaccel = NULL, \ } -#define HW_CONFIG_AD_HOC_HWACCEL(format, name) \ - &(const AVCodecHWConfigInternal) { \ - .public = { \ - .pix_fmt = AV_PIX_FMT_ ## format, \ - .methods = AV_CODEC_HW_CONFIG_METHOD_AD_HOC, \ - .device_type = AV_HWDEVICE_TYPE_NONE, \ - }, \ - .hwaccel = &name, \ - } - #define HWACCEL_DXVA2(codec) \ - HW_CONFIG_HWACCEL(DXVA2_VLD, DXVA2, ff_ ## codec ## _dxva2_hwaccel) + HW_CONFIG_HWACCEL(1, 1, 1, DXVA2_VLD, DXVA2, ff_ ## codec ## _dxva2_hwaccel) #define HWACCEL_D3D11VA2(codec) \ - HW_CONFIG_HWACCEL(D3D11, D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel) + HW_CONFIG_HWACCEL(1, 1, 0, D3D11, D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel) #define HWACCEL_NVDEC(codec) \ - HW_CONFIG_HWACCEL(CUDA, CUDA, ff_ ## codec ## _nvdec_hwaccel) + HW_CONFIG_HWACCEL(1, 1, 0, CUDA, CUDA, ff_ ## codec ## _nvdec_hwaccel) #define HWACCEL_VAAPI(codec) \ - HW_CONFIG_HWACCEL(VAAPI, VAAPI, ff_ ## codec ## _vaapi_hwaccel) + HW_CONFIG_HWACCEL(1, 1, 1, VAAPI, VAAPI, ff_ ## codec ## _vaapi_hwaccel) #define HWACCEL_VDPAU(codec) \ - HW_CONFIG_HWACCEL(VDPAU, VDPAU, ff_ ## codec ## _vdpau_hwaccel) + HW_CONFIG_HWACCEL(1, 1, 1, VDPAU, VDPAU, ff_ ## codec ## _vdpau_hwaccel) #define HWACCEL_VIDEOTOOLBOX(codec) \ - HW_CONFIG_HWACCEL(VIDEOTOOLBOX, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel) - + HW_CONFIG_HWACCEL(1, 1, 1, VIDEOTOOLBOX, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel) #define HWACCEL_D3D11VA(codec) \ - HW_CONFIG_AD_HOC_HWACCEL(D3D11VA_VLD, ff_ ## codec ## _d3d11va_hwaccel) + HW_CONFIG_HWACCEL(0, 0, 1, D3D11VA_VLD, NONE, ff_ ## codec ## _d3d11va_hwaccel) #define HWACCEL_XVMC(codec) \ - HW_CONFIG_AD_HOC_HWACCEL(XVMC, ff_ ## codec ## _xvmc_hwaccel) + HW_CONFIG_HWACCEL(0, 0, 1, XVMC, NONE, ff_ ## codec ## _xvmc_hwaccel) #endif /* AVCODEC_HWACCEL_H */