diff --git a/libavfilter/interlace.h b/libavfilter/interlace.h index 90a0198bdc..b41f0d5706 100644 --- a/libavfilter/interlace.h +++ b/libavfilter/interlace.h @@ -62,6 +62,7 @@ typedef struct InterlaceContext { ptrdiff_t mref, ptrdiff_t pref, int clip_max); } InterlaceContext; -void ff_interlace_init_x86(InterlaceContext *interlace); +void ff_interlace_init(InterlaceContext *interlace, int depth); +void ff_interlace_init_x86(InterlaceContext *interlace, int depth); #endif /* AVFILTER_INTERLACE_H */ diff --git a/libavfilter/vf_interlace.c b/libavfilter/vf_interlace.c index 731069818f..24c422ded2 100644 --- a/libavfilter/vf_interlace.c +++ b/libavfilter/vf_interlace.c @@ -185,6 +185,25 @@ static av_cold void uninit(AVFilterContext *ctx) av_frame_free(&s->next); } +void ff_interlace_init(InterlaceContext *s, int depth) +{ + if (s->lowpass) { + if (s->lowpass == VLPF_LIN) { + if (depth > 8) + s->lowpass_line = lowpass_line_c_16; + else + s->lowpass_line = lowpass_line_c; + } else if (s->lowpass == VLPF_CMP) { + if (depth > 8) + s->lowpass_line = lowpass_line_complex_c_16; + else + s->lowpass_line = lowpass_line_complex_c; + } + if (ARCH_X86) + ff_interlace_init_x86(s, depth); + } +} + static int config_out_props(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; @@ -210,21 +229,7 @@ static int config_out_props(AVFilterLink *outlink) outlink->frame_rate.den *= 2; s->csp = av_pix_fmt_desc_get(outlink->format); - if (s->lowpass) { - if (s->lowpass == VLPF_LIN) { - if (s->csp->comp[0].depth > 8) - s->lowpass_line = lowpass_line_c_16; - else - s->lowpass_line = lowpass_line_c; - } else if (s->lowpass == VLPF_CMP) { - if (s->csp->comp[0].depth > 8) - s->lowpass_line = lowpass_line_complex_c_16; - else - s->lowpass_line = lowpass_line_complex_c; - } - if (ARCH_X86) - ff_interlace_init_x86(s); - } + ff_interlace_init(s, s->csp->comp[0].depth); av_log(ctx, AV_LOG_VERBOSE, "%s interlacing %s lowpass filter\n", s->scan == MODE_TFF ? "tff" : "bff", (s->lowpass) ? "with" : "without"); diff --git a/libavfilter/x86/vf_interlace_init.c b/libavfilter/x86/vf_interlace_init.c index 70fe86ccff..b024b61735 100644 --- a/libavfilter/x86/vf_interlace_init.c +++ b/libavfilter/x86/vf_interlace_init.c @@ -48,11 +48,11 @@ void ff_lowpass_line_complex_12_sse2(uint8_t *dstp, ptrdiff_t linesize, const uint8_t *srcp, ptrdiff_t mref, ptrdiff_t pref, int clip_max); -av_cold void ff_interlace_init_x86(InterlaceContext *s) +av_cold void ff_interlace_init_x86(InterlaceContext *s, int depth) { int cpu_flags = av_get_cpu_flags(); - if (s->csp->comp[0].depth > 8) { + if (depth > 8) { if (EXTERNAL_SSE2(cpu_flags)) { if (s->lowpass == VLPF_LIN) s->lowpass_line = ff_lowpass_line_16_sse2;