From patchwork Sat Sep 25 19:20:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 30574 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6506:0:0:0:0:0 with SMTP id z6csp2697533iob; Sat, 25 Sep 2021 12:20:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxwuBPAlC2IIf8yjan7mSSjpjkf0VzdHC1CqMdGUH/4F0MtRPg94xzYBDLqxWMG6ldZRbGu X-Received: by 2002:a05:6402:1b92:: with SMTP id cc18mr6836110edb.31.1632597655384; Sat, 25 Sep 2021 12:20:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632597655; cv=none; d=google.com; s=arc-20160816; b=RnpV4oggsnNbBfW02F+QcGcHKIiFOA+HsakZmJVlqiY59DQwPJTs9JH+ol8F+nF81A e/HaTxmKPBT1IQnliZ/c+TgoxonyLlccnSSRUCeuo/oKQ2AzEosDBmtiPAP5SlXlox3O vboqmxNt58Yiyr/PpIjSxGQDcZ4+fEkE6Q/OdkXF98mjLK+0B4LnuhR0OIo9rK2dM9cj PTze4VwfZQtAmKStiesAJ6nox8j39o1TZhOQX17ZJLpioB7uV2WCnfE9Qiyfn5wdk5DU Ld495r+K8SceVN0hDUjKOmNtLORNXeNGRSiTF+xU0WDc+gIgLTBUNjSm4AxMMXyzD/B/ B1lQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=YEQGOHCzv2t2Je3mbA66aMmhhRZDTQEQMAXduyxBSDE=; b=FnwE7ZqkzJ4fWCoeXqeh/5LoaHfXr5QJVFWendF0/0ZHuYe9QbfH1EDOKGDkNXF3vI huLpq4bQ1Ev+9SiNDjyg/W3L+UZ/idqkIkOYLd7FdRXNyXog0rkPBD5xbyr9rPgkeHDX 2RRIkRiSAOP4SZbKhdXUXDjY12bgBUAejpSONyMGpyuR5t6urx64YEW15hY3nb7NBgms P07FgrI8zkh9jMzs0wewpaas/zK2+vTLsvVbMp9E6jNLcTNrbJloT58xoKdYQzLep0MI Pvj3I+1ClfG43AeF8lJxMezkA6iKd1sAgxSScQdUdd6L/4Ru2dOjdgyaNFNK+g3+N0X+ 0orA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=O0QsVOlq; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z20si12895600edc.270.2021.09.25.12.20.55; Sat, 25 Sep 2021 12:20:55 -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=@gmail.com header.s=20210112 header.b=O0QsVOlq; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A471968A8F0; Sat, 25 Sep 2021 22:20:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3920668A858 for ; Sat, 25 Sep 2021 22:20:33 +0300 (EEST) Received: by mail-wr1-f52.google.com with SMTP id d6so37789939wrc.11 for ; Sat, 25 Sep 2021 12:20:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=dussJd4q6blQlsT+QAC7/k/XZon7ne4B3v6PSjC4eIs=; b=O0QsVOlqm8uC22AfoUJl3JwDshh7Roi1eAtYPQijMoSwtV4Vr2+VxNRwplzxNfGdo3 voUNS7PIYG4MXaOSOhpvrHLMDv6DP2wvei8v1b45efKZ/o/ZfE85nmxGN+aAGwg43nXz TIAx5PrZUj+erXwnyT1b403FkcK+C/c8zJgx7pLRlAws/bItMmWITJWjDw/rAuDznEC4 gz3Iz4Sao5iLFEtAS+wOkfsDmsoDvSXEbXY9T9kHw4pLMXl8kX30BvwPNxgQz8tEwRsV wU9vURhaOs+aLiUKt1JDfsMps3daTP//7YiCe+r9LfHgaM2ILpDygECWP8QGg971rzG9 37oQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dussJd4q6blQlsT+QAC7/k/XZon7ne4B3v6PSjC4eIs=; b=TLG+VX/S6/U45+XOuh/quQyfsoJj18FfG2gCA072ad0IkzdmSGa14vSuXs5LBsqDxh ex7W0NwdqOO1UdJ8sCkl0V5Yj3fYn39LRYH7iTWNSjwZubzsnJPgfO92Y7Z5TwYqvJ5A 82aH375MNX6JS6KzdY0I/Xd8UBZkCFI+Ve1oPP1/QASLNBREV6DuxuW9TPjEScd19vNv +M5FAMIkrikbr0f+5UA1y4PON6n+iHbE/OaXdP978UBFGPS5a5+uIsbtB0daThlJWYkU NfjywYRAMorYDnP8ur1aUE/3F/G+JhcPesR8DVNTsDurXcaQZbosmQZeH5Tz01pMeRIv o54g== X-Gm-Message-State: AOAM530lhA5GKeTmpOAADQtSvm4F+xHMLvEnM/hVJ0IAN22XLtzo6OGp MZVECyzhyaM3cFsG997CPNT3a6cdA5o= X-Received: by 2002:a05:600c:35c6:: with SMTP id r6mr8243775wmq.24.1632597632641; Sat, 25 Sep 2021 12:20:32 -0700 (PDT) Received: from localhost.localdomain ([95.168.121.82]) by smtp.gmail.com with ESMTPSA id y7sm9430649wrs.95.2021.09.25.12.20.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Sep 2021 12:20:32 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Sep 2021 21:20:21 +0200 Message-Id: <20210925192021.58523-2-onemda@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210925192021.58523-1-onemda@gmail.com> References: <20210925192021.58523-1-onemda@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avfilter/vf_selectivecolor: reduce number of operations with r/g/b/a pointers 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: jlbFm54p2Snc Signed-off-by: Paul B Mahol --- libavfilter/vf_selectivecolor.c | 41 +++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/libavfilter/vf_selectivecolor.c b/libavfilter/vf_selectivecolor.c index 9d789a6d8b..398d4bec0d 100644 --- a/libavfilter/vf_selectivecolor.c +++ b/libavfilter/vf_selectivecolor.c @@ -322,24 +322,31 @@ static inline int selective_color_##nbits(AVFilterContext *ctx, ThreadData *td, const int width = in->width; \ const int slice_start = (height * jobnr ) / nb_jobs; \ const int slice_end = (height * (jobnr+1)) / nb_jobs; \ - const int dst_linesize = out->linesize[0]; \ - const int src_linesize = in->linesize[0]; \ + const int dst_linesize = out->linesize[0] / ((nbits + 7) / 8); \ + const int src_linesize = in->linesize[0] / ((nbits + 7) / 8); \ const uint8_t roffset = s->rgba_map[R]; \ const uint8_t goffset = s->rgba_map[G]; \ const uint8_t boffset = s->rgba_map[B]; \ const uint8_t aoffset = s->rgba_map[A]; \ + uint##nbits##_t *dst = (uint##nbits##_t *)out->data[0] + slice_start * dst_linesize; \ + const uint##nbits##_t *src = (const uint##nbits##_t *)in->data[0] + slice_start * src_linesize; \ + const uint##nbits##_t *src_r = (const uint##nbits##_t *)src + roffset; \ + const uint##nbits##_t *src_g = (const uint##nbits##_t *)src + goffset; \ + const uint##nbits##_t *src_b = (const uint##nbits##_t *)src + boffset; \ + const uint##nbits##_t *src_a = (const uint##nbits##_t *)src + aoffset; \ + uint##nbits##_t *dst_r = (uint##nbits##_t *)dst + roffset; \ + uint##nbits##_t *dst_g = (uint##nbits##_t *)dst + goffset; \ + uint##nbits##_t *dst_b = (uint##nbits##_t *)dst + boffset; \ + uint##nbits##_t *dst_a = (uint##nbits##_t *)dst + aoffset; \ const int mid = 1<<(nbits-1); \ const int max = (1<data[0] + y * dst_linesize); \ - const uint##nbits##_t *src = (const uint##nbits##_t *)( in->data[0] + y * src_linesize); \ - \ for (x = 0; x < width * s->step; x += s->step) { \ - const int r = src[x + roffset]; \ - const int g = src[x + goffset]; \ - const int b = src[x + boffset]; \ + const int r = src_r[x]; \ + const int g = src_g[x]; \ + const int b = src_b[x]; \ const int min_color = FFMIN3(r, g, b); \ const int max_color = FFMAX3(r, g, b); \ const int is_white = (r > mid && g > mid && b > mid); \ @@ -382,13 +389,23 @@ static inline int selective_color_##nbits(AVFilterContext *ctx, ThreadData *td, } \ \ if (!direct || adjust_r || adjust_g || adjust_b) { \ - dst[x + roffset] = av_clip_uint##nbits(r + adjust_r); \ - dst[x + goffset] = av_clip_uint##nbits(g + adjust_g); \ - dst[x + boffset] = av_clip_uint##nbits(b + adjust_b); \ + dst_r[x] = av_clip_uint##nbits(r + adjust_r); \ + dst_g[x] = av_clip_uint##nbits(g + adjust_g); \ + dst_b[x] = av_clip_uint##nbits(b + adjust_b); \ if (!direct && s->step == 4) \ - dst[x + aoffset] = src[x + aoffset]; \ + dst_a[x] = src_a[x]; \ } \ } \ + \ + src_r += src_linesize; \ + src_g += src_linesize; \ + src_b += src_linesize; \ + src_a += src_linesize; \ + \ + dst_r += dst_linesize; \ + dst_g += dst_linesize; \ + dst_b += dst_linesize; \ + dst_a += dst_linesize; \ } \ return 0; \ }