From af531606b73634b56ec0ec73fbea8297a7752172 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 5 Feb 2018 14:59:12 +0100 Subject: [PATCH] pcm: another fix for the snd_pcm_area_silence() fast path The 64-bit fast path can be used only in limited conditions: - destination must be aligned to 64-bit (CPU aligned access) - step must be equal to width - physical with must be different than 24 (cannot be multiplied to 64) Signed-off-by: Jaroslav Kysela --- src/pcm/pcm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index 86250970..1be38339 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -2951,7 +2951,9 @@ int snd_pcm_area_silence(const snd_pcm_channel_area_t *dst_area, snd_pcm_uframes * Iterate copying silent sample for sample data aligned to 64 bit. * This is a fast path. */ - if (dst_area->step == (unsigned int) width && (64 % width) == 0) { + if (dst_area->step == (unsigned int) width && + width != 24 && + ((intptr_t)dst & 7) == 0) { unsigned int dwords = samples * width / 64; uint64_t *dstp = (uint64_t *)dst; samples -= dwords * 64 / width; -- 2.47.3