Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/linux-pulseaudio/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ add_library(linux-pulseaudio MODULE)
add_library(OBS::pulseaudio ALIAS linux-pulseaudio)

target_sources(linux-pulseaudio PRIVATE # cmake-format: sortable
linux-pulseaudio.c pulse-input.c pulse-wrapper.c)
linux-pulseaudio.c pulse-input.c pulse-output.c pulse-utils.c pulse-wrapper.c)
target_link_libraries(linux-pulseaudio PRIVATE OBS::libobs PulseAudio::PulseAudio)

set_target_properties_obs(linux-pulseaudio PROPERTIES FOLDER plugins PREFIX "")
2 changes: 2 additions & 0 deletions plugins/linux-pulseaudio/linux-pulseaudio.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ MODULE_EXPORT const char *obs_module_description(void)

extern struct obs_source_info pulse_input_capture;
extern struct obs_source_info pulse_output_capture;
extern const struct obs_output_info pulse_output;

bool obs_module_load(void)
{
obs_register_source(&pulse_input_capture);
obs_register_source(&pulse_output_capture);
obs_register_output(&pulse_output);
return true;
}
110 changes: 1 addition & 109 deletions plugins/linux-pulseaudio/pulse-input.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <obs-module.h>

#include "pulse-wrapper.h"
#include "pulse-utils.h"

#define NSEC_PER_SEC 1000000000LL
#define NSEC_PER_MSEC 1000000L
Expand Down Expand Up @@ -52,115 +53,6 @@ struct pulse_data {

static void pulse_stop_recording(struct pulse_data *data);

/**
* get obs from pulse audio format
*/
static enum audio_format pulse_to_obs_audio_format(pa_sample_format_t format)
{
switch (format) {
case PA_SAMPLE_U8:
return AUDIO_FORMAT_U8BIT;
case PA_SAMPLE_S16LE:
return AUDIO_FORMAT_16BIT;
case PA_SAMPLE_S32LE:
return AUDIO_FORMAT_32BIT;
case PA_SAMPLE_FLOAT32LE:
return AUDIO_FORMAT_FLOAT;
default:
return AUDIO_FORMAT_UNKNOWN;
}

return AUDIO_FORMAT_UNKNOWN;
}

/**
* Get obs speaker layout from number of channels
*
* @param channels number of channels reported by pulseaudio
*
* @return obs speaker_layout id
*
* @note This *might* not work for some rather unusual setups, but should work
* fine for the majority of cases.
*/
static enum speaker_layout
pulse_channels_to_obs_speakers(uint_fast32_t channels)
{
switch (channels) {
case 1:
return SPEAKERS_MONO;
case 2:
return SPEAKERS_STEREO;
case 3:
return SPEAKERS_2POINT1;
case 4:
return SPEAKERS_4POINT0;
case 5:
return SPEAKERS_4POINT1;
case 6:
return SPEAKERS_5POINT1;
case 8:
return SPEAKERS_7POINT1;
}

return SPEAKERS_UNKNOWN;
}

static pa_channel_map pulse_channel_map(enum speaker_layout layout)
{
pa_channel_map ret;

ret.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
ret.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
ret.map[2] = PA_CHANNEL_POSITION_FRONT_CENTER;
ret.map[3] = PA_CHANNEL_POSITION_LFE;
ret.map[4] = PA_CHANNEL_POSITION_REAR_LEFT;
ret.map[5] = PA_CHANNEL_POSITION_REAR_RIGHT;
ret.map[6] = PA_CHANNEL_POSITION_SIDE_LEFT;
ret.map[7] = PA_CHANNEL_POSITION_SIDE_RIGHT;

switch (layout) {
case SPEAKERS_MONO:
ret.channels = 1;
ret.map[0] = PA_CHANNEL_POSITION_MONO;
break;

case SPEAKERS_STEREO:
ret.channels = 2;
break;

case SPEAKERS_2POINT1:
ret.channels = 3;
ret.map[2] = PA_CHANNEL_POSITION_LFE;
break;

case SPEAKERS_4POINT0:
ret.channels = 4;
ret.map[3] = PA_CHANNEL_POSITION_REAR_CENTER;
break;

case SPEAKERS_4POINT1:
ret.channels = 5;
ret.map[4] = PA_CHANNEL_POSITION_REAR_CENTER;
break;

case SPEAKERS_5POINT1:
ret.channels = 6;
break;

case SPEAKERS_7POINT1:
ret.channels = 8;
break;

case SPEAKERS_UNKNOWN:
default:
ret.channels = 0;
break;
}

return ret;
}

static inline uint64_t samples_to_ns(size_t frames, uint_fast32_t rate)
{
return util_mul_div64(frames, NSEC_PER_SEC, rate);
Expand Down
Loading