mirror of
https://github.com/Ryujinx/libsoundio.git
synced 2024-12-23 04:05:36 +00:00
fix build on linux
This commit is contained in:
parent
f77663399f
commit
c52e76928f
|
@ -244,7 +244,6 @@ view `coverage/index.html` in a browser.
|
||||||
0. implement CoreAudio (OSX) backend, get examples working
|
0. implement CoreAudio (OSX) backend, get examples working
|
||||||
0. Add some builtin channel layouts from
|
0. Add some builtin channel layouts from
|
||||||
https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/CoreAudioDataTypesRef/#//apple_ref/doc/constant_group/Audio_Channel_Layout_Tags
|
https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/CoreAudioDataTypesRef/#//apple_ref/doc/constant_group/Audio_Channel_Layout_Tags
|
||||||
0. Add more PulseAudio channel ids
|
|
||||||
0. Make sure PulseAudio can handle refresh devices crashing before
|
0. Make sure PulseAudio can handle refresh devices crashing before
|
||||||
block_until_have_devices
|
block_until_have_devices
|
||||||
0. implement WASAPI (Windows) backend, get examples working
|
0. implement WASAPI (Windows) backend, get examples working
|
||||||
|
|
14
src/alsa.cpp
14
src/alsa.cpp
|
@ -156,9 +156,10 @@ static int to_alsa_chmap_pos(SoundIoChannelId channel_id) {
|
||||||
case SoundIoChannelIdBottomCenter: return SND_CHMAP_BC;
|
case SoundIoChannelIdBottomCenter: return SND_CHMAP_BC;
|
||||||
case SoundIoChannelIdBottomLeftCenter: return SND_CHMAP_BLC;
|
case SoundIoChannelIdBottomLeftCenter: return SND_CHMAP_BLC;
|
||||||
case SoundIoChannelIdBottomRightCenter: return SND_CHMAP_BRC;
|
case SoundIoChannelIdBottomRightCenter: return SND_CHMAP_BRC;
|
||||||
case SoundIoChannelIdInvalid: return SND_CHMAP_UNKNOWN;
|
|
||||||
}
|
default:
|
||||||
return SND_CHMAP_UNKNOWN;
|
return SND_CHMAP_UNKNOWN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_channel_layout(SoundIoChannelLayout *dest, snd_pcm_chmap_t *chmap) {
|
static void get_channel_layout(SoundIoChannelLayout *dest, snd_pcm_chmap_t *chmap) {
|
||||||
|
@ -717,6 +718,7 @@ static void shutdown_backend(SoundIoPrivate *si, int err) {
|
||||||
|
|
||||||
static void device_thread_run(void *arg) {
|
static void device_thread_run(void *arg) {
|
||||||
SoundIoPrivate *si = (SoundIoPrivate *)arg;
|
SoundIoPrivate *si = (SoundIoPrivate *)arg;
|
||||||
|
SoundIo *soundio = &si->pub;
|
||||||
SoundIoAlsa *sia = &si->backend_data.alsa;
|
SoundIoAlsa *sia = &si->backend_data.alsa;
|
||||||
|
|
||||||
// Some systems cannot read integer variables if they are not
|
// Some systems cannot read integer variables if they are not
|
||||||
|
@ -808,8 +810,12 @@ static void device_thread_run(void *arg) {
|
||||||
err = refresh_devices(si);
|
err = refresh_devices(si);
|
||||||
if (err)
|
if (err)
|
||||||
shutdown_backend(si, err);
|
shutdown_backend(si, err);
|
||||||
if (!sia->have_devices_flag.exchange(true))
|
if (!sia->have_devices_flag.exchange(true)) {
|
||||||
soundio_os_cond_signal(sica->have_devices_cond, nullptr);
|
soundio_os_mutex_lock(sia->mutex);
|
||||||
|
soundio_os_cond_signal(sia->cond, sia->mutex);
|
||||||
|
soundio->on_events_signal(soundio);
|
||||||
|
soundio_os_mutex_unlock(sia->mutex);
|
||||||
|
}
|
||||||
if (err)
|
if (err)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -470,6 +470,11 @@ static const char *channel_names[][channel_name_alias_count] = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
},
|
},
|
||||||
|
[SoundIoChannelIdLfe2] = {
|
||||||
|
"LFE 2",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
[SoundIoChannelIdBottomCenter] = {
|
[SoundIoChannelIdBottomCenter] = {
|
||||||
"Bottom Center",
|
"Bottom Center",
|
||||||
nullptr,
|
nullptr,
|
||||||
|
@ -485,6 +490,171 @@ static const char *channel_names[][channel_name_alias_count] = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
},
|
},
|
||||||
|
[SoundIoChannelIdMsMid] = {
|
||||||
|
"Mid/Side Mid",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdMsSide] = {
|
||||||
|
"Mid/Side Side",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAmbisonicW] = {
|
||||||
|
"Ambisonic W",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAmbisonicX] = {
|
||||||
|
"Ambisonic X",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAmbisonicY] = {
|
||||||
|
"Ambisonic Y",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAmbisonicZ] = {
|
||||||
|
"Ambisonic Z",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdXyX] = {
|
||||||
|
"X-Y X",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdXyY] = {
|
||||||
|
"X-Y Y",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdHeadphonesLeft] = {
|
||||||
|
"Headphones Left",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdHeadphonesRight] = {
|
||||||
|
"Headphones Right",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdClickTrack] = {
|
||||||
|
"Click Track",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdForeignLanguage] = {
|
||||||
|
"Foreign Language",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdHearingImpaired] = {
|
||||||
|
"Hearing Impaired",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdNarration] = {
|
||||||
|
"Narration",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdHaptic] = {
|
||||||
|
"Haptic",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdDialogCentricMix] = {
|
||||||
|
"Dialog Centric Mix",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux] = {
|
||||||
|
"Aux",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux0] = {
|
||||||
|
"Aux 0",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux1] = {
|
||||||
|
"Aux 1",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux2] = {
|
||||||
|
"Aux 2",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux3] = {
|
||||||
|
"Aux 3",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux4] = {
|
||||||
|
"Aux 4",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux5] = {
|
||||||
|
"Aux 5",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux6] = {
|
||||||
|
"Aux 6",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux7] = {
|
||||||
|
"Aux 7",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux8] = {
|
||||||
|
"Aux 8",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux9] = {
|
||||||
|
"Aux 9",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux10] = {
|
||||||
|
"Aux 10",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux11] = {
|
||||||
|
"Aux 11",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux12] = {
|
||||||
|
"Aux 12",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux13] = {
|
||||||
|
"Aux 13",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux14] = {
|
||||||
|
"Aux 14",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
|
[SoundIoChannelIdAux15] = {
|
||||||
|
"Aux 15",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *soundio_get_channel_name(enum SoundIoChannelId id) {
|
const char *soundio_get_channel_name(enum SoundIoChannelId id) {
|
||||||
|
|
|
@ -151,17 +151,17 @@ static SoundIoChannelId from_channel_descr(const AudioChannelDescription *descr)
|
||||||
case kAudioChannelLabel_Right: return SoundIoChannelIdFrontRight;
|
case kAudioChannelLabel_Right: return SoundIoChannelIdFrontRight;
|
||||||
case kAudioChannelLabel_Center: return SoundIoChannelIdFrontCenter;
|
case kAudioChannelLabel_Center: return SoundIoChannelIdFrontCenter;
|
||||||
case kAudioChannelLabel_LFEScreen: return SoundIoChannelIdLfe;
|
case kAudioChannelLabel_LFEScreen: return SoundIoChannelIdLfe;
|
||||||
case kAudioChannelLabel_LeftSurround: return SoundIoChannelIdSideLeft;
|
case kAudioChannelLabel_LeftSurround: return SoundIoChannelIdBackLeft;
|
||||||
case kAudioChannelLabel_RightSurround: return SoundIoChannelIdSideRight;
|
case kAudioChannelLabel_RightSurround: return SoundIoChannelIdBackRight;
|
||||||
case kAudioChannelLabel_LeftCenter: return SoundIoChannelIdSideLeft;
|
case kAudioChannelLabel_LeftCenter: return SoundIoChannelIdFrontLeftCenter;
|
||||||
case kAudioChannelLabel_RightCenter: return SoundIoChannelIdSideRight;
|
case kAudioChannelLabel_RightCenter: return SoundIoChannelIdFrontRightCenter;
|
||||||
case kAudioChannelLabel_CenterSurround: return SoundIoChannelIdBackCenter;
|
case kAudioChannelLabel_CenterSurround: return SoundIoChannelIdBackCenter;
|
||||||
case kAudioChannelLabel_LeftSurroundDirect: return SoundIoChannelIdSideLeft;
|
case kAudioChannelLabel_LeftSurroundDirect: return SoundIoChannelIdSideLeft;
|
||||||
case kAudioChannelLabel_RightSurroundDirect: return SoundIoChannelIdSideRight;
|
case kAudioChannelLabel_RightSurroundDirect: return SoundIoChannelIdSideRight;
|
||||||
case kAudioChannelLabel_TopCenterSurround: return SoundIoChannelIdTopCenter;
|
case kAudioChannelLabel_TopCenterSurround: return SoundIoChannelIdTopCenter;
|
||||||
case kAudioChannelLabel_VerticalHeightLeft: return SoundIoChannelIdTopSideLeft;
|
case kAudioChannelLabel_VerticalHeightLeft: return SoundIoChannelIdTopFrontLeft;
|
||||||
case kAudioChannelLabel_VerticalHeightCenter: return SoundIoChannelIdTopCenter;
|
case kAudioChannelLabel_VerticalHeightCenter: return SoundIoChannelIdTopFrontCenter;
|
||||||
case kAudioChannelLabel_VerticalHeightRight: return SoundIoChannelIdTopSideRight;
|
case kAudioChannelLabel_VerticalHeightRight: return SoundIoChannelIdTopFrontRight;
|
||||||
case kAudioChannelLabel_TopBackLeft: return SoundIoChannelIdTopBackLeft;
|
case kAudioChannelLabel_TopBackLeft: return SoundIoChannelIdTopBackLeft;
|
||||||
case kAudioChannelLabel_TopBackCenter: return SoundIoChannelIdTopBackCenter;
|
case kAudioChannelLabel_TopBackCenter: return SoundIoChannelIdTopBackCenter;
|
||||||
case kAudioChannelLabel_TopBackRight: return SoundIoChannelIdTopBackRight;
|
case kAudioChannelLabel_TopBackRight: return SoundIoChannelIdTopBackRight;
|
||||||
|
@ -629,6 +629,7 @@ static void wakeup_ca(struct SoundIoPrivate *si) {
|
||||||
|
|
||||||
static void device_thread_run(void *arg) {
|
static void device_thread_run(void *arg) {
|
||||||
SoundIoPrivate *si = (SoundIoPrivate *)arg;
|
SoundIoPrivate *si = (SoundIoPrivate *)arg;
|
||||||
|
SoundIo *soundio = &si->pub;
|
||||||
SoundIoCoreAudio *sica = &si->backend_data.coreaudio;
|
SoundIoCoreAudio *sica = &si->backend_data.coreaudio;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -643,8 +644,10 @@ static void device_thread_run(void *arg) {
|
||||||
err = refresh_devices(si);
|
err = refresh_devices(si);
|
||||||
if (err)
|
if (err)
|
||||||
shutdown_backend(si, err);
|
shutdown_backend(si, err);
|
||||||
if (!sica->have_devices_flag.exchange(true))
|
if (!sica->have_devices_flag.exchange(true)) {
|
||||||
soundio_os_cond_signal(sica->have_devices_cond, nullptr);
|
soundio_os_cond_signal(sica->have_devices_cond, nullptr);
|
||||||
|
soundio->on_events_signal(soundio);
|
||||||
|
}
|
||||||
if (err)
|
if (err)
|
||||||
return;
|
return;
|
||||||
soundio_os_cond_signal(sica->cond, nullptr);
|
soundio_os_cond_signal(sica->cond, nullptr);
|
||||||
|
|
|
@ -128,6 +128,23 @@ static SoundIoChannelId from_pulseaudio_channel_pos(pa_channel_position_t pos) {
|
||||||
case PA_CHANNEL_POSITION_TOP_REAR_RIGHT: return SoundIoChannelIdTopBackRight;
|
case PA_CHANNEL_POSITION_TOP_REAR_RIGHT: return SoundIoChannelIdTopBackRight;
|
||||||
case PA_CHANNEL_POSITION_TOP_REAR_CENTER: return SoundIoChannelIdTopBackCenter;
|
case PA_CHANNEL_POSITION_TOP_REAR_CENTER: return SoundIoChannelIdTopBackCenter;
|
||||||
|
|
||||||
|
case PA_CHANNEL_POSITION_AUX0: return SoundIoChannelIdAux0;
|
||||||
|
case PA_CHANNEL_POSITION_AUX1: return SoundIoChannelIdAux1;
|
||||||
|
case PA_CHANNEL_POSITION_AUX2: return SoundIoChannelIdAux2;
|
||||||
|
case PA_CHANNEL_POSITION_AUX3: return SoundIoChannelIdAux3;
|
||||||
|
case PA_CHANNEL_POSITION_AUX4: return SoundIoChannelIdAux4;
|
||||||
|
case PA_CHANNEL_POSITION_AUX5: return SoundIoChannelIdAux5;
|
||||||
|
case PA_CHANNEL_POSITION_AUX6: return SoundIoChannelIdAux6;
|
||||||
|
case PA_CHANNEL_POSITION_AUX7: return SoundIoChannelIdAux7;
|
||||||
|
case PA_CHANNEL_POSITION_AUX8: return SoundIoChannelIdAux8;
|
||||||
|
case PA_CHANNEL_POSITION_AUX9: return SoundIoChannelIdAux9;
|
||||||
|
case PA_CHANNEL_POSITION_AUX10: return SoundIoChannelIdAux10;
|
||||||
|
case PA_CHANNEL_POSITION_AUX11: return SoundIoChannelIdAux11;
|
||||||
|
case PA_CHANNEL_POSITION_AUX12: return SoundIoChannelIdAux12;
|
||||||
|
case PA_CHANNEL_POSITION_AUX13: return SoundIoChannelIdAux13;
|
||||||
|
case PA_CHANNEL_POSITION_AUX14: return SoundIoChannelIdAux14;
|
||||||
|
case PA_CHANNEL_POSITION_AUX15: return SoundIoChannelIdAux15;
|
||||||
|
|
||||||
default: return SoundIoChannelIdInvalid;
|
default: return SoundIoChannelIdInvalid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -562,26 +579,26 @@ static pa_channel_position_t to_pulseaudio_channel_pos(SoundIoChannelId channel_
|
||||||
case SoundIoChannelIdTopBackCenter: return PA_CHANNEL_POSITION_TOP_REAR_CENTER;
|
case SoundIoChannelIdTopBackCenter: return PA_CHANNEL_POSITION_TOP_REAR_CENTER;
|
||||||
case SoundIoChannelIdTopBackRight: return PA_CHANNEL_POSITION_TOP_REAR_RIGHT;
|
case SoundIoChannelIdTopBackRight: return PA_CHANNEL_POSITION_TOP_REAR_RIGHT;
|
||||||
|
|
||||||
case SoundIoChannelIdInvalid:
|
case SoundIoChannelIdAux0: return PA_CHANNEL_POSITION_AUX0;
|
||||||
case SoundIoChannelIdBackLeftCenter:
|
case SoundIoChannelIdAux1: return PA_CHANNEL_POSITION_AUX1;
|
||||||
case SoundIoChannelIdBackRightCenter:
|
case SoundIoChannelIdAux2: return PA_CHANNEL_POSITION_AUX2;
|
||||||
case SoundIoChannelIdFrontLeftWide:
|
case SoundIoChannelIdAux3: return PA_CHANNEL_POSITION_AUX3;
|
||||||
case SoundIoChannelIdFrontRightWide:
|
case SoundIoChannelIdAux4: return PA_CHANNEL_POSITION_AUX4;
|
||||||
case SoundIoChannelIdFrontLeftHigh:
|
case SoundIoChannelIdAux5: return PA_CHANNEL_POSITION_AUX5;
|
||||||
case SoundIoChannelIdFrontCenterHigh:
|
case SoundIoChannelIdAux6: return PA_CHANNEL_POSITION_AUX6;
|
||||||
case SoundIoChannelIdFrontRightHigh:
|
case SoundIoChannelIdAux7: return PA_CHANNEL_POSITION_AUX7;
|
||||||
case SoundIoChannelIdTopFrontLeftCenter:
|
case SoundIoChannelIdAux8: return PA_CHANNEL_POSITION_AUX8;
|
||||||
case SoundIoChannelIdTopFrontRightCenter:
|
case SoundIoChannelIdAux9: return PA_CHANNEL_POSITION_AUX9;
|
||||||
case SoundIoChannelIdTopSideLeft:
|
case SoundIoChannelIdAux10: return PA_CHANNEL_POSITION_AUX10;
|
||||||
case SoundIoChannelIdTopSideRight:
|
case SoundIoChannelIdAux11: return PA_CHANNEL_POSITION_AUX11;
|
||||||
case SoundIoChannelIdLeftLfe:
|
case SoundIoChannelIdAux12: return PA_CHANNEL_POSITION_AUX12;
|
||||||
case SoundIoChannelIdRightLfe:
|
case SoundIoChannelIdAux13: return PA_CHANNEL_POSITION_AUX13;
|
||||||
case SoundIoChannelIdBottomCenter:
|
case SoundIoChannelIdAux14: return PA_CHANNEL_POSITION_AUX14;
|
||||||
case SoundIoChannelIdBottomLeftCenter:
|
case SoundIoChannelIdAux15: return PA_CHANNEL_POSITION_AUX15;
|
||||||
case SoundIoChannelIdBottomRightCenter:
|
|
||||||
|
default:
|
||||||
return PA_CHANNEL_POSITION_INVALID;
|
return PA_CHANNEL_POSITION_INVALID;
|
||||||
}
|
}
|
||||||
return PA_CHANNEL_POSITION_INVALID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static pa_channel_map to_pulseaudio_channel_map(const SoundIoChannelLayout *channel_layout) {
|
static pa_channel_map to_pulseaudio_channel_map(const SoundIoChannelLayout *channel_layout) {
|
||||||
|
|
|
@ -30,6 +30,7 @@ static void test_create_outstream(void) {
|
||||||
struct SoundIo *soundio = soundio_create();
|
struct SoundIo *soundio = soundio_create();
|
||||||
assert(soundio);
|
assert(soundio);
|
||||||
ok_or_panic(soundio_connect(soundio));
|
ok_or_panic(soundio_connect(soundio));
|
||||||
|
soundio_flush_events(soundio);
|
||||||
int default_out_device_index = soundio_default_output_device_index(soundio);
|
int default_out_device_index = soundio_default_output_device_index(soundio);
|
||||||
assert(default_out_device_index >= 0);
|
assert(default_out_device_index >= 0);
|
||||||
struct SoundIoDevice *device = soundio_get_output_device(soundio, default_out_device_index);
|
struct SoundIoDevice *device = soundio_get_output_device(soundio, default_out_device_index);
|
||||||
|
|
Loading…
Reference in a new issue