From cbf4cba5a97ed7ed9303627ceb644aff9c1fbf4e Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 20 Nov 2024 19:09:40 +0100 Subject: Allow recording app audio with -a, deprecate -aa and -aai Use -a "app:brave" instead of -aa "brave". Use -a "app-inverse:brave" instead of -aai "brave". This now allows merging audio devices and app audio into the same audio track. --- include/pipewire_audio.h | 58 ++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 24 deletions(-) (limited to 'include/pipewire_audio.h') diff --git a/include/pipewire_audio.h b/include/pipewire_audio.h index 8cfb2d2..1d37eb8 100644 --- a/include/pipewire_audio.h +++ b/include/pipewire_audio.h @@ -8,14 +8,14 @@ #include -#define GSR_PIPEWIRE_AUDIO_MAX_STREAM_NODES 64 -#define GSR_PIPEWIRE_AUDIO_MAX_PORTS 64 +#define GSR_PIPEWIRE_AUDIO_MAX_STREAM_NODES 128 +#define GSR_PIPEWIRE_AUDIO_MAX_PORTS 128 #define GSR_PIPEWIRE_AUDIO_MAX_REQUESTED_LINKS 32 typedef enum { GSR_PIPEWIRE_AUDIO_NODE_TYPE_STREAM_OUTPUT, /* Application audio */ GSR_PIPEWIRE_AUDIO_NODE_TYPE_STREAM_INPUT, /* Audio recording input */ - GSR_PIPEWIRE_AUDIO_NODE_TYPE_SINK + GSR_PIPEWIRE_AUDIO_NODE_TYPE_SINK_OR_SOURCE /* Audio output or input device or combined (virtual) sink */ } gsr_pipewire_audio_node_type; typedef struct { @@ -37,16 +37,17 @@ typedef struct { } gsr_pipewire_audio_port; typedef enum { - GSR_PIPEWIRE_AUDIO_LINK_OUTPUT_TYPE_STREAM, - GSR_PIPEWIRE_AUDIO_LINK_OUTPUT_TYPE_SINK -} gsr_pipewire_audio_link_output_type; + GSR_PIPEWIRE_AUDIO_LINK_INPUT_TYPE_STREAM, /* Application */ + GSR_PIPEWIRE_AUDIO_LINK_INPUT_TYPE_SINK /* Combined (virtual) sink */ +} gsr_pipewire_audio_link_input_type; typedef struct { - char **app_names; - int num_app_names; - char *output_name; + char **output_names; + int num_output_names; + char *input_name; bool inverted; - gsr_pipewire_audio_link_output_type output_type; + gsr_pipewire_audio_node_type output_type; + gsr_pipewire_audio_link_input_type input_type; } gsr_pipewire_audio_requested_link; typedef struct { @@ -72,38 +73,47 @@ bool gsr_pipewire_audio_init(gsr_pipewire_audio *self); void gsr_pipewire_audio_deinit(gsr_pipewire_audio *self); /* - This function links audio source outputs from applications that match the name |app_names_output| to the input + This function links audio source outputs from applications that match the name |app_names| to the input that matches the name |stream_name_input|. If an application or a new application starts outputting audio after this function is called and the app name matches then it will automatically link the audio sources. - |app_names_output| and |stream_name_input| are case-insensitive matches. + |app_names| and |stream_name_input| are case-insensitive matches. */ -bool gsr_pipewire_audio_add_link_from_apps_to_stream(gsr_pipewire_audio *self, const char **app_names_output, int num_app_names_output, const char *stream_name_input); +bool gsr_pipewire_audio_add_link_from_apps_to_stream(gsr_pipewire_audio *self, const char **app_names, int num_app_names, const char *stream_name_input); /* - This function links audio source outputs from all applications except the ones that match the name |app_names_output| to the input + This function links audio source outputs from all applications except the ones that match the name |app_names| to the input that matches the name |stream_name_input|. - If an application or a new application starts outputting audio after this function is called and the app name doesn't matche + If an application or a new application starts outputting audio after this function is called and the app name doesn't match then it will automatically link the audio sources. - |app_names_output| and |stream_name_input| are case-insensitive matches. + |app_names| and |stream_name_input| are case-insensitive matches. */ -bool gsr_pipewire_audio_add_link_from_apps_to_stream_inverted(gsr_pipewire_audio *self, const char **app_names_output, int num_app_names_output, const char *stream_name_input); +bool gsr_pipewire_audio_add_link_from_apps_to_stream_inverted(gsr_pipewire_audio *self, const char **app_names, int num_app_names, const char *stream_name_input); /* - This function links audio source outputs from applications that match the name |app_names_output| to the input + This function links audio source outputs from applications that match the name |app_names| to the input that matches the name |sink_name_input|. If an application or a new application starts outputting audio after this function is called and the app name matches then it will automatically link the audio sources. - |app_names_output| and |sink_name_input| are case-insensitive matches. + |app_names| and |sink_name_input| are case-insensitive matches. */ -bool gsr_pipewire_audio_add_link_from_apps_to_sink(gsr_pipewire_audio *self, const char **app_names_output, int num_app_names_output, const char *sink_name_input); +bool gsr_pipewire_audio_add_link_from_apps_to_sink(gsr_pipewire_audio *self, const char **app_names, int num_app_names, const char *sink_name_input); /* - This function links audio source outputs from all applications except the ones that match the name |app_names_output| to the input + This function links audio source outputs from all applications except the ones that match the name |app_names| to the input that matches the name |sink_name_input|. - If an application or a new application starts outputting audio after this function is called and the app name doesn't matche + If an application or a new application starts outputting audio after this function is called and the app name doesn't match then it will automatically link the audio sources. - |app_names_output| and |sink_name_input| are case-insensitive matches. + |app_names| and |sink_name_input| are case-insensitive matches. */ -bool gsr_pipewire_audio_add_link_from_apps_to_sink_inverted(gsr_pipewire_audio *self, const char **app_names_output, int num_app_names_output, const char *sink_name_input); +bool gsr_pipewire_audio_add_link_from_apps_to_sink_inverted(gsr_pipewire_audio *self, const char **app_names, int num_app_names, const char *sink_name_input); + +/* + This function links audio source outputs from devices that match the name |source_names| to the input + that matches the name |sink_name_input|. + If a device or a new device starts outputting audio after this function is called and the device name matches + then it will automatically link the audio sources. + |source_names| and |sink_name_input| are case-insensitive matches. +*/ +bool gsr_pipewire_audio_add_link_from_sources_to_sink(gsr_pipewire_audio *self, const char **source_names, int num_source_names, const char *sink_name_input); /* Return true to continue */ typedef bool (*gsr_pipewire_audio_app_query_callback)(const char *app_name, void *userdata); -- cgit v1.2.3