diff --git a/src/audio/capture/portaudio.c b/src/audio/capture/portaudio.c index 818ce738d..01746d1b1 100644 --- a/src/audio/capture/portaudio.c +++ b/src/audio/capture/portaudio.c @@ -9,7 +9,7 @@ * Ian Wesley-Smith * Martin Pulec * - * Copyright (c) 2005-2024 CESNET + * Copyright (c) 2005-2025 CESNET * * Redistribution and use in source and binary forms, with or without * modification, is permitted provided that the following conditions @@ -110,11 +110,6 @@ static void audio_cap_portaudio_probe(struct device_info **available_devices, in audio_portaudio_probe(available_devices, count, PORTAUDIO_IN); } -static void audio_cap_portaudio_help() -{ - portaudio_print_help(PORTAUDIO_IN); -} - static void portaudio_close(PaStream * stream) // closes and frees all audio resources { Pa_StopStream(stream); // may not be necessary @@ -152,17 +147,19 @@ parse_fmt(const char *cfg, PaTime *latency, int *input_device_idx, return 1; } -static void usage() { +static void +usage(bool full) +{ printf("PortAudio capture usage:\n"); + color_printf("\t" TBOLD("-s portaudio:[full]help") "\n"); color_printf("\t" TBOLD(TRED("-s portaudio") "[:[:latency=]]") "\n"); printf("or\n"); color_printf("\t" TBOLD(TRED("-s portaudio") "[:device=][:latency=]") "\n\n"); printf("options:\n"); color_printf("\t" TBOLD(" ") "\tsuggested latency in sec (experimental, use in case of problems)\n"); color_printf("\t" TBOLD("") "\tdevice name (or a part of it); device index is also accepted here\n"); - printf("\nAvailable PortAudio capture devices:\n"); - - audio_cap_portaudio_help(); + printf("\n"); + portaudio_print_help(PORTAUDIO_IN, full); } static void * audio_cap_portaudio_init(struct module *parent, const char *cfg) @@ -170,8 +167,8 @@ static void * audio_cap_portaudio_init(struct module *parent, const char *cfg) UNUSED(parent); portaudio_print_version(); - if (strcmp(cfg, "help") == 0) { - usage(); + if (strcmp(cfg, "help") == 0 || strcmp(cfg, "fullhelp") == 0) { + usage(strcmp(cfg, "fullhelp") == 0); return INIT_NOERR; } @@ -223,7 +220,7 @@ static void * audio_cap_portaudio_init(struct module *parent, const char *cfg) if(device_info == NULL) { log_msg(LOG_LEVEL_ERROR, MOD_NAME "Couldn't obtain requested portaudio device index %d.\n" MOD_NAME "Follows list of available Portaudio devices.\n", input_device_idx); - audio_cap_portaudio_help(); + portaudio_print_help(PORTAUDIO_IN, false); free(s); Pa_Terminate(); return NULL; diff --git a/src/audio/playback/portaudio.c b/src/audio/playback/portaudio.c index bdc1d8c71..ee27cb3ff 100644 --- a/src/audio/playback/portaudio.c +++ b/src/audio/playback/portaudio.c @@ -9,7 +9,7 @@ * Martin Pulec * Ian Wesley-Smith * - * Copyright (c) 2005-2024 CESNET + * Copyright (c) 2005-2025 CESNET * * Redistribution and use in source and binary forms, with or without * modification, is permitted provided that the following conditions @@ -156,15 +156,18 @@ parse_fmt(const char *cfg, int *input_device_idx, return 1; } -static void audio_play_portaudio_help(void) { +static void +audio_play_portaudio_help(bool full) +{ printf("PortAudio playback usage:\n"); + color_printf("\t" TBOLD("-s portaudio:[full]help") "\n"); color_printf("\t" TBOLD(TRED("-r portaudio") "[:]") "\n"); printf("or\n"); color_printf("\t" TBOLD(TRED("-r portaudio") "[:device=]") "\n\n"); printf("options:\n"); color_printf("\t" TBOLD("") "\tdevice name (or a part of it); device index is also accepted here\n"); - printf("\nAvailable PortAudio playback devices:\n"); - portaudio_print_help(PORTAUDIO_OUT); + printf("\n"); + portaudio_print_help(PORTAUDIO_OUT, full); } static void * @@ -174,9 +177,10 @@ audio_play_portaudio_init(const struct audio_playback_opts *opts) char output_device_name[STR_LEN] = ""; portaudio_print_version(); - - if (strcmp(opts->cfg, "help") == 0) { - audio_play_portaudio_help(); + + if (strcmp(opts->cfg, "help") == 0 || + strcmp(opts->cfg, "fullhelp") == 0) { + audio_play_portaudio_help(strcmp(opts->cfg, "fullhelp") == 0); return INIT_NOERR; } if (!parse_fmt(opts->cfg, &output_device_idx, output_device_name)) { @@ -206,7 +210,7 @@ audio_play_portaudio_init(const struct audio_playback_opts *opts) if (device_info == NULL) { log_msg(LOG_LEVEL_ERROR, MOD_NAME "Couldn't obtain requested portaudio index %d.\n" MOD_NAME "Follows list of available Portaudio devices.\n", output_device_idx); - audio_play_portaudio_help(); + audio_play_portaudio_help(false); Pa_Terminate(); free(s); return NULL; diff --git a/src/audio/portaudio_common.c b/src/audio/portaudio_common.c index ba6a97bdf..1d1ff48fc 100644 --- a/src/audio/portaudio_common.c +++ b/src/audio/portaudio_common.c @@ -80,8 +80,12 @@ static const char *portaudio_get_device_details(PaDeviceIndex device) { return buffer; } -void portaudio_print_help(enum portaudio_device_direction kind) +void +portaudio_print_help(enum portaudio_device_direction kind, bool full) { + printf("\nAvailable PortAudio %s devices:\n", + kind == PORTAUDIO_OUT ? "playback" : "capture"); + int numDevices; int i; @@ -130,6 +134,14 @@ void portaudio_print_help(enum portaudio_device_direction kind) printf("\n"); } + if (full) { + printf ("\nSupported APIs:\n"); + for (int i = 0; i < Pa_GetHostApiCount(); ++i) { + const PaHostApiInfo *info = Pa_GetHostApiInfo(i); + printf("\t" TBOLD("%s") "\n", info->name); + } + } + error: Pa_Terminate(); } diff --git a/src/audio/portaudio_common.h b/src/audio/portaudio_common.h index 2f8a8233e..443196433 100644 --- a/src/audio/portaudio_common.h +++ b/src/audio/portaudio_common.h @@ -51,7 +51,7 @@ enum portaudio_device_direction { PORTAUDIO_OUT }; -void portaudio_print_help(enum portaudio_device_direction); +void portaudio_print_help(enum portaudio_device_direction, bool full); const char *portaudio_get_device_name(PaDeviceIndex device); void audio_portaudio_probe(struct device_info **available_devices, int *count, enum portaudio_device_direction); void portaudio_print_version(void);