avfilter/vf_idetdsp: pass actual bit depth
More informative and IMO cleaner; some implementations may want to differentiate by exact bit depth or support 32 bit down the line.
This commit is contained in:
@@ -299,7 +299,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *picref)
|
|||||||
|
|
||||||
if (!idet->csp) {
|
if (!idet->csp) {
|
||||||
idet->csp = av_pix_fmt_desc_get(link->format);
|
idet->csp = av_pix_fmt_desc_get(link->format);
|
||||||
ff_idet_dsp_init(&idet->dsp, idet->csp->comp[0].depth > 8);
|
ff_idet_dsp_init(&idet->dsp, idet->csp->comp[0].depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idet->analyze_interlaced_flag) {
|
if (idet->analyze_interlaced_flag) {
|
||||||
@@ -429,7 +429,7 @@ static av_cold int init(AVFilterContext *ctx)
|
|||||||
else
|
else
|
||||||
idet->decay_coefficient = PRECISION;
|
idet->decay_coefficient = PRECISION;
|
||||||
|
|
||||||
ff_idet_dsp_init(&idet->dsp, 0);
|
ff_idet_dsp_init(&idet->dsp, 8);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,10 +49,10 @@ int ff_idet_filter_line_c_16bit(const uint16_t *a, const uint16_t *b, const uint
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void av_cold ff_idet_dsp_init(IDETDSPContext *dsp, int for_16b)
|
void av_cold ff_idet_dsp_init(IDETDSPContext *dsp, int depth)
|
||||||
{
|
{
|
||||||
dsp->filter_line = for_16b ? (ff_idet_filter_func)ff_idet_filter_line_c_16bit : ff_idet_filter_line_c;
|
dsp->filter_line = depth > 8 ? (ff_idet_filter_func)ff_idet_filter_line_c_16bit : ff_idet_filter_line_c;
|
||||||
#if ARCH_X86
|
#if ARCH_X86
|
||||||
ff_idet_dsp_init_x86(dsp, for_16b);
|
ff_idet_dsp_init_x86(dsp, depth);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ typedef struct IDETDSPContext {
|
|||||||
ff_idet_filter_func filter_line;
|
ff_idet_filter_func filter_line;
|
||||||
} IDETDSPContext;
|
} IDETDSPContext;
|
||||||
|
|
||||||
void ff_idet_dsp_init(IDETDSPContext *idet, int for_16b);
|
void ff_idet_dsp_init(IDETDSPContext *idet, int depth);
|
||||||
|
|
||||||
void ff_idet_dsp_init_x86(IDETDSPContext *idet, int for_16b);
|
void ff_idet_dsp_init_x86(IDETDSPContext *idet, int depth);
|
||||||
|
|
||||||
/* main fall-back for left-over */
|
/* main fall-back for left-over */
|
||||||
int ff_idet_filter_line_c(const uint8_t *a, const uint8_t *b, const uint8_t *c, int w);
|
int ff_idet_filter_line_c(const uint8_t *a, const uint8_t *b, const uint8_t *c, int w);
|
||||||
|
|||||||
@@ -60,13 +60,13 @@ FUNC_MAIN_DECL(sse2, 16)
|
|||||||
FUNC_MAIN_DECL_16bit(sse2, 8)
|
FUNC_MAIN_DECL_16bit(sse2, 8)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
av_cold void ff_idet_dsp_init_x86(IDETDSPContext *dsp, int for_16b)
|
av_cold void ff_idet_dsp_init_x86(IDETDSPContext *dsp, int depth)
|
||||||
{
|
{
|
||||||
#if HAVE_X86ASM
|
#if HAVE_X86ASM
|
||||||
const int cpu_flags = av_get_cpu_flags();
|
const int cpu_flags = av_get_cpu_flags();
|
||||||
|
|
||||||
if (EXTERNAL_SSE2(cpu_flags)) {
|
if (EXTERNAL_SSE2(cpu_flags)) {
|
||||||
dsp->filter_line = for_16b ? (ff_idet_filter_func)idet_filter_line_16bit_sse2 : idet_filter_line_sse2;
|
dsp->filter_line = depth > 8 ? (ff_idet_filter_func)idet_filter_line_16bit_sse2 : idet_filter_line_sse2;
|
||||||
}
|
}
|
||||||
#endif // HAVE_X86ASM
|
#endif // HAVE_X86ASM
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user