From patchwork Tue May 3 06:18:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35551 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp251623pzb; Mon, 2 May 2022 23:19:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzNVOtFjGvUYQPHEEXukCGdRFisDNTj64eqXzKl7RXkZBPzUnw9tD7cf7WZbS9v4MhFM4au X-Received: by 2002:a17:907:6d84:b0:6f4:94e2:e708 with SMTP id sb4-20020a1709076d8400b006f494e2e708mr1262231ejc.199.1651558755165; Mon, 02 May 2022 23:19:15 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u12-20020a50c04c000000b00425e3fadd59si13603648edd.96.2022.05.02.23.19.14; Mon, 02 May 2022 23:19: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=@outlook.com header.s=selector1 header.b=kyNLdqP5; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CA4A968B35B; Tue, 3 May 2022 09:19:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075024.outbound.protection.outlook.com [40.92.75.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8A22868B186 for ; Tue, 3 May 2022 09:19:03 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hZQ2BDlvE7OE5gJ2PMBwQcq4No/vwf2umVW807tat+xyAklyDjo8GyIEw+qgSEch0omh6+gNH8XOpljSXlUaBH1wyK1KdLOEFSbjiIu6Lmb40uunCSSPsA3zic7cmQaFYvIWTqwiAJKon8jbKDtayVDcc81xSnr7wrKheBjFIedOznGG7gUaa48IsLO7OYzH2eq1azziYAJPex2JSWR88KhmcCvZOmjgfV8OkC8jaoiMMMbwRJNwcQA7dgJm2WDrzZaBy1I660cKK3eMchth+v5hILzyT3IyoqrzKcBeEpgpVj0Di4/N5l3e8DU/+KlDwSwY8lSQMbJs8sF25U6pmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=pt96KkF5KMIu5uPvfDXAbntCuCIpGfJWQmIVyuMBQUI=; b=aDdsBHtLM3M7eKz6VdLkbDm62RNj3h5m88PjRrZO5BcQEEhpyd4GJIgthdWMvSPoQ5hd5d9kz8QWKtCBMwEnVIj7UAaEInvZZlOxBlFVS29WmvZzksQ1Bpgh7o8EeD3poEbjPgCVUWSthfpxsHwOsKC+Qk79E8mRIEi3JCA2TZj+qjcfJ9kH+yUlhO65ZeEHuDklzY1LOaLV2THGjBCo1XVUL/foYTJTLtY4arXSvgguDVJQCXDBVJuZnihjn/t3hfO6iR8SDkXaSSfr0ws1TPUn4Z5wQCFxpgGzfN8lYrN2y47I+bfDa1KkPuLaEd/SlTITezLStv5OcuEYTbiplQ== 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=pt96KkF5KMIu5uPvfDXAbntCuCIpGfJWQmIVyuMBQUI=; b=kyNLdqP5+2jj8XOAZ6slSbonc/NOXjN2Z+JOzqmAU76f4pKrndB0u+LkeOD7vf5Tu6OKOkZMCK283q/FR/cntXONzflL+7+lKxNhGkWVpkhCTGIRWPyhl48MP+a3+mgn1Gv/fg0ZQEsBlfDjp/J8LyiKKxx1uJgKxGCtCK4GPDsjzukeO8ypgbI0xa/aDN/E7wnxnxON3t6JFSzP0OGq3nsWuXJVDuQpaDZH3+cZ0PM2AnOXqbSe640pbnbnm1DFoyDRp95o8+Qka1R9O7f5duzxNGPtMorb/26g75VRV7Iel/2cQNyiwIO6p9dUQ7CLG8yarUz0Dg+wuV/l2yq+xQ== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by DB9PR01MB7292.eurprd01.prod.exchangelabs.com (2603:10a6:10:211::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.13; Tue, 3 May 2022 06:19:01 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:19:01 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:18:35 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 X-TMN: [39etotG5NFlKTXVAlZv1W8zA4gK9a4Nz] X-ClientProxiedBy: ZR0P278CA0192.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::16) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503061844.2184774-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9e1ce8c9-4507-4647-a280-08da2ccccee3 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNUfFs0p/ynZxoLjq6nuVP/rdu4BRHYC4zF1mKk2/Sng5Byfw9ESEMfkuDYTAqlGdbLjEdx0ttv/oJetGNP2gar0SL3aPR60eSfjo2MMxOykwxfWVg3b8tLrVkvpNMAGvAwINuvpKADd4/WjBcyjGtdQ4Xab78uKqb8Yg9YoZGvXvHXcmdbthEHwH/GfUZcnMPa2r6UAEqxlnEvg2MFklKszXCzsx6ZlEsc/+XGYtSeVe6pcTHn2HjmgjIWNHC9TQUW47WF4R93NO2O7udM4Js/0lI2BYPHLGXDI+yesCC7XA/zDqcTqeg4ZCah6erVNK/jMBLWhk+Hoh1E0vcUIZ7v+ZxnfMNiTdeDv96+7/d0pU2LZZkOwyWrNGSDTid25mgwnn4ajZmi4tOtiojgJJuMZTjmLW0RCXrdQHKgsAPWHDNkiT6hfMsWgNUmnshR3SOM5c7EgyUhwK7wzXTv/TwCkABZzuDgrGEjw6U5fbgyX7DoWALRXPkrAS7gafCG1RD4x2bRGVJvkIOVa3GNkEp9IpMQftVbyMyjp20200dDB2rzokXp85PDxIlcIIijwxBz6C0HuEifiYT5NFbiLNALDqD0R6r1AFQyFxmOHeCOo19W18Vlw+dO4Twt8I3FTRrBLFwiUFUhMm56L6+BY+/KGlg6iVEm9hNsJen985M4BQMeTSzYuYREwpZYftlvOlakKGLRfMBHfMURu3wwVN/6iw2ww5YuAmAc= X-MS-TrafficTypeDiagnostic: DB9PR01MB7292:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: erOOiZRugQ3h91ei05e5DcxAgjaZ1XcJfyoBlY9d76LEE/Tx/C5jYYfLRwJWu8FGUa8JQ9rrzvHy15otw0oehsJmyKl8L2TzCrdXF62G3LOSCCT6Db9en8wUnM3ozWRX0tPDWtn6PadpXj6xGFGJvN5rVcI1aR6ar9EqpgXoLmKNpMBeh8/1CfznOT/snD1czz93/xdJ6yGOVDivcquwa+BB4jFlQmv+WTGzQ3/Jjh1Im1SZbrCt3GD/h5PaL0W74/YxHCPhbL6vcjwWoVpcFerSx4GCZRucah/1X1EPWakJBNFywPn7ZtWydpzV/SN71AlRze1nikQcaMvLq8G4T3IsVfuPz1jxZwmZOZCsdiapdbED8PejWJdFe/C+tkR97WOncJBsfgL2M0PZdEm3VMQQracqU4RvN349xia7W7uYjBO2ueGHBjlNJTZe59IoFWf65pIT6FZ712fLhKWWr8FZtaG9/tMpKnzU93wpVrwQxtjDDAko9xgeYYR1zboNJ8Uuz+mAnF0zDBQH8gN1MKpY7of2HQtMpgi6brmioMhnIdhXTkWZ0+OXbv9kap3Fsu/0wmwv5JCrlYVibAmf1Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UiOJTVoXujD79LDkbXUKnj4hv4+Exl27rg9NWHtghXWadTyRg8zB/9l+8M6FhfPDX8mzvz2U2aF5Wy4A39oWg2rWPPLV5iyzXdzpiq2H26R7AYMcUTWfe6S5SyfEF2qdwvKYrl/khEVfvre0MI/u/xZ/X+ueYILRrRrCKauHd/r3DjTfsMjX1D/9Nw5bJ36BoLn5ZUz85oC24V9fOIZgSYQE7kC9fDkuBOwh43RWAN603XKa8/OPsnplP8eY3X/DjzA/PrNOwhtnHeSNQZtzcY4DCY23lyPcF3spUL57vo1a5IV4U5mcrO9tdPt+KrnSfW6VukYg+mRaPFkUIahKLDE0Kku/Ot7wWjCrH8cdWYMpcg4eTBJ62mn9mOFxR15A4yEObo/KCGyW9Esb14KX9u/mm6vfa+EMYwaTflK8skbGE1T1tevqNGgDGQEpjwAQuWUdyCq/jmzrh43k/iX3eB7DQ2y1QlJfUa0i56ODEnv+JaH8l+ovNZcw9W9R4Bf+M8OhTYSfC7P+WdMKnCI8epRgh0ky7V8N+KIb+vVD9k/SNqsv6u5i9pCUIa63NMIYujPM7ZC8itBWv8UBQcRZl3WGmI6VUQmxct/KEhyS6PSonQU4lBu9Bg8cn+3yT4TmJmdr0z6AXinK5qz4VJScSTMQif3UIxwEZAcSVUexbdq0Em3Z/W/TYm7VLHOD5p+/ql3ynZxExaiWku0wUozauEqv57nlt+cXB7IeXlb2r3707grU7R2uGIRg5nvKMVUYRTD0TVr7WJ+5ogiBckf+yPz2seSp3uIISe1X03OvflEKIXpI8vK5HYavgdt7FYiczDKQfC+CuVNr4WH92U79pHxj8Qg1GMY0XN+r9Gx2s2JaShD+uSozpQEp/pWXEPXx+lolXKYWWBC+l/ax4k3j7zAm/nm7r0NUFVVF6vwP6Npyb8APY3hYU9MNeNMZr9iHhWd/en1vmKZOn6/THaRNVuLFBZ6Hyo0wF5fFIlflsrNDpSL0s5ygKc1RLwhZhnjrS/J7KgTBMR7tJ0TXJBwch6QRGv6dGZh660cFTQ5UGOBZhGQDGx61kT7KirHHm1xlJ1ktUT9s1s34fNKWDqM87yDZGgIiqIEehjULXLF3WFRmF6Bw4CS13Q2k/mxbPa+/ANGL9b/tV4UvkECorLQxSEdEyu5ijuDqDdilJfK83uzb1EbP46Ai2wgxH+9uwFEpCerMIEyw9Nwd5xZuVun+MBRxEfygV2NhUjH7kgx1XkUVfZE8WMZi1adjzwibbTQI2DwTyyRCnmKc0CfRGIXD2GPMeXPxuE/4r8V8Q7ZEolPLJDbbMZI6MhM+ThGsL7OctZbiOWwamyOApH5ZIENccyvHoK5AifwhBwGtBfLHGaulrP8GiXa1eqDVr+VlEDuWjQiYRwrcglR5WubWaHPoRrCLaOtUDO2uMS1xyEo2Hl8pSPvVCzZp1wWQEfN/loqxEglK0S+Eej+CfCTj45eeQA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e1ce8c9-4507-4647-a280-08da2ccccee3 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:19:01.7177 (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: DB9PR01MB7292 Subject: [FFmpeg-devel] [PATCH 01/10] avfilter/af_afir: Only keep DSP stuff in header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: EGZpmeh3MKwM Only the AudioFIRDSPContext and the functions for its initialization are needed outside of lavfi/af_afir.c. Also rename the header to af_afirdsp.h to reflect the change. Signed-off-by: Andreas Rheinhardt --- libavfilter/af_afir.c | 71 +++++++++++++++++++++- libavfilter/af_afir.h | 108 --------------------------------- libavfilter/af_afirdsp.h | 34 +++++++++++ libavfilter/x86/af_afir_init.c | 2 +- tests/checkasm/af_afir.c | 2 +- 5 files changed, 106 insertions(+), 111 deletions(-) delete mode 100644 libavfilter/af_afir.h create mode 100644 libavfilter/af_afirdsp.h diff --git a/libavfilter/af_afir.c b/libavfilter/af_afir.c index 72e77eda19..d7ae468428 100644 --- a/libavfilter/af_afir.c +++ b/libavfilter/af_afir.c @@ -30,8 +30,11 @@ #include "libavutil/channel_layout.h" #include "libavutil/common.h" #include "libavutil/float_dsp.h" +#include "libavutil/frame.h" #include "libavutil/intreadwrite.h" +#include "libavutil/log.h" #include "libavutil/opt.h" +#include "libavutil/rational.h" #include "libavutil/xga_font_data.h" #include "audio.h" @@ -39,7 +42,73 @@ #include "filters.h" #include "formats.h" #include "internal.h" -#include "af_afir.h" +#include "af_afirdsp.h" + +typedef struct AudioFIRSegment { + int nb_partitions; + int part_size; + int block_size; + int fft_length; + int coeff_size; + int input_size; + int input_offset; + + int *output_offset; + int *part_index; + + AVFrame *sumin; + AVFrame *sumout; + AVFrame *blockin; + AVFrame *blockout; + AVFrame *buffer; + AVFrame *coeff; + AVFrame *input; + AVFrame *output; + + AVTXContext **tx, **itx; + av_tx_fn tx_fn, itx_fn; +} AudioFIRSegment; + +typedef struct AudioFIRContext { + const AVClass *class; + + float wet_gain; + float dry_gain; + float length; + int gtype; + float ir_gain; + int ir_format; + float max_ir_len; + int response; + int w, h; + AVRational frame_rate; + int ir_channel; + int minp; + int maxp; + int nb_irs; + int selir; + + float gain; + + int eof_coeffs[32]; + int have_coeffs; + int nb_taps; + int nb_channels; + int nb_coef_channels; + int one2many; + + AudioFIRSegment seg[1024]; + int nb_segments; + + AVFrame *in; + AVFrame *ir[32]; + AVFrame *video; + int min_part_size; + int64_t pts; + + AudioFIRDSPContext afirdsp; + AVFloatDSPContext *fdsp; +} AudioFIRContext; static void fcmul_add_c(float *sum, const float *t, const float *c, ptrdiff_t len) { diff --git a/libavfilter/af_afir.h b/libavfilter/af_afir.h deleted file mode 100644 index cf00dbfc66..0000000000 --- a/libavfilter/af_afir.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2017 Paul B Mahol - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFILTER_AFIR_H -#define AVFILTER_AFIR_H - -#include -#include - -#include "libavutil/tx.h" -#include "libavutil/float_dsp.h" -#include "libavutil/frame.h" -#include "libavutil/log.h" -#include "libavutil/rational.h" - -typedef struct AudioFIRSegment { - int nb_partitions; - int part_size; - int block_size; - int fft_length; - int coeff_size; - int input_size; - int input_offset; - - int *output_offset; - int *part_index; - - AVFrame *sumin; - AVFrame *sumout; - AVFrame *blockin; - AVFrame *blockout; - AVFrame *buffer; - AVFrame *coeff; - AVFrame *input; - AVFrame *output; - - AVTXContext **tx, **itx; - av_tx_fn tx_fn, itx_fn; -} AudioFIRSegment; - -typedef struct AudioFIRDSPContext { - void (*fcmul_add)(float *sum, const float *t, const float *c, - ptrdiff_t len); -} AudioFIRDSPContext; - -typedef struct AudioFIRContext { - const AVClass *class; - - float wet_gain; - float dry_gain; - float length; - int gtype; - float ir_gain; - int ir_format; - float max_ir_len; - int response; - int w, h; - AVRational frame_rate; - int ir_channel; - int minp; - int maxp; - int nb_irs; - int selir; - - float gain; - - int eof_coeffs[32]; - int have_coeffs; - int nb_taps; - int nb_channels; - int nb_coef_channels; - int one2many; - - AudioFIRSegment seg[1024]; - int nb_segments; - - AVFrame *in; - AVFrame *ir[32]; - AVFrame *video; - int min_part_size; - int64_t pts; - - AudioFIRDSPContext afirdsp; - AVFloatDSPContext *fdsp; - -} AudioFIRContext; - -void ff_afir_init(AudioFIRDSPContext *s); -void ff_afir_init_x86(AudioFIRDSPContext *s); - -#endif /* AVFILTER_AFIR_H */ diff --git a/libavfilter/af_afirdsp.h b/libavfilter/af_afirdsp.h new file mode 100644 index 0000000000..f72ab7cd02 --- /dev/null +++ b/libavfilter/af_afirdsp.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2017 Paul B Mahol + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFILTER_AFIRDSP_H +#define AVFILTER_AFIRDSP_H + +#include + +typedef struct AudioFIRDSPContext { + void (*fcmul_add)(float *sum, const float *t, const float *c, + ptrdiff_t len); +} AudioFIRDSPContext; + +void ff_afir_init(AudioFIRDSPContext *s); +void ff_afir_init_x86(AudioFIRDSPContext *s); + +#endif /* AVFILTER_AFIRDSP_H */ diff --git a/libavfilter/x86/af_afir_init.c b/libavfilter/x86/af_afir_init.c index c37212c381..e53817b9c0 100644 --- a/libavfilter/x86/af_afir_init.c +++ b/libavfilter/x86/af_afir_init.c @@ -20,7 +20,7 @@ #include "libavutil/attributes.h" #include "libavutil/cpu.h" #include "libavutil/x86/cpu.h" -#include "libavfilter/af_afir.h" +#include "libavfilter/af_afirdsp.h" void ff_fcmul_add_sse3(float *sum, const float *t, const float *c, ptrdiff_t len); diff --git a/tests/checkasm/af_afir.c b/tests/checkasm/af_afir.c index b8a845db82..08c55dacfc 100644 --- a/tests/checkasm/af_afir.c +++ b/tests/checkasm/af_afir.c @@ -21,7 +21,7 @@ #include #include -#include "libavfilter/af_afir.h" +#include "libavfilter/af_afirdsp.h" #include "libavutil/internal.h" #include "libavutil/mem_internal.h" #include "checkasm.h" From patchwork Tue May 3 06:37:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35552 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257299pzb; Mon, 2 May 2022 23:38:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz/17IQpaTN6rW7uno2LBndlqpjq5BRyFtyknmhAAQbPMv+Tmgp3HFYgpVqVHhtmhAHSb86 X-Received: by 2002:a05:6402:2789:b0:427:bc78:85c9 with SMTP id b9-20020a056402278900b00427bc7885c9mr10459583ede.50.1651559911312; Mon, 02 May 2022 23:38:31 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z13-20020a05640235cd00b00427ccd4bea2si3494155edc.451.2022.05.02.23.38.30; Mon, 02 May 2022 23:38:31 -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=@outlook.com header.s=selector1 header.b=ogdxLxeH; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 989AD68A8CD; Tue, 3 May 2022 09:38:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075073.outbound.protection.outlook.com [40.92.75.73]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DF8C368A8CD for ; Tue, 3 May 2022 09:38:20 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dYYpOEp4RVfv8ihqCIAjJPAXtwshZu7XdJ82Ydq7SC7IrELSO0RBkmSmKybWBTRJEt2/EbIaJ8OlGemQODbT+Zn21yI2NrSWSsR3Z4jJGXrBUravkAtBR0z0uqlZ77yKfPBPMzjqpxu5nhtnxQqbITXRZWHOzeBptP+gwbrRwZirnrdtGVR53Iw/8TQLodpehuGMMiIRJgc7WXfLhfSanUWWoeMKfSLp4zNxFGXgkDGxeKQTqQCb+sskXlcegyWifLI+8tYsNROmRaPboTh5BepOc9Wo3HwFvAt/P9oP1CNYhNEAL4R79p/WQAMmc8Yi9++CruAswbP/tpAs8hOSHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=eYLTlp++C/NtlGtjVc1MZrVRfGOBi1sv5D6cIhUvnHE=; b=mNjKOQx3W8Yqi5IP9foUOGxkfJlE0eRQVxCGIawhvYYVLIAGoGLZluxfJdngUR5KHxOd5pTAYwAs6pzHDi09khVkQ6WiHjQe+UjwzUYdn0pg17elMzCfvy1lqSJF5kE8JRpE/orVntd8fZDYNjN04eKpHA8rJ8vzsrqCaZnrPsZxultnTQ9CGHO7wBTnu53iLoT2tRef+gEITgE57Bmfeq0ZUNb1/YW3g/bxybE8DZ11fkXMc5GlhDm4B8ikWQo7So14GVmIT18epU+hYhGl5zZxN7XmNd8ocV0stxEwyAFE9e0EkDFW5hWg/Zm7GC3PDI8Oe5kZLbALtRRYLx54ew== 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=eYLTlp++C/NtlGtjVc1MZrVRfGOBi1sv5D6cIhUvnHE=; b=ogdxLxeHUzNb+PKMkpnnofNjR8BsrWhNeZX7yx6kDmiINAB9G0MAff63o+5It2fBJNMo2OQtJfIeBID26241BtthpHOXRCgoYd6rDkMzuohOOy8bPYimceFZnx+o5mrkYCr1C0oZm4vfz2xj47YJDa64J8erc0LlSkCSRLx9zKKO/tzkmkfHcYirpH3DwQ5piecQha+ecFX/dqMCiXGau3hCcUl7LM/p/saOo4yuYDjT12xyQqkJsTz5AZ0msii1/t8SjYaMyU0SqkcoO3pBw6dhi7yk0noZOHKQbu3rN9t5ZynJ79gis7xO2CxWizkibTwZhrrLyVvwINvIk/jC0g== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:38:19 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:38:18 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:43 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [FmlMJVhi51SXu879medABV+Pj6iOtxvZ] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3f66ce43-5bda-442d-83c1-08da2ccf8228 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNUfFs0p/ynZxoLjq6nuVP/rjsuUE3G4c8SxPO6Ayvp1lUaP5A5U+1cBu2zSAs8X4rkk5TU+1U5BV/6ZQeQlz+zsyHY7kroxgIrekCayRrG2HxPFRLzy6naiHZt1e381WS8+5FaZLTwlR9DK1XO4QPy1XPAufA8zHTrmvWaufxBTAh82hu5Wxe2NwyAJmZHP3JbMjeiXkqZsCgDaG/fRSxMOmGMBJFOJHsGGAU8T0BU0SqUgH3RzThpAwUoCZ9R7Ehp0Ep75lgQl74UYh/+88IqyE1f9LLn26OIsxAXMdOMCwdWZN1guDB+xIhMy9tis56F/jjivtcMK7EC3ixrvZkoDnYRhfZKx3zOIUi/EkAt1zqH6N0v2Y0ku/WvnCnQ/Em+mJErVWXIbf28LraSg+h7tAg/YuEKC5hYvPYB2YLjkCUvkjkHMMBWh24PYujS/a11AF1+SAIyUTDOjRFWgcZiMcHYh6rZp7SyOmzv2RMxlUcIE+n6mgDYI0ytwzad2uWJUqW2oOPHZKmE/yx7Swz5OzLTGwVbDCoefp35X1b236tFPZcTtAjVSH2HSKzZxAdz4/hFrbmUZZvocNvw+guV9rzvrSxh/aqS0uUruvRYqJApDppC7JUZjQqzIUJ/qzuSwgBP9YikVjmInVfUUoaGn2lXXgtrpSXpdGBKv83uX/pvbo53L9fYw3FxFYjQpH5Kme06Ov45fX79ih12RDPR59IwQWvTxZrs= X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8bVP7wvO1h0WdmjtmPuzKtmJMqSXvADOe5EcU6uY6W0J8tc9Ynuu+wYy7C0aJ9prWqLiYoNRRH0+VRQvRzbSLPex0QEYt5Hed//waeT3Ca+ZuauVx1/rEm6aO+i/SKRZoTOncS5QEaeXG4woXWVg4rOCv+7Goe56WafMTo/tkzVqecOmzTFUTLKzXDDDPgfn5oD+rQfUxCebUmO5mF4BXjMKOWVo54tZNcG0byoy5U31gmMPmSaPlpuR+7ZDckBRfvMPeDD7NV9i+hOmnS/R/yQpxlMgTYTXkIpdDauAo6AgzjbzyotRQWSt7Btx72wqqtwRFTKPMJ+YUXlUf3qWaYmNJai/pG62QsWQpcR75WfWlkD4x6xEt1nz6FVwX9YxMrsrwYz4j6trqCV5hg8chnoB9rzTJwogl3S0uaMX15/yRPwT6t4/+Ks1v+5oWsx2PQtEX40rEn1K//3B6PzvnLdJC0RgJxa33nxm8h7LLIWk6H6Id96i/+ibfmHYicfrbkikLswFQPIqXVjTphKCtpslWVIaWBiY4NXb2BCZOcU7QiIXD6mQ8SP8ZL1nLWPMIFBareZU1/2YxXwL0p7qTg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kvcYh4eSkSrNikIy9xdwzqmdtWmyh8ko7I6jwCffhGDlfetDJM/urkuCReQkPPq3VT7/kIgYciG0HZAzn8IvGQO/2Xd5gy9oHCx3indLFy441r12nrj5BamavrPQO/CFnJDZi+AIsCuT3gKeZIlTMTAC2QtrlJp5/7Op6InKNFyXnR5mqK9IPx2lvmsCZ4uRQsulKi7MwPfJboCdX2dB2bhXIUdl6pD8hFYht3Rh5gPlkMUC/8Zl/Q5PEOKHA0imb9pMdo9WnqYbWz1R8P94gNkUpIVbrk6ZdaxxFqo0ihZOCJCoIv45Ldi3YQymguC6We/6xLTRQtFJQU4HucJ3qhF2bFz7auOpWo6tbZ+cuczKGt35+gLIRwP96BAdUAOAgXeL+hTFmx8dFtGO6lKHOE6rKXdrHMNkbiWFm8Yd6J0h0LQbW8dMZbNZ4PMHtast/W05lg7d8oJYoDkZcjxEaUe0gCWtkXsdcyquXitCSiIdhox8UlgAAbj8YGXmKq/rnLWAUPzYEA78LfB/8DGPszdwbxXyVNOLPZV9nkDYRPkG4vw25VSlxmtFkgJkIulVcNynHMMsn1YvPCVQxRQjTwTEqwsFHaXr8DGs1djRg84uyyFpAunmpfl8jCo4NIcIuZSqct5Mcn7PzZOaMu6/GoTmD74fk2gxzWENjWuTcMZ8RNrzkQ1UcOJlgqhUnqNPDFnYEueVB//GHo/wwV7Go73t159HeFHUdB4wbQBBlQSD5kgTrK7IPzUK3KPdfKm8D2FAqRMX8aQjsB0e2pX7dVMcDeV58elGBA0vFLPpdcRJLv/TDDhTZWOTfyn3vqUEIHAB8GU33DfX7kowClWyTz8Q4cPmde9n780nz6iEEq2Fg3li/xdm0Fm/+RExzkdWi2QjexF7cnPlYLKYPbbAtfJsLv8e0ssgVYpqqcRF0ASPLPyV6VE03Cn7JrITqehCZ3n4R+1rgcZly2nEh96cGgbwp2D+ObE2uN6E+cpc7+kkCjbAKxQ+Hu9TYeSRt5X2PuJAIFNfevaYdjo9x2IO77nu9d+xXwLh51mrqkAgbXme7nTIhMnUHWR13joPEdQqSFLqxgI10ArXWtHuzOPPBbF9aSUyh9lTH+a+WodSVZjR44/TExlCTz9YFC7kpOoN5/13+JW7LYkpmZFX1m0DCv+nU85yrhpFnTgepRF+6Mh/C38SjHbsNqeoBNMixnrBSt5PSZafHX/xA55OlXbZlUVz+WarEsWjOnmWhP9UEFn9vULaIjQ6TGzAXZ4TtBTZnhvHW0jgX3TT3nk0m9LVUZGh1vDT78RAENPoheO3Be27JVFx34AWBBnIsNAvoY45WdJTik+ZxcLmEN9czEgX+/K7+JF+EgXenSM8LFR6vtUIGhJteYd+v60tORdRomWqxJqp79nXE+ZPONliVfnou3mhY14Wr/x4ey2wbSAB4V1cvShwemEkTAZP0K1k4GO/M3qdDAQEKmwnfLowJjrAQw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f66ce43-5bda-442d-83c1-08da2ccf8228 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:38:18.7703 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 02/10] avfilter/af_afir: Move ff_afir_init() to header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: JE8tqC2YvFiM This allows to inline it in af_afir.c (regardless of interposing); moreover it removes a dependency of the checkasm test on lavfi/af_afir.o. Signed-off-by: Andreas Rheinhardt --- libavfilter/af_afir.c | 25 ------------------------- libavfilter/af_afirdsp.h | 29 ++++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/libavfilter/af_afir.c b/libavfilter/af_afir.c index d7ae468428..301553575f 100644 --- a/libavfilter/af_afir.c +++ b/libavfilter/af_afir.c @@ -110,23 +110,6 @@ typedef struct AudioFIRContext { AVFloatDSPContext *fdsp; } AudioFIRContext; -static void fcmul_add_c(float *sum, const float *t, const float *c, ptrdiff_t len) -{ - int n; - - for (n = 0; n < len; n++) { - const float cre = c[2 * n ]; - const float cim = c[2 * n + 1]; - const float tre = t[2 * n ]; - const float tim = t[2 * n + 1]; - - sum[2 * n ] += tre * cre - tim * cim; - sum[2 * n + 1] += tre * cim + tim * cre; - } - - sum[2 * n] += t[2 * n] * c[2 * n]; -} - static void direct(const float *in, const AVComplexFloat *ir, int len, float *out) { for (int n = 0; n < len; n++) @@ -884,14 +867,6 @@ static int config_video(AVFilterLink *outlink) return 0; } -void ff_afir_init(AudioFIRDSPContext *dsp) -{ - dsp->fcmul_add = fcmul_add_c; - - if (ARCH_X86) - ff_afir_init_x86(dsp); -} - static av_cold int init(AVFilterContext *ctx) { AudioFIRContext *s = ctx->priv; diff --git a/libavfilter/af_afirdsp.h b/libavfilter/af_afirdsp.h index f72ab7cd02..05182bebb4 100644 --- a/libavfilter/af_afirdsp.h +++ b/libavfilter/af_afirdsp.h @@ -23,12 +23,39 @@ #include +#include "config.h" +#include "libavutil/attributes.h" + typedef struct AudioFIRDSPContext { void (*fcmul_add)(float *sum, const float *t, const float *c, ptrdiff_t len); } AudioFIRDSPContext; -void ff_afir_init(AudioFIRDSPContext *s); void ff_afir_init_x86(AudioFIRDSPContext *s); +static void fcmul_add_c(float *sum, const float *t, const float *c, ptrdiff_t len) +{ + int n; + + for (n = 0; n < len; n++) { + const float cre = c[2 * n ]; + const float cim = c[2 * n + 1]; + const float tre = t[2 * n ]; + const float tim = t[2 * n + 1]; + + sum[2 * n ] += tre * cre - tim * cim; + sum[2 * n + 1] += tre * cim + tim * cre; + } + + sum[2 * n] += t[2 * n] * c[2 * n]; +} + +static av_unused void ff_afir_init(AudioFIRDSPContext *dsp) +{ + dsp->fcmul_add = fcmul_add_c; + + if (ARCH_X86) + ff_afir_init_x86(dsp); +} + #endif /* AVFILTER_AFIRDSP_H */ From patchwork Tue May 3 06:37:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35553 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257375pzb; Mon, 2 May 2022 23:38:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxkQUl5V3yxhYyB8X3hbhmkKcOirEgvIF+T/dZDuewwyHE+xk3Wr7fZ1PGD9VaWZrcMyJ9L X-Received: by 2002:a17:907:3fa6:b0:6f3:a758:73b3 with SMTP id hr38-20020a1709073fa600b006f3a75873b3mr14529516ejc.108.1651559926297; Mon, 02 May 2022 23:38:46 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g14-20020a056402424e00b00427b1691f9csi7070702edb.186.2022.05.02.23.38.45; Mon, 02 May 2022 23:38:46 -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=@outlook.com header.s=selector1 header.b=tv49icx+; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9A83E68B38A; Tue, 3 May 2022 09:38:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075087.outbound.protection.outlook.com [40.92.75.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2044768B379 for ; Tue, 3 May 2022 09:38:36 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JXKkOBHOdioYa82/yLPlktCR27HVHlUbOQbKvb3tnQpDZxhyO+D67dS4N6bKeMlvkrd2qCwwSFoaa8B3YkNQisoj6pE3vxRi1sSJKZJAdgdGHyqz9KTuNwh8LzsQIXLUqb+R6lHke6k2i5NSBptnmLPO+nKhLWFS15YCwfz6CGA8nNVMHJR6rpz1zEJQD/FHxoxjU7HD7sqd9H9TM5Y0610K7X8FoedMJj3RH6wUXdTpzuxQd/nGedzmwN6T52mi5+Bu3PsND+vItIZ4fsFO8dyZ68IJQX09nOJg7z4diW6vyqAN/2ZD/S9E0Q0/x9uzmr8LEl4N/0sYTJK/U6JgqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=F3XcY3UHYQXebAiqseI3XPBvawpma9LaDIYAt4qLO2M=; b=LQwNYeK1NTHGt0Z1ilwtzzKZmXPp8mDPJtEDmqwvge5hiqUic7mc3ELT1GGB3FgokBXhklkMU8EdK8ou41Ora4SIVOZ6VYbBg+YvpTRkYmz6AVS5DEpaQ6ZT/O2cjYgre9LRthIKFGtMqeubK+Zy4lFsaKQeM6d1tSK2PaMdAZY+NOiJOc0wmOicnzmO2rEil+9tmVQt9jkCQ1AiJaIZyERW0JaTzSDggtHa5E30WOtGAWkTF8Bv7b31STYEkzeB1WoRXnGsSbuM5QcD+PoPZQnJNmyl4oTw4o+KHgdzfTEWg8YstZ7bzvbuuzsDyhBbSYrN+i4UFl2CV9mLumqk0w== 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=F3XcY3UHYQXebAiqseI3XPBvawpma9LaDIYAt4qLO2M=; b=tv49icx+b4SSHbpHFCnRrZ7dZ8AXXx6yuDvG/4SIMqvjD0HBhTcuTz5oHqbG9q8AYDpCqnAxP+3e09tEMrBCdmGFZWW4nvbU3yC5Ow+URBI48SLcu3beAn3q1My8HlzaZkYwa0mxjVvFE3LpYbsX1R0qv4bAMW06nMEI0S/rLIABkl6DpA4L2a2Tr0MTfo7Vd2xj2wY2P8iAuWuWPvrAIYf2hcl8o0wqMXd44gXxtMMI3DOy0wNiHGzeS3wOC7skLEwNEJ81OL6uUrOkflex7fgOvxD6QBMiX1cKGWwAlbtF4UV8E9VRAnLM78KgTuyu1IqTXd7jJkTT7j/1gmg5NQ== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:38:34 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:38:34 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:44 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [3gKlD+wwK11AsqD8gGAY5lOfMpImp+z2] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 74fd3d2a-17d7-4e99-0d08-08da2ccf8bc8 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTQEkMEhbgfP1CXQyS+IofoXLPsl+0rmRprglPJoP39vu4VkUkyzMhXRVhF7jr+jHzHmftcSCbsltdOLpSoHOhhfekO7QxcOLycVv1WmS42NdKHsmd4PD9DEE4jyfQ45XJwThz4C3qej5ppl19GExb6N/VYwoZjY7ma6UFnSkqbP2qpbJ1JJSsu+pB+OweChOkQSEGE9lzffK75uu81eiZLObb1I5rRGvahCfprAYxqpATvilGkX0dsaU6QQgcLcibK8Kk7LqGg8FdYVUl+AWqq1fZaVWuDgUkqsaN8YObWFW5ERmOn0mmm3Pv/I0QPo/mA0J9DmrniPYjcEuSkv+4M7r5Ie0rybqu+/yfnovCKqlieiCjz07dt4cN6/nnmNplavAjlIgp8DbDBKDPNYXkw7yRH6LGdxxdyGKxfxotXD7OLO6U4+ZoVaFWZAxyLr3E5re+BcPJeb/bw1MsPMvFT5UQ2AyC8SybWRjyXiWRsdrIplH4kiJpWjkI6VP8g+vOjVwvXoYrN2WmgEX4YCL8R2gfzzKTRXBjVQUvyRVc+/4QQb5JAGIWLcopTtWewz5b3RoKjvdf70wCJMNNFDwuzaryjG2Bk+NqxeaWQycaHaizrHx89iyuqCWtjRyiKrCKNxj1tZX/yTTQO9oPh8gf/SqebqEJ/6GEuM6stgdff3uXSMEQfapmodlJ/6ahvQXlMk93OemgVkmKqGe/WLePuiFfwi89lqjZsB8ltkJh10sPmqVzuUM9iqAWI52moKls= X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9XGQ+W6GS80Tr6cFqejrsZeMrEPEW6AVMun7zsXF2ybdA2Ac2PYKQ2nWJbO8LXUGPPvKhIrKS7oSfdwgSCWLMLpVMuPH8t/A4queDPnwA0UuKZ0dHtpuT4mUk6vpk6U5Cye6stapCEE6Oz6DnCfG/69kNibcSdJV/uovYUk5Jkr1YSYftJU3T8+2cw4OTOl8/asqGuwMgyXKhc7BybL1+JLmJQjOTDDfXitpzVJJ2B0EYz9Zuw09zCoAH4S8rFyHjsZ3uMS5IDd+nu372iTuIy47biaGZjWGD9oMpQ5DlcrYxOZHlnz1MteI0KcoBlC/mKVam0QZyg73Pm1IFbn8AMGXygmIp1giyuEIzFu18ng293o0lT/h/y3rHP/PPg00e2WtlsLrsogwVgP2G0LGtbTBC8ZUKh8KFKHEMO5typO2lapIJMTjobFkVZoNF3V5UZMmQNQiskYAxD5BounqjLNv6JH97m9Fm1MilYoXGd1KPLiI6rZTKewVTzNK/J0ZO4wLIsCQp2NdeI9TeAz2hvfEmkNnrtbe6j26dY8Cj25AdlC4T7iLvuDJPCTxkCGYN7CgmzzV+dkwqvfGqg89cg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cokizX13zYO0kWzK0MLpYz6Wo7Wmoe2HqUny+NMrqpe6+tfuwmZLZqc5VSgVehvgwT31nI0pVLpYZ83XBvyO4luwij8VyU1zyywTzK6OfsKz8cwO7ITzSKTGbZwe4hFGUg+LlBuylSPd9a8KAwp+VAtZ9uobrydENFe7zoG2qrngnqeYcSkv1YjxwV4lnZz+LAvzc0eVcGQu6rpKHFOY2AK4DFNeP/Ibql1dt9Z/JtV93E+/DwQNBDbn99x5r/fJJFoMTO9vplMuKkqf9usV/1gnD2F228OKNRictG2RZ405bAR/gSZEIyxmQVTBEF/gTZ+XliusTccm2YYvko4ovs2Oe5uo7w5lWQ4Y0jv+bYUvp+v3963YUZKr2RShITqToYrxeBdM+YEd+ioTnWVZdboeG5PKLkDzTu3aZE4X1Vffr3ZlaEGGtfZ7KB1RZIBXfb8nw+x4yvQK8OOMsgebvy+M2mWQem020WsrXmJysVrvVvug5ZASCmIeLlvdrmHPeYsjaWeGHE2k3JWjVuzb2HxTBuxeRGDA/A13sfZdyFEoUTA9Sz3oKeS5QsbGjejhUUT1TsZ9ElsoEJzyAjSgKy+2PbSNvD+b+9f0YJxYInnlxxI3uCWJW8WL/XkHF1BfTE0Xmx0mAaWozAr7GkRJltMrkIC2FtyAGcSwK0CEaTxiyozZvQpUQpBQOLZa2mCbwIkkwXALKa1m/sYCYyu+rsHKQS8UgkvAgqE74mg8gtIxF2pV8Sc3//nieK9j137PW0Bi+QS/3uUdZgTMzRW+G7MuDMs7873Ce0oylrwpqTMIVK8SVNHZ/Gsb2Fh5uZ5RH7OS343t8Lq599enYiYqwoDVBFaQZ+4PP2NT1J2aTegNCRmOInwZoJ/QCOoWvGTu3pt1T4Bpi/oHcSzZccRS3qxvDLZ7qa3ZMqfC5TrfJDUBePhvlqCdszVFLWpNkZukReUzT2s8orwG+cGo7IAg0N1B9KZ/NdMlMm3r3LlEnz2O68HfkAeD4+gdaqsP8O/nGCzZsz61ZJvyz82i3uDLBJoUvbp5NWxjj4Y8X0zVWNNeBYc30F7T3DTMlXtevn2kxWzon7hjbAujz80N8aGoNC1SLFAdDZRUDaPTx/6BWVQRi2a8p0D+84Zf37C5DQyqbplOdDq4KXMsNwIs4DTneVsWx7szLyfeaJfoO9LlxO1cdZbjV7pIOrGNhoPFFxJGHElJkJbmTdNzjngKkSazb8sri06tyxD8qIXe35Zkv/pL2qqYhpAg5dMUguxhouJd2j//hH0y5tli79ZHl416Yb6qV0JEPeMV9A6YXUOGS/blG2TO/RDGr0+VZSLsFCqecvW0IE1U6MDYZIDp+K5pH+bpRBQLRtTxsIXWWBkil21IFywTiskhaeZq94qQZxEwvAw3+NCVPTXTV/jocrhYtZ3tgLCC73ZzRu7QqVt28A5wqs32bCFv0YQf6DltQSc3btqJDraxLcENJi4/QJNUQg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74fd3d2a-17d7-4e99-0d08-08da2ccf8bc8 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:38:34.6341 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 03/10] avfilter/vf_blend: Move ff_blend_init into a header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1o0C8M0j6I+P This removes a dependency of checkasm on lavfi/vf_blend.o and also allows to inline ff_blend_init() irrespectively of interposing. Signed-off-by: Andreas Rheinhardt --- libavfilter/blend.h | 1 - libavfilter/vf_blend.c | 176 +------------------------------ libavfilter/vf_blend_init.h | 201 ++++++++++++++++++++++++++++++++++++ tests/checkasm/vf_blend.c | 2 +- 4 files changed, 203 insertions(+), 177 deletions(-) create mode 100644 libavfilter/vf_blend_init.h diff --git a/libavfilter/blend.h b/libavfilter/blend.h index ff417650cf..b046e062bc 100644 --- a/libavfilter/blend.h +++ b/libavfilter/blend.h @@ -81,7 +81,6 @@ typedef struct FilterParams { struct FilterParams *param, double *values, int starty); } FilterParams; -void ff_blend_init(FilterParams *param, int depth); void ff_blend_init_x86(FilterParams *param, int depth); #endif /* AVFILTER_BLEND_H */ diff --git a/libavfilter/vf_blend.c b/libavfilter/vf_blend.c index c882086c51..dfe2b8b174 100644 --- a/libavfilter/vf_blend.c +++ b/libavfilter/vf_blend.c @@ -20,48 +20,19 @@ #include "config_components.h" -#include "libavutil/imgutils.h" -#include "libavutil/intfloat.h" #include "libavutil/eval.h" #include "libavutil/opt.h" #include "libavutil/pixfmt.h" #include "avfilter.h" -#include "formats.h" #include "framesync.h" #include "internal.h" +#include "vf_blend_init.h" #include "video.h" #include "blend.h" #define TOP 0 #define BOTTOM 1 -#define DEPTH 8 -#include "blend_modes.c" - -#undef DEPTH -#define DEPTH 9 -#include "blend_modes.c" - -#undef DEPTH -#define DEPTH 10 -#include "blend_modes.c" - -#undef DEPTH -#define DEPTH 12 -#include "blend_modes.c" - -#undef DEPTH -#define DEPTH 14 -#include "blend_modes.c" - -#undef DEPTH -#define DEPTH 16 -#include "blend_modes.c" - -#undef DEPTH -#define DEPTH 32 -#include "blend_modes.c" - typedef struct BlendContext { const AVClass *class; FFFrameSync fs; @@ -155,58 +126,6 @@ static const AVOption blend_options[] = { FRAMESYNC_DEFINE_CLASS(blend, BlendContext, fs); -#define COPY(src, depth) \ -static void blend_copy ## src##_##depth(const uint8_t *top, ptrdiff_t top_linesize, \ - const uint8_t *bottom, ptrdiff_t bottom_linesize,\ - uint8_t *dst, ptrdiff_t dst_linesize, \ - ptrdiff_t width, ptrdiff_t height, \ - FilterParams *param, double *values, int starty) \ -{ \ - av_image_copy_plane(dst, dst_linesize, src, src ## _linesize, \ - width * depth / 8, height); \ -} - -COPY(top, 8) -COPY(bottom, 8) - -COPY(top, 16) -COPY(bottom, 16) - -COPY(top, 32) -COPY(bottom, 32) - -#undef COPY - -#define BLEND_NORMAL(name, type) \ -static void blend_normal_##name(const uint8_t *_top, ptrdiff_t top_linesize, \ - const uint8_t *_bottom, ptrdiff_t bottom_linesize,\ - uint8_t *_dst, ptrdiff_t dst_linesize, \ - ptrdiff_t width, ptrdiff_t height, \ - FilterParams *param, double *values, int starty) \ -{ \ - const type *top = (type*)_top; \ - const type *bottom = (type*)_bottom; \ - type *dst = (type*)_dst; \ - const float opacity = param->opacity; \ - \ - dst_linesize /= sizeof(type); \ - top_linesize /= sizeof(type); \ - bottom_linesize /= sizeof(type); \ - \ - for (int i = 0; i < height; i++) { \ - for (int j = 0; j < width; j++) { \ - dst[j] = top[j] * opacity + bottom[j] * (1.f - opacity); \ - } \ - dst += dst_linesize; \ - top += top_linesize; \ - bottom += bottom_linesize; \ - } \ -} - -BLEND_NORMAL(8bit, uint8_t) -BLEND_NORMAL(16bit, uint16_t) -BLEND_NORMAL(32bit, float) - #define DEFINE_BLEND_EXPR(type, name, div) \ static void blend_expr_## name(const uint8_t *_top, ptrdiff_t top_linesize, \ const uint8_t *_bottom, ptrdiff_t bottom_linesize, \ @@ -365,99 +284,6 @@ static av_cold void uninit(AVFilterContext *ctx) av_expr_free(s->params[i].e); } -#define DEFINE_INIT_BLEND_FUNC(depth, nbits) \ -static av_cold void init_blend_func_##depth##_##nbits##bit(FilterParams *param) \ -{ \ - switch (param->mode) { \ - case BLEND_ADDITION: param->blend = blend_addition_##depth##bit; break; \ - case BLEND_GRAINMERGE: param->blend = blend_grainmerge_##depth##bit; break; \ - case BLEND_AND: param->blend = blend_and_##depth##bit; break; \ - case BLEND_AVERAGE: param->blend = blend_average_##depth##bit; break; \ - case BLEND_BURN: param->blend = blend_burn_##depth##bit; break; \ - case BLEND_DARKEN: param->blend = blend_darken_##depth##bit; break; \ - case BLEND_DIFFERENCE: param->blend = blend_difference_##depth##bit; break; \ - case BLEND_GRAINEXTRACT: param->blend = blend_grainextract_##depth##bit; break; \ - case BLEND_DIVIDE: param->blend = blend_divide_##depth##bit; break; \ - case BLEND_DODGE: param->blend = blend_dodge_##depth##bit; break; \ - case BLEND_EXCLUSION: param->blend = blend_exclusion_##depth##bit; break; \ - case BLEND_EXTREMITY: param->blend = blend_extremity_##depth##bit; break; \ - case BLEND_FREEZE: param->blend = blend_freeze_##depth##bit; break; \ - case BLEND_GLOW: param->blend = blend_glow_##depth##bit; break; \ - case BLEND_HARDLIGHT: param->blend = blend_hardlight_##depth##bit; break; \ - case BLEND_HARDMIX: param->blend = blend_hardmix_##depth##bit; break; \ - case BLEND_HEAT: param->blend = blend_heat_##depth##bit; break; \ - case BLEND_LIGHTEN: param->blend = blend_lighten_##depth##bit; break; \ - case BLEND_LINEARLIGHT: param->blend = blend_linearlight_##depth##bit; break; \ - case BLEND_MULTIPLY: param->blend = blend_multiply_##depth##bit; break; \ - case BLEND_MULTIPLY128: param->blend = blend_multiply128_##depth##bit; break; \ - case BLEND_NEGATION: param->blend = blend_negation_##depth##bit; break; \ - case BLEND_NORMAL: param->blend = blend_normal_##nbits##bit; break; \ - case BLEND_OR: param->blend = blend_or_##depth##bit; break; \ - case BLEND_OVERLAY: param->blend = blend_overlay_##depth##bit; break; \ - case BLEND_PHOENIX: param->blend = blend_phoenix_##depth##bit; break; \ - case BLEND_PINLIGHT: param->blend = blend_pinlight_##depth##bit; break; \ - case BLEND_REFLECT: param->blend = blend_reflect_##depth##bit; break; \ - case BLEND_SCREEN: param->blend = blend_screen_##depth##bit; break; \ - case BLEND_SOFTLIGHT: param->blend = blend_softlight_##depth##bit; break; \ - case BLEND_SUBTRACT: param->blend = blend_subtract_##depth##bit; break; \ - case BLEND_VIVIDLIGHT: param->blend = blend_vividlight_##depth##bit; break; \ - case BLEND_XOR: param->blend = blend_xor_##depth##bit; break; \ - case BLEND_SOFTDIFFERENCE:param->blend=blend_softdifference_##depth##bit;break; \ - case BLEND_GEOMETRIC: param->blend = blend_geometric_##depth##bit; break; \ - case BLEND_HARMONIC: param->blend = blend_harmonic_##depth##bit; break; \ - case BLEND_BLEACH: param->blend = blend_bleach_##depth##bit; break; \ - case BLEND_STAIN: param->blend = blend_stain_##depth##bit; break; \ - case BLEND_INTERPOLATE: param->blend = blend_interpolate_##depth##bit; break; \ - case BLEND_HARDOVERLAY: param->blend = blend_hardoverlay_##depth##bit; break; \ - } \ -} -DEFINE_INIT_BLEND_FUNC(8, 8) -DEFINE_INIT_BLEND_FUNC(9, 16) -DEFINE_INIT_BLEND_FUNC(10, 16) -DEFINE_INIT_BLEND_FUNC(12, 16) -DEFINE_INIT_BLEND_FUNC(14, 16) -DEFINE_INIT_BLEND_FUNC(16, 16) -DEFINE_INIT_BLEND_FUNC(32, 32) - -void ff_blend_init(FilterParams *param, int depth) -{ - switch (depth) { - case 8: - init_blend_func_8_8bit(param); - break; - case 9: - init_blend_func_9_16bit(param); - break; - case 10: - init_blend_func_10_16bit(param); - break; - case 12: - init_blend_func_12_16bit(param); - break; - case 14: - init_blend_func_14_16bit(param); - break; - case 16: - init_blend_func_16_16bit(param); - break; - case 32: - init_blend_func_32_32bit(param); - break; - } - - if (param->opacity == 0 && param->mode != BLEND_NORMAL) { - param->blend = depth > 8 ? depth > 16 ? blend_copytop_32 : blend_copytop_16 : blend_copytop_8; - } else if (param->mode == BLEND_NORMAL) { - if (param->opacity == 1) - param->blend = depth > 8 ? depth > 16 ? blend_copytop_32 : blend_copytop_16 : blend_copytop_8; - else if (param->opacity == 0) - param->blend = depth > 8 ? depth > 16 ? blend_copybottom_32 : blend_copybottom_16 : blend_copybottom_8; - } - - if (ARCH_X86) - ff_blend_init_x86(param, depth); -} - static int config_params(AVFilterContext *ctx) { BlendContext *s = ctx->priv; diff --git a/libavfilter/vf_blend_init.h b/libavfilter/vf_blend_init.h new file mode 100644 index 0000000000..5fb2599490 --- /dev/null +++ b/libavfilter/vf_blend_init.h @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2013 Paul B Mahol + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFILTER_BLEND_INIT_H +#define AVFILTER_BLEND_INIT_H + +#include "config.h" +#include "libavutil/attributes.h" +#include "libavutil/imgutils.h" +#include "blend.h" + +#define DEPTH 8 +#include "blend_modes.c" + +#undef DEPTH +#define DEPTH 9 +#include "blend_modes.c" + +#undef DEPTH +#define DEPTH 10 +#include "blend_modes.c" + +#undef DEPTH +#define DEPTH 12 +#include "blend_modes.c" + +#undef DEPTH +#define DEPTH 14 +#include "blend_modes.c" + +#undef DEPTH +#define DEPTH 16 +#include "blend_modes.c" + +#undef DEPTH +#define DEPTH 32 +#include "blend_modes.c" + +#define COPY(src, depth) \ +static void blend_copy ## src##_##depth(const uint8_t *top, ptrdiff_t top_linesize, \ + const uint8_t *bottom, ptrdiff_t bottom_linesize,\ + uint8_t *dst, ptrdiff_t dst_linesize, \ + ptrdiff_t width, ptrdiff_t height, \ + FilterParams *param, double *values, int starty) \ +{ \ + av_image_copy_plane(dst, dst_linesize, src, src ## _linesize, \ + width * depth / 8, height); \ +} + +COPY(top, 8) +COPY(bottom, 8) + +COPY(top, 16) +COPY(bottom, 16) + +COPY(top, 32) +COPY(bottom, 32) + +#undef COPY + +#define BLEND_NORMAL(name, type) \ +static void blend_normal_##name(const uint8_t *_top, ptrdiff_t top_linesize, \ + const uint8_t *_bottom, ptrdiff_t bottom_linesize,\ + uint8_t *_dst, ptrdiff_t dst_linesize, \ + ptrdiff_t width, ptrdiff_t height, \ + FilterParams *param, double *values, int starty) \ +{ \ + const type *top = (type*)_top; \ + const type *bottom = (type*)_bottom; \ + type *dst = (type*)_dst; \ + const float opacity = param->opacity; \ + \ + dst_linesize /= sizeof(type); \ + top_linesize /= sizeof(type); \ + bottom_linesize /= sizeof(type); \ + \ + for (int i = 0; i < height; i++) { \ + for (int j = 0; j < width; j++) { \ + dst[j] = top[j] * opacity + bottom[j] * (1.f - opacity); \ + } \ + dst += dst_linesize; \ + top += top_linesize; \ + bottom += bottom_linesize; \ + } \ +} + +BLEND_NORMAL(8bit, uint8_t) +BLEND_NORMAL(16bit, uint16_t) +BLEND_NORMAL(32bit, float) + +#define DEFINE_INIT_BLEND_FUNC(depth, nbits) \ +static av_cold void init_blend_func_##depth##_##nbits##bit(FilterParams *param) \ +{ \ + switch (param->mode) { \ + case BLEND_ADDITION: param->blend = blend_addition_##depth##bit; break; \ + case BLEND_GRAINMERGE: param->blend = blend_grainmerge_##depth##bit; break; \ + case BLEND_AND: param->blend = blend_and_##depth##bit; break; \ + case BLEND_AVERAGE: param->blend = blend_average_##depth##bit; break; \ + case BLEND_BURN: param->blend = blend_burn_##depth##bit; break; \ + case BLEND_DARKEN: param->blend = blend_darken_##depth##bit; break; \ + case BLEND_DIFFERENCE: param->blend = blend_difference_##depth##bit; break; \ + case BLEND_GRAINEXTRACT: param->blend = blend_grainextract_##depth##bit; break; \ + case BLEND_DIVIDE: param->blend = blend_divide_##depth##bit; break; \ + case BLEND_DODGE: param->blend = blend_dodge_##depth##bit; break; \ + case BLEND_EXCLUSION: param->blend = blend_exclusion_##depth##bit; break; \ + case BLEND_EXTREMITY: param->blend = blend_extremity_##depth##bit; break; \ + case BLEND_FREEZE: param->blend = blend_freeze_##depth##bit; break; \ + case BLEND_GLOW: param->blend = blend_glow_##depth##bit; break; \ + case BLEND_HARDLIGHT: param->blend = blend_hardlight_##depth##bit; break; \ + case BLEND_HARDMIX: param->blend = blend_hardmix_##depth##bit; break; \ + case BLEND_HEAT: param->blend = blend_heat_##depth##bit; break; \ + case BLEND_LIGHTEN: param->blend = blend_lighten_##depth##bit; break; \ + case BLEND_LINEARLIGHT: param->blend = blend_linearlight_##depth##bit; break; \ + case BLEND_MULTIPLY: param->blend = blend_multiply_##depth##bit; break; \ + case BLEND_MULTIPLY128: param->blend = blend_multiply128_##depth##bit; break; \ + case BLEND_NEGATION: param->blend = blend_negation_##depth##bit; break; \ + case BLEND_NORMAL: param->blend = blend_normal_##nbits##bit; break; \ + case BLEND_OR: param->blend = blend_or_##depth##bit; break; \ + case BLEND_OVERLAY: param->blend = blend_overlay_##depth##bit; break; \ + case BLEND_PHOENIX: param->blend = blend_phoenix_##depth##bit; break; \ + case BLEND_PINLIGHT: param->blend = blend_pinlight_##depth##bit; break; \ + case BLEND_REFLECT: param->blend = blend_reflect_##depth##bit; break; \ + case BLEND_SCREEN: param->blend = blend_screen_##depth##bit; break; \ + case BLEND_SOFTLIGHT: param->blend = blend_softlight_##depth##bit; break; \ + case BLEND_SUBTRACT: param->blend = blend_subtract_##depth##bit; break; \ + case BLEND_VIVIDLIGHT: param->blend = blend_vividlight_##depth##bit; break; \ + case BLEND_XOR: param->blend = blend_xor_##depth##bit; break; \ + case BLEND_SOFTDIFFERENCE:param->blend=blend_softdifference_##depth##bit;break; \ + case BLEND_GEOMETRIC: param->blend = blend_geometric_##depth##bit; break; \ + case BLEND_HARMONIC: param->blend = blend_harmonic_##depth##bit; break; \ + case BLEND_BLEACH: param->blend = blend_bleach_##depth##bit; break; \ + case BLEND_STAIN: param->blend = blend_stain_##depth##bit; break; \ + case BLEND_INTERPOLATE: param->blend = blend_interpolate_##depth##bit; break; \ + case BLEND_HARDOVERLAY: param->blend = blend_hardoverlay_##depth##bit; break; \ + } \ +} +DEFINE_INIT_BLEND_FUNC(8, 8) +DEFINE_INIT_BLEND_FUNC(9, 16) +DEFINE_INIT_BLEND_FUNC(10, 16) +DEFINE_INIT_BLEND_FUNC(12, 16) +DEFINE_INIT_BLEND_FUNC(14, 16) +DEFINE_INIT_BLEND_FUNC(16, 16) +DEFINE_INIT_BLEND_FUNC(32, 32) + +static av_unused void ff_blend_init(FilterParams *param, int depth) +{ + switch (depth) { + case 8: + init_blend_func_8_8bit(param); + break; + case 9: + init_blend_func_9_16bit(param); + break; + case 10: + init_blend_func_10_16bit(param); + break; + case 12: + init_blend_func_12_16bit(param); + break; + case 14: + init_blend_func_14_16bit(param); + break; + case 16: + init_blend_func_16_16bit(param); + break; + case 32: + init_blend_func_32_32bit(param); + break; + } + + if (param->opacity == 0 && param->mode != BLEND_NORMAL) { + param->blend = depth > 8 ? depth > 16 ? blend_copytop_32 : blend_copytop_16 : blend_copytop_8; + } else if (param->mode == BLEND_NORMAL) { + if (param->opacity == 1) + param->blend = depth > 8 ? depth > 16 ? blend_copytop_32 : blend_copytop_16 : blend_copytop_8; + else if (param->opacity == 0) + param->blend = depth > 8 ? depth > 16 ? blend_copybottom_32 : blend_copybottom_16 : blend_copybottom_8; + } + + if (ARCH_X86) + ff_blend_init_x86(param, depth); +} + +#endif /* AVFILTER_BLEND_INIT_H */ diff --git a/tests/checkasm/vf_blend.c b/tests/checkasm/vf_blend.c index bdd21d4986..484ed0b1d8 100644 --- a/tests/checkasm/vf_blend.c +++ b/tests/checkasm/vf_blend.c @@ -20,7 +20,7 @@ #include #include "checkasm.h" -#include "libavfilter/blend.h" +#include "libavfilter/vf_blend_init.h" #include "libavutil/common.h" #include "libavutil/internal.h" #include "libavutil/intreadwrite.h" From patchwork Tue May 3 06:37:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35554 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257442pzb; Mon, 2 May 2022 23:38:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwuVks6G1tbsF/+w1oTwyBAKWoavjj44VgexaHo7eGlshivqKy26f6duWwHo1Z9LPnLGF8k X-Received: by 2002:a17:907:1c0d:b0:6f3:b742:ef56 with SMTP id nc13-20020a1709071c0d00b006f3b742ef56mr14391992ejc.504.1651559938975; Mon, 02 May 2022 23:38:58 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a17-20020a170906685100b006f3941cda0bsi12657655ejs.129.2022.05.02.23.38.58; Mon, 02 May 2022 23:38:58 -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=@outlook.com header.s=selector1 header.b=L5HeoDHp; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 93C4568B39A; Tue, 3 May 2022 09:38:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075030.outbound.protection.outlook.com [40.92.75.30]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 77BF168B37D for ; Tue, 3 May 2022 09:38:47 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RqGn5pRCd4Iuv1JntLtsPYr3iPCTPEPiJiy/nVZscnPmWIJQvDOckx+PKZGbL4meGxw7d/rt0Iaw5QFBbve1bFsMmwiXytSulHJK5s+wDUpr0DQeFBK8nD2dttcg1F2LgtVIW86m/FqYA9wzPEc2MBBrxCT+2IkK7ikVO8Hmr4f0oc7G0B16V+hC+NdtqfGTwEGDIfyBf7MKl79Llhm+HKb4SHvj5JpQIxwlVC/eJDg4dWz8L02f9R18RPwTroz8NwjKpADI2D/J/k7SF6ygeC9J2BwA3RYGphniwZGj6afLll6DegRpUO6bOIPxGZtSNubhjFcx9sh56tGyWSQyzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=T0j5EhRtr3XrQLZCSkY9dlhHYlE8OKpdhyfoM1BOAcM=; b=hRnQj+gjrk4EAkG1deAr/MP+lYP0TGIU7QO0Puefm6ggF1eMsS/hzP81jVMINBrX6bcTxpsMLcA156wbp4VtTwK64OaQwy0RnpE9qB0FEVn7gSgma+9yLYB/iwywzq06KDvx+0t9zufXiMTIowtugtW4wlMQeNw0nNwgLUJEEzP3uVU8zV2var8p8Ba8F0mSsrZF8XSAyL63dHYlC+li2LxU3sgTYXdZLKLLUBfRPuET8c9iY20JFiasZIe4bUqZziHlsPbeHlqnCNR9JdsRpHwLwB6DX0I826xWJjFTmCpcWcTGjP0kHcz5Vo0TVMAfozmChxA/QzjEOvcg0AeGmQ== 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=T0j5EhRtr3XrQLZCSkY9dlhHYlE8OKpdhyfoM1BOAcM=; b=L5HeoDHp7gSfcSnTAE6MXnj850oBxTIOpPR0ceAAiZzlce/7Yx6rY2LgGCY9MH/WF+rFsqDMOgDm9pfMcnFnl6z7hhiJuhO+As5p+ER7qcKG3ptVBcueeFZl93KY6RAb8ot4WNil7q4q3M8F1CxDeyL64j7do5K92wAR0pqVGwFsc8z3PpCCSQr4tiMf9a4rSTCW37Th8d1FK4jjvAkmCPBc/7V9Fcapwudba8EGzbY7T9hiLi2kpWhg9lMuuj0ngw9WU7np3DPyvwEukG8rYCjdKj4D24PI6KrBxIcL0aXYnFKJSRg+hHG6ozvXYwhdoyBNgJ6ExoVPXxKb0GHvNw== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:38:45 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:38:45 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:45 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [oRhfGi0aMmXs0BDmR2Six7pwKNKmhSoP] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7262a518-3594-4a30-1b5a-08da2ccf9282 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTQEkMEhbgfP1CXQyS+IofoBRbiyeaXeINfe5tVLtEMx85Xm0OlzWhc7mJspwkWB1plAmmB7YAjZiIMgTTUoM7Yb/350m52RlPQeQOghaUyW7ilCvBI8R6PRTY8KEf6eP3gj7p2OY/jiGG5djMUktlemC6hMESVXKeMW6Y5O4xReeaN0+fMNmZsOUNUk8NHhUbY79O/ogW5KBIr3c93RSBrzx54OgAzM1mauOrnPV/pUPI+kbjbPc5Y28IAASN6kfmj1HS/Ipee10jFF9j84MfIcGV2iQLO/WRIUAOLn7CHpZ0sTkO0X3nOUOCG8YiuzRwzPidS5wAv18Lbn+qYYZJBL8BYae/WvhphmtKKlzk80X3tBpvzJyc1O23MCOrRug+5scRj1lPqoQjSE8tSweRlR8wabd+owRLTqc6aIb5ec7zZZG+Th1GJ/KmsPOW5LnVf8dgbDU34bNckyI1+Pm/EBxKdwbGKdJIXAyyAzFWBZseyXCYx0RXjecQZ45djBZbjEqrfdxs7odblH2HvfsVyYIU34bPAocwqa1FEZwOnFMDqG/9yv++f1ebFYqEXLHMPbwBUUOdYp+1u9wbtBE54xlqrEow2pDB4tHjq2bZ9d5m/vq+CLbvPfBhvg2TbHKx/3wj7+1UPGBv9Cn8dV6G58OqgmXzxntGTuO4fIUxUYPwf7YhglLfkiMt66so9IeNU2ttnnTBnnxTxdC4nbxv8eXtW6YWAEMbrq7VspbjSAa6Jw0UskQmHfEEHQZdnilU= X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EP8qSx6euvMp+FjecSLK/01K594jYafjGxzfsXPYsP+Cgl9Sn0mtakuEAITPRQzyYHblHYy1MeffKQs3hnAul3Gskmr1SkECnisRVxEj7IF7+U8EJA0fTl7toXxI360sJ6xB7fkKSfYWC4amwtKH2fPjU4+heQnfi+mIh8QGGH9j3X4PX1K7mxhYj7C4fpyKymNRyG1IhMunSsfPsnj/Vr7AAvEYtQWAM5jVT/ctlCwmJ0M8wfumN3PN7OHvsfFyvimpdQvHz55khXSuLrhYXixBKihVjxX+Gg00Yj0SwHWSOnYDljr12VWITbNkU9wjynrdq6YGwh/vsAFeQKj+yavyBuCF6EE2NVDWcXEEHx8kX0XXfKCMiNcY2AtzkfmjF7mwW86mUst2bCtmJCJ4IQ6RqVf9YlSiehtR/mE9QRLMdylbhGidmnQaNvOOUZ1izz03xcXumaX1KZK5Mlp1HjsFQldi85uX2ixdEFMF2HnHjmgEUH16yNCgju+aK4RCT0FeSvioSgaIazR+bG7+Q+lfguZfzTHIysSYZsEk6vtYptYig2QNECArno73cwdcxCFqY1KZgCXGfebf+QdjQg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nGusxiVzUMVRHeK/zJqqd/+iruotTDv8iHU7uEoGfBhyEs4xG+EV5QivxfTJ6cnVU71HLSWDiKx0JhOQMXxDmTNMZRi1aBz98hABGTuIBB7Moz7HGwuRRSrZYBUGrqBjwR8KVSuas7RgeiEsJPGiK6yovXG+yTWC2ynlNlJNMDSwgZjrxRrel8fzVhngQHcHGPiA/9qnN2lSuYaVzR18eSQFS2Oujnhf+8oC9MRXaFkLORr1W1zUk7UqgWRPJilmFUL6wRQJoLUJllvRiEfmrog+Z0fXTbepWbNq2rPou9lebAFhEfqleQjaZmxHBgyW0TUmNSXh3NB1ZLR/v7tvc5xQzPVqCkNVMxzv0VAujdNnJtFacdVMJF1nRQ4s8J0Uo5x7gTVZj6wRO7WsFZV7LvcgaRolbMqpoTwmUAc9waq2x8R49PsK701NsGhGLcn3qTxwIOsaCrhW3efFNUllhwYMgj6X9ZuBD/eSInyuJuruhOOb8OnW5ZKYM4Cn5e3z00fCjIlwF7/lG8p4Z6D/aaW2hSp5e8Tqp0qq4KNYiXWmB8ZMW8kai0fURTOS+1gWYltycc0qDtTFkvjzryu2qHsfSfv4zKdeOXWpLo4mlQcQ0wShvhFR/abI6FO51j6sNtZRtx1kfzIMBgzJE32k/ssYnGRhJ+y+Lrz+0zI3yWMan9QgEb0jHEGd4JIQ7M7BE6FHLLqyiLr3aLZjCQtM4EQB4kKxA/KJjIQrPHABVlJhQQrwbD4t6PxnGF6TEpqfmRZv+W9FHPoo/W4nwfIzZzmAtDc5ySLGrKxXj+kSgDDJdjypDlE8HwJBw6/hBFAP5K/09PF4CUxi0wVGiRISapc+Ft76/m2lt9QxZ+QyxbwO0zRsMVXlvqtBF42xDunRo4h1NZcwDlMKRm3WTZejBXe9Bp6iR8vxzq5R3QWlODSYv6W1FDEhGyQrajJmM5zKoXTbHafIPctM7IxCS0IMbHWjUNuFLxjHkJ4Q3F+Dg1vY5Gt1tYJRx9oyK5qkHMoYNep1gX/C1UHyDIWiamcTNHR98HMnmi8BwRZ9RER9zrGvEGTrMlRoQQK/ILxS6oTqXKrSLW8vi+7AkGTdIP1XvufPr1zpVtz7ITHFsMWnRb7hMcEJ1ejf8kOdIVhY72bSTRglJ8ahxw75Rlm7okTnXZ5Mc1kSZCfjLJc+iPknKIdUSjeX9jR8cgqMvsKbDZejDNiUyom3mJYm95xeWdxgg+RHvzvJRxu347hYn1umrSuPU5nB6ZgTowIOPCyQioHuh+tW1ys8D2MN9TFjPoIJM2zLD2jGTsvG/XkFsHY2I6IY2x2xxj4I/DtdDTWjvmTLaxMFWXkArsXgea4y8g9/0b5999PCU3/iATgFywfS2QEjNx8udcCunVkLlRuwHGkKoxLGu0Cna5bSQjdxcv+5JPNcf7ZeDeORE2xo+wqwf5DlUqZY/koFK9cJJTw3wyoLwNITXfYTLpMAJK+UcgbwDw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7262a518-3594-4a30-1b5a-08da2ccf9282 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:38:45.7641 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 04/10] avfilter/vf_eq: Move ff_nlmeans_init into a header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 6FY9JlIxn48h This removes a dependency of checkasm on lavfi/vf_eq.o and also allows to inline ff_eq_init() irrespectively of interposing. Signed-off-by: Andreas Rheinhardt --- libavfilter/vf_eq.c | 27 --------------------------- libavfilter/vf_eq.h | 26 +++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/libavfilter/vf_eq.c b/libavfilter/vf_eq.c index 80ab21efb3..46636dd29d 100644 --- a/libavfilter/vf_eq.c +++ b/libavfilter/vf_eq.c @@ -74,26 +74,6 @@ static void apply_lut(EQParameters *param, uint8_t *dst, int dst_stride, } } -static void process_c(EQParameters *param, uint8_t *dst, int dst_stride, - const uint8_t *src, int src_stride, int w, int h) -{ - int x, y, pel; - - int contrast = (int) (param->contrast * 256 * 16); - int brightness = ((int) (100.0 * param->brightness + 100.0) * 511) / 200 - 128 - contrast / 32; - - for (y = 0; y < h; y++) { - for (x = 0; x < w; x++) { - pel = ((src[y * src_stride + x] * contrast) >> 12) + brightness; - - if (pel & ~255) - pel = (-pel) >> 31; - - dst[y * dst_stride + x] = pel; - } - } -} - static void check_values(EQParameters *param, EQContext *eq) { if (param->contrast == 1.0 && param->brightness == 0.0 && param->gamma == 1.0) @@ -174,13 +154,6 @@ static int set_expr(AVExpr **pexpr, const char *expr, const char *option, void * return 0; } -void ff_eq_init(EQContext *eq) -{ - eq->process = process_c; - if (ARCH_X86) - ff_eq_init_x86(eq); -} - static int initialize(AVFilterContext *ctx) { EQContext *eq = ctx->priv; diff --git a/libavfilter/vf_eq.h b/libavfilter/vf_eq.h index cd0cd75f08..a5756977d2 100644 --- a/libavfilter/vf_eq.h +++ b/libavfilter/vf_eq.h @@ -100,7 +100,31 @@ typedef struct EQContext { enum EvalMode { EVAL_MODE_INIT, EVAL_MODE_FRAME, EVAL_MODE_NB } eval_mode; } EQContext; -void ff_eq_init(EQContext *eq); +static void process_c(EQParameters *param, uint8_t *dst, int dst_stride, + const uint8_t *src, int src_stride, int w, int h) +{ + int contrast = (int) (param->contrast * 256 * 16); + int brightness = ((int) (100.0 * param->brightness + 100.0) * 511) / 200 - 128 - contrast / 32; + + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) { + int pel = ((src[y * src_stride + x] * contrast) >> 12) + brightness; + + if (pel & ~255) + pel = (-pel) >> 31; + + dst[y * dst_stride + x] = pel; + } + } +} + void ff_eq_init_x86(EQContext *eq); +static av_unused void ff_eq_init(EQContext *eq) +{ + eq->process = process_c; + if (ARCH_X86) + ff_eq_init_x86(eq); +} + #endif /* AVFILTER_EQ_H */ From patchwork Tue May 3 06:37:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35555 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257569pzb; Mon, 2 May 2022 23:39:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzjoAGv+ozLzxSMVzRsqrCGJtURT0aq8Kyy7LjP+CDwHotwIRXNK7XgdUCgdmtrEFzc0UL2 X-Received: by 2002:a17:907:948b:b0:6d8:27f8:ab4a with SMTP id dm11-20020a170907948b00b006d827f8ab4amr14437660ejc.39.1651559964493; Mon, 02 May 2022 23:39:24 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o19-20020a17090637d300b006df79ec22fdsi13185243ejc.567.2022.05.02.23.39.24; Mon, 02 May 2022 23:39:24 -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=@outlook.com header.s=selector1 header.b=izGwj8tX; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8D99F68B399; Tue, 3 May 2022 09:39:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075011.outbound.protection.outlook.com [40.92.75.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6C16768B28D for ; Tue, 3 May 2022 09:39:13 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I4+4/CNcnU37OD5RIqZQv2HwAb5ZNXGuft6vbit9ZXE8IiUleqR9aCiQucxghEFvgPkFQzKfy0khZ7OdZYzXFmGk72Wgkv8L9zter5WcaLZkEdCN237alafNh0MlMEHnqturCRsJynTFFshA8Fmr41DrKkEfcq9espwRSmjB0mEgx3Beeqr+cto03fGesjaN7jaN6rQZZNcQ+EbGAOMmP/CzEDcJ17XKu7cOBQbx5us/HZCuDtHhG0IdofJJdaBU4NwuqDp7cksQtaemCzEdhtv0w3exRBIU4w51Ps6P9m4aKwyYxhbHQ+rqKlveI2ohYgr+sEc062LuTGjGeoTK1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=MOntaMXq5IXXTM+WeQPrgeSaP08WFvU5bnuP2EjtgNM=; b=nkMCKch8yU24OLWSmiTUicvTFU0+QdcOvkVe/i5qZTxPVLp9GAnoWqZHtqzYcn2AT91nMY1hYG3RzIDqTmX8KjnG8uFxlk1AnHgcxhLILoOQcwyyDJeNhBPm3lh1AJaUC1GjJaixLdk17DAbkYkaJAWB+NtFUEpel8erFAdI+gK9I6CCZObFV8l1N6sPBG7sy/ydY2unG9CUzhNcLDNsEzgcMHT7LZB4nm2E7yQREaPQMrwwBkfcu/FgKdwGjgnmwqjsU8M2ChSO0GW8vY3wjzC10vaJIJB+Of1TjGKpLtnFKH3/FCKjt+nRxA+xg7UiPFuVRk4Tvf1orUhNOfDmyg== 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=MOntaMXq5IXXTM+WeQPrgeSaP08WFvU5bnuP2EjtgNM=; b=izGwj8tXamcCsfVnOFcJlUaRjemg02a2RaPM7SxxWdVLoXxvRqOVj4kqKn9joarprMaV4FvmZSruMl/MPc4BUP8Fn2zUVbHkkxo56S3fIcjD29lM8I/NiHdzlCsnw7UgF9uOm0E4H60uP29qD3QOHgysUYS3S1SmpbwaQgXjTT8UW7RVLWEmlfMKgJGbreln9sPG7UPTxIBAjQAvFYVkaXsZ5vNPJ6berqHUMSfuu5T+WBVeB86F6nUOH3QzI+6rvjCOXYhDWbpDuB4WtLdSVyvTqAJ4500Fv+TtmxqAdXRM8vCKG02LJFxMUAJeWqEGVm63FpkEAb0fKfv+0QJG5Q== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:39:12 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:39:11 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:46 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [RHNCNekHFqymPfUlKpLWkcfRmW3JVtXK] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c5e44874-cd15-483c-1a92-08da2ccfa21e X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTQEkMEhbgfP1CXQyS+IofoA8939WrUHOZbU2KC5WHQ2flYpWD8KJ1PzAVwbgjQpCWpmM46Zb3bqanj/bghFognw3E5SOyp5V67Aatu8wdQKt1HlihfRY4kQQYNY+69P+H16QcFHKLuinOP3eOZeKFNbMvqjC49raRkELcttv6chIOAr6wRVcl+u/+xAaod8ZX3m1qAnyDhpGnX20AqjLl9rb3PGqwYVLwZ2AfhtzKjzaoLnyUrUrT/JUaryE0QtOlb7bynaerwKA/YZrrDI/xrvDExXHugGz/kuQBiumMuUx7GPrhMyFNK+2X2hMdiGXdV9HPhM/s6HGYKV3FsZMa+fVOxoWUtjVREwCpYmG7XXH/j7pYqTKXh3GAi+0sOR2ymymv4bBEc3J6HpUfWY9yC95hWw/cIN3dcT4laQzE8CB20LjenJPVJLHkZlUkefKuqHMe+/gWyJwgF/oMeLxh/xA3vB5KmqxK/uWFWQeNvBo6pwctU99bmlDLmW9CBo2gcZMm0THnAkKuy5zVflTTrCvMY0ARCw1olqjNfMIg/M+NiSb2t3Y1kWqNpEf1uYSs06j5FiU2F3Szb6ekh+6TcFpUreCI3VtCvNsiH41UgM6sdpGwScJLqm1sbHzqF527Z23PfyRo0qTKqDdbQkwpX+3Wezvpbqs8XosnJ5373X8m756cVDT4+P2WkS2VSj2Vfz6Cp7At2Ed665BGUc5l58ZJO1Bf/2zRuyfkCo6oMXxeNoKZhsumYbw/kuxuqqkE= X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CJiniSd4tzXLUuBS2BASpyj0iPVXt+T1aUSm7IYQK/MPAOASB5Jae2dwhAVXf0FlsIxO2V341jiPtS9GTegy/bho1tHYUO6ckmPQFai28ulnDOnmmpXJJkr3LsN0/GLyRDf/s0C5lC89x+0VwAUn/EFummfVCVcAAGFLglLiPobJbpZXpxF5YBN8hpLbioSj7kMyshxXDyU9KrIMX4JjS6KGNpwzsJqAAw7tMvZ0ntWXwBND2/8VAjWakgPYx5hL8aSSBr1CbhlPKEcBqtho1S+TloPsJ2iPOlqMTXncTorR5AuLyFUKQ+EhfIwsQ9+nYqsa/h9VxYJg2kiIF85GqichixxtbrOf3BKQ8ZePy1SC7zGRUgqfcLAiMWFoYHi9JGXhW3Jnl4bOFs2GFJuOy2mxnSMiEFdkzcQbvaUxq353CH+ZEd9/3O5I7UDmBG/QA4WHbzGeQwTbGHfars2+TNDp904svJRozQbE3Rj39XWyz19Jd5xSxXtEYrXoyCz/5QomgERLa4jiDsKewFFQzwknSdmD5++EBxigon1WxqYpWORWmwgfoDkEoKT7xtY0FOslf/3qMwnvjjYZNamUsg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: V/i3T60l67Oehf0bYY3K3hOmOoJQr5slUxf390FiTGL3wLzY9VEf1DPZxeITqT9ehYbyZZ64MLNPDBbWAs/jRTKFvQTzCJtXV0J9vnarm9YBDYk50ZuzMKEckxT30C9gbTGuMokV+sSpkATu/BrcCaEp6sSqtXVd47PD4dbYoNooUQtUXZ8ywVcIocf3cwWqULxVZQbV2aDvRbsTW0YEbeD6SjOWWuTCjPYi6RuBLuGOi9nx/U+zIb/miHN/yRCZ0v0MvJ4jPYG69i8RWI4D14GaXEp16Mt3hbGoMNaoZVcNwKp4N9aVNhOknVTjtht1CJCUMvwQhmpvktO8mcKU0YeoF1dWqpLWyWFeaA6oozxIH5A45yK/00WMfo5taAtQdYlEsAjvnV81JgJfn+d0NgsFOLsqX/Oy/w40KzRxKsyzwFi7FGcQQZYbS+TwpQnmiUC8YOB11MfOZsXd2IqVlcR9qVoKhF3TS1aPgUyZk+4+9jM4sypH8eC6Xd3nO+TNkVETBEq4h1yeLPWPsTHzmFt5B2hcLq1jDmJvCNjBXB7/NQh9dmd1yOGsLQDI05KgjICeQkC566FbTE/6SEgILYvCAN1Uf9OvWVJvq3mYNMbQK7LrwrhWRf/VmB9Q02TVE2ZvZ9r7LiribiqoPriv3Cbq87lO6HoaN2R9nHbfmq14COLsm0+HPNsptEdAv73Bp/NINSPTZh3/qS6M3+U0ywfv40f1/0ZJZu1ENiXxbmXFU/Z5RFEXS3fowJn4mBkWlL1op/YsgKb+JPf/fvxSKUxPPMsubvZVPezntnk5J4ciQsFA6QCkw/MiqxFNbocS1EjYnCaAKXZq60tApf3rO8juuNI55oS1UmQgB1Jh8ELByc7QgvOyu6dYHpqXiukqZHzhxdcID+lg1xHo/xSr/aJLz6v2TVziIpZoKin4GpQCtrsW1lSZCczU4ABn9OrptZY6Cq8BKm6AjxI9Yx6tLQW34IolcuKRuLBDc5ZnM9+DcQF6fH+8FSoFbacFfHaPBrIDchQF6dpieXT3r0hm//fge85KWpQscspQ0wU2AfT/tVS0FOFJVIXOE9J0pOXyJFmA1tdwlOh36B+UWP0vvgnBaZlU/6mgdZJoJFyBE7dTNhwTDI/ZUeBLfllio8K3r69MaWf2f+Mm+4pZ4jHnyaaMQf3TSU4v0KlEW35+03bxzoBbeXDhcqyj4NHM3nRIwYZPde9q+rRiKkfDKWy7jAgI5aEHcGhMw4Y1DZzHnwxzZYqvFO/5fbTyEZolOGcN/l2ibA2x+w3o3NUyJ7yuUI2PJxjQvx47CkKcIkdtp8IMTFqbNFyZxLEQZJ5qhH4UoALR7/Q04mOdBLIA6D90fMg8mdAV8jtB58ClvA1pDLf7pYHJhJslshJ18mMvRRoGqWhzUPHGWcQb0y9XrhxcnnxP5Zpx0QYWANIT9ITt59lJJS/oVhnyrJAV+wQOxp+s5NNzfIU7NlzRhkzPwtbvHA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c5e44874-cd15-483c-1a92-08da2ccfa21e X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:39:11.9218 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 05/10] avfilter/vf_gblur: Move ff_gblur_init into a header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 8dMtjM1skxQD This removes a dependency of checkasm on lavfi/vf_gblur.o and also allows to inline ff_gblur_init() irrespectively of interposing. Signed-off-by: Andreas Rheinhardt --- libavfilter/gblur.h | 1 - libavfilter/vf_gblur.c | 89 +------------------------- libavfilter/vf_gblur_init.h | 122 ++++++++++++++++++++++++++++++++++++ tests/checkasm/vf_gblur.c | 2 +- 4 files changed, 124 insertions(+), 90 deletions(-) create mode 100644 libavfilter/vf_gblur_init.h diff --git a/libavfilter/gblur.h b/libavfilter/gblur.h index 3a66984b06..83f43c2c1e 100644 --- a/libavfilter/gblur.h +++ b/libavfilter/gblur.h @@ -57,6 +57,5 @@ typedef struct GBlurContext { void (*postscale_slice)(float *buffer, int length, float postscale, float min, float max); } GBlurContext; -void ff_gblur_init(GBlurContext *s); void ff_gblur_init_x86(GBlurContext *s); #endif diff --git a/libavfilter/vf_gblur.c b/libavfilter/vf_gblur.c index fd664db057..b88a9a6d26 100644 --- a/libavfilter/vf_gblur.c +++ b/libavfilter/vf_gblur.c @@ -34,6 +34,7 @@ #include "formats.h" #include "gblur.h" #include "internal.h" +#include "vf_gblur_init.h" #include "video.h" #define OFFSET(x) offsetof(GBlurContext, x) @@ -54,37 +55,6 @@ typedef struct ThreadData { int width; } ThreadData; -static void postscale_c(float *buffer, int length, - float postscale, float min, float max) -{ - for (int i = 0; i < length; i++) { - buffer[i] *= postscale; - buffer[i] = av_clipf(buffer[i], min, max); - } -} - -static void horiz_slice_c(float *buffer, int width, int height, int steps, - float nu, float bscale, float *localbuf) -{ - int step, x, y; - float *ptr; - for (y = 0; y < height; y++) { - for (step = 0; step < steps; step++) { - ptr = buffer + width * y; - ptr[0] *= bscale; - - /* Filter rightwards */ - for (x = 1; x < width; x++) - ptr[x] += nu * ptr[x - 1]; - ptr[x = width - 1] *= bscale; - - /* Filter leftwards */ - for (; x > 0; x--) - ptr[x - 1] += nu * ptr[x]; - } - } -} - static int filter_horizontally(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) { GBlurContext *s = ctx->priv; @@ -108,53 +78,6 @@ static int filter_horizontally(AVFilterContext *ctx, void *arg, int jobnr, int n return 0; } -static void do_vertical_columns(float *buffer, int width, int height, - int column_begin, int column_end, int steps, - float nu, float boundaryscale, int column_step) -{ - const int numpixels = width * height; - int i, x, k, step; - float *ptr; - for (x = column_begin; x < column_end;) { - for (step = 0; step < steps; step++) { - ptr = buffer + x; - for (k = 0; k < column_step; k++) { - ptr[k] *= boundaryscale; - } - /* Filter downwards */ - for (i = width; i < numpixels; i += width) { - for (k = 0; k < column_step; k++) { - ptr[i + k] += nu * ptr[i - width + k]; - } - } - i = numpixels - width; - - for (k = 0; k < column_step; k++) - ptr[i + k] *= boundaryscale; - - /* Filter upwards */ - for (; i > 0; i -= width) { - for (k = 0; k < column_step; k++) - ptr[i - width + k] += nu * ptr[i + k]; - } - } - x += column_step; - } -} - -static void verti_slice_c(float *buffer, int width, int height, - int slice_start, int slice_end, int steps, - float nu, float boundaryscale) -{ - int aligned_end = slice_start + (((slice_end - slice_start) >> 3) << 3); - /* Filter vertically along columns (process 8 columns in each step) */ - do_vertical_columns(buffer, width, height, slice_start, aligned_end, - steps, nu, boundaryscale, 8); - /* Filter un-aligned columns one by one */ - do_vertical_columns(buffer, width, height, aligned_end, slice_end, - steps, nu, boundaryscale, 1); -} - static int filter_vertically(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) { GBlurContext *s = ctx->priv; @@ -239,16 +162,6 @@ static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_NONE }; -void ff_gblur_init(GBlurContext *s) -{ - s->localbuf = NULL; - s->horiz_slice = horiz_slice_c; - s->verti_slice = verti_slice_c; - s->postscale_slice = postscale_c; - if (ARCH_X86) - ff_gblur_init_x86(s); -} - static av_cold void uninit(AVFilterContext *ctx) { GBlurContext *s = ctx->priv; diff --git a/libavfilter/vf_gblur_init.h b/libavfilter/vf_gblur_init.h new file mode 100644 index 0000000000..0fee64bc98 --- /dev/null +++ b/libavfilter/vf_gblur_init.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2011 Pascal Getreuer + * Copyright (c) 2016 Paul B Mahol + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef AVFILTER_GBLUR_INIT_H +#define AVFILTER_GBLUR_INIT_H + +#include "config.h" +#include "libavutil/attributes.h" +#include "libavutil/common.h" +#include "gblur.h" + +static void postscale_c(float *buffer, int length, + float postscale, float min, float max) +{ + for (int i = 0; i < length; i++) { + buffer[i] *= postscale; + buffer[i] = av_clipf(buffer[i], min, max); + } +} + +static void horiz_slice_c(float *buffer, int width, int height, int steps, + float nu, float bscale, float *localbuf) +{ + int x; + for (int y = 0; y < height; y++) { + for (int step = 0; step < steps; step++) { + float *ptr = buffer + width * y; + ptr[0] *= bscale; + + /* Filter rightwards */ + for (x = 1; x < width; x++) + ptr[x] += nu * ptr[x - 1]; + ptr[x = width - 1] *= bscale; + + /* Filter leftwards */ + for (; x > 0; x--) + ptr[x - 1] += nu * ptr[x]; + } + } +} + +static void do_vertical_columns(float *buffer, int width, int height, + int column_begin, int column_end, int steps, + float nu, float boundaryscale, int column_step) +{ + const int numpixels = width * height; + int i; + for (int x = column_begin; x < column_end;) { + for (int step = 0; step < steps; step++) { + float *ptr = buffer + x; + for (int k = 0; k < column_step; k++) { + ptr[k] *= boundaryscale; + } + /* Filter downwards */ + for (i = width; i < numpixels; i += width) { + for (int k = 0; k < column_step; k++) { + ptr[i + k] += nu * ptr[i - width + k]; + } + } + i = numpixels - width; + + for (int k = 0; k < column_step; k++) + ptr[i + k] *= boundaryscale; + + /* Filter upwards */ + for (; i > 0; i -= width) { + for (int k = 0; k < column_step; k++) + ptr[i - width + k] += nu * ptr[i + k]; + } + } + x += column_step; + } +} + +static void verti_slice_c(float *buffer, int width, int height, + int slice_start, int slice_end, int steps, + float nu, float boundaryscale) +{ + int aligned_end = slice_start + (((slice_end - slice_start) >> 3) << 3); + /* Filter vertically along columns (process 8 columns in each step) */ + do_vertical_columns(buffer, width, height, slice_start, aligned_end, + steps, nu, boundaryscale, 8); + /* Filter un-aligned columns one by one */ + do_vertical_columns(buffer, width, height, aligned_end, slice_end, + steps, nu, boundaryscale, 1); +} + +static av_unused void ff_gblur_init(GBlurContext *s) +{ + s->localbuf = NULL; + s->horiz_slice = horiz_slice_c; + s->verti_slice = verti_slice_c; + s->postscale_slice = postscale_c; + if (ARCH_X86) + ff_gblur_init_x86(s); +} + +#endif /* AVFILTER_GBLUR_INIT_H */ diff --git a/tests/checkasm/vf_gblur.c b/tests/checkasm/vf_gblur.c index a7a1c1a24e..3686a6c9f6 100644 --- a/tests/checkasm/vf_gblur.c +++ b/tests/checkasm/vf_gblur.c @@ -19,7 +19,7 @@ #include #include #include "checkasm.h" -#include "libavfilter/gblur.h" +#include "libavfilter/vf_gblur_init.h" #define WIDTH 256 #define HEIGHT 256 From patchwork Tue May 3 06:37:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35556 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257607pzb; Mon, 2 May 2022 23:39:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzMe9mJhyZ/l4+yDetH79Yg9MIrq54SfeKxwMWh8WMu68BeIV20aveLxftKODKzELPHGPg4 X-Received: by 2002:a17:907:c22:b0:6f4:2cb6:7ba9 with SMTP id ga34-20020a1709070c2200b006f42cb67ba9mr11031259ejc.29.1651559976499; Mon, 02 May 2022 23:39:36 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id qf39-20020a1709077f2700b006f496889e5dsi689544ejc.516.2022.05.02.23.39.36; Mon, 02 May 2022 23:39:36 -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=@outlook.com header.s=selector1 header.b=YnvO38ca; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6B80368B3B3; Tue, 3 May 2022 09:39:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075011.outbound.protection.outlook.com [40.92.75.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E01B68B28D for ; Tue, 3 May 2022 09:39:18 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lU8G9RjlEJ1OecU8/gSc2Vn1KJ/tbbWdP+2M6/hf+l7IgaZk4OfAyKqE+l8lr3JXJoo7KT+aVIu8dyDWK0/3H7x79xAPU/f6Yaie+73EKYycutbfJyx1SqYCKJXsANZsvj+qHvcAl2Zn2/2bbszn1pr+B4RgUyG0Ohny7TkJ97IdKt4BL/YQySeG3nkRWxIPLee14R1pBqL0/yn+XigTGK9Ykr9BP22ye+fC46JYgiEfDPnDM66thJ4egd6uCpB2LuXCTZkBiOIjkv+m9JoNB3dcd97F8K21S508X11Lxp1zDhDrM6DNxaehu+YvdDJfwS8Du5pkt6EcvIalYD0kbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=8TBGz+RAOrkyCRvU/BtJ1LgthdmlRdhiAbP4HGMrv6g=; b=jwg6+WfMfN4yp6dqhXe8N1D6Tvj2zaBTRd0XYtrOZC9kO+/rYRz55KsEPaR8BYCRYjbXmWj/Lbe4N0PSjc/XqX+JMvRT7N6qZ0Ds0CAyfiIXCicPVWS4mkUvUEEmjlAPSp6x6XYk13/9lfgpoTJpI5fleopcgM0HmWMuwTlo5rbDJEEfpx+VVrrr/AEdJSMoRdoxeiBe9CJHe0zLPZo2O0hCF6vcJC3frMVrn+h/tbfuc1+1GdWxnuSSEifCGU1PuUz6Veckikk1GTGj2G5PyCWNkInogYzq6znNk/gmvFecPuVdTj4jCUr66JcuV7wc3iXZXI1qSwlLnn+wlJhr/g== 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=8TBGz+RAOrkyCRvU/BtJ1LgthdmlRdhiAbP4HGMrv6g=; b=YnvO38caXPOMU/NKhHnjUI1xSZyZnkI2U00DnaOVBNP/655jYdsfzPtwSYE86wwc4MHbctgAi5TDezae4ojWahHksGahzn3ZdNbJX7qpcJAAxGQqYJIOuGIYDaFtm5SMvaiEwGhYNVj8MGPhR9icEsfcD7Oas6sNx12Ejdq+TnJ/8juzjz9+TLhvZKO7ZZTZleaJhtraciTiMDCJOuHs6lqieYLqUUKiV39QSeUAp741UfwQOXaJmnUn649KymqaTEOth++7QG6Ba1k24Pk81N0pvmfpbxwFXijShEeGvHQgkk9InPDLYcZrcFrBOUWkd51ZVUBnYK5vi7ULcqEibg== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:39:16 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:39:16 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:47 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [sewS9mvEbzz0HjmumwLSkrQSUIZUzw2X] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: abad0d7b-cd9f-4fab-5cae-08da2ccfa47e X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTQEkMEhbgfP1CXQyS+IofoA8939WrUHOZbU2KC5WHQ2T4YwY14J+FGl43KMqmNWNwwZnLJh5jdgXpQcIxSSccTdH0IFKAe8b9rQYoJlfMDZMGAdPU4mdObxR7it2FwD5RZVEvxNgKIsEM1Jj8P7NSY+5mPtKrBUTxgaZcUCAUFRN+sOf9ZiwOiw5yFG5R/i/xShDWjWi/YsdA+Vz0jeteauz7Qdy8YSa74IYgvuMxZIaQ5aVnV6H3QGEZk8P60bmaWstONcmEc3d5e9N43XXawENQ8k4ozA13pp5zpSvShm6481xWyLxzCOjE6IETWCbROwD2YTqrRkXJuOmQmsLgUgSLDbCsQRBEi1DPbKmmZXx8UfgR2pjzPNYiq8wk/8GA7i+Vv0vpA3FjEa9bI7wTWUBae/21CzHug/+rqJoPuTgK5okeRvPGDt1AWLwCZymK6TzPAGP8LrBXBZTekLYKaz0hX4KVrDYcdxooyi9y1GKHJEQXTUmnUYLTvU3dFEOUeJepdxvd+ktL6NF5jvMC0nthKtro5t6JztslJZP1nF8fvwcXLpm87xwRlKiFS+omut67fGzRRnSO7Ec3g/BaqXHCWfvXDyC9QpsClnKHwh5G89+vWH3DBhqgR5oTgBNvdN1RCgzV6/DPbKkpg2DAcvU0PwaFQrTIQyoLO5No1F7s0kNqTyN1knft5JFZBGr4Wwgzaru1zRjPPzoTPNgmI+uth7hxQFAx+W7ENbMOlvcWP4OXb5D+jbQU3XdgB6ak= X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tUD2K9U+pBNjzNrk+doH/WCTZTjmI6GMr89xf7CbunsHmQ1inK9Cxaq7ISN7RdaVxxmzU3vov0hbplFVJwSMK9sB7TgmFw9Td3Jr2NigQDQ4aOEj0ESY+MES31IOmd1Oi6VJHfCL3xHqhiX/vCfLMoAIiKrQeMw96utthcH4gta+8R6CfIiLPZ6zX+5b6yBreBFTZl1i/86hxeBIotLi0xTxTXio8VCCesiFg/ReehqF6GqCCl8m9w2tEbupW60A5fgKeoRRssSHOl3v/EE/1RIiSDg/oujUPU9x0OLUae04PvNRshyDd8eyQhggWmu1a6YsCGMu8kZGroJCapTymg4EGqQP4hs+w5wr2jLmYa6+ir1cP1GxVRNMdaEob6vWUcBGUChB7TOUsyPlY1I0OnO5ONEUeVZdR61CE84duU//WFLdfzXOX7rPPXcxQpmIJNcLHCyf2icOaMMxMV9YSkSDi3jAO91/pZ6Yy3299ereXcl8fwUH0X01EyZBhib4VpOLtB5D/EzgbBNOppLY+YeMPz6dEDbAKUZHaiUqhaXEvinAoW7otkAT+KSQxSCw3wHqR49sc7mSO903w/ZnLg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DsTDEOY+if37j7tfQhgx4APbZ8Ki2riCwpFN5eDnbgalzXzPJsbbFhlHlmHaE6LrBeV7bWrCQzdK0e5VpWvHNM1D8xAtXUUL8Z4Tb49ZuUyzuM0AqVOOn8CMZT6SCd6e82vOalrvm/ep55k0ajt4Ye1i5jd8beA7P+YOJuAeacNNe9EfWjW/dYEangV7wQWAeyR8ARfF7uCKVsh1+8x+RnAk/EYgQV50yrKDaow6mU+ZxNemJixM2ouy27o/6F84vlsG9OvgwloKXk4sfyzgeN4hkvzCPPPxsc6xIppt+AF+J/4hlG7K+QHszseX8a+otS3BxMFyFPvDBbLvlGDYQhwGVsSgQY9o8lK2pQbiJJqsL30hJ9bNGzCbE2EJY13ZEJRUsAdV3CXfRlfXmJNE71EXCgP8TzBjLq8B/S1LmBiyw+StKjSK5GFdQx6P3bLCRxsv0NOay8YpbmEb6YRYPBvgEQCYJx09pA6OpsjMMZiWIsukyB34quLRGZK4Jcyu7c3eLJejqBK0gwibWmpTFtAOWVEjUQV8aB0Dqha+5VuylbZWx8LLWUu3qF8nnUaGz+VXVEHNab0CUwoJzX1tHqMSOtwVNHCCSfVVFeXt/QCtH0Lk1QmnqWHnY3R3vkvVbSDNX9E2IBD0SYpPcjpxuBBgfr9hGEV7GrB3YvKFFvbXiFh7Qb+sgwWRL5YssQikCwm6J0ofnDB9pVbj7r91Kkb5wodskchzKdedFBB/sF4srTxT55e61tMpGWRuPmj+JB6w+rvvNTPabhhGfQmu8w34mJHQngJzl1Mp7/8dl1g5WCHbUSmAJlWzl2GroortYQUxUGstZYBbFGWDYUoMgBZrcvYk9GYt/0fGTJybUnw0yu0HizPFVcDCX/x6Wrbroepw1fM81ezRoVGdd3FcIg0f+WhUxxrmTwWkqThzeWyv0NAt2BerdbXlUOMorRV07yzBcGAwSG2Bc90xmPUnt0ibf3vL7ojcHzAP1t/oS8aedq9eVPoVjxYRLn1i8JLgptTgGR5IjFkTdQTxEv+u/6pLIFfElaogy1QDzfPU1W/sSNJGyJEGZ2jwd6jFodL3f+2FqbLBDKqdA0kE1j+dj8pqZsOphI2UiGaxWhRtbzEZf4NmTku3WE9l7CYOb/VwFJAO96nSedXWtsNMcvZoaZGG7Fub9XGvDtBxJZUp1wDVIggRd38hBWBK3ExfTkEsEBAC9KuOD0ABnVx3IbyfYrjQXt7/sJU5AVX2r0fuyY0SKDZ0Hv3Iihenl3UYv5A6oRb20AHJQld3U2yESMkLDJBq9ScMPoiEQZw7fkTOy0LFlCHUOIiXm4BbDv2n3i2qQk+87iKjBvlO5pwPY51Kkqv60jiHMOainfADv7khVs2hI46tCJ4Wxr1skPp/ZgnYCxdUgn2RW2DFsyeZoLUq6Tj1z3UGOM3+mgL0SRKm3m1+x7TmcAkJn8RfFTOXYh7XVifOO5se/lyvjWB1F3u14A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: abad0d7b-cd9f-4fab-5cae-08da2ccfa47e X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:39:16.4552 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 06/10] avfilter/vf_hflip: Move ff_hflip_init into a header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ZEqj11mNDM12 This removes a dependency of checkasm on lavfi/vf_hflip.o and also allows to inline ff_hflip_init() irrespectively of interposing. Signed-off-by: Andreas Rheinhardt --- libavfilter/hflip.h | 1 - libavfilter/vf_hflip.c | 88 +---------------------------- libavfilter/vf_hflip_init.h | 110 ++++++++++++++++++++++++++++++++++++ tests/checkasm/vf_hflip.c | 1 + 4 files changed, 112 insertions(+), 88 deletions(-) create mode 100644 libavfilter/vf_hflip_init.h diff --git a/libavfilter/hflip.h b/libavfilter/hflip.h index a40b98470b..8532dc0f46 100644 --- a/libavfilter/hflip.h +++ b/libavfilter/hflip.h @@ -34,7 +34,6 @@ typedef struct FlipContext { void (*flip_line[4])(const uint8_t *src, uint8_t *dst, int w); } FlipContext; -int ff_hflip_init(FlipContext *s, int step[4], int nb_planes); void ff_hflip_init_x86(FlipContext *s, int step[4], int nb_planes); #endif /* AVFILTER_HFLIP_H */ diff --git a/libavfilter/vf_hflip.c b/libavfilter/vf_hflip.c index 0362660679..8517b87889 100644 --- a/libavfilter/vf_hflip.c +++ b/libavfilter/vf_hflip.c @@ -31,6 +31,7 @@ #include "formats.h" #include "hflip.h" #include "internal.h" +#include "vf_hflip_init.h" #include "video.h" #include "libavutil/pixdesc.h" #include "libavutil/internal.h" @@ -61,70 +62,6 @@ static int query_formats(AVFilterContext *ctx) return ff_set_common_formats(ctx, pix_fmts); } -static void hflip_byte_c(const uint8_t *src, uint8_t *dst, int w) -{ - int j; - - for (j = 0; j < w; j++) - dst[j] = src[-j]; -} - -static void hflip_short_c(const uint8_t *ssrc, uint8_t *ddst, int w) -{ - const uint16_t *src = (const uint16_t *)ssrc; - uint16_t *dst = (uint16_t *)ddst; - int j; - - for (j = 0; j < w; j++) - dst[j] = src[-j]; -} - -static void hflip_dword_c(const uint8_t *ssrc, uint8_t *ddst, int w) -{ - const uint32_t *src = (const uint32_t *)ssrc; - uint32_t *dst = (uint32_t *)ddst; - int j; - - for (j = 0; j < w; j++) - dst[j] = src[-j]; -} - -static void hflip_b24_c(const uint8_t *src, uint8_t *dst, int w) -{ - const uint8_t *in = src; - uint8_t *out = dst; - int j; - - for (j = 0; j < w; j++, out += 3, in -= 3) { - int32_t v = AV_RB24(in); - - AV_WB24(out, v); - } -} - -static void hflip_b48_c(const uint8_t *src, uint8_t *dst, int w) -{ - const uint8_t *in = src; - uint8_t *out = dst; - int j; - - for (j = 0; j < w; j++, out += 6, in -= 6) { - int64_t v = AV_RB48(in); - - AV_WB48(out, v); - } -} - -static void hflip_qword_c(const uint8_t *ssrc, uint8_t *ddst, int w) -{ - const uint64_t *src = (const uint64_t *)ssrc; - uint64_t *dst = (uint64_t *)ddst; - int j; - - for (j = 0; j < w; j++) - dst[j] = src[-j]; -} - static int config_props(AVFilterLink *inlink) { FlipContext *s = inlink->dst->priv; @@ -145,29 +82,6 @@ static int config_props(AVFilterLink *inlink) return ff_hflip_init(s, s->max_step, nb_planes); } -int ff_hflip_init(FlipContext *s, int step[4], int nb_planes) -{ - int i; - - for (i = 0; i < nb_planes; i++) { - step[i] *= s->bayer_plus1; - switch (step[i]) { - case 1: s->flip_line[i] = hflip_byte_c; break; - case 2: s->flip_line[i] = hflip_short_c; break; - case 3: s->flip_line[i] = hflip_b24_c; break; - case 4: s->flip_line[i] = hflip_dword_c; break; - case 6: s->flip_line[i] = hflip_b48_c; break; - case 8: s->flip_line[i] = hflip_qword_c; break; - default: - return AVERROR_BUG; - } - } - if (ARCH_X86) - ff_hflip_init_x86(s, step, nb_planes); - - return 0; -} - typedef struct ThreadData { AVFrame *in, *out; } ThreadData; diff --git a/libavfilter/vf_hflip_init.h b/libavfilter/vf_hflip_init.h new file mode 100644 index 0000000000..b58cfec901 --- /dev/null +++ b/libavfilter/vf_hflip_init.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2007 Benoit Fouet + * Copyright (c) 2010 Stefano Sabatini + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFILTER_HFLIP_INIT_H +#define AVFILTER_HFLIP_INIT_H + +#include + +#include "config.h" +#include "libavutil/attributes.h" +#include "libavutil/intreadwrite.h" +#include "hflip.h" + +static void hflip_byte_c(const uint8_t *src, uint8_t *dst, int w) +{ + for (int j = 0; j < w; j++) + dst[j] = src[-j]; +} + +static void hflip_short_c(const uint8_t *ssrc, uint8_t *ddst, int w) +{ + const uint16_t *src = (const uint16_t *)ssrc; + uint16_t *dst = (uint16_t *)ddst; + + for (int j = 0; j < w; j++) + dst[j] = src[-j]; +} + +static void hflip_dword_c(const uint8_t *ssrc, uint8_t *ddst, int w) +{ + const uint32_t *src = (const uint32_t *)ssrc; + uint32_t *dst = (uint32_t *)ddst; + + for (int j = 0; j < w; j++) + dst[j] = src[-j]; +} + +static void hflip_b24_c(const uint8_t *src, uint8_t *dst, int w) +{ + const uint8_t *in = src; + uint8_t *out = dst; + + for (int j = 0; j < w; j++, out += 3, in -= 3) { + int32_t v = AV_RB24(in); + + AV_WB24(out, v); + } +} + +static void hflip_b48_c(const uint8_t *src, uint8_t *dst, int w) +{ + const uint8_t *in = src; + uint8_t *out = dst; + + for (int j = 0; j < w; j++, out += 6, in -= 6) { + int64_t v = AV_RB48(in); + + AV_WB48(out, v); + } +} + +static void hflip_qword_c(const uint8_t *ssrc, uint8_t *ddst, int w) +{ + const uint64_t *src = (const uint64_t *)ssrc; + uint64_t *dst = (uint64_t *)ddst; + + for (int j = 0; j < w; j++) + dst[j] = src[-j]; +} + +static av_unused int ff_hflip_init(FlipContext *s, int step[4], int nb_planes) +{ + for (int i = 0; i < nb_planes; i++) { + step[i] *= s->bayer_plus1; + switch (step[i]) { + case 1: s->flip_line[i] = hflip_byte_c; break; + case 2: s->flip_line[i] = hflip_short_c; break; + case 3: s->flip_line[i] = hflip_b24_c; break; + case 4: s->flip_line[i] = hflip_dword_c; break; + case 6: s->flip_line[i] = hflip_b48_c; break; + case 8: s->flip_line[i] = hflip_qword_c; break; + default: + return AVERROR_BUG; + } + } + if (ARCH_X86) + ff_hflip_init_x86(s, step, nb_planes); + + return 0; +} + +#endif /* AVFILTER_HFLIP_INIT_H */ diff --git a/tests/checkasm/vf_hflip.c b/tests/checkasm/vf_hflip.c index a3b6e613d5..96614d12c5 100644 --- a/tests/checkasm/vf_hflip.c +++ b/tests/checkasm/vf_hflip.c @@ -19,6 +19,7 @@ #include #include "checkasm.h" #include "libavfilter/hflip.h" +#include "libavfilter/vf_hflip_init.h" #include "libavutil/intreadwrite.h" #include "libavutil/mem_internal.h" From patchwork Tue May 3 06:37:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35558 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257736pzb; Mon, 2 May 2022 23:40:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw4HPyhTcwqDWOAJ5fhuH/b2LUU/aOE1Rd1/02qzUXg2Jt2iLVf/5tet84MKU3D26wW5Lqi X-Received: by 2002:a17:906:9754:b0:6da:7d72:1353 with SMTP id o20-20020a170906975400b006da7d721353mr14209947ejy.273.1651560002320; Mon, 02 May 2022 23:40:02 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v6-20020a056402174600b00425bfc70c1bsi13212304edx.341.2022.05.02.23.40.01; Mon, 02 May 2022 23:40:02 -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=@outlook.com header.s=selector1 header.b=tP9KaI4S; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 646A368B3D5; Tue, 3 May 2022 09:39:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075040.outbound.protection.outlook.com [40.92.75.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D8CF168B2A1 for ; Tue, 3 May 2022 09:39:40 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gyti/NwMJqfiQxDQO+2MKGgfrUgYCAQX+Rgtx7LeEZfssC69yVAH42AMHB9AFF5A6ho+2JNKQrMI5tif4/mGVGhkk7mGmPfiOm+wjP0fcOfygED2qtZyM9Q64Scz0liK9kuC2wRQlJvqtS33g0hh4G1N+JpjDFLGJCxkG1Tsd9/VKrtwMfYhL/XHORyE3ZxVYhAO9PxE/g3u0IZqkQGqKLGaJ0KMiF7AGTeJzLvLlk5BKHUO8wbZzLollTPNh1J1KTIVnfCRVuqbPG995jTD3jTgPZ9eZUuIcMFGmhBUlgm6V/Oqi6ucXjO+PprH/7iMjbM3cj/OgAVGRUV+WuJP2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=Gfei3EYUM13Te4JqUjwrYQM3r8Asr92MCyOkb7f8SKo=; b=Va1npGwR++w+CxsFL+u2buoBMDinhEjgWq5wrwmXvUxaDcVSMZJDL0k/nyPmbieiOoM8roBzqPJULzyPQD/oc0HADF/MJ9zHfoI7NJWhiG2RXBTMl+TCEKNw8Q0WHNC9NX5/janeSTj0nz+b+4NgzMzbUkk3m12/6y10mt0lOPltANxBIYJ36mSYrXGPDaN74MYswG1AsqHl7kgHbEwVYp03iZ27ds9hz2eCOLofAOr3rg31v8SAABMMWznfhpN/FJSF7eg1YALggv9TahhHe7MVDgWiJ0kQbVB2jAGsSG4k65MeFYTI1a3CU/bXuiTBUUt5sQieuKufBMtwOxsf8w== 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=Gfei3EYUM13Te4JqUjwrYQM3r8Asr92MCyOkb7f8SKo=; b=tP9KaI4SeTD82LhPaRR9CLMkB9peZZ5rtPyQLwiwzL1NkcF49Mbe8MijvVCRD2biR4IA/0G+tSkEgEmYvOR1ZMPCNTWHahaqg84O25eFK8Y+DnCv5WyZFjrSFPP+IE8XXAVacuBkIeVklVvxLqsct24KEVvdTQghoAjBgjU4yd0HqFnVVRgcjiLrqXSJyS0qHqJFcxgL3Ba9uVo6Q8YyG4XnaTWcnKyOFxJNZhGLgs9eYOZW65/SIrRcWClp5oD5EVemInZBfjduOPP/7d9tplYkVtiSBwKMk5irmmYAJ3a/MS0eEYnwQwz+OvzAz2G0RrC+6t9Rc6AisfFWGbvpoQ== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:39:19 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:39:19 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:48 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [gkCQEtTA+DtP+uAqT0sGrV2fZLLVzdD4] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9a94bbb8-76b8-4292-2b0a-08da2ccfa65e X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEshfmgJKOBnMup7aFnPglP1MOoFnNBA7MFo8n5bAykiG8nHjgPtjPg1Zw5jH2MZ4VJ29nZN/veTa24eMGEVbZclOEITxu4wE0J6UgUzdXOsYA+kjVqjUa/ELAgKfVp/GQI6XCyhadGAWWLZC+OmTOcoFadcQCfeVUzFtmK4DMGld3WwbCXHtiGBuA6lPtq39GaI3I38C13qqY2mYp2fhB06MYk1ruLiUlFHyyAqsJR8iZjlvIGfiN0BJT7ZOHb3aBR+wcrWieGdEd1vA69TSRuEVkUtpy8W2XLgt6zC8WY1Gslv56i7r+1iVoFOICRXhHjq9eDTYuinVnqVNOphuDsWRh1zcbFQLhYeLyPyKVBhpsk++2lG8PV9OYNvij2YIGEND8QT4J5zg03z9c/CANvQeBJt7hbSp2iNpsdcmOBlYtQz3fR0UtCe6ciY2shBPUHXpjxnxV2ep7TnMR4jIdmWcDBvyIXtHAX4h7EsNeditvkPILK1H6mdcAgabRrNVLphycIwydx+j9oiG+RwjJl5Bup6SOZWLWoFrx3zRYUXF50D4mGC7HonM/cmiB9Vzt1a210zB7BcfjQJenhpZVnGPOdY72u2TyYRy6cgAhfQteBPXbshadddlscPu8+LdWOBojk9TWAdWqs63v4BiQJzI72xTuQL/fB8XIzA+3jfrYnL5llI+jH8da3DERdPlrbbcEPPCrHFbHl8iKGkMnSHgVm3QqGRlmSrvOiQgQknwj/yav+IbXZSkC6PYQCM3fkqz62KKsf7j5zBA59lrg03 X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BBC/Fsbj3VKpL2Iu7dcg2r2HFiTBCswhezr7qgVuVzNaIIJbNYLLAWgjJQXMkh9Ry3lTE4O/SKD0iRRj0VdDmgVTTc4rCHJfYbTziDJ4q82raqT/sEVYIITu4aIJs8EMwAQgPQlshbX82J9kYyaWuPNIR2ZmOdVH7WP87AuEYlwi9M9GAeC8XB2ZSEOVosUY9h6g8L+xhiSb1f7FHrrXRG0KXq1Boh+FRZ9vFWcER8DhRr2erW3izw/VpruXm/flfPxfuYCUAQwOaZlM7q35Rv6isnA/PiIWWYbswuGBRMc2uY+XC56OfK8LQfoRWO35TLTmX+eeVXiqcDQWeavDgFaqemdaDfrqQoiGDrkGlU6CMLRyJ3oZ1flZ6qJNDOF4VKFKt5LsNsKYggUG1+E7bMH+IMGss85QlUKtYllN6K8CFT9r3ibkmVeQD6jjqkzOIqxphEh7GnOo9jeBR+VlrXsA5eKhiTAxMSZ23osD60JUbJXPFpytHTQ4liLxye+5HFjD+FiMjjmg/AsymbcpjvW/R8ulUTL8cArAsOT+K5qjZqDSS1uDn0nCNbMlxiXPj/WefkMcc2wzGa8Mz801HMXlNoT/yTBtIkY5ktlQNsKEUeTLHbwSobbXmYqSOBf7 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?CPxNn9HAdMmLTkRWEXnaoLCHz3i/?= =?utf-8?q?TNYQW/MkHtxAjr6y64noocflcLzL1SKZgD9ZN4m8hZ4QRBEMnm/8GVbA+HI4PKFwO?= =?utf-8?q?OIfeBCBGw6zTMgOaHXNUdp01hfRHqUD4jS0zkYV+EWkYZZ9TqqtfpiV7nCpEOu4HD?= =?utf-8?q?aWXZWXi3AH8YTBpvlIdsHZ9YQZ+Ork6ci7AmNKvqY3whlVuHhgHr2Vo9ohHOyUBJf?= =?utf-8?q?SaX8R8g8uEqZfxeeu5ypMnx1TpMZMq8r7szRy8R00cEIXOIs0Y4NQkgz6jiHKTpfz?= =?utf-8?q?o8iMmWfy865oUOQ3VFEP5f7FgmZVesOoLCVXcmygtaELgGwOoXodIveGeixFKVDkf?= =?utf-8?q?Ultp6U8U29fzdmm8NXJzF4FO+AFSFjnxemJRygYW5x4aB/BiljKxcMNoj1LQxHDp3?= =?utf-8?q?kjloNDynbvwNUTM95t9uGygW1dA4Iv/VGLKQn51v5G1LZU+0FHythir5kgXt7LC9K?= =?utf-8?q?wcHOm27EKlpH9X7Ji/IhGwD7+0N1F5QIdNZPBtOAOAEf8Mry4nwbHv9+yJB6pOIer?= =?utf-8?q?5tTaplmkSCRcPoaWSNzIaCWbRHuSv5ADjTsz3BQP8YYP5Z7eO5HM8EcHD365KqZyH?= =?utf-8?q?8DvTlVLMQbyHXTCvfRnFhhX0Kir2+z+5Bxz3+Kb5e5frFl/yjfvARklP3YHnCwLvl?= =?utf-8?q?mQzv/WscpXrZT6WsnZ8Pu3FviLa+z4PXBHE5HBoCdtCJmUQ78eFNtWihQzhgAi9Z7?= =?utf-8?q?8XOWpJVk/ZVrpGQERUbrTZ9kMSGPUVmJADwm095OiFvKv/4dO2+slZGFrzz/u5sln?= =?utf-8?q?zyOxbdlRFS2Ft7IAxPNvWIgfFiCiQwG/0vA1eG2N34KLnqYDlOZwcr8h3aqo/21FM?= =?utf-8?q?U++T1D68sWenfRWHnrDr3tEcrNDM4ataLc9XREhBIf3X8Tsf5O1LFKQG7DfUvgiTV?= =?utf-8?q?OSwKuwwMu7Bs+037uHpCy51QBa+LaTsakWAXXTeQ1uMoQbk/FGK9fpFi7/0xQRsKF?= =?utf-8?q?OH3mPVBPGiYy6AB8Lf2y4cBEUCBREgv/DflH7DDQdfXsXYX4jFDxO6NhxC6h95KET?= =?utf-8?q?ib6gXJotbmFVDwqG7zbTT3mSGVbW9hjaT+KM+zX8ui3X/C72VNWXvU0cOIzELZCxO?= =?utf-8?q?wxd+2d/9NveGVokshDiGY2L2sFW/e3RoEPr+oBUsuWw4xUXFRxCfMVFLwmUbmphH2?= =?utf-8?q?EgoS+W+G8e1Yckjv/hglqAXESnFRMF0gFCzY470is4G0O4IJmgMZox6E4fiDD6WOM?= =?utf-8?q?6+zQnzDZA0+RNo6nMZo+1SH5/1/4LzgJmZH5QXOp/rDYBfvrYAv+cD7rVsPd2nYMW?= =?utf-8?q?DTuoNT2hrtc8YkgGtsOIizRDCuowl/4ulTrOCC9Wp/yRxBZ3v+4eGKzts8QLjPEWm?= =?utf-8?q?dCEdymVJkZX3TykU8korgTDIgiTKTm52sREo4oIdcf1RZUTkjWMJiBjwUo1vvMW/2?= =?utf-8?q?kFIvLVDvw7mBhPJqj9EbEZGfzL9ITDrw8q8Q=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a94bbb8-76b8-4292-2b0a-08da2ccfa65e X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:39:19.4730 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 07/10] avfilter/vf_nlmeans: Move ff_nlmeans_init into a header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: NiJ98FpOvHU9 This removes a dependency of checkasm on lavfi/vf_nlmeans.o and also allows to inline ff_nlmeans_init() irrespectively of interposing. Signed-off-by: Andreas Rheinhardt --- libavfilter/vf_nlmeans.c | 108 +------------------------- libavfilter/vf_nlmeans.h | 1 - libavfilter/vf_nlmeans_init.h | 139 ++++++++++++++++++++++++++++++++++ tests/checkasm/vf_nlmeans.c | 2 +- 4 files changed, 141 insertions(+), 109 deletions(-) create mode 100644 libavfilter/vf_nlmeans_init.h diff --git a/libavfilter/vf_nlmeans.c b/libavfilter/vf_nlmeans.c index 8a05965c9b..2fc3adacca 100644 --- a/libavfilter/vf_nlmeans.c +++ b/libavfilter/vf_nlmeans.c @@ -36,6 +36,7 @@ #include "formats.h" #include "internal.h" #include "vf_nlmeans.h" +#include "vf_nlmeans_init.h" #include "video.h" typedef struct NLMeansContext { @@ -84,48 +85,6 @@ static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_NONE }; -/** - * Compute squared difference of the safe area (the zone where s1 and s2 - * overlap). It is likely the largest integral zone, so it is interesting to do - * as little checks as possible; contrary to the unsafe version of this - * function, we do not need any clipping here. - * - * The line above dst and the column to its left are always readable. - */ -static void compute_safe_ssd_integral_image_c(uint32_t *dst, ptrdiff_t dst_linesize_32, - const uint8_t *s1, ptrdiff_t linesize1, - const uint8_t *s2, ptrdiff_t linesize2, - int w, int h) -{ - const uint32_t *dst_top = dst - dst_linesize_32; - - /* SIMD-friendly assumptions allowed here */ - av_assert2(!(w & 0xf) && w >= 16 && h >= 1); - - for (int y = 0; y < h; y++) { - for (int x = 0; x < w; x += 4) { - const int d0 = s1[x ] - s2[x ]; - const int d1 = s1[x + 1] - s2[x + 1]; - const int d2 = s1[x + 2] - s2[x + 2]; - const int d3 = s1[x + 3] - s2[x + 3]; - - dst[x ] = dst_top[x ] - dst_top[x - 1] + d0*d0; - dst[x + 1] = dst_top[x + 1] - dst_top[x ] + d1*d1; - dst[x + 2] = dst_top[x + 2] - dst_top[x + 1] + d2*d2; - dst[x + 3] = dst_top[x + 3] - dst_top[x + 2] + d3*d3; - - dst[x ] += dst[x - 1]; - dst[x + 1] += dst[x ]; - dst[x + 2] += dst[x + 1]; - dst[x + 3] += dst[x + 2]; - } - s1 += linesize1; - s2 += linesize2; - dst += dst_linesize_32; - dst_top += dst_linesize_32; - } -} - /** * Compute squared difference of an unsafe area (the zone nor s1 nor s2 could * be readable). @@ -326,59 +285,6 @@ struct thread_data { int p; }; -static void compute_weights_line_c(const uint32_t *const iia, - const uint32_t *const iib, - const uint32_t *const iid, - const uint32_t *const iie, - const uint8_t *const src, - float *total_weight, - float *sum, - const float *const weight_lut, - int max_meaningful_diff, - int startx, int endx) -{ - for (int x = startx; x < endx; x++) { - /* - * M is a discrete map where every entry contains the sum of all the entries - * in the rectangle from the top-left origin of M to its coordinate. In the - * following schema, "i" contains the sum of the whole map: - * - * M = +----------+-----------------+----+ - * | | | | - * | | | | - * | a| b| c| - * +----------+-----------------+----+ - * | | | | - * | | | | - * | | X | | - * | | | | - * | d| e| f| - * +----------+-----------------+----+ - * | | | | - * | g| h| i| - * +----------+-----------------+----+ - * - * The sum of the X box can be calculated with: - * X = e-d-b+a - * - * See https://en.wikipedia.org/wiki/Summed_area_table - * - * The compute*_ssd functions compute the integral image M where every entry - * contains the sum of the squared difference of every corresponding pixels of - * two input planes of the same size as M. - */ - const uint32_t a = iia[x]; - const uint32_t b = iib[x]; - const uint32_t d = iid[x]; - const uint32_t e = iie[x]; - const uint32_t patch_diff_sq = FFMIN(e - d - b + a, max_meaningful_diff); - const float weight = weight_lut[patch_diff_sq]; // exp(-patch_diff_sq * s->pdiff_scale) - - total_weight[x] += weight; - sum[x] += weight * src[x]; - } -} - static int nlmeans_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) { NLMeansContext *s = ctx->priv; @@ -512,18 +418,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) } \ } while (0) -void ff_nlmeans_init(NLMeansDSPContext *dsp) -{ - dsp->compute_safe_ssd_integral_image = compute_safe_ssd_integral_image_c; - dsp->compute_weights_line = compute_weights_line_c; - - if (ARCH_AARCH64) - ff_nlmeans_init_aarch64(dsp); - - if (ARCH_X86) - ff_nlmeans_init_x86(dsp); -} - static av_cold int init(AVFilterContext *ctx) { NLMeansContext *s = ctx->priv; diff --git a/libavfilter/vf_nlmeans.h b/libavfilter/vf_nlmeans.h index 43611a03bd..61377f8c69 100644 --- a/libavfilter/vf_nlmeans.h +++ b/libavfilter/vf_nlmeans.h @@ -39,7 +39,6 @@ typedef struct NLMeansDSPContext { int startx, int endx); } NLMeansDSPContext; -void ff_nlmeans_init(NLMeansDSPContext *dsp); void ff_nlmeans_init_aarch64(NLMeansDSPContext *dsp); void ff_nlmeans_init_x86(NLMeansDSPContext *dsp); diff --git a/libavfilter/vf_nlmeans_init.h b/libavfilter/vf_nlmeans_init.h new file mode 100644 index 0000000000..04ad8801b6 --- /dev/null +++ b/libavfilter/vf_nlmeans_init.h @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2016 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFILTER_NLMEANS_INIT_H +#define AVFILTER_NLMEANS_INIT_H + +#include +#include + +#include "config.h" +#include "libavutil/avassert.h" +#include "libavutil/macros.h" +#include "vf_nlmeans.h" + +/** + * Compute squared difference of the safe area (the zone where s1 and s2 + * overlap). It is likely the largest integral zone, so it is interesting to do + * as little checks as possible; contrary to the unsafe version of this + * function, we do not need any clipping here. + * + * The line above dst and the column to its left are always readable. + */ +static void compute_safe_ssd_integral_image_c(uint32_t *dst, ptrdiff_t dst_linesize_32, + const uint8_t *s1, ptrdiff_t linesize1, + const uint8_t *s2, ptrdiff_t linesize2, + int w, int h) +{ + const uint32_t *dst_top = dst - dst_linesize_32; + + /* SIMD-friendly assumptions allowed here */ + av_assert2(!(w & 0xf) && w >= 16 && h >= 1); + + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x += 4) { + const int d0 = s1[x ] - s2[x ]; + const int d1 = s1[x + 1] - s2[x + 1]; + const int d2 = s1[x + 2] - s2[x + 2]; + const int d3 = s1[x + 3] - s2[x + 3]; + + dst[x ] = dst_top[x ] - dst_top[x - 1] + d0*d0; + dst[x + 1] = dst_top[x + 1] - dst_top[x ] + d1*d1; + dst[x + 2] = dst_top[x + 2] - dst_top[x + 1] + d2*d2; + dst[x + 3] = dst_top[x + 3] - dst_top[x + 2] + d3*d3; + + dst[x ] += dst[x - 1]; + dst[x + 1] += dst[x ]; + dst[x + 2] += dst[x + 1]; + dst[x + 3] += dst[x + 2]; + } + s1 += linesize1; + s2 += linesize2; + dst += dst_linesize_32; + dst_top += dst_linesize_32; + } +} + +static void compute_weights_line_c(const uint32_t *const iia, + const uint32_t *const iib, + const uint32_t *const iid, + const uint32_t *const iie, + const uint8_t *const src, + float *total_weight, + float *sum, + const float *const weight_lut, + int max_meaningful_diff, + int startx, int endx) +{ + for (int x = startx; x < endx; x++) { + /* + * M is a discrete map where every entry contains the sum of all the entries + * in the rectangle from the top-left origin of M to its coordinate. In the + * following schema, "i" contains the sum of the whole map: + * + * M = +----------+-----------------+----+ + * | | | | + * | | | | + * | a| b| c| + * +----------+-----------------+----+ + * | | | | + * | | | | + * | | X | | + * | | | | + * | d| e| f| + * +----------+-----------------+----+ + * | | | | + * | g| h| i| + * +----------+-----------------+----+ + * + * The sum of the X box can be calculated with: + * X = e-d-b+a + * + * See https://en.wikipedia.org/wiki/Summed_area_table + * + * The compute*_ssd functions compute the integral image M where every entry + * contains the sum of the squared difference of every corresponding pixels of + * two input planes of the same size as M. + */ + const uint32_t a = iia[x]; + const uint32_t b = iib[x]; + const uint32_t d = iid[x]; + const uint32_t e = iie[x]; + const uint32_t patch_diff_sq = FFMIN(e - d - b + a, max_meaningful_diff); + const float weight = weight_lut[patch_diff_sq]; // exp(-patch_diff_sq * s->pdiff_scale) + + total_weight[x] += weight; + sum[x] += weight * src[x]; + } +} + +static av_unused void ff_nlmeans_init(NLMeansDSPContext *dsp) +{ + dsp->compute_safe_ssd_integral_image = compute_safe_ssd_integral_image_c; + dsp->compute_weights_line = compute_weights_line_c; + + if (ARCH_AARCH64) + ff_nlmeans_init_aarch64(dsp); + + if (ARCH_X86) + ff_nlmeans_init_x86(dsp); +} + +#endif /* AVFILTER_NLMEANS_INIT_H */ diff --git a/tests/checkasm/vf_nlmeans.c b/tests/checkasm/vf_nlmeans.c index 87474d6803..0f1f9fd403 100644 --- a/tests/checkasm/vf_nlmeans.c +++ b/tests/checkasm/vf_nlmeans.c @@ -19,7 +19,7 @@ */ #include "checkasm.h" -#include "libavfilter/vf_nlmeans.h" +#include "libavfilter/vf_nlmeans_init.h" #include "libavutil/avassert.h" #define randomize_buffer(buf, size) do { \ From patchwork Tue May 3 06:37:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35557 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257690pzb; Mon, 2 May 2022 23:39:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyZ2a0/R7j5Pw5/vCxCH1OMNfFzGuZ2lO3Ba07VDx+xF67VIDEcHP5KBGwGehl3wc6pTwGa X-Received: by 2002:a05:6402:2291:b0:425:deb5:73be with SMTP id cw17-20020a056402229100b00425deb573bemr16567876edb.392.1651559989082; Mon, 02 May 2022 23:39:49 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id kw2-20020a170907770200b006f41aaeb63dsi6880123ejc.353.2022.05.02.23.39.48; Mon, 02 May 2022 23:39:49 -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=@outlook.com header.s=selector1 header.b=fBBdc6Hx; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 631AD68B3C1; Tue, 3 May 2022 09:39:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075031.outbound.protection.outlook.com [40.92.75.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7C78568B3A8 for ; Tue, 3 May 2022 09:39:27 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aAydP+zdAneqMNb5Qny1TNycwad/Jle3iVKARrRztRJWSBDNZPK9AsEC3ZwJlMv7fa9hhKUDx91LIb8NZeGY24/lIA+/uGvcYOGP/UEji8ZX07DXhkgKrq6qWHxQblntFjgZx+WBgqnxikIFQKUsh5XYJYOft44VRcxH+ZU89Swpdk+UlDPhDkziobyxRQ2d0uDkiGDCxuaMVnv5GHbKhJyhVR0jIFkHlvJViLJVZEzhxMAQZnkxLmK5LDDsdtqai80Nl7x4ofWj0pMbnWizd85pznUJOUbh5j+qgVFGVZjrRTG5FZVM55ZBRhZ3l0/WREfiz7Rwmhrq/6AiAR/YfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=I1PSqWy8Hc0ZLSsoYhxFzrCmCQwrJuoPER5SRo7Chz8=; b=TaD+4IezSPc4QAOm69Y4KusFwHVM/BHUyI5IQTNtmaHXiVypKa/buaYuTRWSYfs5lmJ8fNnP1DvtchOQLyFX/z8yjSatvST2r9yUObpNhFz1m0DoMwaRAfMLnPQcvsj9sfjsTpdqOUkhcHEv7bXHLl5rOd4ViKM4ZpIDRQH6zx4OEknyr+VqW8M6yJpsvWCibk9+1OYu9cN6d0FAhSq8tHOUt24Bu4nkb5WWsBHiQyTCie24SOdX9iZ1W6FqJLhymrIC4Lg9wVmmEPpAg19GnUEi8PN3iKVLeEgwRhUnceneDspcjUsHotYZEVhM7LzQ0U5hFqVVfd3A+m/3FILddA== 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=I1PSqWy8Hc0ZLSsoYhxFzrCmCQwrJuoPER5SRo7Chz8=; b=fBBdc6HxVhRiUDxN3FECsYvYJNaf9YIwVnfeyL9NuuE6zoXXh+ptWWsSuimYBjJUy4i9lxaY29VtaiX+9tqW8K9smbAmMRHQyyd2LAThccCJc73cEKnhOzDP1dYrNBD/Lg+hD6Zh7VzCbEYmdq/gEwIJsEmDtf9gbqjTg/XmElrJVNOCwK/tsVKawJicE8hJXipwgfPd6JDbK9/n+umtkvQ+TX0BCt/d+8R+HmGOob80Y1U/01Lov802DqUyxI+mOekTg5W0v1so/xyxSoSg9+wQk5yo5gJqp6E2GqJEOj5oKLSLlrXghxSr7jmpyTRa6HuxMQPIAaLLjZ/UdxxHLg== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:39:26 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:39:25 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:49 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [wF+zZf//PxeVU4f1SDo2YZZvDDM9l9vj] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 34f87d67-a594-4c99-c066-08da2ccfa9d7 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNUfFs0p/ynZxoLjq6nuVP/rgtdGfCMrwqzTPUrXuZVDDKFvUctHMkQtfzhHCBPRs0aOWLqGaPxwHkaDPi56I0QheQ98AehVY3fHHhcm0kt44N8VAPdl4RO7w5JjCuuVN3s644++7coVTcbuyWo6uJxAg/z+QnrCLQwl6rIx3ClnI8MSYGZt3NuJdgtZPRat6C+rpDvDCkTd9V01jgmyzFGYb3+jSAsF4MjmX0Lqx8fcdY/Nrzx7b8wrSk9oy2+vSXRxj85svuxOY+DeEsd3ZER9G/ea3qSUCZwL8C3BFohGNHUchxm4sXRjxSdrWWGf84ANpHygb0H1Ex+rXOYcWrdbh1fQAIhaCdy0gF8QabU8wXYQq4yjxwktpyIYrBwYhLEFT28BdwECHvQnzSrI6ps1rwktlJAPzQWjw2M2Z7wzl6sKHrYXDlHjSkiqiu7Kn6EVqMSRyJmxNL5zvbqaNmSaLo0KXcohRXXexvwHDrFU7hUR0Rh9tASvwZUyLhfDFqJ1OSlNNzj2blxgaasHwlVeMtHKhUldm01f662c+TfJjs9dBhsr4gKK63m5gXlbZYhsJjZ7ybbjiPFvVzaQJ3lYEYjlccaA7K5gb0gsTpm1i45KYoyNN1dj3etc3l85jXVcVw1YTS4rA6fcHeGQDRVLwuqhTwBbxNGqnWNwYlJlmUnLO30lUqc9CeUTmU6aVgLp+g+VH2MmDiWT2+KsOKHzbJprl+lQcbE= X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dYOULmDJVMj2qeNhFcXF97IzS/uSChEdjGAQ+IZlK4bg7URN6nTNUJBMHWMaNwWws0pwK1j57hUyfrDgRWL3L/u2+DZy4vsdY49MefVXBqdbIwWH1KU56sGeLd2tlJ+UpcnaViZ5cAZpBhLG7lPRNOn3jf4PptqivquzGX2Xq/aeIDVSUQpLUS3EmTMx0lHvYU2awbKZU234WRelz+ChaDNERa8GIhgOjpl6RuJrjB9wMN4k6wUSyMRUlec4X0/brq4utR2nM9CfzNb6kDqkCjpfC2zrGL0jdm2Y7mDucMJVekT2h9F5wy5Y0mMnqtvrZYy/O1PCRsJetgO1U85iOr6UnCO3aBTHvA+CPAGfEc2wTInCPg+uIKC3WKLTCHve66XRm+N0/+uev3/8fxa7OOjYYLoEFJ7dY/uD8V43LpLjYn/8Xs7EGYGLJhtPwPRzmpYbFerv6zcDIj/beOc+3lDz3ns20may/CgPDz/dIYto87nkV6dRDEOVHd7Jdh2yI1F2uh88eufbc5qFbbDKSNkulaEGw+IFYGUxRqe+EaZreY4WpWsRMJHw5V6NOfcuQgXS1JSJjZIOgn7ma2I6ow== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jPe8at+YYbm33k0jyDFF2PLdNobedCnDgEzls+YkLbOVMzkYmZ8quaBhX6w3SY2kDN4Gxm1wGrE6ltMyzc485NRhPLWGvVpdDqGTls/ern8288rGCKcxSU7vii7Pdqj8WDDYMS2HJE/FjxW3YJOQlljNcKfnbD/HjDj7JT9/FgoRuvQM8OoPsgYpvcwst0RQ7iEvLgiDPfJ0YkeMvy20AaB9VGTp/NiMRXewv0PCWhyhqgBR+y04Ggf94xe5fzakP31Jokn5JzhNCx5Ir7Sa4n3GFlSqmeA5ylRX2521RPqhYShPjMZtNSjPNAD3OGxNGbBqkPTCPGyPjJFcbIiQmCgle4pjRzgrrLV+TBSiHhxivq8wUKbsHvAXIrQzsC+3Ims2zXG6cbtDXW9C5ChpYUoCVpD5ec7a+JMQWxzjAoa/f+d6Sjus6rSFvvUzP8LkDa92Ieh/byTH+v+go5g6ddDVNo3I5RPcLj/l02wCx+t9mjyD2rDhZGioJFkZh12E3bTiARlTaNsBiRuAu1HWV9KLgChb6ulKk/YX/d2uy0wxptXpyk1exRwUSIVfDPTcP7HS0ORqcQsD0W+zC0N9RIGuEwch1eBqP2m0CSdiLkNCCKwHLBIx5gGYn4j1YB1o6BJKUjuXMfr4s6GbnPkRScU+JAGsxpvwcrLDae7uxRxAwMim3tRO2htow1HiqRMY0a5vn9WURizkliYPJm+/S5ge6yZoJpPqzbvGeGpeKp9ymZkde8vVA4LwBxqAZ6CaFCJPGJuqlJzRrAP2zZpG3y4sa6RkvcmsJYSPU9XfiZh+KATy5qlOBBR2ciU629OBeV70AJBT9zysm4pVMFCann8/s+8nZQYmW0prQGuIi+vot8eC85+eEHZTPgEdiyq1GNmqDdtI2AIp+xUc5LZTUqHtnzCJNZWu5hu/4MFax/DshkL2SfaEvkGSfX16BIuGq1xXnp+BzRnE+Tt3KFuSguDg9b8nUFwG5oHiXkPRbpTTgoNBvhqNx65VvoVp3FDX/iZEoiWwXN9I3YVfYtG/y5qRAKr0dJsaNCvBiS2zX8IM5bqGNhsvz6gOW3ihlskGNlX4CUFP7UxD9HDF50/PhvavEZysBy6BhQZQ6vPAAWyV+xA5iksfZhGjuts0r/tziaDsa1c5w0dRDhVeZ5SO86Cz8pMHWsLOlwlAsxpZu4p47sQuEISNoHbn4MjhonhJSx8Ti3mWjtpiIQ0543xkRWiTNMpe2l7AlYHA8dEDpPDK84DfJZL1eS2Rqnsgb8P4dlYZePYWD2/ed+DdlRk/RWm6ZoS4txH5vLDGiirHfEwhJ9RLY/gSGPkJhY3j05cyNxUhVH//bIv5B/Qvm5Q3m384TMWA7qV0bo8cIj1gHqEwLEH6ZJx7KIrZ2i8zw1QnU1GjzfXhY2DxHBW/KH2hKFHF7qlkDSigksEvizqUenhqn0XZtjMZdUedZXIhAShOLPNenrhdYcqy5M1yoPA6qw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 34f87d67-a594-4c99-c066-08da2ccfa9d7 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:39:25.4280 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 08/10] avfilter/vf_threshold: Move ff_threshold_init into a header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +Wm1rhJExfq+ This removes a dependency of checkasm on lavfi/vf_threshold.o and also allows to inline ff_threshold_init() irrespectively of interposing. With this patch checkasm no longer pulls all of lavfi and lavf in. Signed-off-by: Andreas Rheinhardt --- libavfilter/threshold.h | 1 - libavfilter/vf_threshold.c | 66 +----------------------- libavfilter/vf_threshold_init.h | 91 +++++++++++++++++++++++++++++++++ tests/checkasm/vf_threshold.c | 2 +- 4 files changed, 93 insertions(+), 67 deletions(-) create mode 100644 libavfilter/vf_threshold_init.h diff --git a/libavfilter/threshold.h b/libavfilter/threshold.h index 775a9f9cae..8b55ad6ba1 100644 --- a/libavfilter/threshold.h +++ b/libavfilter/threshold.h @@ -46,7 +46,6 @@ typedef struct ThresholdContext { FFFrameSync fs; } ThresholdContext; -void ff_threshold_init(ThresholdContext *s); void ff_threshold_init_x86(ThresholdContext *s); #endif /* AVFILTER_THRESHOLD_H */ diff --git a/libavfilter/vf_threshold.c b/libavfilter/vf_threshold.c index 2a0add4a8f..dc73c277d3 100644 --- a/libavfilter/vf_threshold.c +++ b/libavfilter/vf_threshold.c @@ -32,6 +32,7 @@ #include "internal.h" #include "video.h" #include "threshold.h" +#include "vf_threshold_init.h" #define OFFSET(x) offsetof(ThresholdContext, x) #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM @@ -150,57 +151,6 @@ static int process_frame(FFFrameSync *fs) return ff_filter_frame(outlink, out); } -static void threshold8(const uint8_t *in, const uint8_t *threshold, - const uint8_t *min, const uint8_t *max, - uint8_t *out, - ptrdiff_t ilinesize, ptrdiff_t tlinesize, - ptrdiff_t flinesize, ptrdiff_t slinesize, - ptrdiff_t olinesize, - int w, int h) -{ - int x, y; - - for (y = 0; y < h; y++) { - for (x = 0; x < w; x++) { - out[x] = in[x] < threshold[x] ? min[x] : max[x]; - } - - in += ilinesize; - threshold += tlinesize; - min += flinesize; - max += slinesize; - out += olinesize; - } -} - -static void threshold16(const uint8_t *iin, const uint8_t *tthreshold, - const uint8_t *ffirst, const uint8_t *ssecond, - uint8_t *oout, - ptrdiff_t ilinesize, ptrdiff_t tlinesize, - ptrdiff_t flinesize, ptrdiff_t slinesize, - ptrdiff_t olinesize, - int w, int h) -{ - const uint16_t *in = (const uint16_t *)iin; - const uint16_t *threshold = (const uint16_t *)tthreshold; - const uint16_t *min = (const uint16_t *)ffirst; - const uint16_t *max = (const uint16_t *)ssecond; - uint16_t *out = (uint16_t *)oout; - int x, y; - - for (y = 0; y < h; y++) { - for (x = 0; x < w; x++) { - out[x] = in[x] < threshold[x] ? min[x] : max[x]; - } - - in += ilinesize / 2; - threshold += tlinesize / 2; - min += flinesize / 2; - max += slinesize / 2; - out += olinesize / 2; - } -} - static int config_input(AVFilterLink *inlink) { AVFilterContext *ctx = inlink->dst; @@ -223,20 +173,6 @@ static int config_input(AVFilterLink *inlink) return 0; } -void ff_threshold_init(ThresholdContext *s) -{ - if (s->depth == 8) { - s->threshold = threshold8; - s->bpc = 1; - } else { - s->threshold = threshold16; - s->bpc = 2; - } - - if (ARCH_X86) - ff_threshold_init_x86(s); -} - static int config_output(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; diff --git a/libavfilter/vf_threshold_init.h b/libavfilter/vf_threshold_init.h new file mode 100644 index 0000000000..e79d2bb63d --- /dev/null +++ b/libavfilter/vf_threshold_init.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2016 Paul B Mahol + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFILTER_THRESHOLD_INIT_H +#define AVFILTER_THRESHOLD_INIT_H + +#include +#include + +#include "config.h" +#include "libavutil/attributes.h" +#include "threshold.h" + +static void threshold8(const uint8_t *in, const uint8_t *threshold, + const uint8_t *min, const uint8_t *max, + uint8_t *out, + ptrdiff_t ilinesize, ptrdiff_t tlinesize, + ptrdiff_t flinesize, ptrdiff_t slinesize, + ptrdiff_t olinesize, + int w, int h) +{ + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) + out[x] = in[x] < threshold[x] ? min[x] : max[x]; + + in += ilinesize; + threshold += tlinesize; + min += flinesize; + max += slinesize; + out += olinesize; + } +} + +static void threshold16(const uint8_t *iin, const uint8_t *tthreshold, + const uint8_t *ffirst, const uint8_t *ssecond, + uint8_t *oout, + ptrdiff_t ilinesize, ptrdiff_t tlinesize, + ptrdiff_t flinesize, ptrdiff_t slinesize, + ptrdiff_t olinesize, + int w, int h) +{ + const uint16_t *in = (const uint16_t *)iin; + const uint16_t *threshold = (const uint16_t *)tthreshold; + const uint16_t *min = (const uint16_t *)ffirst; + const uint16_t *max = (const uint16_t *)ssecond; + uint16_t *out = (uint16_t *)oout; + + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) + out[x] = in[x] < threshold[x] ? min[x] : max[x]; + + in += ilinesize / 2; + threshold += tlinesize / 2; + min += flinesize / 2; + max += slinesize / 2; + out += olinesize / 2; + } +} + +static av_unused void ff_threshold_init(ThresholdContext *s) +{ + if (s->depth == 8) { + s->threshold = threshold8; + s->bpc = 1; + } else { + s->threshold = threshold16; + s->bpc = 2; + } + + if (ARCH_X86) + ff_threshold_init_x86(s); +} + +#endif /* AVFILTER_THRESHOLD_INIT_H */ diff --git a/tests/checkasm/vf_threshold.c b/tests/checkasm/vf_threshold.c index 2c5cc807ee..e6a425edfe 100644 --- a/tests/checkasm/vf_threshold.c +++ b/tests/checkasm/vf_threshold.c @@ -18,7 +18,7 @@ #include #include "checkasm.h" -#include "libavfilter/threshold.h" +#include "libavfilter/vf_threshold_init.h" #include "libavutil/intreadwrite.h" #include "libavutil/mem_internal.h" From patchwork Tue May 3 06:37:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35559 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257783pzb; Mon, 2 May 2022 23:40:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzLrP7r8d3KiWPo4UIu4/RXY4cWX4qU8mSXA9TnO0STn2SyNcMl73Shpqy29yOZqaLBocXL X-Received: by 2002:a17:907:8a21:b0:6f3:d0f0:b56b with SMTP id sc33-20020a1709078a2100b006f3d0f0b56bmr14260677ejc.305.1651560015036; Mon, 02 May 2022 23:40:15 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id jg19-20020a170907971300b006e8ab12f932si13861898ejc.122.2022.05.02.23.40.14; Mon, 02 May 2022 23:40: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=@outlook.com header.s=selector1 header.b=R+lmJzT+; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5DFFB68B3CA; Tue, 3 May 2022 09:39:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075040.outbound.protection.outlook.com [40.92.75.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1592268B2A1 for ; Tue, 3 May 2022 09:39:46 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XYhwJ4lGJJ5w4NsffUuQ8MtnbxQEEILGbWdzoAal4VsWq+Feq3dAtH55zaAc7rm3cNhiojkUbqm2K18g7S0kV9mslXd9/ScsU9DI8Fqluv3P9pxxwCVkiTSc+2zOH7f5MhT3dtDhhUkiRbDu/4Lzn2xw7A0H43eLBbfKMM83efAzHYgKnBtDmQDNCg5lEG7l8tYUxIiozIWZwpZMz7nxPhsVZUZdevJzq9g2ZnkwRCbC7I7h4dwUKgEh9k8NScDYN4oA/ioae1+zaJJa1EtNECyQH4cf91NGYr8H7+cUZ4MGXLdb5uErrNoTpKV/hL5bbmXNmbqc388XXSoJ4b9/7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=g5DptLWfOBElLjJ8phF2RvecGZ0cBF5QUv03lJAJlSE=; b=KeuifxsxDxUGgvpe379obDepbr96vl2UEEFClcZQOkYhGXyN/c5m/IEsSAi21w8PYdm/kNtKGPK4f9Hvtl8emUOUpr08SQmSJXwm65sXEVV6QbA81huKCKE5Oi7XZMKUuQXVo0ahdHdoHuV+pp8Syg1NCp5VuVkSdKhQZ1zn24iXr52FB3VnQyyXEtzvh4tszWTnMjoYhQR9+kKlCM8ShBfTyRVNFWsLD4gNtW0h5iI9kxX3xUjeIHDpt5YdhNIo15crRCTUeLgv3w4+wGv/gtu3G+w9MiH8nv6SxFtHGoL7VRHWCTKd4bNUQ2bMGLVhwx2md+1bIYWvZ9TrP6qOrg== 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=g5DptLWfOBElLjJ8phF2RvecGZ0cBF5QUv03lJAJlSE=; b=R+lmJzT+de+HqRKD4sSMJssV9XD4GlhfoQ5kQX4r9HyXINDaHZ/dkZ3ET+5l1DSikJ6DeGB+KHbuh5hyENyiExELrWnogEnAYvr6YI4/oqmFaCkFnljUDtXWjNuW98bJU9dXh0Ds9Ox/5ln8lPjENOkcvOecBTsv90hV00XNdWrPJivDtNNVdydePTT7jJyVGluPVGTqCIwYr7oDMVrtTynNPTHVzqYRGa/IN6X5diWzzyWNp7eWFb5QXue4UlXpvrUCf56QFgcKXt2wN88kE4ZmZGQKu64raH8zXTcdRaFUTKm5EIQYAE/BuEpSiGygys4ZVrLw/ZLyY8rr/mKyCA== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:39:41 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:39:41 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:50 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [t1VxA7kCKPwnGO78moMyEMNAdESXaV51] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-8-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4e990c1a-016b-469f-4248-08da2ccfb37c X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTQEkMEhbgfP1CXQyS+IofoA8939WrUHOZbU2KC5WHQ2UPK1uKZcveYvr/bKP0irYzagwUFEyEBCqzIIAsteYB1RkWc/Prtvs4vWycIyovoDGtqEv2DOWJHMhofyKmjPrTFjTMRRHVCHSq01+ShlCk0mJ0paHenBPPkD3o6U0GqHLqn3z/tvhtOrA2cH34tF8Q52pZA6ennq2uK5RFKHOy6LxVgtcwN4VidtS1Fc+7pX8MqZIselp3BEInVNrNnrIO2Af+feHW8bLALUBO0rvwjG6giQDEPtrZPO0wUVx657OXc3Yt798Mw7eyRH98aRuSCHRvMGB16QqDV2hza41DPStc10TEC5r03CwIxLTtIY6RHIjBsYH1XtWcoAHNIiPc340TdZlAQEm2jwai3+31sGAO80xySUEQ/vSfOg50Qbco0S5KkLStan8UjJfeJVC9bmMc+CSwTsGIlvxPAUrk08AYWfZjk24oyQoXCGA/aRlZ/BlFTbPir7RYXGVJVK9nTewtGQz9r9CRnNoe7Mty0eEKWYS59iRqFHGxU/qxikpwlajad18qu4bjt5RX5O2GNYy9I2uS33Te2vEEFp5YwuNBwJlIenz5ut4toD+JukT20d1dJcrlVyiXOzPdCCcnFHJeA8IfjNWm/mLrYwYzmRYncDvuGrrAF1TATY0xeSOJYoh7pS022TXQOjmRsUOxMGGBS2UhjakgK0/bSkmDqv2O2dLXyBjeR97rpY3pkmOoOvUvEG2RRowcO60GGVLQ= X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xd1EnwfI99vNdXn47j7lrW9NsehLc0Yice/5LhG4kpUfdhp37RQ8lYTBiciOiqJes/4C+lvS0Zmh3uyTOyCV9/uRU5dNIogSjQ+k1lfvA/3ErLgRHMfRBb3tS2KSMTAUZd1BCw/NgjarkoHsVf5KYnhByzdnJOpajHgazWMj7DfBAoYtcifUbu1aWsMEwCQXPgvi4BiH6jcmeOs66mz/JuxLGSMs/G6xd+oiAJk3OX8io0gf/M49DFyAwqkHE5nYjHjEJBTAsofqgNxUtAJAMlj/jre69lpAwagTcn27iLsw4B98rEAJwg+Rm+kUAFaRSEFmiDVvA6TDuPkPcso0GWPd7lZqphJ69n5mXBiI82lB2Bqw1s4gIvu3jWwOvlW5YMJqKFqzMtEthmDKwzr22fEl0VrueM34o0pKj895PK8LHd+KB7q1kWj7eFxY0odPWsj2H/5fkGRsJbjk5Kxm2Mbym1OjLgnohrtdETJSHtme+x45UOO9wyEjZdfeycnpOEojGzRhbGDK9oC+QYUyb2t0eBNKKaSRgAc7xcg7FMpberAuP5b316tELdNuCg7AQYe0mv54SXOwA/dO1ToG1Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: N9nDlyv7rcTGkHH5CVELpvlBm8alQJ9xxESU/yeADglUG8FXVVOZIao8XAFXrzWDgqofEFZ4KifHRoJvZ1Xsl0qXF1l3OyMGQdI66fkIZ/SRp8Ee4CajesbqbLXu45cA/ZsHAhZ9mSnzMFlX5BUbczaBwDRonBrNKG5a3/1iHF5V9XLIsUfG/kk5CHj1Qwyi8Yq5t4rz0Js+/7+NoNArIR5WMLmSEIllVhVE+FCg412rSAZjrQ6Dufs6JGYrl9F5PWYRFW4G9xcppbLylVFeVEUyG1kOr1lvBe/sUqymQkyhKpA4YJUaHDuWxxdm3VUtuGcpeKxTzKCjAzBcJEVXtx8OyGHGo90WY17jyY3qBcnPsGnb+sSpT88GAWxIHsZL387o7rr3geuOCvQGriiAmQXLCtXfX4H+gSooMYRL30f2IoqKFOoOsStdtaZBfojBWahVvEYThYn+sRw6ffDQncZnxyBmPwZIwK5LiyoFxNf51sUNwg96JDqy42kGPX4Biuu0qH6rtE1+hkQHMW4kfp/fW7lOqKv2qsLfsQcIzlCqLG1yzxNPZzIzply269nyd3zMJsGk1irYkKKXytcbsGuV/7SQlKow0b7LzmPK2AfhF/IrjPtycilWbTZAAmQXBRfu7bS+T6b8ylLKWfaYlD/8CR29GAKYcsMhXcRJqQKtUJ5Yfg2uGBNmRm/T1lM0v3b1fn4MVbfXZncWk69fm+LycO8teIN1CVl8JawjBGjMlzVpuQ66ruMdpsAtf6quPLf3eBLAXYdUyBEWXc3rBVNa+TmVWxpWCwBKPyOMSwl9fLAXJ3fX/DQqJuIn5MGFl8lJjAiiUqdwokcWN9ZjiIGghKH8eA4m/+ilAQ7L7BV2UYUDAFvVj+k5zfc9w433Bnsec9Pc+tLIp36mA+P13pZXWEI7rNJh3eIxVd97qekkvD1nUdQqnO55PmwGzKmzg+M33U/MpgNJfebMGfoaj0IUbeUwNLTjJCK13A3nshuflqUmxR6wDToLy8kdcIzjK/w3GyihWA5ms/KEnCCvsFhsBkP4SFu4Dm+i/72nhsB6WdPs9LZcL4T8K09W+56tV2C5Ogvusszksi8qL6PIUiemUbJ3kT0Me4hazgqjQRXmdy70eb8gkXluLg+nXwxvPSLgo5+IkcaD3ClgeBRqrQMEjkq6aIqi6+qr1FilnIpqL9OZmXRBNAtHDI9LfhPcOxqWemfk6EYTO9u4mTGj+Cobyk/SM60bQt95FLzFBtC3q9cn4LpF0+vrFnzvLC+2kU/6L9mYzzmtIqX4RROEOSriL307qtgJY7iFagvUdzmSYsiTStvoXC1jEy+bzmOXHGf4t3mnmgYCPzAh8do8YUw0ldfBQttYvhOuQ/5tdJ5x7aa9J2Fj30WGAtZrqYSf1pXUHnKKBisirL9eUN099fTtxDuuhV3SK9srnMYbYtPhy2Ny/nSRKPiGcHB8PA1fxb7SltKXIRgeMJhMfiJI9Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e990c1a-016b-469f-4248-08da2ccfb37c X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:39:41.2150 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 09/10] avcodec/v210_dec: Move ff_v210dec_init into a header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ujb52o8+503I This removes a dependency of checkasm on lavc/v210_dec.o and also allows to inline ff_v210dec_init() irrespectively of interposing. Signed-off-by: Andreas Rheinhardt --- libavcodec/v210dec.c | 29 +------------------ libavcodec/v210dec.h | 1 - libavcodec/v210dec_init.h | 61 +++++++++++++++++++++++++++++++++++++++ tests/checkasm/v210dec.c | 2 +- 4 files changed, 63 insertions(+), 30 deletions(-) create mode 100644 libavcodec/v210dec_init.h diff --git a/libavcodec/v210dec.c b/libavcodec/v210dec.c index b5e1d728a7..6c10ef6a7c 100644 --- a/libavcodec/v210dec.c +++ b/libavcodec/v210dec.c @@ -24,45 +24,18 @@ #include "avcodec.h" #include "codec_internal.h" #include "v210dec.h" +#include "v210dec_init.h" #include "libavutil/bswap.h" #include "libavutil/internal.h" #include "libavutil/intreadwrite.h" #include "thread.h" -#define READ_PIXELS(a, b, c) \ - do { \ - val = av_le2ne32(*src++); \ - *a++ = val & 0x3FF; \ - *b++ = (val >> 10) & 0x3FF; \ - *c++ = (val >> 20) & 0x3FF; \ - } while (0) - typedef struct ThreadData { AVFrame *frame; uint8_t *buf; int stride; } ThreadData; -static void v210_planar_unpack_c(const uint32_t *src, uint16_t *y, uint16_t *u, uint16_t *v, int width) -{ - uint32_t val; - int i; - - for( i = 0; i < width-5; i += 6 ){ - READ_PIXELS(u, y, v); - READ_PIXELS(y, u, y); - READ_PIXELS(v, y, u); - READ_PIXELS(y, v, y); - } -} - -av_cold void ff_v210dec_init(V210DecContext *s) -{ - s->unpack_frame = v210_planar_unpack_c; - if (ARCH_X86) - ff_v210_x86_init(s); -} - static av_cold int decode_init(AVCodecContext *avctx) { V210DecContext *s = avctx->priv_data; diff --git a/libavcodec/v210dec.h b/libavcodec/v210dec.h index 662e266315..87ba38e151 100644 --- a/libavcodec/v210dec.h +++ b/libavcodec/v210dec.h @@ -32,7 +32,6 @@ typedef struct { void (*unpack_frame)(const uint32_t *src, uint16_t *y, uint16_t *u, uint16_t *v, int width); } V210DecContext; -void ff_v210dec_init(V210DecContext *s); void ff_v210_x86_init(V210DecContext *s); #endif /* AVCODEC_V210DEC_H */ diff --git a/libavcodec/v210dec_init.h b/libavcodec/v210dec_init.h new file mode 100644 index 0000000000..305ab3911e --- /dev/null +++ b/libavcodec/v210dec_init.h @@ -0,0 +1,61 @@ +/* + * V210 decoder DSP init + * + * Copyright (C) 2009 Michael Niedermayer + * Copyright (c) 2009 Baptiste Coudurier + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_V210DEC_INIT_H +#define AVCODEC_V210DEC_INIT_H + +#include + +#include "config.h" +#include "libavutil/attributes.h" +#include "libavutil/bswap.h" +#include "v210dec.h" + +#define READ_PIXELS(a, b, c) \ + do { \ + val = av_le2ne32(*src++); \ + *a++ = val & 0x3FF; \ + *b++ = (val >> 10) & 0x3FF; \ + *c++ = (val >> 20) & 0x3FF; \ + } while (0) + +static void v210_planar_unpack_c(const uint32_t *src, uint16_t *y, uint16_t *u, uint16_t *v, int width) +{ + uint32_t val; + + for (int i = 0; i < width - 5; i += 6) { + READ_PIXELS(u, y, v); + READ_PIXELS(y, u, y); + READ_PIXELS(v, y, u); + READ_PIXELS(y, v, y); + } +} + +static av_unused av_cold void ff_v210dec_init(V210DecContext *s) +{ + s->unpack_frame = v210_planar_unpack_c; + if (ARCH_X86) + ff_v210_x86_init(s); +} + +#endif /* AVCODEC_V210DEC_INIT_H */ diff --git a/tests/checkasm/v210dec.c b/tests/checkasm/v210dec.c index 7dd50a8271..6aef519cc5 100644 --- a/tests/checkasm/v210dec.c +++ b/tests/checkasm/v210dec.c @@ -20,7 +20,7 @@ #include #include "checkasm.h" -#include "libavcodec/v210dec.h" +#include "libavcodec/v210dec_init.h" static uint32_t get_v210(void) { From patchwork Tue May 3 06:37:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35560 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp257861pzb; Mon, 2 May 2022 23:40:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwac7Wu7PjGDFd3FmhFeK9FYqrDuJZUeGzqIkGchzqFZBJr6YvK4qEPgl6geoJNmJ2Zpld8 X-Received: by 2002:a17:906:4313:b0:6b8:b3e5:a46 with SMTP id j19-20020a170906431300b006b8b3e50a46mr14207827ejm.417.1651560028770; Mon, 02 May 2022 23:40:28 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g3-20020a1709064e4300b006f0034e2730si13133579ejw.930.2022.05.02.23.40.28; Mon, 02 May 2022 23:40:28 -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=@outlook.com header.s=selector1 header.b=bSO6DTZD; arc=fail (body hash mismatch); 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2FE2468B3E7; Tue, 3 May 2022 09:39:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075040.outbound.protection.outlook.com [40.92.75.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2BDCD68B3C8 for ; Tue, 3 May 2022 09:39:46 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g6W09nwnryFXzutqWFzntChAjwo31x0sYQkLY088mUma7/res1WS6QRHMhrrFPrJqXFL//EF93a6CJhTXQdMj5kQWSrZQMukdaV/tyLJ6XJsk6FYe4sVhP2VqbZFu1rs/T1GszNr9EDkr+Qx2RSVDRLGPWaUTz0BPjhcWr9u9RGjefYOfAxAtWFyx03ISAQk+zPvqBfXrJPrGpw1ZeZKFc1OJ1Xumr2hth6vzxKLmKo5DAj59n0XePo6BIVvIoK7aRkFshR0dS+4A1HXWXJKpiKQBKqLRmQ6juBTp48VqjTJlUkhEHZLOVU9ymKy7lTcZc3i+qO9XrREhPx9i992xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=Vz+1GyF7XsaO55H7fxMt7oTXlpT9JubOe2/DW3APK1U=; b=Ohs2X2thVNyxUFWBMwLoNV+Cc048tTVr/NqwndhWMYludrnw6ekOCc1UzM8JldL/MZm//eXs1hc921yWEA0PoplnYIj3L+f+xBqK5xiOTYy1QBM+Jx5B0qIZ0CnH+6pvYdqfo0PHLHLoVZ7bJ4Qm1isx9D7Ghix1wfn3xbQ1MQzOSYP9sKcg9jUmY4PFHnqKXx79ZXVY0z7aKiShOurKR266iOmxqwctnnYNDgYrHqJ6fOP+mdZT+it0MH4VxEWcGmiTHZEKob7rOChaq41apEClmFzf2lO6Si72fyxNMQoCGsnenDLf92oYV8UXhQGR8+uHaIWiYP8rXzO0AvU9og== 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=Vz+1GyF7XsaO55H7fxMt7oTXlpT9JubOe2/DW3APK1U=; b=bSO6DTZDGaOFEk2vHlmptivvpHdacs+xfdy1RMIe71M9Yt50t4H3R5DUXkVOI7/7sNfuD1QKp7xX7gb+80AGMh6MM5KfXxf07MwHCiDVRxF/1VeQ12I4lL01Ya7Ao9OMVUz43KN98K7w6OMchwauQokLqzNqk4pLwHDm2hXt8+e9/ssu2ABtuQFEn2WIsmwyS7CyGyQ5WE/yvnze0oeiTqi/ny2GiETDsNdSSK5cMQwvbQq/YCNKqJxe1neis8E235PgWjHXKUB85GMrD9x4xd6XSX2AafaiT8kil9CYqRSpyJDmMkzOm8L2JN3T7i56KZGpPoISbLtlHzFmLRhpGg== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by VI1PR0102MB3230.eurprd01.prod.exchangelabs.com (2603:10a6:803:8::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Tue, 3 May 2022 06:39:44 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Tue, 3 May 2022 06:39:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 3 May 2022 08:37:51 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [1tc7y5BzuaE65OmpcXh+9mtJHkCtBKCe] X-ClientProxiedBy: ZR0P278CA0014.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::24) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220503063751.2261222-9-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 76454df9-5ece-4b61-d80a-08da2ccfb489 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTQEkMEhbgfP1CXQyS+IofoA8939WrUHOZbU2KC5WHQ2d/+5+VzbFdrWIuCl+kJkczOtroKFWYmo/D6nUkG62f7cbeSlO+4JTarnu+cu6e45eOG7cGKGP+yhxCAGSdoX3P9Qz80y7EgWVx7tqlEAIVDS7Bc12IgyPk39JDrx/gaJ4c4ghXasC+jKUTfdmE5BUhbqA2F75NSjtxAy0gzvx055ZDT3wZ+6wc1l0rXmYCMTCpFzMP2SLtmqo3zhlNoKs1/JDkmqlqekOyR3pnvFv1+lSc9o1s0rw3W7dF69BurFIeATFn9SoQw8pT8JQ+hwI7Ift4dxqSIeeh+GQ1v8Xj8rTtwmwJDN+1HC/15Ezjed0eq3ekPPmSxDeAgL2445t31WU3+M/pP0SibHvB4NFFXow5f5C735OyBW1KyJ+cSZVwrKLPWd1qEBKmvs5TqyYn4ZwEJTuyNsq4D+pkNzW5q1iqeujuewxWXJhrHAJk2hW/AAR9v5h9/CW1XNKFiogtdM1wTv+sh38VGLDhvCJzfdNo45BePxoCGyNvuynnYC/yDI279VevN8NF9D3AY0Hky3rPNwoLwtfjMIxvIAK4+0Txz9r686I29WgmUc17afgI7agOmLFfkYIfjaQ7/xlRo5jsxTaEgDspxtuGVtNQ9cIo2LFmyp75bkxRCVhAFlEnuXaaTWalxAzD9cX8fmIklIUE8kZIez/EWglsiFIMaLC4tw0TwAVXN7aQjP4KZtfYp2x2IJdi2htcgLFKEuvg= X-MS-TrafficTypeDiagnostic: VI1PR0102MB3230:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yRNZTajBIAs+BNS3T2GcbNaQsZ7XaEG0IwkK+/2Y0tYQdn9mK4Icxdpwc3sjAInzvBLz8wNQWVx2PzuDY7JB5Y6ZLG32bggyCpY5zNV7znZuH1MUqp7VBFDCi+Z91Pwg1ZTGUmSPp1S4HKW1gFOkE7TdSmquqYPVlHxgut9KsP7r/apfsGCqOOgvS7qqKFBqBJM5rcI0EBTow/kV31QkV+c2Vt+8jqKy4QzkaEmq09ksjifF2rYePX8HvhgDsKcgD1qpICPxSZtzFLXRigaez6l2lJvnEohmRenlIRlvSLBD+CAVty0JU9XO5LnWm6YE57oWNj7L+Yd23pmyGGSJ/DRc53xhtxhK+7U1RUMS1Tnpve24IQosTzQzPaitzbhhfA7f1WuI6pEGmwGB6FsV5Hta2pyDwLiudr1xq/6pvp34rx8S2LZhvrRCOkE6fl6wQZF1jWp2Gf+XOfGKMRftBxq8vQxKn6IuHSA97CNuUXxj45gSP+Aa+C6suJVS8Cj+OJEPN/N/7ANnJ38jswTUAvqSrqu0fohdyjvQ+EMGcM6gqnXWnrZMHNzmLHL2et/3KqZB2SSb14e8dwCQYDFqew== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 4yZAI5X3DffdoXPmCIbRoF6CCaEXq7SZoY3h75sW0HJgg65N+WDVhH+WnDTtwCrcLZG+T3IsqLI5F9kME3bHSou0WEqUEEawcR8NyGYguigTwFjOCcAQOZPlrNGiX4Z56O4aRPfIGAU6n3aLN6YaljLm674oLiBszr/NRqPD7sbWkafw/hnKrHT7lvTxEhHqoyw2sp7Ekkx5FwXNMtRUBHKUBzybtw47pthxaQV+UHvQbYNutOrqwk9iWcuL2Wy5EtTVrel951mT2+PG6XBh16s7AVjLhnQwcLDTDz95h0xgjyOIOIMLPIGAfu/snlzzT4TgVOHeudZ0PNgpdFhB8thXqXAfKCLCI4ksxB+LK3cEeLOkAStnw6q/iVlR4H/f70tvyPR1YIU8o9KwZ56LFVqEIoG2Cy7+7Je9pVkc/3o13dYOfOgjNkiTzgqyXcPqAkrGdzQdNNLFRfzDNAK1zRzkKJzbjL/8kTr9/6uPaN9rxpPBabfRxQdRm88n2BRs9/IiN8Hg0ZnI/lEP9FDHwUgPhK8Bp0erJDnxFoaRCe7Fq43S63SAUdHPh+iDw3OktnLpUtXekpaH+25+pH2P4G+Jv1qSKMV9JXpYAqRkI4ZND0Pvqys7pSDExt1zT/A6kxYwzj2xvXe6LrJ6XSZATtlTf1JPCbkzB1Suwl1VBaid1Cu5Uzi9xb7gDDA2JJNCutVCiBL357TBw5w7Qa7nChSCUyMLUv50HKVy3HwgclUeKYoAhiTCc28GEEz90ATQV5PlFF54lfj/fnGc1q4TXMGILprKU7APrthAP8Scw+oP+Rb0WOEnwtJDp2kRr30ft60CZZzkvGMoJhm5sF3DLHv6lu3VFRRLaRG3+oHrMu1oKASYd587H8RcoLl5fGevjVr1YOyQsgbg7Q+OLt5XyM3kVyLlw+8G7SHxlHx/HDsZ6oKkQoW7OmhkMnwo++whtSsbeZFwvdviIb5lzE28Fa44TRjJQX56ye3K5ns3pMIMMHAGTquOyA1GxkPO4TWpStZ6FL/TmawvUux1MZQNT0rrTqdCeEOKhUQo3GhHKGPWWiL8E4BSl5KEWes+BHw8y70Ohl3yuHVPuPdJ0dSQ5Wl46rzgGwix77PXMMg0bVk043VuUXR6NkXARNSYFzGJFUsYtaq8mSJcsxJlkK+rfQ4+k4lNY4CuG2JEyJ5w/IF3D6RSvbPuP5YnF87/aVtprZgy72CqCQTb5a2421CGaF5tTTgW0r6UDZamMYIBMtdIMqzwd4RI/F66uBbaQHCuHSkhVpnZ0pJ+ya8gcg5WIyMMntTFMWf5vbnwYj2NtpJvjZgEqmnNdhrwUp+8XCr8kS18h8qOx8QDCA/wkwSCDrZnYs8h8elurCHnjkXdAzUm6mA0oT7Lz7in+M6TkveDzQ/k3ZH67zCCoyzUAlbjPMXGtSePXwzDrClJs/YpdNQL5t/W/kBeOjRUGRDwoQXzA74KNiPl+Y9gyiP+fYrH+Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76454df9-5ece-4b61-d80a-08da2ccfb489 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 May 2022 06:39:44.2328 (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: VI1PR0102MB3230 Subject: [FFmpeg-devel] [PATCH 10/10] avcodec/v210_enc: Move ff_v210enc_init into a header 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: StbNCCrP9Jtf This removes a dependency of checkasm on lavc/v210_enc.o and also allows to inline ff_v210enc_init() irrespectively of interposing. This dependency pulled basically all of libavcodec into checkasm, in particular all codecs. This also makes checkasm work when using shared Windows builds: On Windows, it needs to be known to the compiler whether a data symbol is external to the library/executable or not; hence the need for av_export_avutil. checkasm needs access to the internals of the libraries it tests and is therefore linked statically to all the libraries. This means that the users of avpriv_cga_font and avpriv_vga16_font in libavcodec (namely ansi.o, bintext.o, tmv.o) end up in the same executable as the symbols, although they have been compiled as if these symbols were external, leading to linker errors. With this commit said files are discarded by the linker, bypassing this problem. Signed-off-by: Andreas Rheinhardt --- libavcodec/v210_template.c | 10 ----- libavcodec/v210enc.c | 48 +------------------- libavcodec/v210enc.h | 2 - libavcodec/v210enc_init.h | 90 ++++++++++++++++++++++++++++++++++++++ tests/checkasm/v210enc.c | 2 +- 5 files changed, 92 insertions(+), 60 deletions(-) create mode 100644 libavcodec/v210enc_init.h diff --git a/libavcodec/v210_template.c b/libavcodec/v210_template.c index 9e1d9f9cd3..9f40bfe97c 100644 --- a/libavcodec/v210_template.c +++ b/libavcodec/v210_template.c @@ -22,16 +22,6 @@ #include "bytestream.h" #include "internal.h" -#define CLIP(v, depth) av_clip(v, 1<<(depth-8), ((1<pack_line_8 = v210_planar_pack_8_c; - s->pack_line_10 = v210_planar_pack_10_c; - s->sample_factor_8 = 2; - s->sample_factor_10 = 1; - - if (ARCH_X86) - ff_v210enc_init_x86(s); -} - static av_cold int encode_init(AVCodecContext *avctx) { V210EncContext *s = avctx->priv_data; diff --git a/libavcodec/v210enc.h b/libavcodec/v210enc.h index 51305c1a20..b74fd33db5 100644 --- a/libavcodec/v210enc.h +++ b/libavcodec/v210enc.h @@ -32,8 +32,6 @@ typedef struct V210EncContext { int sample_factor_10; } V210EncContext; -void ff_v210enc_init(V210EncContext *s); - void ff_v210enc_init_x86(V210EncContext *s); #endif /* AVCODEC_V210ENC_H */ diff --git a/libavcodec/v210enc_init.h b/libavcodec/v210enc_init.h new file mode 100644 index 0000000000..6d81cac319 --- /dev/null +++ b/libavcodec/v210enc_init.h @@ -0,0 +1,90 @@ +/* + * V210 encoder DSP init + * + * Copyright (C) 2009 Michael Niedermayer + * Copyright (c) 2009 Baptiste Coudurier + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_V210ENC_INIT_H +#define AVCODEC_V210ENC_INIT_H + +#include +#include + +#include "config.h" +#include "libavutil/attributes.h" +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" +#include "v210enc.h" + +#define CLIP(v, depth) av_clip(v, 1<<(depth-8), ((1<pack_line_8 = v210_planar_pack_8_c; + s->pack_line_10 = v210_planar_pack_10_c; + s->sample_factor_8 = 2; + s->sample_factor_10 = 1; + + if (ARCH_X86) + ff_v210enc_init_x86(s); +} + +#endif /* AVCODEC_V210ENC_INIT_H */ diff --git a/tests/checkasm/v210enc.c b/tests/checkasm/v210enc.c index c3d5cc5145..9942e08137 100644 --- a/tests/checkasm/v210enc.c +++ b/tests/checkasm/v210enc.c @@ -20,7 +20,7 @@ #include #include "checkasm.h" -#include "libavcodec/v210enc.h" +#include "libavcodec/v210enc_init.h" #include "libavutil/common.h" #include "libavutil/internal.h" #include "libavutil/intreadwrite.h"