]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/x86/vf_interlace_init.c
Merge commit '77c23704c769168e4210956314775a1931f6aa0b'
[ffmpeg] / libavfilter / x86 / vf_interlace_init.c
index c0f04dcd978da532aa6c485cbc1301f7633fdb35..70fe86ccff0466ed63697388bc9aaaff5db63582 100644 (file)
 #include "libavfilter/interlace.h"
 
 void ff_lowpass_line_sse2(uint8_t *dstp, ptrdiff_t linesize,
-                          const uint8_t *srcp,
-                          ptrdiff_t mref, ptrdiff_t pref);
+                          const uint8_t *srcp, ptrdiff_t mref,
+                          ptrdiff_t pref, int clip_max);
 void ff_lowpass_line_avx (uint8_t *dstp, ptrdiff_t linesize,
-                          const uint8_t *srcp,
-                          ptrdiff_t mref, ptrdiff_t pref);
+                          const uint8_t *srcp, ptrdiff_t mref,
+                          ptrdiff_t pref, int clip_max);
+
+void ff_lowpass_line_16_sse2(uint8_t *dstp, ptrdiff_t linesize,
+                             const uint8_t *srcp, ptrdiff_t mref,
+                             ptrdiff_t pref, int clip_max);
+void ff_lowpass_line_16_avx (uint8_t *dstp, ptrdiff_t linesize,
+                             const uint8_t *srcp, ptrdiff_t mref,
+                             ptrdiff_t pref, int clip_max);
 
 void ff_lowpass_line_complex_sse2(uint8_t *dstp, ptrdiff_t linesize,
-                                  const uint8_t *srcp,
-                                  ptrdiff_t mref, ptrdiff_t pref);
+                                  const uint8_t *srcp, ptrdiff_t mref,
+                                  ptrdiff_t pref, int clip_max);
+
+void ff_lowpass_line_complex_12_sse2(uint8_t *dstp, ptrdiff_t linesize,
+                                     const uint8_t *srcp, ptrdiff_t mref,
+                                     ptrdiff_t pref, int clip_max);
 
 av_cold void ff_interlace_init_x86(InterlaceContext *s)
 {
     int cpu_flags = av_get_cpu_flags();
 
-    if (EXTERNAL_SSE2(cpu_flags)) {
-        if (s->lowpass == VLPF_LIN)
-            s->lowpass_line = ff_lowpass_line_sse2;
-        else if (s->lowpass == VLPF_CMP)
-            s->lowpass_line = ff_lowpass_line_complex_sse2;
+    if (s->csp->comp[0].depth > 8) {
+        if (EXTERNAL_SSE2(cpu_flags)) {
+            if (s->lowpass == VLPF_LIN)
+                s->lowpass_line = ff_lowpass_line_16_sse2;
+            else if (s->lowpass == VLPF_CMP)
+                s->lowpass_line = ff_lowpass_line_complex_12_sse2;
+        }
+        if (EXTERNAL_AVX(cpu_flags))
+            if (s->lowpass == VLPF_LIN)
+                s->lowpass_line = ff_lowpass_line_16_avx;
+    } else {
+        if (EXTERNAL_SSE2(cpu_flags)) {
+            if (s->lowpass == VLPF_LIN)
+                s->lowpass_line = ff_lowpass_line_sse2;
+            else if (s->lowpass == VLPF_CMP)
+                s->lowpass_line = ff_lowpass_line_complex_sse2;
+        }
+        if (EXTERNAL_AVX(cpu_flags))
+            if (s->lowpass == VLPF_LIN)
+                s->lowpass_line = ff_lowpass_line_avx;
     }
-    if (EXTERNAL_AVX(cpu_flags))
-        if (s->lowpass == VLPF_LIN)
-            s->lowpass_line = ff_lowpass_line_avx;
 }