aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLimin Wang <lance.lmwang@gmail.com>2020-08-12 00:21:54 +0800
committerLimin Wang <lance.lmwang@gmail.com>2020-08-26 14:21:11 +0800
commit2a9b934675b9e2d3850b46f8a618c19b03f02551 (patch)
treed47efa1d64f2308ad067f6627631917692432078
parent9bb4707b1faea6b6efe64b546c2be4a608ca64c1 (diff)
downloadffmpeg-2a9b934675b9e2d3850b46f8a618c19b03f02551.tar.gz
avfilter/yadif: simplify the code for better readability
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
-rw-r--r--libavfilter/vf_bwdif.c13
-rw-r--r--libavfilter/vf_yadif.c16
-rw-r--r--libavfilter/x86/vf_bwdif_init.c2
-rw-r--r--libavfilter/x86/vf_yadif_init.c3
-rw-r--r--libavfilter/yadif.h5
-rw-r--r--libavfilter/yadif_common.c2
6 files changed, 23 insertions, 18 deletions
diff --git a/libavfilter/vf_bwdif.c b/libavfilter/vf_bwdif.c
index b6aed7a450..583a96570e 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->csp->comp[td->plane].depth)) - 1;
- int df = (yadif->csp->comp[td->plane].depth + 7) / 8;
+ int clip_max = (1 << (yadif->depth)) - 1;
+ int df = (yadif->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->csp->nb_components; i++) {
+ for (i = 0; i < yadif->nb_components; i++) {
int w = dstpic->width;
int h = dstpic->height;
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);
+ w = AV_CEIL_RSHIFT(w, yadif->hsub);
+ h = AV_CEIL_RSHIFT(h, yadif->vsub);
}
td.w = w;
@@ -348,9 +348,8 @@ static int config_props(AVFilterLink *link)
return AVERROR(EINVAL);
}
- yadif->csp = av_pix_fmt_desc_get(link->format);
yadif->filter = filter;
- if (yadif->csp->comp[0].depth > 8) {
+ if (yadif->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 43dea67add..acc55a481f 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->csp->comp[td->plane].depth + 7) / 8;
+ int df = (s->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->csp->nb_components; i++) {
+ for (i = 0; i < yadif->nb_components; i++) {
int w = dstpic->width;
int h = dstpic->height;
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);
+ w = AV_CEIL_RSHIFT(w, yadif->hsub);
+ h = AV_CEIL_RSHIFT(h, yadif->vsub);
}
@@ -292,6 +292,7 @@ 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;
@@ -307,9 +308,12 @@ static int config_output(AVFilterLink *outlink)
return AVERROR(EINVAL);
}
- s->csp = av_pix_fmt_desc_get(outlink->format);
s->filter = filter;
- if (s->csp->comp[0].depth > 8) {
+ 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) {
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 b1e70b3bc6..817bd84663 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->csp) ? 8 : yadif->csp->comp[0].depth;
+ int bit_depth = yadif->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 c39bc44da6..ecf012af7c 100644
--- a/libavfilter/x86/vf_yadif_init.c
+++ b/libavfilter/x86/vf_yadif_init.c
@@ -60,8 +60,7 @@ 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->csp) ? 8
- : yadif->csp->comp[0].depth;
+ int bit_depth = yadif->depth;
if (bit_depth >= 15) {
#if ARCH_X86_32
diff --git a/libavfilter/yadif.h b/libavfilter/yadif.h
index c928911b35..773f29bac9 100644
--- a/libavfilter/yadif.h
+++ b/libavfilter/yadif.h
@@ -72,7 +72,10 @@ typedef struct YADIFContext {
void (*filter_edges)(void *dst, void *prev, void *cur, void *next,
int w, int prefs, int mrefs, int parity, int mode);
- const AVPixFmtDescriptor *csp;
+ int nb_components;
+ int depth;
+ int hsub;
+ int vsub;
int eof;
uint8_t *temp_line;
int temp_line_size;
diff --git a/libavfilter/yadif_common.c b/libavfilter/yadif_common.c
index a10cf7a17f..8c20e22af9 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->csp->nb_components; i++)
+ for (i = 0; i < yadif->nb_components; i++)
if (a->linesize[i] != b->linesize[i])
return 1;
return 0;