From 2dee5510b7c796d02bf87e04df6822457a99acec Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Wed, 28 Nov 2018 16:40:43 +0100 Subject: [PATCH] Portaudio: refactor a bit --- src/audio/capture/portaudio.c | 70 ++------------------------------ src/audio/playback/portaudio.cpp | 70 ++------------------------------ src/audio/portaudio_common.c | 58 +++++++++++++++++++++++++- src/audio/portaudio_common.h | 8 +++- 4 files changed, 70 insertions(+), 136 deletions(-) diff --git a/src/audio/capture/portaudio.c b/src/audio/capture/portaudio.c index 396bdda89..31c9868e1 100644 --- a/src/audio/capture/portaudio.c +++ b/src/audio/capture/portaudio.c @@ -82,20 +82,12 @@ struct state_portaudio_capture { struct ring_buffer *buffer; }; -enum audio_device_kind { - AUDIO_IN, - AUDIO_OUT -}; - - /* * For Portaudio threads-related issues see * http://www.portaudio.com/trac/wiki/tips/Threading */ -static void print_device_info(PaDeviceIndex device); static int portaudio_start_stream(PaStream *stream); static void portaudio_close(PaStream *stream); // closes and frees all audio resources ( according to valgrind this is not true.. ) -static void portaudio_print_available_devices(enum audio_device_kind); static int callback( const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, @@ -118,19 +110,6 @@ static int portaudio_start_stream(PaStream *stream) return 0; } - -static void print_device_info(PaDeviceIndex device) -{ - if( (device < 0) || (device >= Pa_GetDeviceCount()) ) - { - printf("Requested info on non-existing device"); - return; - } - - const PaDeviceInfo *device_info = Pa_GetDeviceInfo(device); - printf(" %s (output channels: %d; input channels: %d; %s)", device_info->name, device_info->maxOutputChannels, device_info->maxInputChannels, portaudio_get_api_name(device)); -} - static void audio_cap_portaudio_probe(struct device_info **available_devices, int *count) { *available_devices = malloc(sizeof(struct device_info)); @@ -142,50 +121,7 @@ static void audio_cap_portaudio_probe(struct device_info **available_devices, in static void audio_cap_portaudio_help(const char *driver_name) { UNUSED(driver_name); - portaudio_print_available_devices(AUDIO_IN); -} - -static void portaudio_print_available_devices(enum audio_device_kind kind) -{ - int numDevices; - int i; - - PaError error; - - error = Pa_Initialize(); - if(error != paNoError) - { - printf("error initializing portaudio\n"); - printf("\tPortAudio error: %s\n", Pa_GetErrorText( error ) ); - return; - } - - numDevices = Pa_GetDeviceCount(); - if( numDevices < 0) - { - printf("Error getting portaudio devices number\n"); - return; - } - if( numDevices == 0) - { - printf("There are NO available audio devices!\n"); - return; - } - - printf("\tportaudio : use default Portaudio device (marked with star)\n"); - - for(i = 0; i < numDevices; i++) - { - if((i == Pa_GetDefaultInputDevice() && kind == AUDIO_IN) || - (i == Pa_GetDefaultOutputDevice() && kind == AUDIO_OUT)) - printf("(*) "); - - printf("\tportaudio:%d :", i); - print_device_info(i); - printf("\n"); - } - - return; + portaudio_print_available_devices(PORTAUDIO_IN); } static void portaudio_close(PaStream * stream) // closes and frees all audio resources @@ -257,13 +193,13 @@ static void * audio_cap_portaudio_init(const char *cfg) if(input_device == -1) { printf("Using default input audio device"); - print_device_info(Pa_GetDefaultInputDevice()); + portaudio_print_device_info(Pa_GetDefaultInputDevice()); printf("\n"); inputParameters.device = Pa_GetDefaultInputDevice(); device_info = Pa_GetDeviceInfo(Pa_GetDefaultInputDevice()); } else if(input_device >= 0) { printf("Using input audio device:"); - print_device_info(input_device); + portaudio_print_device_info(input_device); printf("\n"); inputParameters.device = input_device; device_info = Pa_GetDeviceInfo(input_device); diff --git a/src/audio/playback/portaudio.cpp b/src/audio/playback/portaudio.cpp index d757f3f87..8d7ba3a42 100644 --- a/src/audio/playback/portaudio.cpp +++ b/src/audio/playback/portaudio.cpp @@ -89,20 +89,13 @@ struct state_portaudio_playback { bool quiet; }; -enum audio_device_kind { - AUDIO_IN, - AUDIO_OUT -}; - /* * For Portaudio threads-related issues see * http://www.portaudio.com/trac/wiki/tips/Threading */ /* prototyping */ -static void print_device_info(PaDeviceIndex device); static void portaudio_close(PaStream *stream); /* closes and frees all audio resources ( according to valgrind this is not true.. ) */ -static void portaudio_print_available_devices(enum audio_device_kind); static int callback( const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, @@ -129,18 +122,6 @@ static bool portaudio_start_stream(PaStream *stream) return true; } -static void print_device_info(PaDeviceIndex device) -{ - if( (device < 0) || (device >= Pa_GetDeviceCount()) ) - { - printf("Requested info on non-existing device"); - return; - } - - const PaDeviceInfo *device_info = Pa_GetDeviceInfo(device); - printf(" %s (output channels: %d; input channels: %d; %s)", device_info->name, device_info->maxOutputChannels, device_info->maxInputChannels, portaudio_get_api_name(device)); -} - static void audio_play_portaudio_probe(struct device_info **available_devices, int *count) { *available_devices = (struct device_info *) malloc(sizeof(struct device_info)); @@ -152,52 +133,7 @@ static void audio_play_portaudio_probe(struct device_info **available_devices, i static void audio_play_portaudio_help(const char *driver_name) { UNUSED(driver_name); - portaudio_print_available_devices(AUDIO_OUT); -} - -static void portaudio_print_available_devices(enum audio_device_kind kind) -{ - int numDevices; - int i; - - PaError error; - - error = Pa_Initialize(); - if(error != paNoError) - { - printf("error initializing portaudio\n"); - printf("\tPortAudio error: %s\n", Pa_GetErrorText( error ) ); - return; - } - - numDevices = Pa_GetDeviceCount(); - if( numDevices < 0) - { - printf("Error getting portaudio devices number\n"); - Pa_Terminate(); - return; - } - if( numDevices == 0) - { - printf("There are NO available audio devices!\n"); - Pa_Terminate(); - return; - } - - printf("\tportaudio : use default Portaudio device (marked with star)\n"); - - for(i = 0; i < numDevices; i++) - { - if((i == Pa_GetDefaultInputDevice() && kind == AUDIO_IN) || - (i == Pa_GetDefaultOutputDevice() && kind == AUDIO_OUT)) - printf("(*) "); - - printf("\tportaudio:%d :", i); - print_device_info(i); - printf("\n"); - } - - Pa_Terminate(); + portaudio_print_available_devices(PORTAUDIO_OUT); } static void portaudio_close(PaStream * stream) // closes and frees all audio resources @@ -395,14 +331,14 @@ static int audio_play_portaudio_reconfigure(void *state, struct audio_desc desc) { printf("\nUsing default output audio device:"); fflush(stdout); - print_device_info(Pa_GetDefaultOutputDevice()); + portaudio_print_device_info(Pa_GetDefaultOutputDevice()); printf("\n"); outputParameters.device = Pa_GetDefaultOutputDevice(); } else if(s->device >= 0) { printf("\nUsing output audio device:"); - print_device_info(s->device); + portaudio_print_device_info(s->device); printf("\n"); outputParameters.device = s->device; } diff --git a/src/audio/portaudio_common.c b/src/audio/portaudio_common.c index 4bf34159c..d32f17969 100644 --- a/src/audio/portaudio_common.c +++ b/src/audio/portaudio_common.c @@ -45,7 +45,7 @@ #include "portaudio_common.h" -const char *portaudio_get_api_name(PaDeviceIndex device) { +static const char *portaudio_get_api_name(PaDeviceIndex device) { for (int i = 0; i < Pa_GetHostApiCount(); ++i) { const PaHostApiInfo *info = Pa_GetHostApiInfo(i); for (int j = 0; j < info->deviceCount; ++j) { @@ -58,3 +58,59 @@ const char *portaudio_get_api_name(PaDeviceIndex device) { return "(unknown API)"; } +void portaudio_print_device_info(PaDeviceIndex device) +{ + if( (device < 0) || (device >= Pa_GetDeviceCount()) ) + { + printf("Requested info on non-existing device"); + return; + } + + const PaDeviceInfo *device_info = Pa_GetDeviceInfo(device); + printf(" %s (output channels: %d; input channels: %d; %s)", device_info->name, device_info->maxOutputChannels, device_info->maxInputChannels, portaudio_get_api_name(device)); +} + +void portaudio_print_available_devices(enum portaudio_device_direction kind) +{ + int numDevices; + int i; + + PaError error; + + error = Pa_Initialize(); + if(error != paNoError) + { + printf("error initializing portaudio\n"); + printf("\tPortAudio error: %s\n", Pa_GetErrorText( error ) ); + return; + } + + numDevices = Pa_GetDeviceCount(); + if( numDevices < 0) + { + printf("Error getting portaudio devices number\n"); + goto error; + } + if( numDevices == 0) + { + printf("There are NO available audio devices!\n"); + goto error; + } + + printf("\tportaudio : use default Portaudio device (marked with star)\n"); + + for(i = 0; i < numDevices; i++) + { + if((i == Pa_GetDefaultInputDevice() && kind == PORTAUDIO_IN) || + (i == Pa_GetDefaultOutputDevice() && kind == PORTAUDIO_OUT)) + printf("(*) "); + + printf("\tportaudio:%d :", i); + portaudio_print_device_info(i); + printf("\n"); + } + +error: + Pa_Terminate(); +} + diff --git a/src/audio/portaudio_common.h b/src/audio/portaudio_common.h index 44372b764..c98b3092f 100644 --- a/src/audio/portaudio_common.h +++ b/src/audio/portaudio_common.h @@ -42,7 +42,13 @@ extern "C" { #endif -const char *portaudio_get_api_name(PaDeviceIndex device); +enum portaudio_device_direction { + PORTAUDIO_IN, + PORTAUDIO_OUT +}; + +void portaudio_print_available_devices(enum portaudio_device_direction); +void portaudio_print_device_info(PaDeviceIndex device); #ifdef __cplusplus }