mirror of
https://github.com/Ryujinx/libsoundio.git
synced 2024-12-22 23:25: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;
|
SoundIoDevicePrivate *dev = (SoundIoDevicePrivate *)device;
|
||||||
SoundIoDeviceJack *dj = &dev->backend_data.jack;
|
SoundIoDeviceJack *dj = &dev->backend_data.jack;
|
||||||
|
|
||||||
|
osj->is_paused = true;
|
||||||
|
|
||||||
if (sij->is_shutdown)
|
if (sij->is_shutdown)
|
||||||
return SoundIoErrorBackendDisconnected;
|
return SoundIoErrorBackendDisconnected;
|
||||||
|
|
||||||
|
@ -516,21 +518,27 @@ static int outstream_pause_jack(struct SoundIoPrivate *si, struct SoundIoOutStre
|
||||||
|
|
||||||
int err;
|
int err;
|
||||||
if (pause) {
|
if (pause) {
|
||||||
if ((err = jack_deactivate(osj->client)))
|
if (!osj->is_paused) {
|
||||||
return SoundIoErrorStreaming;
|
if ((err = jack_deactivate(osj->client)))
|
||||||
} 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)))
|
|
||||||
return SoundIoErrorStreaming;
|
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;
|
jack_client_t *client;
|
||||||
int period_size;
|
int period_size;
|
||||||
int frames_left;
|
int frames_left;
|
||||||
|
bool is_paused;
|
||||||
SoundIoOutStreamJackPort ports[SOUNDIO_MAX_CHANNELS];
|
SoundIoOutStreamJackPort ports[SOUNDIO_MAX_CHANNELS];
|
||||||
SoundIoChannelArea areas[SOUNDIO_MAX_CHANNELS];
|
SoundIoChannelArea areas[SOUNDIO_MAX_CHANNELS];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue