diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c index a2419a60e9..673c92d6af 100644 --- a/libavfilter/vf_overlay.c +++ b/libavfilter/vf_overlay.c @@ -836,7 +836,7 @@ static int init_slice_fn(AVFilterContext *ctx) } #if ARCH_X86 - ff_overlay_init_x86(s, s->format, main->format, overlay->alpha_mode, s->main_has_alpha); + ff_overlay_init_x86(ctx); #endif return 0; diff --git a/libavfilter/vf_overlay.h b/libavfilter/vf_overlay.h index e4ba956fe7..22e84362b7 100644 --- a/libavfilter/vf_overlay.h +++ b/libavfilter/vf_overlay.h @@ -82,7 +82,6 @@ typedef struct OverlayContext { int (*blend_slice)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); } OverlayContext; -void ff_overlay_init_x86(OverlayContext *s, int format, int pix_format, - enum AVAlphaMode overlay_alpha, int main_has_alpha); +void ff_overlay_init_x86(AVFilterContext *ctx); #endif /* AVFILTER_OVERLAY_H */ diff --git a/libavfilter/x86/vf_overlay_init.c b/libavfilter/x86/vf_overlay_init.c index 30cfe2cbe8..d1686505f8 100644 --- a/libavfilter/x86/vf_overlay_init.c +++ b/libavfilter/x86/vf_overlay_init.c @@ -32,32 +32,35 @@ int ff_overlay_row_20_sse4(uint8_t *d, uint8_t *da, uint8_t *s, uint8_t *a, int ff_overlay_row_22_sse4(uint8_t *d, uint8_t *da, uint8_t *s, uint8_t *a, int w, ptrdiff_t alinesize); -av_cold void ff_overlay_init_x86(OverlayContext *s, int format, int pix_format, - enum AVAlphaMode overlay_alpha, int main_has_alpha) +av_cold void ff_overlay_init_x86(AVFilterContext *ctx) { + OverlayContext *s = ctx->priv; + const AVFilterLink *main = ctx->inputs[0]; + const AVFilterLink *overlay = ctx->inputs[0]; int cpu_flags = av_get_cpu_flags(); + int main_has_alpha = s->main_has_alpha; if (EXTERNAL_SSE4(cpu_flags) && - (format == OVERLAY_FORMAT_YUV444 || - format == OVERLAY_FORMAT_GBRP) && - overlay_alpha != AVALPHA_MODE_PREMULTIPLIED && main_has_alpha == 0) { + (s->format == OVERLAY_FORMAT_YUV444 || + s->format == OVERLAY_FORMAT_GBRP) && + overlay->alpha_mode != AVALPHA_MODE_PREMULTIPLIED && !main_has_alpha) { s->blend_row[0] = ff_overlay_row_44_sse4; s->blend_row[1] = ff_overlay_row_44_sse4; s->blend_row[2] = ff_overlay_row_44_sse4; } if (EXTERNAL_SSE4(cpu_flags) && - (pix_format == AV_PIX_FMT_YUV420P) && - (format == OVERLAY_FORMAT_YUV420) && - overlay_alpha != AVALPHA_MODE_PREMULTIPLIED && main_has_alpha == 0) { + (main->format == AV_PIX_FMT_YUV420P) && + (s->format == OVERLAY_FORMAT_YUV420) && + overlay->alpha_mode != AVALPHA_MODE_PREMULTIPLIED && !main_has_alpha) { s->blend_row[0] = ff_overlay_row_44_sse4; s->blend_row[1] = ff_overlay_row_20_sse4; s->blend_row[2] = ff_overlay_row_20_sse4; } if (EXTERNAL_SSE4(cpu_flags) && - (format == OVERLAY_FORMAT_YUV422) && - overlay_alpha != AVALPHA_MODE_PREMULTIPLIED && main_has_alpha == 0) { + (s->format == OVERLAY_FORMAT_YUV422) && + overlay->alpha_mode != AVALPHA_MODE_PREMULTIPLIED && !main_has_alpha) { s->blend_row[0] = ff_overlay_row_44_sse4; s->blend_row[1] = ff_overlay_row_22_sse4; s->blend_row[2] = ff_overlay_row_22_sse4;