From 71ec3e4583def61fbb32a4815376773ef7c80dee Mon Sep 17 00:00:00 2001 From: Limin Wang Date: Thu, 27 Aug 2020 07:30:30 +0800 Subject: [PATCH] Revert "avfilter/yadif: simplify the code for better readability" This reverts commit 2a9b934675b9e2d3850b46f8a618c19b03f02551. --- libavfilter/vf_bwdif.c | 13 +++++++------ libavfilter/vf_yadif.c | 16 ++++++---------- libavfilter/x86/vf_bwdif_init.c | 2 +- libavfilter/x86/vf_yadif_init.c | 3 ++- libavfilter/yadif.h | 5 +---- libavfilter/yadif_common.c | 2 +- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/libavfilter/vf_bwdif.c b/libavfilter/vf_bwdif.c index 583a96570e..b6aed7a450 100644 --- a/libavfilter/vf_bwdif.c +++ b/libavfilter/vf_bwdif.c @@ -219,8 +219,8 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) YADIFContext *yadif = &s->yadif; ThreadData *td = arg; int linesize = yadif->cur->linesize[td->plane]; - int clip_max = (1 << (yadif->depth)) - 1; - int df = (yadif->depth + 7) / 8; + int clip_max = (1 << (yadif->csp->comp[td->plane].depth)) - 1; + int df = (yadif->csp->comp[td->plane].depth + 7) / 8; int refs = linesize / df; int slice_start = (td->h * jobnr ) / nb_jobs; int slice_end = (td->h * (jobnr+1)) / nb_jobs; @@ -267,13 +267,13 @@ static void filter(AVFilterContext *ctx, AVFrame *dstpic, ThreadData td = { .frame = dstpic, .parity = parity, .tff = tff }; int i; - for (i = 0; i < yadif->nb_components; i++) { + for (i = 0; i < yadif->csp->nb_components; i++) { int w = dstpic->width; int h = dstpic->height; if (i == 1 || i == 2) { - w = AV_CEIL_RSHIFT(w, yadif->hsub); - h = AV_CEIL_RSHIFT(h, yadif->vsub); + w = AV_CEIL_RSHIFT(w, yadif->csp->log2_chroma_w); + h = AV_CEIL_RSHIFT(h, yadif->csp->log2_chroma_h); } td.w = w; @@ -348,8 +348,9 @@ static int config_props(AVFilterLink *link) return AVERROR(EINVAL); } + yadif->csp = av_pix_fmt_desc_get(link->format); yadif->filter = filter; - if (yadif->depth > 8) { + if (yadif->csp->comp[0].depth > 8) { s->filter_intra = filter_intra_16bit; s->filter_line = filter_line_c_16bit; s->filter_edge = filter_edge_16bit; diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c index acc55a481f..43dea67add 100644 --- a/libavfilter/vf_yadif.c +++ b/libavfilter/vf_yadif.c @@ -192,7 +192,7 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) YADIFContext *s = ctx->priv; ThreadData *td = arg; int refs = s->cur->linesize[td->plane]; - int df = (s->depth + 7) / 8; + int df = (s->csp->comp[td->plane].depth + 7) / 8; int pix_3 = 3 * df; int slice_start = (td->h * jobnr ) / nb_jobs; int slice_end = (td->h * (jobnr+1)) / nb_jobs; @@ -233,13 +233,13 @@ static void filter(AVFilterContext *ctx, AVFrame *dstpic, ThreadData td = { .frame = dstpic, .parity = parity, .tff = tff }; int i; - for (i = 0; i < yadif->nb_components; i++) { + for (i = 0; i < yadif->csp->nb_components; i++) { int w = dstpic->width; int h = dstpic->height; if (i == 1 || i == 2) { - w = AV_CEIL_RSHIFT(w, yadif->hsub); - h = AV_CEIL_RSHIFT(h, yadif->vsub); + w = AV_CEIL_RSHIFT(w, yadif->csp->log2_chroma_w); + h = AV_CEIL_RSHIFT(h, yadif->csp->log2_chroma_h); } @@ -292,7 +292,6 @@ static int config_output(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; YADIFContext *s = ctx->priv; - const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(outlink->format); outlink->time_base.num = ctx->inputs[0]->time_base.num; outlink->time_base.den = ctx->inputs[0]->time_base.den * 2; @@ -308,12 +307,9 @@ static int config_output(AVFilterLink *outlink) return AVERROR(EINVAL); } + s->csp = av_pix_fmt_desc_get(outlink->format); s->filter = filter; - s->depth = desc->comp[0].depth; - s->nb_components = desc->nb_components; - s->hsub = desc->log2_chroma_w; - s->vsub = desc->log2_chroma_h; - if (s->depth > 8) { + if (s->csp->comp[0].depth > 8) { s->filter_line = filter_line_c_16bit; s->filter_edges = filter_edges_16bit; } else { diff --git a/libavfilter/x86/vf_bwdif_init.c b/libavfilter/x86/vf_bwdif_init.c index 817bd84663..b1e70b3bc6 100644 --- a/libavfilter/x86/vf_bwdif_init.c +++ b/libavfilter/x86/vf_bwdif_init.c @@ -55,7 +55,7 @@ av_cold void ff_bwdif_init_x86(BWDIFContext *bwdif) { YADIFContext *yadif = &bwdif->yadif; int cpu_flags = av_get_cpu_flags(); - int bit_depth = yadif->depth; + int bit_depth = (!yadif->csp) ? 8 : yadif->csp->comp[0].depth; if (bit_depth <= 8) { #if ARCH_X86_32 diff --git a/libavfilter/x86/vf_yadif_init.c b/libavfilter/x86/vf_yadif_init.c index ecf012af7c..c39bc44da6 100644 --- a/libavfilter/x86/vf_yadif_init.c +++ b/libavfilter/x86/vf_yadif_init.c @@ -60,7 +60,8 @@ void ff_yadif_filter_line_10bit_ssse3(void *dst, void *prev, void *cur, av_cold void ff_yadif_init_x86(YADIFContext *yadif) { int cpu_flags = av_get_cpu_flags(); - int bit_depth = yadif->depth; + int bit_depth = (!yadif->csp) ? 8 + : yadif->csp->comp[0].depth; if (bit_depth >= 15) { #if ARCH_X86_32 diff --git a/libavfilter/yadif.h b/libavfilter/yadif.h index 773f29bac9..c928911b35 100644 --- a/libavfilter/yadif.h +++ b/libavfilter/yadif.h @@ -72,10 +72,7 @@ typedef struct YADIFContext { void (*filter_edges)(void *dst, void *prev, void *cur, void *next, int w, int prefs, int mrefs, int parity, int mode); - int nb_components; - int depth; - int hsub; - int vsub; + const AVPixFmtDescriptor *csp; int eof; uint8_t *temp_line; int temp_line_size; diff --git a/libavfilter/yadif_common.c b/libavfilter/yadif_common.c index 8c20e22af9..a10cf7a17f 100644 --- a/libavfilter/yadif_common.c +++ b/libavfilter/yadif_common.c @@ -69,7 +69,7 @@ static int return_frame(AVFilterContext *ctx, int is_second) static int checkstride(YADIFContext *yadif, const AVFrame *a, const AVFrame *b) { int i; - for (i = 0; i < yadif->nb_components; i++) + for (i = 0; i < yadif->csp->nb_components; i++) if (a->linesize[i] != b->linesize[i]) return 1; return 0;