mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
pulse-server: Implement stream suspended callback
This commit is contained in:
parent
fd2db174c1
commit
220b037683
3 changed files with 35 additions and 0 deletions
|
|
@ -1127,6 +1127,15 @@ static void stream_state_changed(void *data, enum pw_stream_state old,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Don't emit suspended if we are creating a corked stream, as that will have a quick
|
||||||
|
* RUNNING/SUSPENDED transition for initial negotiation */
|
||||||
|
if (stream->create_tag == SPA_ID_INVALID || !stream->corked) {
|
||||||
|
if (old == PW_STREAM_STATE_PAUSED && state == PW_STREAM_STATE_STREAMING)
|
||||||
|
stream_send_suspended(stream, false);
|
||||||
|
if (old == PW_STREAM_STATE_STREAMING && state == PW_STREAM_STATE_PAUSED)
|
||||||
|
stream_send_suspended(stream, true);
|
||||||
|
}
|
||||||
|
|
||||||
if (destroy_stream) {
|
if (destroy_stream) {
|
||||||
pw_work_queue_add(impl->work_queue, stream, 0,
|
pw_work_queue_add(impl->work_queue, stream, 0,
|
||||||
do_destroy_stream, NULL);
|
do_destroy_stream, NULL);
|
||||||
|
|
|
||||||
|
|
@ -314,6 +314,31 @@ int stream_send_started(struct stream *stream)
|
||||||
return client_queue_message(client, reply);
|
return client_queue_message(client, reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int stream_send_suspended(struct stream *stream, bool suspended)
|
||||||
|
{
|
||||||
|
struct client *client = stream->client;
|
||||||
|
struct impl *impl = client->impl;
|
||||||
|
struct message *reply;
|
||||||
|
uint32_t command;
|
||||||
|
|
||||||
|
pw_log_debug("client %p [%s]: stream %p SUSPENDED channel:%u",
|
||||||
|
client, client->name, stream, stream->channel);
|
||||||
|
|
||||||
|
command = stream->direction == PW_DIRECTION_OUTPUT ?
|
||||||
|
COMMAND_PLAYBACK_STREAM_SUSPENDED :
|
||||||
|
COMMAND_RECORD_STREAM_SUSPENDED;
|
||||||
|
|
||||||
|
reply = message_alloc(impl, -1, 0);
|
||||||
|
message_put(reply,
|
||||||
|
TAG_U32, command,
|
||||||
|
TAG_U32, -1,
|
||||||
|
TAG_U32, stream->channel,
|
||||||
|
TAG_BOOLEAN, suspended,
|
||||||
|
TAG_INVALID);
|
||||||
|
|
||||||
|
return client_queue_message(client, reply);
|
||||||
|
}
|
||||||
|
|
||||||
int stream_send_request(struct stream *stream)
|
int stream_send_request(struct stream *stream)
|
||||||
{
|
{
|
||||||
struct client *client = stream->client;
|
struct client *client = stream->client;
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,7 @@ int stream_send_underflow(struct stream *stream, int64_t offset);
|
||||||
int stream_send_overflow(struct stream *stream);
|
int stream_send_overflow(struct stream *stream);
|
||||||
int stream_send_killed(struct stream *stream);
|
int stream_send_killed(struct stream *stream);
|
||||||
int stream_send_started(struct stream *stream);
|
int stream_send_started(struct stream *stream);
|
||||||
|
int stream_send_suspended(struct stream *stream, bool suspended);
|
||||||
int stream_send_request(struct stream *stream);
|
int stream_send_request(struct stream *stream);
|
||||||
int stream_update_minreq(struct stream *stream, uint32_t minreq);
|
int stream_update_minreq(struct stream *stream, uint32_t minreq);
|
||||||
int stream_send_moved(struct stream *stream, uint32_t peer_index, const char *peer_name);
|
int stream_send_moved(struct stream *stream, uint32_t peer_index, const char *peer_name);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue