pcm/Volume: move code to template pcm_volume_sample()

This commit is contained in:
Max Kellermann 2013-12-23 10:03:05 +01:00
parent 6d21b9448a
commit 4a62cd4ad8

View File

@ -26,6 +26,20 @@
#include <stdint.h>
#include <string.h>
template<SampleFormat F, class Traits=SampleTraits<F>>
static inline typename Traits::value_type
pcm_volume_sample(typename Traits::value_type _sample,
int volume)
{
typename Traits::long_type sample(_sample);
sample = (sample * volume + pcm_volume_dither() +
PCM_VOLUME_1S / 2)
>> PCM_VOLUME_BITS;
return PcmClamp<F, Traits>(sample);
}
template<SampleFormat F, class Traits=SampleTraits<F>>
static void
pcm_volume_change(typename Traits::pointer_type buffer,
@ -33,13 +47,8 @@ pcm_volume_change(typename Traits::pointer_type buffer,
int volume)
{
while (buffer < end) {
typename Traits::long_type sample = *buffer;
sample = (sample * volume + pcm_volume_dither() +
PCM_VOLUME_1S / 2)
>> PCM_VOLUME_BITS;
*buffer++ = PcmClamp<F, Traits>(sample);
const auto sample = *buffer;
*buffer++ = pcm_volume_sample<F, Traits>(sample, volume);
}
}