diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-09-25 08:41:39 -0400 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-12-05 11:23:37 -0500 |
commit | b30a363331ac79331c1d002992689b5ff35bf813 (patch) | |
tree | a2c5fdcf1b77ae54bce39b4375b7fc7772bb31ec /libavfilter/x86/af_volume_init.c | |
parent | f96f1e06a47ebd124dd0b1369f3fdd0f8f25d773 (diff) | |
download | ffmpeg-streaming-b30a363331ac79331c1d002992689b5ff35bf813.zip ffmpeg-streaming-b30a363331ac79331c1d002992689b5ff35bf813.tar.gz |
x86: af_volume: add SSE2/SSSE3/AVX-optimized s32 volume scaling
Diffstat (limited to 'libavfilter/x86/af_volume_init.c')
-rw-r--r-- | libavfilter/x86/af_volume_init.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libavfilter/x86/af_volume_init.c b/libavfilter/x86/af_volume_init.c index 00103df..02bedd2 100644 --- a/libavfilter/x86/af_volume_init.c +++ b/libavfilter/x86/af_volume_init.c @@ -25,6 +25,13 @@ void ff_scale_samples_s16_sse2(uint8_t *dst, const uint8_t *src, int len, int volume); +void ff_scale_samples_s32_sse2(uint8_t *dst, const uint8_t *src, int len, + int volume); +void ff_scale_samples_s32_ssse3_atom(uint8_t *dst, const uint8_t *src, int len, + int volume); +void ff_scale_samples_s32_avx(uint8_t *dst, const uint8_t *src, int len, + int volume); + void ff_volume_init_x86(VolumeContext *vol) { int mm_flags = av_get_cpu_flags(); @@ -35,5 +42,18 @@ void ff_volume_init_x86(VolumeContext *vol) vol->scale_samples = ff_scale_samples_s16_sse2; vol->samples_align = 8; } + } else if (sample_fmt == AV_SAMPLE_FMT_S32) { + if (EXTERNAL_SSE2(mm_flags)) { + vol->scale_samples = ff_scale_samples_s32_sse2; + vol->samples_align = 4; + } + if (EXTERNAL_SSSE3(mm_flags) && mm_flags & AV_CPU_FLAG_ATOM) { + vol->scale_samples = ff_scale_samples_s32_ssse3_atom; + vol->samples_align = 4; + } + if (EXTERNAL_AVX(mm_flags)) { + vol->scale_samples = ff_scale_samples_s32_avx; + vol->samples_align = 8; + } } } |