From patchwork Tue Nov 21 12:36:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 6246 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp5201375jah; Tue, 21 Nov 2017 04:37:14 -0800 (PST) X-Google-Smtp-Source: AGs4zMY3JJQqdiiq35p/14AxI93vRo3DWgyBQf0QWZSItnQapZh9T2X7igOPK9gjdOBbp1jzUD19 X-Received: by 10.28.110.24 with SMTP id j24mr1305951wmc.100.1511267834163; Tue, 21 Nov 2017 04:37:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511267834; cv=none; d=google.com; s=arc-20160816; b=Fkf7JC20bW74bheNwhlahnOuP3EtnSIga3rkfEIKRUnolMvkimuKrnizuNRXtAu0rz 2TCB9qvRmwYzJB2OyNMt8jgqQasE9MmcrvPFVS4VqV9rysd665DDr0rk0dbnQ4tY+92W wayTCSk0nZUty/KyQKrzFRKNrOrY828rfQTP6L800ZzdPZdf7HG/j401m6SOlJUXqXgg htJVdqxscmmsaFqWeDDfH3cCLF6o0lzMcKz0yb/0PJ9rXiM3/BcDeRmzxwWvNo0YgOBT 4KhXHzKXMXJQ/Y3UdBUdlE0yiTwbJjpQq4sdwH9LeEtNz7Ix40AaJ3MsNfWlel9SmxgH fkdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=dwxBYfqRL+BqXBYCGjodW07RMMDJ4J7q3jgZUwdzaqg=; b=bSKtY02v7HNOYulQxexzUud9H/IezXn7Gbn7z/jYJRT7FWMCmjU5XgpKf8JK+R5jSh W9NhMH0Yz+wAYtbtdn7KMex1tjblZBhBdnPzctJ0gTTXpHsu0o6jaQvPAk4pMPVe2lOx hQa8JkH+zUpbkkHQv2F/pL8+Bi8+M0zPXUkEuU7Wtl9cugYZJVWH53FOk2ID2TOmoTcC aX3dCUI8wPVoP6d3pvTTgFj8LQJ01nhTR3LOX6sIYAVs21OyDM4ePYKU+j6UKD8mDVCS m2dIOuwUHUJ1zJr7tHZtyw9PiwxFd7AetRXxB4GTHhh4Rjhjno+hQt9hR4LHIImJ8GcP iZSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=oySCUjBE; 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=NONE 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 d2si3575128wrf.65.2017.11.21.04.37.13; Tue, 21 Nov 2017 04:37:14 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=oySCUjBE; 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=NONE 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 1243C689E0E; Tue, 21 Nov 2017 14:36:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1DD1B680B8F for ; Tue, 21 Nov 2017 14:36:47 +0200 (EET) Received: by mail-wm0-f67.google.com with SMTP id v186so3037561wma.2 for ; Tue, 21 Nov 2017 04:37:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=Vsrp3U3pbEB7bKYuSqSleJob0nnwqgwN/yv+hBuQsNU=; b=oySCUjBEQF0LGJ7L1YOV3xuw59asj+NxUNfPIkrM4nBxvxwXkmd/49Jf7QLHLeJDQI u6BX/wDpVkPFI0AmlxE7DqCRiz/4FkFnyKL58KaVgxgHwLXbJZCYmdYZzJYJ6FXnF3Fr 5P/3HQbCYCKRvvn+BPudy7tFZjTqe4JgmIsglX5PGd/RHasRFUnlMp7ct407jzDTsZQj iP5kA6FSsKUDc6QnSVtaKKL7SFLT6sOP2+kUSx+k6IfBJSqFVgESmUB6KvWWB1qgFO7r rmNtOrXKhUyhx11CYHVtpGYY3A+9CvMlv6DqPWHccSPZNfYVHuSCEK+ZWbwwvrGg2zaZ 7ypQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=Vsrp3U3pbEB7bKYuSqSleJob0nnwqgwN/yv+hBuQsNU=; b=JodwoW53WKvyjbELoQ4EvWjdU9TQDYJvFvFCg/1d6AsWCq6kLaPoZ2E6YU30N/u5KV 7uWJ+e8hkqVNWSPJHuOU8PstOF5o2twj4y5HwkePLgVHYQHciDDGamOtjkeLcoldyQxg Q2OeWA4N/lhDe7hxxsIkvEvSEps3QWPZ5MrAvQhIGKHASRZohVXcuiHFxkwuKh+ANNjN O3CZ+PAjOylqFgk/oVAbYwSuCvOsf7D7XXRnp8igPQ1mQTkOkdVlNbOR8Lxq0TPxbt96 jElRcEg2ZOithhjSsl/CdyPnZHWv0dvJdwF+C4PcjsLonrm8LoKKigzaMUDfSIt/DWtH JxHA== X-Gm-Message-State: AJaThX5ChDjfVfP0LPXJnLlqK0L1UMjSxq/VHJ73+Yiab8txd46e2JSE CV3f0EVGUkFMYIi9nO2NzAQ7nQ== X-Received: by 10.80.171.89 with SMTP id t25mr23870800edc.224.1511267823997; Tue, 21 Nov 2017 04:37:03 -0800 (PST) Received: from localhost.localdomain ([94.250.174.60]) by smtp.gmail.com with ESMTPSA id x17sm6890076edx.9.2017.11.21.04.37.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Nov 2017 04:37:03 -0800 (PST) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Nov 2017 13:36:15 +0100 Message-Id: <20171121123615.19193-1-onemda@gmail.com> X-Mailer: git-send-email 2.11.0 Subject: [FFmpeg-devel] [PATCH] avfilter/avf_showwaves: add draw grid support 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Paul B Mahol --- doc/filters.texi | 6 ++++++ libavfilter/avf_showwaves.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/doc/filters.texi b/doc/filters.texi index 62f633c6f8..9c98f1684b 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -19178,6 +19178,12 @@ Cubic root. @end table Default is linear. + +@item grid +Draw grid, default is disabled. + +@item grid_color +Set grid color. @end table @subsection Examples diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c index 0866967984..74d4886cd4 100644 --- a/libavfilter/avf_showwaves.c +++ b/libavfilter/avf_showwaves.c @@ -69,6 +69,8 @@ typedef struct ShowWavesContext { int mode; ///< ShowWavesMode int scale; ///< ShowWavesScale int split_channels; + int grid; + uint8_t grid_rgba[4]; uint8_t *fg; int (*get_h)(int16_t sample, int height); @@ -104,6 +106,8 @@ static const AVOption showwaves_options[] = { { "log", "logarithmic", 0, AV_OPT_TYPE_CONST, {.i64=SCALE_LOG}, .flags=FLAGS, .unit="scale"}, { "sqrt", "square root", 0, AV_OPT_TYPE_CONST, {.i64=SCALE_SQRT}, .flags=FLAGS, .unit="scale"}, { "cbrt", "cubic root", 0, AV_OPT_TYPE_CONST, {.i64=SCALE_CBRT}, .flags=FLAGS, .unit="scale"}, + { "grid", "draw grid", OFFSET(grid), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS }, + { "grid_color", "set grid color", OFFSET(grid_rgba), AV_OPT_TYPE_COLOR, {.str="0x333300"}, 0, 0, FLAGS }, { NULL } }; @@ -562,6 +566,30 @@ static int alloc_out_frame(ShowWavesContext *showwaves, const int16_t *p, outlink->time_base); for (j = 0; j < outlink->h; j++) memset(out->data[0] + j*out->linesize[0], 0, outlink->w * showwaves->pixstep); + + if (showwaves->grid) { + const int pixstep = showwaves->pixstep; + int ystep = showwaves->split_channels ? outlink->h / inlink->channels / 4 : outlink->h / 4; + int channels = showwaves->split_channels ? inlink->channels : 1; + int x, s, c, yskip = 0; + + for (c = 0; c < channels; c++) { + for (j = 0; j < 4; j++) { + for (x = 0; x < outlink->w; x+=3) { + for (s = 0; s < pixstep; s++) { + out->data[0][(yskip + j * ystep) * out->linesize[0] + x * pixstep + s] = showwaves->grid_rgba[s]; + } + } + } + for (x = 0; x < outlink->w; x+=3) { + for (s = 0; s < pixstep; s++) { + out->data[0][(yskip + j * ystep - 1) * out->linesize[0] + x * pixstep + s] = showwaves->grid_rgba[s]; + } + } + + yskip += j * ystep; + } + } } return 0; }