From patchwork Sat Sep 21 14:49:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 15207 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id F25F3448C32 for ; Sat, 21 Sep 2019 17:49:48 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DAC9268A871; Sat, 21 Sep 2019 17:49:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 07B8768A84E for ; Sat, 21 Sep 2019 17:49:42 +0300 (EEST) Received: by mail-pg1-f194.google.com with SMTP id n9so5501850pgc.1 for ; Sat, 21 Sep 2019 07:49:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=attWoO39ziwvD4bsKAN5XHwM6p7Qa+m65QEQ9dGHrw4=; b=Skuqya4C9EtTwXTj520UUKPq99EmJIYu9SfMdPsD9CzakzP9KyRJrGsckZEKd1z/QO OZN0xLU24fNxqY1X/JTgTcnqGb0xNX2xIkIPKQUfEWxOHOqsjSE3Lzup22PuRewoJsd8 W6PW2PBobNHpO2LtigmraKdZoJ74unYB7ggtGsgNf6C3StpLXibvAolwDzk4J0oWTO8t ZPvhHvkpBZo2fGS3u+BhBtZb0BqHKykEb2nX9eHFivATKFbiCxgGy7zQR5e3yLFwr6tw yKuSMv8UXZwOndO62YmblmSjdyej1BaLsrpRVbA/Z1bviDfypyYGTgYTjgzEbzRwb3dq H5pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=attWoO39ziwvD4bsKAN5XHwM6p7Qa+m65QEQ9dGHrw4=; b=DJr+qWrETn5sH/GfcA2qpRtTCYuPbDc1IbaSM3d80DEYpSZNu5cc1h/vyTduoRHTlO mlsyhs1dZ1/1zsZhVrXQRMzwqijf4L2Z9slELKeZqSStfWJY1EnVUq3XF2wKLPY1hox6 lqj9NLlq+RAoYL8Lbe2Q3q+Tc/MyKjgDrepU5sHJ6pDbgt7Fj7q9hl9nP+Z1uchJSCjH gqdIUpRaUC7ARwwWy4BMZpyyYR72bgQa11CIf3gVlgBqYwQ3W07NzF71YOj+nTcSN2EC g2NoeFElDx1nf8zlcUYvTpClqP35aomCqzsjyt1rF7nMYjolYAiHsDFCDgPcg0r85N0k 0iYg== X-Gm-Message-State: APjAAAUE8oPNdaBQfkSl85STW4xAPOwRGm0GAA9EkpPi5x9haYhGRm0J m1/DecpG7nGEL/kR/+IsqFLQQ4qZ X-Google-Smtp-Source: APXvYqzEdULLmCBO2qN9JRmN7h7vxUTo0zfIbrG1p+IDpqPO9JL5LAsKwXQlxUtYq+/9/wEevbrHNQ== X-Received: by 2002:a17:90b:87:: with SMTP id bb7mr11011770pjb.28.1569077380332; Sat, 21 Sep 2019 07:49:40 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id u31sm18682829pgn.93.2019.09.21.07.49.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 21 Sep 2019 07:49:39 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Sat, 21 Sep 2019 22:49:30 +0800 Message-Id: <20190921144932.32241-2-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20190921144932.32241-1-lance.lmwang@gmail.com> References: <20190921144932.32241-1-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v1 2/4] avfilter/vf_framerate: refine the filter_slice code for better readiablity X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- libavfilter/framerate.h | 1 + libavfilter/vf_framerate.c | 35 +++++++++++++---------------------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/libavfilter/framerate.h b/libavfilter/framerate.h index 8048dfa..3d8200b 100644 --- a/libavfilter/framerate.h +++ b/libavfilter/framerate.h @@ -43,6 +43,7 @@ typedef struct FrameRateContext { int interp_end; ///< end of range to apply linear interpolation int line_size[4]; ///< bytes of pixel data per line for each plane + int height[4]; ///< bytes of pixel data per height for each plane int vsub; AVRational srce_time_base; ///< timebase of source diff --git a/libavfilter/vf_framerate.c b/libavfilter/vf_framerate.c index 99faf75..1254da8 100644 --- a/libavfilter/vf_framerate.c +++ b/libavfilter/vf_framerate.c @@ -98,29 +98,20 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int job, int nb_jobs) { FrameRateContext *s = ctx->priv; ThreadData *td = arg; + AVFrame *work = s->work, *src1 = td->copy_src1, *src2 = td->copy_src2; uint16_t src1_factor = td->src1_factor; uint16_t src2_factor = td->src2_factor; int plane; - for (plane = 0; plane < 4 && td->copy_src1->data[plane] && td->copy_src2->data[plane]; plane++) { - int cpy_line_width = s->line_size[plane]; - uint8_t *cpy_src1_data = td->copy_src1->data[plane]; - int cpy_src1_line_size = td->copy_src1->linesize[plane]; - uint8_t *cpy_src2_data = td->copy_src2->data[plane]; - int cpy_src2_line_size = td->copy_src2->linesize[plane]; - int cpy_src_h = (plane > 0 && plane < 3) ? (td->copy_src1->height >> s->vsub) : (td->copy_src1->height); - uint8_t *cpy_dst_data = s->work->data[plane]; - int cpy_dst_line_size = s->work->linesize[plane]; - const int start = (cpy_src_h * job ) / nb_jobs; - const int end = (cpy_src_h * (job+1)) / nb_jobs; - cpy_src1_data += start * cpy_src1_line_size; - cpy_src2_data += start * cpy_src2_line_size; - cpy_dst_data += start * cpy_dst_line_size; - - s->blend(cpy_src1_data, cpy_src1_line_size, - cpy_src2_data, cpy_src2_line_size, - cpy_dst_data, cpy_dst_line_size, - cpy_line_width, end - start, + for (plane = 0; plane < 4 && src1->data[plane] && src2->data[plane]; plane++) { + const int start = (s->height[plane] * job ) / nb_jobs; + const int end = (s->height[plane] * (job+1)) / nb_jobs; + uint8_t *src1_data = src1->data[plane] + start * src1->linesize[plane]; + uint8_t *src2_data = src2->data[plane] + start * src2->linesize[plane]; + uint8_t *dst_data = work->data[plane] + start * work->linesize[plane]; + + s->blend(src1_data, src1->linesize[plane], src2_data, src2->linesize[plane], + dst_data, work->linesize[plane], s->line_size[plane], end - start, src1_factor, src2_factor, s->blend_factor_max >> 1); } @@ -296,13 +287,13 @@ static int config_input(AVFilterLink *inlink) const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(inlink->format); int plane; + s->vsub = pix_desc->log2_chroma_h; for (plane = 0; plane < 4; plane++) { - s->line_size[plane] = av_image_get_linesize(inlink->format, inlink->w, - plane); + s->line_size[plane] = av_image_get_linesize(inlink->format, inlink->w, plane); + s->height[plane] = inlink->h >> ((plane == 1 || plane == 2) ? s->vsub : 0); } s->bitdepth = pix_desc->comp[0].depth; - s->vsub = pix_desc->log2_chroma_h; if ((s->flags & FRAMERATE_FLAG_SCD)) { s->sad = ff_scene_sad_get_fn(s->bitdepth == 8 ? 8 : 16);