mirror of
https://github.com/libretro/Lakka-LibreELEC.git
synced 2025-01-19 01:22:09 +00:00
23942f808a
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
63 lines
2.4 KiB
Diff
63 lines
2.4 KiB
Diff
From 162a9ac64b7babb4e831df86f6ed0efdfe84204e Mon Sep 17 00:00:00 2001
|
|
From: John Cox <jc@kynesim.co.uk>
|
|
Date: Fri, 12 Jan 2024 15:17:43 +0000
|
|
Subject: [PATCH 01/14] vf_bwdif: Add capability to deinterlace NV12
|
|
|
|
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 <jc@kynesim.co.uk>
|
|
---
|
|
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 9847d38b6a..4d69b3039d 100644
|
|
--- a/libavfilter/vf_bwdif.c
|
|
+++ b/libavfilter/vf_bwdif.c
|
|
@@ -302,19 +302,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)));
|
|
@@ -350,6 +359,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,
|
|
--
|
|
2.34.1
|
|
|