From patchwork Fri Jan 12 16:09:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Cox X-Patchwork-Id: 45587 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bf2f:b0:199:de12:6fa6 with SMTP id gc47csp2445986pzb; Fri, 12 Jan 2024 08:09:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IHVW7oj7Gvaag4N6rtW/JByuqJMEWr3cEja8Gpwle9nR2G6cZK8QBP/+DfV0SwNtISJ24f1 X-Received: by 2002:a2e:a1ca:0:b0:2cd:23ed:19e1 with SMTP id c10-20020a2ea1ca000000b002cd23ed19e1mr817849ljm.14.1705075784440; Fri, 12 Jan 2024 08:09:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1705075784; cv=none; d=google.com; s=arc-20160816; b=1BlXiLjtK2+weXnQI7U9UtKt98c3on41EeCXz9ekvXvNfg3LA8LvCqX8FCIOMeC4f7 KSsM2jq0th5C2Ayv2v0Gorce/2MsaL8WO704vNT6B3UvWR4tHvvux96uz/FMUDoEgq+S 7cz9G0VdvBQ+P4nZrTy9h4C/yKLTXJZTl3qtUMTPtlzAD2S9hCHLbF74brpRCKPo4ShO 7OCztTW/RJw8/xwiI+0eHLmXPFxU9nd7/Uz4jAMmNw6J8O/Yc3sACbqfCELG3L264QSK fNwoCRSa9L69/28ldZfeztOJuSyBNwgSXsYSuMMQYktVexaho2BZg9IQ9p8Mr7uW+j0e 3DrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=87zpsU2hJ45HvjNCZllFqzmbiyErevWuCTzcaFNiyNA=; fh=BpA0HGz799mBjSHXc7HHPcGe0XPNrhuWmFEUoae4/Eo=; b=GQ+eiW3pMEVfVRutYilqw/0qwqPSJNUSCic7JpB3sCaAI/2xUgX72rix8NsFFXrutN /XlI2//DR8v1RH6hwCfoFHq8fZW+X8k4MoxOs8RaJJEmEmCS8WH0Alc1UPNHAfDTyVdv Tf/9G5PxQMa/TjlSHYLLsTzMpaPlj17fBazpwyKoMMAlr+803vBUC+BTrMDULtg/NLH/ W7Q8GphqS8ifzZIoPYkGiCA9QjDcd6HvdOzmAxNq/wuQFeLTehBxMLultIcDlI6wUD3T t71WxZ+4kR6KHJt7/LZ8K3r8o2g+0UoQ+xznOGNNH0rPNsXj70HQb4aMFICYFjHvR0PP GoLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@kynesim-co-uk.20230601.gappssmtp.com header.s=20230601 header.b=2Lo2btqY; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c10-20020a50d64a000000b00558b965686dsi969764edj.204.2024.01.12.08.09.43; Fri, 12 Jan 2024 08:09:44 -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=@kynesim-co-uk.20230601.gappssmtp.com header.s=20230601 header.b=2Lo2btqY; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5AE4368CC95; Fri, 12 Jan 2024 18:09:40 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 11DD168C552 for ; Fri, 12 Jan 2024 18:09:33 +0200 (EET) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-40e55c885d7so35207165e9.0 for ; Fri, 12 Jan 2024 08:09:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kynesim-co-uk.20230601.gappssmtp.com; s=20230601; t=1705075773; x=1705680573; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=KBl7cPYvJB68V7k9F43sFrvgVLISNWvIOUNDepA0D9M=; b=2Lo2btqY/22aNN4Nx/t6SRQR417uG096oITPxu/A9uhQvRsqIZrH6cO/EWwxb0QuVX gDE/kxHk/8PsN+eZvLxZqDqdocgwyLYIkUH//U5W+58eca4qSCrMykveDrZE3dwFi/IB eX2hznz4iv7g3uwNWwgaSXpiHP7IAEURq3lhUb/8g0zeiv0NbPEZJDQH4LphsHlrMdDA CEtzqMiLmLnrvzFZndIhwaHYOuHnGUlMJyjZeJoZuE56MPEhcdA4O+xEzsvOlxz+vwG+ 5cEGFh8XpbjhaoOLWQhVlp+bp6S+WlCdH2bCOMZUY2PRR92JKdUsZ2s3UnxZVj0A+jVn HDgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705075773; x=1705680573; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KBl7cPYvJB68V7k9F43sFrvgVLISNWvIOUNDepA0D9M=; b=DzxA4zoPju+PGFhS57nBQw5jDhvaSf3SCXLvrb3JLYZvOslyUX+Y4zehTzlgRcghgu mjimS4BUs3JF0iys/DQw1jP96OBKy07661Mgo63sC17o0Xwmr0aOyhpDl/L6MBvvYI0n EIxurG8pCY5paCPxOqm3GJirytnPHD9uG0QbLgcnBL0toy72TjpJQxKuJirLudISsG/P h4Oe0alMe8sT27z0MMFcVsYheP0fBAcUwC1BKmgOSuZ6k2VSwFHSQjwztQPHXjMD7G/a t5nKIoVi8KoNqzc0weibhgKH7pHwC9kIZ7iiefla0pmj6lJ+WR1CVKGX5zNGIrkcDIPP BvCA== X-Gm-Message-State: AOJu0YwipljXQoGtQolbR0u4+qweDta4HJOfpk35mrt/qreRbJQ3HxL+ dJPxVuLWcxyKz/U1gt0FLTFy2IeMrSl6qRLlEwRoERHu7K8= X-Received: by 2002:a05:600c:d8:b0:40e:628f:96fb with SMTP id u24-20020a05600c00d800b0040e628f96fbmr880435wmm.168.1705075773171; Fri, 12 Jan 2024 08:09:33 -0800 (PST) Received: from sucnaath.outer.uphall.net (cpc1-cmbg20-2-0-cust759.5-4.cable.virginm.net. [86.21.218.248]) by smtp.gmail.com with ESMTPSA id c28-20020adfa31c000000b0033775980d26sm4254633wrb.2.2024.01.12.08.09.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jan 2024 08:09:32 -0800 (PST) From: John Cox To: ffmpeg-devel@ffmpeg.org Date: Fri, 12 Jan 2024 16:09:20 +0000 Message-Id: <20240112160920.522129-1-jc@kynesim.co.uk> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avfilter/vf_bwdif: Add capability to deinterlace NV12 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: John Cox Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: d4y9IiphcDd0 As bwdif takes no account of horizontally adjacent pixels the same code can be used on planes that have multiple components as is used on single component planes. Update the filtering code to cope with multi-component planes and add NV12 to the list of supported formats. Signed-off-by: John Cox --- libavfilter/vf_bwdif.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libavfilter/vf_bwdif.c b/libavfilter/vf_bwdif.c index 353cd0b61a..e07783ff70 100644 --- a/libavfilter/vf_bwdif.c +++ b/libavfilter/vf_bwdif.c @@ -115,19 +115,28 @@ static void filter(AVFilterContext *ctx, AVFrame *dstpic, YADIFContext *yadif = &bwdif->yadif; ThreadData td = { .frame = dstpic, .parity = parity, .tff = tff }; int i; + int last_plane = -1; for (i = 0; i < yadif->csp->nb_components; i++) { int w = dstpic->width; int h = dstpic->height; + const AVComponentDescriptor * const comp = yadif->csp->comp + i; + + // If the last plane was the same as this plane assume we've dealt + // with all the pels already + if (last_plane == comp->plane) + continue; + last_plane = comp->plane; if (i == 1 || i == 2) { w = AV_CEIL_RSHIFT(w, yadif->csp->log2_chroma_w); h = AV_CEIL_RSHIFT(h, yadif->csp->log2_chroma_h); } - td.w = w; - td.h = h; - td.plane = i; + // comp step is in bytes but td.w is in pels + td.w = w * comp->step / ((comp->depth + 7) / 8); + td.h = h; + td.plane = comp->plane; ff_filter_execute(ctx, filter_slice, &td, NULL, FFMIN((h+3)/4, ff_filter_get_nb_threads(ctx))); @@ -162,6 +171,7 @@ static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA420P16, AV_PIX_FMT_YUVA422P16, AV_PIX_FMT_YUVA444P16, + AV_PIX_FMT_NV12, AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10, AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRAP16,