mirror of
https://github.com/Ryujinx/libsoundio.git
synced 2024-12-22 23:55:34 +00:00
parent
7b2a10f7e5
commit
760aee2e54
36
src/jack.cpp
36
src/jack.cpp
|
@ -426,6 +426,8 @@ static int outstream_open_jack(struct SoundIoPrivate *si, struct SoundIoOutStrea
|
|||
SoundIoDevicePrivate *dev = (SoundIoDevicePrivate *)device;
|
||||
SoundIoDeviceJack *dj = &dev->backend_data.jack;
|
||||
|
||||
osj->is_paused = true;
|
||||
|
||||
if (sij->is_shutdown)
|
||||
return SoundIoErrorBackendDisconnected;
|
||||
|
||||
|
@ -516,21 +518,27 @@ static int outstream_pause_jack(struct SoundIoPrivate *si, struct SoundIoOutStre
|
|||
|
||||
int err;
|
||||
if (pause) {
|
||||
if ((err = jack_deactivate(osj->client)))
|
||||
return SoundIoErrorStreaming;
|
||||
} else {
|
||||
if ((err = jack_activate(osj->client)))
|
||||
return SoundIoErrorStreaming;
|
||||
|
||||
for (int ch = 0; ch < outstream->layout.channel_count; ch += 1) {
|
||||
SoundIoOutStreamJackPort *osjp = &osj->ports[ch];
|
||||
const char *dest_port_name = osjp->dest_port_name;
|
||||
// allow unconnected ports
|
||||
if (!dest_port_name)
|
||||
continue;
|
||||
const char *source_port_name = jack_port_name(osjp->source_port);
|
||||
if ((err = jack_connect(osj->client, source_port_name, dest_port_name)))
|
||||
if (!osj->is_paused) {
|
||||
if ((err = jack_deactivate(osj->client)))
|
||||
return SoundIoErrorStreaming;
|
||||
osj->is_paused = true;
|
||||
}
|
||||
} else {
|
||||
if (osj->is_paused) {
|
||||
if ((err = jack_activate(osj->client)))
|
||||
return SoundIoErrorStreaming;
|
||||
|
||||
for (int ch = 0; ch < outstream->layout.channel_count; ch += 1) {
|
||||
SoundIoOutStreamJackPort *osjp = &osj->ports[ch];
|
||||
const char *dest_port_name = osjp->dest_port_name;
|
||||
// allow unconnected ports
|
||||
if (!dest_port_name)
|
||||
continue;
|
||||
const char *source_port_name = jack_port_name(osjp->source_port);
|
||||
if ((err = jack_connect(osj->client, source_port_name, dest_port_name)))
|
||||
return SoundIoErrorStreaming;
|
||||
}
|
||||
osj->is_paused = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ struct SoundIoOutStreamJack {
|
|||
jack_client_t *client;
|
||||
int period_size;
|
||||
int frames_left;
|
||||
bool is_paused;
|
||||
SoundIoOutStreamJackPort ports[SOUNDIO_MAX_CHANNELS];
|
||||
SoundIoChannelArea areas[SOUNDIO_MAX_CHANNELS];
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue