summaryrefslogtreecommitdiffstats
path: root/libavfilter/x86/af_volume_init.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-09-25 08:41:39 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2012-12-05 11:23:37 -0500
commitb30a363331ac79331c1d002992689b5ff35bf813 (patch)
treea2c5fdcf1b77ae54bce39b4375b7fc7772bb31ec /libavfilter/x86/af_volume_init.c
parentf96f1e06a47ebd124dd0b1369f3fdd0f8f25d773 (diff)
downloadffmpeg-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.c20
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;
+ }
}
}
OpenPOWER on IntegriCloud