aboutsummaryrefslogtreecommitdiffstats
path: root/libswscale/x86/swscale.c
diff options
context:
space:
mode:
authorAlan Kelly <alankelly@google.com>2021-12-15 10:35:02 +0100
committerJames Almer <jamrial@gmail.com>2021-12-15 20:04:59 -0300
commitf900a19fa94b1a55b660ec2e5c13419d59754bc0 (patch)
tree7fedf4f6b884fd7172a666f1706653b950fc6a90 /libswscale/x86/swscale.c
parente9ba40c5c9a49bc97d16d66c46ff993fa84a6c31 (diff)
downloadffmpeg-f900a19fa94b1a55b660ec2e5c13419d59754bc0.tar.gz
libswscale: Adds ff_hscale8to15_4_avx2 and ff_hscale8to15_X4_avx2 for all filter sizes.
Fixes so that fate under 64 bit Windows passes. These functions replace all ff_hscale8to15_*_ssse3 when avx2 is available. Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libswscale/x86/swscale.c')
-rw-r--r--libswscale/x86/swscale.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/libswscale/x86/swscale.c b/libswscale/x86/swscale.c
index 0848a31461..164b06d6ba 100644
--- a/libswscale/x86/swscale.c
+++ b/libswscale/x86/swscale.c
@@ -276,6 +276,9 @@ SCALE_FUNCS_SSE(sse2);
SCALE_FUNCS_SSE(ssse3);
SCALE_FUNCS_SSE(sse4);
+SCALE_FUNC(4, 8, 15, avx2);
+SCALE_FUNC(X4, 8, 15, avx2);
+
#define VSCALEX_FUNC(size, opt) \
void ff_yuv2planeX_ ## size ## _ ## opt(const int16_t *filter, int filterSize, \
const int16_t **src, uint8_t *dest, int dstW, \
@@ -568,6 +571,22 @@ switch(c->dstBpc){ \
}
#if ARCH_X86_64
+#define ASSIGN_AVX2_SCALE_FUNC(hscalefn, filtersize) \
+ switch (filtersize) { \
+ case 4: hscalefn = ff_hscale8to15_4_avx2; break; \
+ default: hscalefn = ff_hscale8to15_X4_avx2; break; \
+ break; \
+ }
+
+ if (EXTERNAL_AVX2_FAST(cpu_flags)){
+ if ((c->srcBpc == 8) && (c->dstBpc <= 14)){
+ if(c->chrDstW % 16 == 0)
+ ASSIGN_AVX2_SCALE_FUNC(c->hcScale, c->hChrFilterSize);
+ if(c->dstW % 16 == 0)
+ ASSIGN_AVX2_SCALE_FUNC(c->hyScale, c->hLumFilterSize);
+ }
+ }
+
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
switch (c->dstFormat) {
case AV_PIX_FMT_NV12: