From e93b6b7347a7846c8fd746542364ec11b0cd5124 Mon Sep 17 00:00:00 2001 From: Andy Hung Date: Thu, 17 Jul 2014 21:30:53 -0700 Subject: 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 --- services/audioflinger/tests/mixer_to_wav_tests.sh | 4 +-- services/audioflinger/tests/test-mixer.cpp | 32 ++++++++++++++++++----- services/audioflinger/tests/test_utils.h | 4 +-- 3 files changed, 30 insertions(+), 10 deletions(-) (limited to 'services/audioflinger/tests') diff --git a/services/audioflinger/tests/mixer_to_wav_tests.sh b/services/audioflinger/tests/mixer_to_wav_tests.sh index 93bff47..9b39e77 100755 --- a/services/audioflinger/tests/mixer_to_wav_tests.sh +++ b/services/audioflinger/tests/mixer_to_wav_tests.sh @@ -72,9 +72,9 @@ function createwav() { # track__Resample / track__genericResample # track__NoResample / track__16BitsStereo / track__16BitsMono # Aux buffer - adb shell test-mixer $1 -s 9307 \ + adb shell test-mixer $1 -c 5 -s 9307 \ -a /sdcard/aux9307gra.wav -o /sdcard/tm9307gra.wav \ - sine:2,1000,3000 sine:1,2000,9307 chirp:2,9307 + sine:4,1000,3000 sine:1,2000,9307 chirp:3,9307 adb pull /sdcard/tm9307gra.wav $2 adb pull /sdcard/aux9307gra.wav $2 diff --git a/services/audioflinger/tests/test-mixer.cpp b/services/audioflinger/tests/test-mixer.cpp index 3940702..5a00f40 100644 --- a/services/audioflinger/tests/test-mixer.cpp +++ b/services/audioflinger/tests/test-mixer.cpp @@ -36,11 +36,12 @@ using namespace android; static void usage(const char* name) { - fprintf(stderr, "Usage: %s [-f] [-m]" + fprintf(stderr, "Usage: %s [-f] [-m] [-c channels]" " [-s sample-rate] [-o ] [-a ] [-P csv]" " ( | )+\n", name); fprintf(stderr, " -f enable floating point input track\n"); fprintf(stderr, " -m enable floating point mixer output\n"); + fprintf(stderr, " -c number of mixer output channels\n"); fprintf(stderr, " -s mixer sample-rate\n"); fprintf(stderr, " -o WAV file, pcm16 (or float if -m specified)\n"); fprintf(stderr, " -a \n"); @@ -90,7 +91,7 @@ int main(int argc, char* argv[]) { std::vector Names; std::vector Providers; - for (int ch; (ch = getopt(argc, argv, "fms:o:a:P:")) != -1;) { + for (int ch; (ch = getopt(argc, argv, "fmc:s:o:a:P:")) != -1;) { switch (ch) { case 'f': useInputFloat = true; @@ -98,6 +99,9 @@ int main(int argc, char* argv[]) { case 'm': useMixerFloat = true; break; + case 'c': + outputChannels = atoi(optarg); + break; case 's': outputSampleRate = atoi(optarg); break; @@ -160,7 +164,7 @@ int main(int argc, char* argv[]) { parseCSV(argv[i] + strlen(sine), v); if (v.size() == 3) { - printf("creating sine(%d %d)\n", v[0], v[1]); + printf("creating sine(%d %d %d)\n", v[0], v[1], v[2]); if (useInputFloat) { Providers[i].setSine(v[0], v[1], v[2], kSeconds); } else { @@ -191,6 +195,8 @@ int main(int argc, char* argv[]) { const size_t outputFrameSize = outputChannels * (useMixerFloat ? sizeof(float) : sizeof(int16_t)); const size_t outputSize = outputFrames * outputFrameSize; + const audio_channel_mask_t outputChannelMask = + audio_channel_out_mask_from_count(outputChannels); void *outputAddr = NULL; (void) posix_memalign(&outputAddr, 32, outputSize); memset(outputAddr, 0, outputSize); @@ -224,15 +230,29 @@ int main(int argc, char* argv[]) { Names.push_back(name); mixer->setBufferProvider(name, &Providers[i]); mixer->setParameter(name, AudioMixer::TRACK, AudioMixer::MAIN_BUFFER, - (void *) outputAddr); + (void *)outputAddr); mixer->setParameter( name, AudioMixer::TRACK, - AudioMixer::MIXER_FORMAT, (void *)mixerFormat); - mixer->setParameter(name, AudioMixer::TRACK, AudioMixer::FORMAT, + AudioMixer::MIXER_FORMAT, + (void *)(uintptr_t)mixerFormat); + mixer->setParameter( + name, + AudioMixer::TRACK, + AudioMixer::FORMAT, (void *)(uintptr_t)inputFormat); mixer->setParameter( name, + AudioMixer::TRACK, + AudioMixer::MIXER_CHANNEL_MASK, + (void *)(uintptr_t)outputChannelMask); + mixer->setParameter( + name, + AudioMixer::TRACK, + AudioMixer::CHANNEL_MASK, + (void *)(uintptr_t)channelMask); + mixer->setParameter( + name, AudioMixer::RESAMPLE, AudioMixer::SAMPLE_RATE, (void *)(uintptr_t)Providers[i].getSampleRate()); diff --git a/services/audioflinger/tests/test_utils.h b/services/audioflinger/tests/test_utils.h index f954292..e446216 100644 --- a/services/audioflinger/tests/test_utils.h +++ b/services/audioflinger/tests/test_utils.h @@ -195,7 +195,7 @@ static void createSine(void *vbuffer, size_t frames, T yt = convertValue(y); for (size_t j = 0; j < channels; ++j) { - buffer[i*channels + j] = yt / (j + 1); + buffer[i*channels + j] = yt / T(j + 1); } } } @@ -221,7 +221,7 @@ static void createChirp(void *vbuffer, size_t frames, T yt = convertValue(y); for (size_t j = 0; j < channels; ++j) { - buffer[i*channels + j] = yt / (j + 1); + buffer[i*channels + j] = yt / T(j + 1); } } } -- cgit v1.1