audiomixer: add support for more formats in the mix table

The S8, S16, S24 and S32 formats are now supported. The mixing process also
takes into account the number of channels.
This commit is contained in:
Julian Bouzas 2021-09-01 15:54:45 -04:00
parent 28cf342bb8
commit dddbe289fb
3 changed files with 156 additions and 12 deletions

View file

@ -54,15 +54,32 @@ static struct mix_info mix_table[] =
{ SPA_AUDIO_FORMAT_F32, 1, SPA_CPU_FLAG_SSE, 4, mix_f32_sse },
{ SPA_AUDIO_FORMAT_F32P, 1, SPA_CPU_FLAG_SSE, 4, mix_f32_sse },
#endif
{ SPA_AUDIO_FORMAT_F32, 1, 0, 4, mix_f32_c },
{ SPA_AUDIO_FORMAT_F32P, 1, 0, 4, mix_f32_c },
{ SPA_AUDIO_FORMAT_F32, 0, 0, 4, mix_f32_c },
{ SPA_AUDIO_FORMAT_F32P, 0, 0, 4, mix_f32_c },
/* f64 */
#if defined (HAVE_SSE2)
{ SPA_AUDIO_FORMAT_F64, 1, SPA_CPU_FLAG_SSE2, 8, mix_f64_sse2 },
{ SPA_AUDIO_FORMAT_F64P, 1, SPA_CPU_FLAG_SSE2, 8, mix_f64_sse2 },
#endif
{ SPA_AUDIO_FORMAT_F64, 1, 0, 8, mix_f64_c },
{ SPA_AUDIO_FORMAT_F64P, 1, 0, 8, mix_f64_c },
{ SPA_AUDIO_FORMAT_F64, 0, 0, 8, mix_f64_c },
{ SPA_AUDIO_FORMAT_F64P, 0, 0, 8, mix_f64_c },
/* s8 */
{ SPA_AUDIO_FORMAT_S8, 0, 0, 1, mix_s8_c },
{ SPA_AUDIO_FORMAT_S8P, 0, 0, 1, mix_s8_c },
/* s16 */
{ SPA_AUDIO_FORMAT_S16, 0, 0, 2, mix_s16_c },
{ SPA_AUDIO_FORMAT_S16P, 0, 0, 2, mix_s16_c },
/* s24 */
{ SPA_AUDIO_FORMAT_S24, 0, 0, 3, mix_s24_c },
{ SPA_AUDIO_FORMAT_S24P, 0, 0, 3, mix_s24_c },
/* s32 */
{ SPA_AUDIO_FORMAT_S32, 0, 0, 4, mix_s32_c },
{ SPA_AUDIO_FORMAT_S32P, 0, 0, 4, mix_s32_c },
};
#define MATCH_CHAN(a,b) ((a) == 0 || (a) == (b))