diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-07-02 21:19:41 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-07-02 21:19:41 +0200 |
commit | b286383bd2b13fdf59aecdb23d8514323460483b (patch) | |
tree | 4f8ee9745d719e2918843d0d8ebcf053ac220ef4 /libavfilter/x86 | |
parent | 7c84e7d33762a4bccc0002476a3b20e0b8f26fcc (diff) | |
parent | 5e745cefc0f89cf698c4cf0104182472fe0f603e (diff) | |
download | ffmpeg-streaming-b286383bd2b13fdf59aecdb23d8514323460483b.zip ffmpeg-streaming-b286383bd2b13fdf59aecdb23d8514323460483b.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
asfdec: read attached pictures.
apetag: reindent
apetag: export attached covers as video streams.
apetag: fix the amount of data read from binary tags.
apetag: make sure avio_get_str() doesn't read more than it should.
mov: read itunes cover art.
snow: remove VLA in mc_block()
intfloat: Don't use designated initializers in the public headers
snow: remove a VLA.
doc: Remind devs to check return values, especially for malloc() et al
MS ATC Screen (aka MSS3) decoder
vf_yadif: move x86 init code to x86/yadif.c
vf_gradfun: move x86 init code to x86/gradfun.c
roqvideo: Remove a totally unused dspcontext
smacker: remove some unused code
dsicin: remove dead assignment
aacdec: remove dead assignment
rl2: remove dead assignment
proresenc: make a variable local to the loop where it is used
alsdec: remove dead assignments
Conflicts:
Changelog
doc/developer.texi
libavcodec/allcodecs.c
libavcodec/avcodec.h
libavcodec/version.h
libavfilter/gradfun.h
libavfilter/x86/gradfun.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/x86')
-rw-r--r-- | libavfilter/x86/gradfun.c | 29 | ||||
-rw-r--r-- | libavfilter/x86/yadif.c | 13 | ||||
-rw-r--r-- | libavfilter/x86/yadif_template.c | 6 |
3 files changed, 37 insertions, 11 deletions
diff --git a/libavfilter/x86/gradfun.c b/libavfilter/x86/gradfun.c index e892117..4a0c012 100644 --- a/libavfilter/x86/gradfun.c +++ b/libavfilter/x86/gradfun.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/attributes.h" #include "libavutil/cpu.h" #include "libavutil/x86_cpu.h" #include "libavfilter/gradfun.h" @@ -25,9 +26,9 @@ DECLARE_ALIGNED(16, static const uint16_t, pw_7f)[8] = {0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F}; DECLARE_ALIGNED(16, static const uint16_t, pw_ff)[8] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; -void ff_gradfun_filter_line_mmx2(uint8_t *dst, const uint8_t *src, const uint16_t *dc, int width, int thresh, const uint16_t *dithers) +#if HAVE_MMX2 +static void gradfun_filter_line_mmx2(uint8_t *dst, const uint8_t *src, const uint16_t *dc, int width, int thresh, const uint16_t *dithers) { -#if HAVE_MMX intptr_t x; if (width & 3) { x = width & ~3; @@ -70,12 +71,12 @@ void ff_gradfun_filter_line_mmx2(uint8_t *dst, const uint8_t *src, const uint16_ "rm"(thresh), "m"(*dithers), "m"(*pw_7f) :"memory" ); -#endif } +#endif -void ff_gradfun_filter_line_ssse3(uint8_t *dst, const uint8_t *src, const uint16_t *dc, int width, int thresh, const uint16_t *dithers) -{ #if HAVE_SSSE3 +static void gradfun_filter_line_ssse3(uint8_t *dst, const uint8_t *src, const uint16_t *dc, int width, int thresh, const uint16_t *dithers) +{ intptr_t x; if (width & 7) { // could be 10% faster if I somehow eliminated this @@ -117,12 +118,12 @@ void ff_gradfun_filter_line_ssse3(uint8_t *dst, const uint8_t *src, const uint16 "rm"(thresh), "m"(*dithers), "m"(*pw_7f) :"memory" ); -#endif // HAVE_SSSE3 } +#endif // HAVE_SSSE3 -void ff_gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, const uint16_t *buf1, const uint8_t *src, int src_linesize, int width) -{ #if HAVE_SSE +static void gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, const uint16_t *buf1, const uint8_t *src, int src_linesize, int width) +{ #define BLURV(load)\ intptr_t x = -2*width;\ __asm__ volatile(\ @@ -160,5 +161,17 @@ void ff_gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, const uint16_t *buf1 } else { BLURV("movdqa"); } +} #endif // HAVE_SSE + +av_cold void ff_gradfun_init_x86(GradFunContext *gf) +{ + int cpu_flags = av_get_cpu_flags(); + + if (HAVE_MMX2 && cpu_flags & AV_CPU_FLAG_MMX2) + gf->filter_line = gradfun_filter_line_mmx2; + if (HAVE_SSSE3 && cpu_flags & AV_CPU_FLAG_SSSE3) + gf->filter_line = gradfun_filter_line_ssse3; + if (HAVE_SSE && cpu_flags & AV_CPU_FLAG_SSE2) + gf->blur_line = gradfun_blur_line_sse2; } diff --git a/libavfilter/x86/yadif.c b/libavfilter/x86/yadif.c index 2b55c00..d982388 100644 --- a/libavfilter/x86/yadif.c +++ b/libavfilter/x86/yadif.c @@ -18,6 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "libavutil/attributes.h" #include "libavutil/cpu.h" #include "libavutil/x86_cpu.h" #include "libavcodec/x86/dsputil_mmx.h" @@ -47,3 +48,15 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x0001000100010001ULL, 0x000100010 #define RENAME(a) a ## _mmx #include "yadif_template.c" #endif + +av_cold void ff_yadif_init_x86(YADIFContext *yadif) +{ + int cpu_flags = av_get_cpu_flags(); + + if (HAVE_MMX && cpu_flags & AV_CPU_FLAG_MMX) + yadif->filter_line = yadif_filter_line_mmx; + if (HAVE_SSE && cpu_flags & AV_CPU_FLAG_SSE2) + yadif->filter_line = yadif_filter_line_sse2; + if (HAVE_SSSE3 && cpu_flags & AV_CPU_FLAG_SSSE3) + yadif->filter_line = yadif_filter_line_ssse3; +} diff --git a/libavfilter/x86/yadif_template.c b/libavfilter/x86/yadif_template.c index 71cf9d1..06c8797 100644 --- a/libavfilter/x86/yadif_template.c +++ b/libavfilter/x86/yadif_template.c @@ -103,9 +103,9 @@ "por "MM"5, "MM"3 \n\t"\ MOVQ" "MM"3, "MM"1 \n\t" -void RENAME(ff_yadif_filter_line)(uint8_t *dst, - uint8_t *prev, uint8_t *cur, uint8_t *next, - int w, int prefs, int mrefs, int parity, int mode) +static void RENAME(yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, + uint8_t *next, int w, int prefs, + int mrefs, int parity, int mode) { uint8_t tmp[5*16]; uint8_t *tmpA= (uint8_t*)(((uint64_t)(tmp+15)) & ~15); |