diff options
author | Ruiling Song <ruiling.song@intel.com> | 2019-06-27 10:07:21 +0800 |
---|---|---|
committer | Ruiling Song <ruiling.song@intel.com> | 2019-08-07 14:31:28 +0800 |
commit | 98e419cbf5443b3e95d6bc7bdb807c9f54bfd6a7 (patch) | |
tree | d03ffca9763bd32cbeedf19bb3e44f5ad60a2933 /libavfilter/convolution.h | |
parent | 6c67c8ca9ae603b91e65274f93099ccb07bb33db (diff) | |
download | ffmpeg-98e419cbf5443b3e95d6bc7bdb807c9f54bfd6a7.tar.gz |
avfilter/vf_convolution: add x86 SIMD for filter_3x3()
Tested using a simple command (apply edge enhance):
./ffmpeg_g -i ~/Downloads/bbb_sunflower_1080p_30fps_normal.mp4 \
-vf convolution="0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128" \
-an -vframes 1000 -f null /dev/null
The fps increase from 151 to 270 on my local machine.
Signed-off-by: Ruiling Song <ruiling.song@intel.com>
Diffstat (limited to 'libavfilter/convolution.h')
-rw-r--r-- | libavfilter/convolution.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/libavfilter/convolution.h b/libavfilter/convolution.h new file mode 100644 index 0000000000..fc6aad58fd --- /dev/null +++ b/libavfilter/convolution.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2012-2013 Oka Motofumi (chikuzen.mo at gmail dot com) + * Copyright (c) 2015 Paul B Mahol + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef AVFILTER_CONVOLUTION_H +#define AVFILTER_CONVOLUTION_H +#include "avfilter.h" + +enum MatrixMode { + MATRIX_SQUARE, + MATRIX_ROW, + MATRIX_COLUMN, + MATRIX_NBMODES, +}; + +typedef struct ConvolutionContext { + const AVClass *class; + + char *matrix_str[4]; + float rdiv[4]; + float bias[4]; + int mode[4]; + float scale; + float delta; + int planes; + + int size[4]; + int depth; + int max; + int bpc; + int nb_planes; + int nb_threads; + int planewidth[4]; + int planeheight[4]; + int matrix[4][49]; + int matrix_length[4]; + int copy[4]; + + void (*setup[4])(int radius, const uint8_t *c[], const uint8_t *src, int stride, + int x, int width, int y, int height, int bpc); + void (*filter[4])(uint8_t *dst, int width, + float rdiv, float bias, const int *const matrix, + const uint8_t *c[], int peak, int radius, + int dstride, int stride); +} ConvolutionContext; + +void ff_convolution_init_x86(ConvolutionContext *s); +#endif |