Use the av_global_blend_row for blend mode performance. About 9x (43fps -> 415fps) in 1080P, use the command like: ffmpeg -i skyfall2-trailer.mp4 -vf minterpolate=mi_mode=blend \ -an -f null /dev/nul
Signed-off-by: Jun Zhao <mypopy...@gmail.com> --- libavfilter/vf_minterpolate.c | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_minterpolate.c b/libavfilter/vf_minterpolate.c index c6a5e63..c9fd418 100644 --- a/libavfilter/vf_minterpolate.c +++ b/libavfilter/vf_minterpolate.c @@ -27,6 +27,7 @@ #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/pixelutils.h" +#include "libavutil/blend.h" #include "avfilter.h" #include "formats.h" #include "internal.h" @@ -1113,6 +1114,10 @@ static void interpolate(AVFilterLink *inlink, AVFrame *avf_out) for (plane = 0; plane < mi_ctx->nb_planes; plane++) { int width = avf_out->width; int height = avf_out->height; + uint8_t *src0 = NULL; + uint8_t *src1 = NULL; + uint8_t *dst = NULL; + uint8_t alpha1 = (uint8_t)(alpha*256/1024); if (plane == 1 || plane == 2) { width = AV_CEIL_RSHIFT(width, mi_ctx->log2_chroma_w); @@ -1120,11 +1125,12 @@ static void interpolate(AVFilterLink *inlink, AVFrame *avf_out) } for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - avf_out->data[plane][x + y * avf_out->linesize[plane]] = - (alpha * mi_ctx->frames[2].avf->data[plane][x + y * mi_ctx->frames[2].avf->linesize[plane]] + - (ALPHA_MAX - alpha) * mi_ctx->frames[1].avf->data[plane][x + y * mi_ctx->frames[1].avf->linesize[plane]] + 512) >> 10; - } + src0 = &mi_ctx->frames[2].avf->data[plane][y * mi_ctx->frames[2].avf->linesize[plane]]; + src1 = &mi_ctx->frames[1].avf->data[plane][y * mi_ctx->frames[1].avf->linesize[plane]]; + dst = &avf_out->data[plane][y * avf_out->linesize[plane]]; + + av_global_blend_row(src0, src1, (const uint8_t *)&alpha1, dst, width); + } } -- 1.7.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel