This patch updates the volume comp to use the updates q_mult functions for volume scaling
Signed-off-by: Ranjani Sridharan ranjani.sridharan@linux.intel.com --- src/audio/volume.c | 86 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 38 deletions(-)
diff --git a/src/audio/volume.c b/src/audio/volume.c index 0620e18..27f897d 100644 --- a/src/audio/volume.c +++ b/src/audio/volume.c @@ -120,10 +120,12 @@ static void vol_s32_to_s16(struct comp_dev *dev, struct comp_buffer *sink, /* buffer sizes are always divisible by period frames */ /* Samples are Q1.31 --> Q1.15 and volume is Q1.16 */ for (i = 0; i < frames * 2; i += 2) { - dest[i] = (int16_t)q_multsr_sat_32x32( - src[i], cd->volume[0], Q_SHIFT_BITS_64(31, 16, 15)); - dest[i + 1] = (int16_t)q_multsr_sat_32x32( - src[i + 1], cd->volume[1], Q_SHIFT_BITS_64(31, 16, 15)); + q_multsr_sat_32x32_16(src, cd->volume[0], + Q_SHIFT_BITS_64(31, 16, 15), dest, + i, 0); + q_multsr_sat_32x32_16(src, cd->volume[1], + Q_SHIFT_BITS_64(31, 16, 15), dest, + i + 1, 0); } }
@@ -139,10 +141,12 @@ static void vol_s32_to_s32(struct comp_dev *dev, struct comp_buffer *sink, /* buffer sizes are always divisible by period frames */ /* Samples are Q1.31 --> Q1.31 and volume is Q1.16 */ for (i = 0; i < frames * 2; i += 2) { - dest[i] = q_multsr_sat_32x32( - src[i], cd->volume[0], Q_SHIFT_BITS_64(31, 16, 31)); - dest[i + 1] = q_multsr_sat_32x32( - src[i + 1], cd->volume[1], Q_SHIFT_BITS_64(31, 16, 31)); + q_multsr_sat_32x32_32(src, cd->volume[0], + Q_SHIFT_BITS_64(31, 16, 31), dest, + i, 0); + q_multsr_sat_32x32_32(src, cd->volume[1], + Q_SHIFT_BITS_64(31, 16, 31), dest, + i + 1, 0); } }
@@ -158,10 +162,12 @@ static void vol_s16_to_s16(struct comp_dev *dev, struct comp_buffer *sink, /* buffer sizes are always divisible by period frames */ /* Samples are Q1.15 --> Q1.15 and volume is Q1.16 */ for (i = 0; i < frames * 2; i += 2) { - dest[i] = q_multsr_sat_16x16( - src[i], cd->volume[0], Q_SHIFT_BITS_32(15, 16, 15)); - dest[i + 1] = q_multsr_sat_16x16( - src[i + 1], cd->volume[1], Q_SHIFT_BITS_32(15, 16, 15)); + q_multsr_sat_16x16_16(src, cd->volume[0], + Q_SHIFT_BITS_32(15, 16, 15), dest, + i, 0); + q_multsr_sat_16x16_16(src, cd->volume[1], + Q_SHIFT_BITS_32(15, 16, 15), dest, + i + 1, 0); } }
@@ -177,10 +183,12 @@ static void vol_s16_to_s24(struct comp_dev *dev, struct comp_buffer *sink, /* buffer sizes are always divisible by period frames */ /* Samples are Q1.15 and volume is Q1.16 */ for (i = 0; i < frames * 2; i += 2) { - dest[i] = q_multsr_sat_32x32( - src[i], cd->volume[0], Q_SHIFT_BITS_64(15, 16, 23)); - dest[i + 1] = q_multsr_sat_32x32( - src[i + 1], cd->volume[1], Q_SHIFT_BITS_64(15, 16, 23)); + q_multsr_sat_16x32_32(src, cd->volume[0], + Q_SHIFT_BITS_64(15, 16, 23), dest, + i, 0); + q_multsr_sat_16x32_32(src, cd->volume[1], + Q_SHIFT_BITS_64(15, 16, 23), dest, + i + 1, 0); } }
@@ -196,12 +204,12 @@ static void vol_s24_to_s16(struct comp_dev *dev, struct comp_buffer *sink, /* buffer sizes are always divisible by period frames */ /* Samples are Q1.23 --> Q1.15 and volume is Q1.16 */ for (i = 0; i < frames * 2; i += 2) { - dest[i] = (int16_t)q_multsr_sat_32x32( - sign_extend_s24(src[i]), cd->volume[0], - Q_SHIFT_BITS_64(23, 16, 15)); - dest[i + 1] = (int16_t)q_multsr_sat_32x32( - sign_extend_s24(src[i + 1]), cd->volume[1], - Q_SHIFT_BITS_64(23, 16, 15)); + q_multsr_sat_32x32_16(src, cd->volume[0], + Q_SHIFT_BITS_64(23, 16, 15), dest, + i, 1); + q_multsr_sat_32x32_16(src, cd->volume[1], + Q_SHIFT_BITS_64(23, 16, 15), dest, + i + 1, 1); } }
@@ -217,10 +225,12 @@ static void vol_s32_to_s24(struct comp_dev *dev, struct comp_buffer *sink, /* buffer sizes are always divisible by period frames */ /* Samples are Q1.31 --> Q1.23 and volume is Q1.16 */ for (i = 0; i < frames * 2; i += 2) { - dest[i] = q_multsr_sat_32x32( - src[i], cd->volume[0], Q_SHIFT_BITS_64(31, 16, 23)); - dest[i + 1] = q_multsr_sat_32x32( - src[i + 1], cd->volume[1], Q_SHIFT_BITS_64(31, 16, 23)); + q_multsr_sat_32x32_32(src, cd->volume[0], + Q_SHIFT_BITS_64(31, 16, 23), dest, + i, 0); + q_multsr_sat_32x32_32(src, cd->volume[1], + Q_SHIFT_BITS_64(31, 16, 23), dest, + i + 1, 0); } }
@@ -236,12 +246,12 @@ static void vol_s24_to_s32(struct comp_dev *dev, struct comp_buffer *sink, /* buffer sizes are always divisible by period frames */ /* Samples are Q1.23 --> Q1.31 and volume is Q1.16 */ for (i = 0; i < frames * 2; i += 2) { - dest[i] = q_multsr_sat_32x32( - sign_extend_s24(src[i]), cd->volume[0], - Q_SHIFT_BITS_64(23, 16, 31)); - dest[i + 1] = q_multsr_sat_32x32( - sign_extend_s24(src[i + 1]), cd->volume[1], - Q_SHIFT_BITS_64(23, 16, 31)); + q_multsr_sat_32x32_32(src, cd->volume[0], + Q_SHIFT_BITS_64(23, 16, 31), dest, + i, 1); + q_multsr_sat_32x32_32(src, cd->volume[1], + Q_SHIFT_BITS_64(23, 16, 31), dest, + i + 1, 1); } }
@@ -258,12 +268,12 @@ static void vol_s24_to_s24(struct comp_dev *dev, struct comp_buffer *sink, /* buffer sizes are always divisible by period frames */ /* Samples are Q1.23 --> Q1.23 and volume is Q1.16 */ for (i = 0; i < frames * 2; i += 2) { - dest[i] = q_multsr_sat_32x32( - sign_extend_s24(src[i]), cd->volume[0], - Q_SHIFT_BITS_64(23, 16, 23)); - dest[i + 1] = q_multsr_sat_32x32( - sign_extend_s24(src[i + 1]), cd->volume[1], - Q_SHIFT_BITS_64(23, 16, 23)); + q_multsr_sat_32x32_32(src, cd->volume[0], + Q_SHIFT_BITS_64(23, 16, 23), dest, + i, 1); + q_multsr_sat_32x32_32(src, cd->volume[1], + Q_SHIFT_BITS_64(23, 16, 23), dest, + i + 1, 1); } }