From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 2664C45B52 for ; Wed, 14 Aug 2024 10:18:35 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5A90168C2D4; Wed, 14 Aug 2024 13:18:33 +0300 (EEST) Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02olkn2025.outbound.protection.outlook.com [40.92.48.25]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C68C468D95B for ; Wed, 14 Aug 2024 13:18:26 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LfHXm91APgRi7/cVJ50442tLKq2Yec/Kz3xSRTT1Q2Pudp6dN9cjHH/D6eSe4f5vbdxGkTbUsPueNUv/FO8ViLFgv1ltMOKYHdacjE/ZPiJ6kKu7IMZ+vuar/J2whBkOabcTfLkgJ5PPmlsx9SZKr2vNnG4T8BO6gETamLf9BaNXh1jFzcA2Qkwlv1WUUzymNrfkrD9XaXIQCVT/C18x7tPxpuvVhV19rQk27Dl1FN9wrQUY9zbP5brjnT04YTw/3uyCf+vRfGw98pfYr59jpuXnAtae0PTPcbxMWaB4kH0hp9PzwejfRpoEw81dwOc3u62iMzETF8idv8VfYsU2zA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=on3DhYFHawuAWnsMSsn3Y7dKncn7GZMV8eW8PDcKd5E=; b=Zwu27cPvF1PFWObDJrf+LsTPysR4XhsnTqOYKFSoN8VndBTOBM2oZUIeE0ddsemC44pz5eFpmwBjXTzaQp6V3j3igJCbIbrQbfI/qMmKYgFqO4J9qYfkTVKwNVsoLjYL5q+uOHtZYkU0v+j/z23I1UWOqJaufskmIu2xIqxacZDiiVtev6xZcPClO4ohs+tl1tuNnwUsQxqua2QTvvGdmSeTpPGddoePlnmP2fHpCjhvf534957ejvJYfM84ZIm95qLiSKuYgFGF9AnlhmOuRW6OMeHM/UeN5YlVz1ExJyUMJDkPw1LYgZ68ctu6Mql8dtYdNGs822mkR9YMSYXNRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=on3DhYFHawuAWnsMSsn3Y7dKncn7GZMV8eW8PDcKd5E=; b=roKDq0c7EFsW+tHaG4vs5p/eJXvj6MNxNtX2XswlmnCHW1mCslFeb0S86v3W35OevhaIKaNGZS6LKawfLFjZMi11ummArtTouq1Ucc2/W/YPERDgHzgzXdat5saqZJ9fULDqofQ08dWawX7A8YhjbmidprEy3fwtFBRDj1tGaO13hyH+w3zGEGqYjeHAnxjrF40QV+htligvHXjKsHy2ajayQCeO/ldQRm/Nhv3C7uLva/DFXLhQYNIQLTKLOrcE3yvZjiWoEsaKhr+sCmCM/Z3n+qBC8oYBuHg0ZCb7ISKoIyueLrHdzG+qXL41PDx8tgY8dsVuSV3q8KyHD0Xm4Q== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0070.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7849.22; Wed, 14 Aug 2024 10:18:22 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9%3]) with mapi id 15.20.7875.016; Wed, 14 Aug 2024 10:18:22 +0000 Message-ID: Date: Wed, 14 Aug 2024 12:18:21 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240814013320.762845-1-dev@lynne.ee> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240814013320.762845-1-dev@lynne.ee> X-TMN: [DlKQ6BPoOEDbwPQYfllUNW20IW0ZeACefkwAE2qBERU=] X-ClientProxiedBy: FR3P281CA0114.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::6) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0070:EE_ X-MS-Office365-Filtering-Correlation-Id: 8f80eef3-f300-4ba5-a47d-08dcbc4a6d23 X-Microsoft-Antispam: BCL:0; ARA:14566002|15080799003|19110799003|5072599009|461199028|8060799006|440099028|3412199025; X-Microsoft-Antispam-Message-Info: vfKqv2f6Mmo6xdW5pl1phLiaE8CWhHD/BtL/q2uAoRi5NDZieinjstHadrxzRElHTdukEMWW7ltZHnMCJFZxHjK8mAuTbREbVa9Y6f2y1eSDv4qho7pUXFp8ZGaEi7gLkDEkk5FrTuz4IKRGLeVppx9sUuQjM42fq1YFQYDr5xBZmXywxGmbINsCEz6evqZoKbxwV3wUSJJ1D2oxQICtaIp1muR8uSYF+osYvs7BQBZhtcQtxRUCOg0V/Hu6iVC+YUU8Ccb0XSx5a1uFMVXHM9AYkw3dI938d2eSFmEllcLfaJTH5ASWs1brpwgnnccHgHfnRRK//a6By8JmEOcJuBZSQ8/uQh2KdFlQLGuo6+mWNkTF6eWmfNyQ67yzOwEsi02fdDqDnXCVspuPgDCAXu2ay/S3rN0IwpIG8sc/moSoXt6HL/c3fiEvXRRBgPHyqeQ75+Sf0doWXcCRGH0lkH0JshaRnTNcPpKnau/KfnrK6xQC9jNLUIOrblDqELakTcMAKJYPQwBZdUkXtrAE2bH7qdp55LbskXEXAizkcBD6uDIJqxKktLJRpyT5ZL2ugKgGjCcAojxWm6FeQzX6/6Qrpf8rDn13vV70hBhtLWZwkMtO5/FnlpX+rVyZnXLbxOyO4XbPjh/79M8wa/cRaF6HRAgmO9gFn8UM0YODKD7Up3wQvQpKmFAD38YUSr6nCYTbZ4YcvTIJdoPCGiWVxQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ckRVYTk2L3c5SGlZMFJCT2kwcW91dG5qejNTSEp3QzNhelcvUVhqRkl1TW5C?= =?utf-8?B?TkYvN0VvTFFKckdkVy9WVS91b0paNVNOZU05UzlpcGJ6WGl2Tm1Fc2FpbFlW?= =?utf-8?B?MGVPN09lU1BmL0gwdVVaTGdPQVhLOWZsZXJaRlA4Y2FHcjFNNUlFR0NkbHFM?= =?utf-8?B?NGVxUjNXcDZOWklUQTBuQWtHRWZ3UGhRUTFlN2dJUVkwKzduOHoxM3dBa0d0?= =?utf-8?B?amsxdW12SVBaeGZybGhjTW1PK0FDdmRhNlkyK01aVEJwbFJyV2JCMkk5ZzVZ?= =?utf-8?B?TlpsM0IvSWNORWw1L0RsY0tuMnpoV1hDb0IzQXhOeVQzQ3U1YWo1T1FTdGdy?= =?utf-8?B?VFdhMkcwOEdYVGwrZk1yWDdKZVRIaVFZSWo4eklQZ2xaQnJNb0JRR1hLUThO?= =?utf-8?B?RlN4U0RFbGpZZkNRZ0czdFB1WG95bXRMOVUwd3gzQ1FRL3d4cklvbEY4eVZ0?= =?utf-8?B?a3JvWDIyLzE0SC91ZytCN0hGVFlDbEpQdDlVM0FqTHc2ZEw1QTM0T0ttV2I1?= =?utf-8?B?ZEYzNUxsZmJ2N25yWWx2RHd1cS9IZENLd0RyYVhqQ3pWRnRITDl3UXhlcHNR?= =?utf-8?B?amxmVUI3WUNqVkN1L1FBOFdlWkt3SGhpWHZyYkRRYzcyYVY5Q09hM1BRSll5?= =?utf-8?B?VUF0K1lKcitQZktvbWN2WVRIOFQ0KzUzb3pGVmFMV0pZaldPaU9zQW9XQ0Js?= =?utf-8?B?bmE0VDU2ZTNkU0czZWduQjB6MVdTajNWQVZVU2ZEb3daQnZnK1l6TEc3QzFJ?= =?utf-8?B?amhLWGhKT0htNHZ2dDFKK0kxcnJwMmZrdzBZMkVldGhnSWs5dHVJQWdBc0xs?= =?utf-8?B?NTVSVnltR082VWthcURZVTVuclV0bFlqYTVER2dTS3Y4MlY0Z1B0U3hQZjFs?= =?utf-8?B?dU1uaC9aSlJ3bVhHZTd3K1kweGFQeFZISit3ZGl6MjlNaCtRRnpxK2hLZU1G?= =?utf-8?B?c3p5TTJLN01PeHNLTEdPMUprbGsvd2xrOVVSRVQ4amNnWkw3bEd1VUc0WE4z?= =?utf-8?B?cHdMTkszSmJEU3lCNllOclg5cUtud2RabW1raU5lcDVzQWNvTXlPUWZDZmI5?= =?utf-8?B?aS9FUHV4SWRSNTFUVElLdHZtSGZyOTEvdng2RHJLV1FrSkhhOXA3MW1UN29j?= =?utf-8?B?MlRiK0NkWW5vdTMvRGlySkhhTlFwY3J3M2gvWDRPTWpUbHhSSTVzTEFzSkdY?= =?utf-8?B?ZjJJQnJodjA2R21ha3p5RGx6VWVaNXg4RzFTSkF1RlpmcmYvTi83YnAzYkJS?= =?utf-8?B?a252TW9lTWRVenBYUTRuMis4c0JtV1ZnVkgrWHpOK1Ftd0c4cjc4MUxvNEdl?= =?utf-8?B?ejZuK1RLTWVmci9uT2QzdzRQZk9BQmVXbnppZlZITXpWMUFSRUZBZUcrS2JX?= =?utf-8?B?cHJ4eVhLS2x4RXhSZFdsWXBIQVdqRWtBSnpQTUJXVFlrcXFGb3M4ZldCNkVQ?= =?utf-8?B?TkJWcmwwcVlrWkNUSWdlL0pLazZvajd6TzVLSkowOWdpVFFjbnZKK3dBeEpt?= =?utf-8?B?Nmg4Yy9KSGJTUjVHSzErTmFmN0d6cUlTOGFYOFNIclpZVEJtaUkvWDBieTh0?= =?utf-8?B?UXhHZW5FTWNRNU52UlFFQ1h2NXVYQWpTWk1MUEozUGdvN1FtZmp2c1Y1b0k2?= =?utf-8?B?YXVxZ3ljaXVDZlRwTjVIb0IwaVc0OHRtTTFnVkMwVitoS1BHaVh6N080eXg5?= =?utf-8?B?ZEErQXdhQjNvbEc2MVU5Y1RDVlAwUGZ4c1Vnb1NiWGlXbWNhVENMNVhnPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f80eef3-f300-4ba5-a47d-08dcbc4a6d23 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Aug 2024 10:18:22.6978 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8P250MB0070 Subject: Re: [FFmpeg-devel] [PATCH] vulkan: remove AVClass * from the context, use a logging pointer X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Lynne via ffmpeg-devel: > The issue is that VulkanContext mostly always used the AVClass * > from its structure, which we don't set in decode. > --- > libavcodec/vulkan_decode.c | 2 ++ > libavfilter/vf_avgblur_vulkan.c | 2 ++ > libavfilter/vf_blend_vulkan.c | 2 ++ > libavfilter/vf_bwdif_vulkan.c | 4 +-- > libavfilter/vf_chromaber_vulkan.c | 2 ++ > libavfilter/vf_flip_vulkan.c | 2 ++ > libavfilter/vf_gblur_vulkan.c | 2 ++ > libavfilter/vf_libplacebo.c | 2 ++ > libavfilter/vf_nlmeans_vulkan.c | 2 ++ > libavfilter/vf_overlay_vulkan.c | 2 ++ > libavfilter/vf_scale_vulkan.c | 2 ++ > libavfilter/vf_transpose_vulkan.c | 2 ++ > libavfilter/vf_xfade_vulkan.c | 2 ++ > libavfilter/vsrc_testsrc_vulkan.c | 2 ++ > libavfilter/vulkan_filter.c | 33 ++++++++++++++++++---- > libavfilter/vulkan_filter.h | 4 +++ > libavutil/vulkan.c | 46 +++++++++++++++---------------- > libavutil/vulkan.h | 2 +- > 18 files changed, 83 insertions(+), 32 deletions(-) > > diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c > index b89bfa17f2..67e0584814 100644 > --- a/libavcodec/vulkan_decode.c > +++ b/libavcodec/vulkan_decode.c > @@ -1165,6 +1165,8 @@ int ff_vk_decode_init(AVCodecContext *avctx) > s = &ctx->s; > vk = &ctx->s.vkfn; > > + s->log = avctx; > + > s->frames_ref = av_buffer_ref(avctx->hw_frames_ctx); > s->frames = (AVHWFramesContext *)s->frames_ref->data; > s->hwfc = s->frames->hwctx; > diff --git a/libavfilter/vf_avgblur_vulkan.c b/libavfilter/vf_avgblur_vulkan.c > index 6bc1b616a6..e38307fbdf 100644 > --- a/libavfilter/vf_avgblur_vulkan.c > +++ b/libavfilter/vf_avgblur_vulkan.c > @@ -26,6 +26,8 @@ > #include "video.h" > > typedef struct AvgBlurVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int initialized; > diff --git a/libavfilter/vf_blend_vulkan.c b/libavfilter/vf_blend_vulkan.c > index 417be766b8..aa05126cc5 100644 > --- a/libavfilter/vf_blend_vulkan.c > +++ b/libavfilter/vf_blend_vulkan.c > @@ -41,6 +41,8 @@ typedef struct FilterParamsVulkan { > } FilterParamsVulkan; > > typedef struct BlendVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > FFFrameSync fs; > > diff --git a/libavfilter/vf_bwdif_vulkan.c b/libavfilter/vf_bwdif_vulkan.c > index 57711fb672..b024acb50e 100644 > --- a/libavfilter/vf_bwdif_vulkan.c > +++ b/libavfilter/vf_bwdif_vulkan.c > @@ -323,6 +323,7 @@ static int bwdif_vulkan_config_input(AVFilterLink *inlink) > return 0; > > /* Save the ref, without reffing it */ > + vkctx->log = s; 1. The comment is for the line below and not for this. 2. Why do you want to use the private context as logcontext? We normally always log to the AVFilterContext. > vkctx->input_frames_ref = inlink->hw_frames_ctx; > > /* Defaults */ > @@ -349,9 +350,6 @@ static int bwdif_vulkan_config_output(AVFilterLink *outlink) > if (err < 0) > return err; > > - /* For logging */ > - vkctx->class = y->class; > - > outlink->hw_frames_ctx = av_buffer_ref(vkctx->frames_ref); > if (!outlink->hw_frames_ctx) > return AVERROR(ENOMEM); > diff --git a/libavfilter/vf_chromaber_vulkan.c b/libavfilter/vf_chromaber_vulkan.c > index 0b96a7400f..3b50776e07 100644 > --- a/libavfilter/vf_chromaber_vulkan.c > +++ b/libavfilter/vf_chromaber_vulkan.c > @@ -26,6 +26,8 @@ > #include "video.h" > > typedef struct ChromaticAberrationVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int initialized; > diff --git a/libavfilter/vf_flip_vulkan.c b/libavfilter/vf_flip_vulkan.c > index ecd2567ebc..966cfbfcb5 100644 > --- a/libavfilter/vf_flip_vulkan.c > +++ b/libavfilter/vf_flip_vulkan.c > @@ -33,6 +33,8 @@ enum FlipType { > }; > > typedef struct FlipVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int initialized; > diff --git a/libavfilter/vf_gblur_vulkan.c b/libavfilter/vf_gblur_vulkan.c > index 09be6015c3..93d0bb82fe 100644 > --- a/libavfilter/vf_gblur_vulkan.c > +++ b/libavfilter/vf_gblur_vulkan.c > @@ -31,6 +31,8 @@ > #define GBLUR_MAX_KERNEL_SIZE 127 > > typedef struct GBlurVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int initialized; > diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c > index be9000aa8e..40887e7b03 100644 > --- a/libavfilter/vf_libplacebo.c > +++ b/libavfilter/vf_libplacebo.c > @@ -151,6 +151,8 @@ typedef struct LibplaceboInput { > } LibplaceboInput; > > typedef struct LibplaceboContext { > + const AVClass *class; > + > /* lavfi vulkan*/ > FFVulkanContext vkctx; > > diff --git a/libavfilter/vf_nlmeans_vulkan.c b/libavfilter/vf_nlmeans_vulkan.c > index be9305854b..d6abf3fbc4 100644 > --- a/libavfilter/vf_nlmeans_vulkan.c > +++ b/libavfilter/vf_nlmeans_vulkan.c > @@ -31,6 +31,8 @@ > #define TYPE_SIZE (TYPE_ELEMS*4) > > typedef struct NLMeansVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int initialized; > diff --git a/libavfilter/vf_overlay_vulkan.c b/libavfilter/vf_overlay_vulkan.c > index c09de24142..0c76050490 100644 > --- a/libavfilter/vf_overlay_vulkan.c > +++ b/libavfilter/vf_overlay_vulkan.c > @@ -27,6 +27,8 @@ > #include "video.h" > > typedef struct OverlayVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > FFFrameSync fs; > > diff --git a/libavfilter/vf_scale_vulkan.c b/libavfilter/vf_scale_vulkan.c > index 7210509de3..a90343f36c 100644 > --- a/libavfilter/vf_scale_vulkan.c > +++ b/libavfilter/vf_scale_vulkan.c > @@ -35,6 +35,8 @@ enum ScalerFunc { > }; > > typedef struct ScaleVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int initialized; > diff --git a/libavfilter/vf_transpose_vulkan.c b/libavfilter/vf_transpose_vulkan.c > index 263a934dc5..18761b62bf 100644 > --- a/libavfilter/vf_transpose_vulkan.c > +++ b/libavfilter/vf_transpose_vulkan.c > @@ -28,6 +28,8 @@ > #include "video.h" > > typedef struct TransposeVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int initialized; > diff --git a/libavfilter/vf_xfade_vulkan.c b/libavfilter/vf_xfade_vulkan.c > index be041eaef4..e2d41cf2fe 100644 > --- a/libavfilter/vf_xfade_vulkan.c > +++ b/libavfilter/vf_xfade_vulkan.c > @@ -34,6 +34,8 @@ typedef struct XFadeParameters { > } XFadeParameters; > > typedef struct XFadeVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int transition; > diff --git a/libavfilter/vsrc_testsrc_vulkan.c b/libavfilter/vsrc_testsrc_vulkan.c > index 480b23ac9f..e9fcf69b52 100644 > --- a/libavfilter/vsrc_testsrc_vulkan.c > +++ b/libavfilter/vsrc_testsrc_vulkan.c > @@ -37,6 +37,8 @@ typedef struct TestSrcVulkanPushData { > } TestSrcVulkanPushData; > > typedef struct TestSrcVulkanContext { > + const AVClass *class; > + > FFVulkanContext vkctx; > > int initialized; > diff --git a/libavfilter/vulkan_filter.c b/libavfilter/vulkan_filter.c > index cef42eeb4d..5a05a16a84 100644 > --- a/libavfilter/vulkan_filter.c > +++ b/libavfilter/vulkan_filter.c > @@ -163,11 +163,10 @@ skip: > return err; > } > > -int ff_vk_filter_config_input(AVFilterLink *inlink) > +int ff_vk_filter_config_input_base(AVFilterLink *inlink, FFVulkanContext *s) > { > AVHWFramesContext *input_frames; > AVFilterContext *avctx = inlink->dst; > - FFVulkanContext *s = inlink->dst->priv; > > if (!inlink->hw_frames_ctx) { > av_log(inlink->dst, AV_LOG_ERROR, "Vulkan filtering requires a " > @@ -195,14 +194,26 @@ int ff_vk_filter_config_input(AVFilterLink *inlink) > return 0; > } > > -int ff_vk_filter_config_output(AVFilterLink *outlink) > +int ff_vk_filter_config_input(AVFilterLink *inlink) > +{ > + struct { > + const AVClass *av_class; > + FFVulkanContext vkctx; > + } *base = inlink->dst->priv; This is not ok. A struct { Type1 a; Type2 b; }; can't simply be used to read from a struct { Type1 a; Type2 b; ... }; This would only be permissible if there were a union { struct { Type1 a; Type2 b; }; struct { Type1 a; Type2 b; ... }; }; visible to this function and if the private context were such a union (it would then work by the common-initial-sequence guarantee of the spec). Without such a union, nothing guarantees that the offset of b in these two structures is the same. > + > + base->vkctx.log = inlink->dst->priv; Once again: We typically don't log to the private context. > + > + return ff_vk_filter_config_input_base(inlink, &base->vkctx); > +} > + > +int ff_vk_filter_config_output_base(AVFilterLink *outlink, FFVulkanContext *s) > { > int err; > - FFVulkanContext *s = outlink->src->priv; > > av_buffer_unref(&outlink->hw_frames_ctx); > > - err = ff_vk_filter_init_context(outlink->src, s, s->input_frames_ref, > + err = ff_vk_filter_init_context(outlink->src, s, > + s->input_frames_ref, > s->output_width, s->output_height, > s->output_format); > if (err < 0) > @@ -218,6 +229,18 @@ int ff_vk_filter_config_output(AVFilterLink *outlink) > return err; > } > > +int ff_vk_filter_config_output(AVFilterLink *outlink) > +{ > + struct { > + const AVClass *av_class; > + FFVulkanContext vkctx; > + } *base = outlink->src->priv; > + > + base->vkctx.log = outlink->src->priv; > + > + return ff_vk_filter_config_output_base(outlink, &base->vkctx); > +} > + > int ff_vk_filter_init(AVFilterContext *avctx) > { > FFVulkanContext *s = avctx->priv; > diff --git a/libavfilter/vulkan_filter.h b/libavfilter/vulkan_filter.h > index d2c14601d9..112dbd1400 100644 > --- a/libavfilter/vulkan_filter.h > +++ b/libavfilter/vulkan_filter.h > @@ -29,6 +29,10 @@ > * General lavfi IO functions > */ > int ff_vk_filter_init (AVFilterContext *avctx); > +int ff_vk_filter_config_input_base(AVFilterLink *inlink, FFVulkanContext *s); > +int ff_vk_filter_config_output_base(AVFilterLink *outlink, FFVulkanContext *s); > + > +/* Relies on { AVClass, FFVulkanContext, ... } being the filter context layout. */ > int ff_vk_filter_config_input (AVFilterLink *inlink); > int ff_vk_filter_config_output(AVFilterLink *outlink); > > diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c > index bb8e7ae786..3e094f5950 100644 > --- a/libavutil/vulkan.c > +++ b/libavutil/vulkan.c > @@ -305,7 +305,7 @@ int ff_vk_exec_pool_init(FFVulkanContext *s, FFVkQueueFamilyCtx *qf, > ret = vk->CreateCommandPool(s->hwctx->act_dev, &cqueue_create, > s->hwctx->alloc, &pool->cmd_buf_pool); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Command pool creation failure: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Command pool creation failure: %s\n", > ff_vk_ret2str(ret)); > err = AVERROR_EXTERNAL; > goto fail; > @@ -328,7 +328,7 @@ int ff_vk_exec_pool_init(FFVulkanContext *s, FFVkQueueFamilyCtx *qf, > ret = vk->AllocateCommandBuffers(s->hwctx->act_dev, &cbuf_create, > pool->cmd_bufs); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Command buffer alloc failure: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Command buffer alloc failure: %s\n", > ff_vk_ret2str(ret)); > err = AVERROR_EXTERNAL; > goto fail; > @@ -345,7 +345,7 @@ int ff_vk_exec_pool_init(FFVulkanContext *s, FFVkQueueFamilyCtx *qf, > ret = vk->CreateQueryPool(s->hwctx->act_dev, &query_pool_info, > s->hwctx->alloc, &pool->query_pool); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Query pool alloc failure: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Query pool alloc failure: %s\n", > ff_vk_ret2str(ret)); > err = AVERROR_EXTERNAL; > goto fail; > @@ -402,7 +402,7 @@ int ff_vk_exec_pool_init(FFVulkanContext *s, FFVkQueueFamilyCtx *qf, > ret = vk->CreateFence(s->hwctx->act_dev, &fence_create, s->hwctx->alloc, > &e->fence); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Failed to create submission fence: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Failed to create submission fence: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -521,7 +521,7 @@ int ff_vk_exec_start(FFVulkanContext *s, FFVkExecContext *e) > > ret = vk->BeginCommandBuffer(e->buf, &cmd_start); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Failed to start command recoding: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Failed to start command recoding: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -728,7 +728,7 @@ int ff_vk_exec_submit(FFVulkanContext *s, FFVkExecContext *e) > > ret = vk->EndCommandBuffer(e->buf); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Unable to finish command buffer: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Unable to finish command buffer: %s\n", > ff_vk_ret2str(ret)); > ff_vk_exec_discard_deps(s, e); > return AVERROR_EXTERNAL; > @@ -739,7 +739,7 @@ int ff_vk_exec_submit(FFVulkanContext *s, FFVkExecContext *e) > s->hwctx->unlock_queue(s->device, e->qf, e->qi); > > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Unable to submit command buffer: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Unable to submit command buffer: %s\n", > ff_vk_ret2str(ret)); > ff_vk_exec_discard_deps(s, e); > return AVERROR_EXTERNAL; > @@ -811,7 +811,7 @@ int ff_vk_alloc_mem(FFVulkanContext *s, VkMemoryRequirements *req, > } > > if (index < 0) { > - av_log(s->device, AV_LOG_ERROR, "No memory type found for flags 0x%x\n", > + av_log(s->log, AV_LOG_ERROR, "No memory type found for flags 0x%x\n", > req_flags); > return AVERROR(EINVAL); > } > @@ -868,7 +868,7 @@ int ff_vk_create_buf(FFVulkanContext *s, FFVkBuffer *buf, size_t size, > > ret = vk->CreateBuffer(s->hwctx->act_dev, &buf_spawn, s->hwctx->alloc, &buf->buf); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Failed to create buffer: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Failed to create buffer: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -898,7 +898,7 @@ int ff_vk_create_buf(FFVulkanContext *s, FFVkBuffer *buf, size_t size, > > ret = vk->BindBufferMemory(s->hwctx->act_dev, buf->buf, buf->mem, 0); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Failed to bind memory to buffer: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Failed to bind memory to buffer: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -964,7 +964,7 @@ int ff_vk_map_buffers(FFVulkanContext *s, FFVkBuffer **buf, uint8_t *mem[], > ret = vk->MapMemory(s->hwctx->act_dev, buf[i]->mem, 0, > VK_WHOLE_SIZE, 0, &dst); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Failed to map buffer memory: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Failed to map buffer memory: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -989,7 +989,7 @@ int ff_vk_map_buffers(FFVulkanContext *s, FFVkBuffer **buf, uint8_t *mem[], > ret = vk->InvalidateMappedMemoryRanges(s->hwctx->act_dev, inval_count, > inval_list); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Failed to invalidate memory: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Failed to invalidate memory: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -1024,7 +1024,7 @@ int ff_vk_unmap_buffers(FFVulkanContext *s, FFVkBuffer **buf, int nb_buffers, > ret = vk->FlushMappedMemoryRanges(s->hwctx->act_dev, flush_count, > flush_list); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Failed to flush memory: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Failed to flush memory: %s\n", > ff_vk_ret2str(ret)); > err = AVERROR_EXTERNAL; /* We still want to try to unmap them */ > } > @@ -1102,7 +1102,7 @@ int ff_vk_get_pooled_buffer(FFVulkanContext *ctx, AVBufferPool **buf_pool, > ff_vk_free_buf(ctx, data); > memset(data, 0, sizeof(*data)); > > - av_log(ctx, AV_LOG_DEBUG, "Allocating buffer of %"SIZE_SPECIFIER" bytes for pool %p\n", > + av_log(ctx->log, AV_LOG_DEBUG, "Allocating buffer of %"SIZE_SPECIFIER" bytes for pool %p\n", > size, *buf_pool); > > err = ff_vk_create_buf(ctx, data, size, > @@ -1168,7 +1168,7 @@ int ff_vk_init_sampler(FFVulkanContext *s, VkSampler *sampler, > ret = vk->CreateSampler(s->hwctx->act_dev, &sampler_info, > s->hwctx->alloc, sampler); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Unable to init sampler: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Unable to init sampler: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -1254,7 +1254,7 @@ int ff_vk_create_imageviews(FFVulkanContext *s, FFVkExecContext *e, > ret = vk->CreateImageView(s->hwctx->act_dev, &view_create_info, > s->hwctx->alloc, &iv->views[i]); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Failed to create imageview: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Failed to create imageview: %s\n", > ff_vk_ret2str(ret)); > err = AVERROR_EXTERNAL; > goto fail; > @@ -1405,7 +1405,7 @@ int ff_vk_shader_create(FFVulkanContext *s, FFVkSPIRVShader *shd, > > shd->shader.pName = entrypoint; > > - av_log(s, AV_LOG_VERBOSE, "Shader %s compiled! Size: %zu bytes\n", > + av_log(s->log, AV_LOG_VERBOSE, "Shader %s compiled! Size: %zu bytes\n", > shd->name, spirv_size); > > shader_create.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; > @@ -1417,7 +1417,7 @@ int ff_vk_shader_create(FFVulkanContext *s, FFVkSPIRVShader *shd, > ret = vk->CreateShaderModule(s->hwctx->act_dev, &shader_create, NULL, > &shd->shader.module); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_VERBOSE, "Error creating shader module: %s\n", > + av_log(s->log, AV_LOG_VERBOSE, "Error creating shader module: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -1506,7 +1506,7 @@ int ff_vk_pipeline_descriptor_set_add(FFVulkanContext *s, FFVulkanPipeline *pl, > ret = vk->CreateDescriptorSetLayout(s->hwctx->act_dev, &desc_create_layout, > s->hwctx->alloc, &set->layout); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Unable to init descriptor set layout: %s", > + av_log(s->log, AV_LOG_ERROR, "Unable to init descriptor set layout: %s", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -1653,7 +1653,7 @@ static int vk_set_descriptor_image(FFVulkanContext *s, FFVulkanPipeline *pl, > desc_size = s->desc_buf_props.combinedImageSamplerDescriptorSize; > break; > default: > - av_log(s, AV_LOG_ERROR, "Invalid descriptor type at set %i binding %i: %i!\n", > + av_log(s->log, AV_LOG_ERROR, "Invalid descriptor type at set %i binding %i: %i!\n", > set, bind, desc_get_info.type); > return AVERROR(EINVAL); > break; > @@ -1699,7 +1699,7 @@ int ff_vk_set_descriptor_buffer(FFVulkanContext *s, FFVulkanPipeline *pl, > desc_size = s->desc_buf_props.storageTexelBufferDescriptorSize; > break; > default: > - av_log(s, AV_LOG_ERROR, "Invalid descriptor type at set %i binding %i: %i!\n", > + av_log(s->log, AV_LOG_ERROR, "Invalid descriptor type at set %i binding %i: %i!\n", > set, bind, desc_get_info.type); > return AVERROR(EINVAL); > break; > @@ -1760,7 +1760,7 @@ static int init_pipeline_layout(FFVulkanContext *s, FFVulkanPipeline *pl) > s->hwctx->alloc, &pl->pipeline_layout); > av_free(desc_layouts); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Unable to init pipeline layout: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Unable to init pipeline layout: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > @@ -1792,7 +1792,7 @@ int ff_vk_init_compute_pipeline(FFVulkanContext *s, FFVulkanPipeline *pl, > &pipeline_create_info, > s->hwctx->alloc, &pl->pipeline); > if (ret != VK_SUCCESS) { > - av_log(s, AV_LOG_ERROR, "Unable to init compute pipeline: %s\n", > + av_log(s->log, AV_LOG_ERROR, "Unable to init compute pipeline: %s\n", > ff_vk_ret2str(ret)); > return AVERROR_EXTERNAL; > } > diff --git a/libavutil/vulkan.h b/libavutil/vulkan.h > index 05bd71ae45..2d4942d0d4 100644 > --- a/libavutil/vulkan.h > +++ b/libavutil/vulkan.h > @@ -227,7 +227,7 @@ typedef struct FFVkExecPool { > } FFVkExecPool; > > typedef struct FFVulkanContext { > - const AVClass *class; /* Filters and encoders use this */ > + void *log; > > FFVulkanFunctions vkfn; > FFVulkanExtensions extensions; _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".