diff options
author | Andy Hung <hunga@google.com> | 2014-07-17 21:30:53 -0700 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2014-07-24 18:40:33 -0700 |
commit | e93b6b7347a7846c8fd746542364ec11b0cd5124 (patch) | |
tree | d5498ae539ae460d4153026be9714129fc45a21f /services/audioflinger/AudioMixerOps.h | |
parent | 81e50d0c782cc18eab4ef40ecd6c7f36df50fea5 (diff) | |
download | frameworks_av-e93b6b7347a7846c8fd746542364ec11b0cd5124.zip frameworks_av-e93b6b7347a7846c8fd746542364ec11b0cd5124.tar.gz frameworks_av-e93b6b7347a7846c8fd746542364ec11b0cd5124.tar.bz2 |
Add multichannel capability to AudioMixer
tests/test-mixer updated to handle multichannel.
New mixer path is still disabled (kUseNewMixer = false).
Subsequent CL will enable multichannel capability.
Change-Id: I71dafa94cc1d9af567c285e0ded7c5c94e3ff926
Diffstat (limited to 'services/audioflinger/AudioMixerOps.h')
-rw-r--r-- | services/audioflinger/AudioMixerOps.h | 81 |
1 files changed, 67 insertions, 14 deletions
diff --git a/services/audioflinger/AudioMixerOps.h b/services/audioflinger/AudioMixerOps.h index ad739ff..49131f6 100644 --- a/services/audioflinger/AudioMixerOps.h +++ b/services/audioflinger/AudioMixerOps.h @@ -230,6 +230,8 @@ enum { MIXTYPE_MULTI, MIXTYPE_MONOEXPAND, MIXTYPE_MULTI_SAVEONLY, + MIXTYPE_MULTI_MONOVOL, + MIXTYPE_MULTI_SAVEONLY_MONOVOL, }; /* @@ -263,6 +265,13 @@ enum { * vol: represents a volume array. * * MIXTYPE_MULTI_SAVEONLY does not accumulate into the out pointer. + * + * MIXTYPE_MULTI_MONOVOL: + * Same as MIXTYPE_MULTI, but uses only volume[0]. + * + * MIXTYPE_MULTI_SAVEONLY_MONOVOL: + * Same as MIXTYPE_MULTI_SAVEONLY, but uses only volume[0]. + * */ template <int MIXTYPE, int NCHAN, @@ -283,18 +292,30 @@ inline void volumeRampMulti(TO* out, size_t frameCount, vol[i] += volinc[i]; } break; + case MIXTYPE_MONOEXPAND: + for (int i = 0; i < NCHAN; ++i) { + *out++ += MixMulAux<TO, TI, TV, TA>(*in, vol[i], &auxaccum); + vol[i] += volinc[i]; + } + in++; + break; case MIXTYPE_MULTI_SAVEONLY: for (int i = 0; i < NCHAN; ++i) { *out++ = MixMulAux<TO, TI, TV, TA>(*in++, vol[i], &auxaccum); vol[i] += volinc[i]; } break; - case MIXTYPE_MONOEXPAND: + case MIXTYPE_MULTI_MONOVOL: for (int i = 0; i < NCHAN; ++i) { - *out++ += MixMulAux<TO, TI, TV, TA>(*in, vol[i], &auxaccum); - vol[i] += volinc[i]; + *out++ += MixMulAux<TO, TI, TV, TA>(*in++, vol[0], &auxaccum); } - in++; + vol[0] += volinc[0]; + break; + case MIXTYPE_MULTI_SAVEONLY_MONOVOL: + for (int i = 0; i < NCHAN; ++i) { + *out++ = MixMulAux<TO, TI, TV, TA>(*in++, vol[0], &auxaccum); + } + vol[0] += volinc[0]; break; default: LOG_ALWAYS_FATAL("invalid mixtype %d", MIXTYPE); @@ -313,18 +334,30 @@ inline void volumeRampMulti(TO* out, size_t frameCount, vol[i] += volinc[i]; } break; + case MIXTYPE_MONOEXPAND: + for (int i = 0; i < NCHAN; ++i) { + *out++ += MixMul<TO, TI, TV>(*in, vol[i]); + vol[i] += volinc[i]; + } + in++; + break; case MIXTYPE_MULTI_SAVEONLY: for (int i = 0; i < NCHAN; ++i) { *out++ = MixMul<TO, TI, TV>(*in++, vol[i]); vol[i] += volinc[i]; } break; - case MIXTYPE_MONOEXPAND: + case MIXTYPE_MULTI_MONOVOL: for (int i = 0; i < NCHAN; ++i) { - *out++ += MixMul<TO, TI, TV>(*in, vol[i]); - vol[i] += volinc[i]; + *out++ += MixMul<TO, TI, TV>(*in++, vol[0]); } - in++; + vol[0] += volinc[0]; + break; + case MIXTYPE_MULTI_SAVEONLY_MONOVOL: + for (int i = 0; i < NCHAN; ++i) { + *out++ = MixMul<TO, TI, TV>(*in++, vol[0]); + } + vol[0] += volinc[0]; break; default: LOG_ALWAYS_FATAL("invalid mixtype %d", MIXTYPE); @@ -351,16 +384,26 @@ inline void volumeMulti(TO* out, size_t frameCount, *out++ += MixMulAux<TO, TI, TV, TA>(*in++, vol[i], &auxaccum); } break; + case MIXTYPE_MONOEXPAND: + for (int i = 0; i < NCHAN; ++i) { + *out++ += MixMulAux<TO, TI, TV, TA>(*in, vol[i], &auxaccum); + } + in++; + break; case MIXTYPE_MULTI_SAVEONLY: for (int i = 0; i < NCHAN; ++i) { *out++ = MixMulAux<TO, TI, TV, TA>(*in++, vol[i], &auxaccum); } break; - case MIXTYPE_MONOEXPAND: + case MIXTYPE_MULTI_MONOVOL: for (int i = 0; i < NCHAN; ++i) { - *out++ += MixMulAux<TO, TI, TV, TA>(*in, vol[i], &auxaccum); + *out++ += MixMulAux<TO, TI, TV, TA>(*in++, vol[0], &auxaccum); + } + break; + case MIXTYPE_MULTI_SAVEONLY_MONOVOL: + for (int i = 0; i < NCHAN; ++i) { + *out++ = MixMulAux<TO, TI, TV, TA>(*in++, vol[0], &auxaccum); } - in++; break; default: LOG_ALWAYS_FATAL("invalid mixtype %d", MIXTYPE); @@ -377,16 +420,26 @@ inline void volumeMulti(TO* out, size_t frameCount, *out++ += MixMul<TO, TI, TV>(*in++, vol[i]); } break; + case MIXTYPE_MONOEXPAND: + for (int i = 0; i < NCHAN; ++i) { + *out++ += MixMul<TO, TI, TV>(*in, vol[i]); + } + in++; + break; case MIXTYPE_MULTI_SAVEONLY: for (int i = 0; i < NCHAN; ++i) { *out++ = MixMul<TO, TI, TV>(*in++, vol[i]); } break; - case MIXTYPE_MONOEXPAND: + case MIXTYPE_MULTI_MONOVOL: for (int i = 0; i < NCHAN; ++i) { - *out++ += MixMul<TO, TI, TV>(*in, vol[i]); + *out++ += MixMul<TO, TI, TV>(*in++, vol[0]); + } + break; + case MIXTYPE_MULTI_SAVEONLY_MONOVOL: + for (int i = 0; i < NCHAN; ++i) { + *out++ = MixMul<TO, TI, TV>(*in++, vol[0]); } - in++; break; default: LOG_ALWAYS_FATAL("invalid mixtype %d", MIXTYPE); |