From 53091cc5f0a766e0bff36b59600f99cd2771bbd6 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Mon, 28 Mar 2011 08:46:40 +0530 Subject: [PATCH 1/1] sink-input: Add a format-lost event This event is emitted if the sink-input could not be moved to a new sink because it doesn't support the format of the sink-input. Clients can reconnect their stream with a different format if they wish or gracefully exit. --- src/pulse/def.h | 7 +++++++ src/pulsecore/sink-input.c | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/pulse/def.h b/src/pulse/def.h index 91a027e..e01e667 100644 --- a/src/pulse/def.h +++ b/src/pulse/def.h @@ -912,6 +912,13 @@ typedef void (*pa_free_cb_t)(void *p); * information, \since 0.9.15 */ #define PA_STREAM_EVENT_REQUEST_UNCORK "request-uncork" +/** A stream event notifying that the stream is going to be + * disconnected because the underlying sink changed and no longer + * supports the format that was originally negotiated. Clients need + * to connect a new stream to renegotiate a format and continue + * playback, \since 1.0 */ +#define PA_STREAM_EVENT_FORMAT_LOST "format-lost" + PA_C_DECL_END #endif diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c index 196d771..f0558f4 100644 --- a/src/pulsecore/sink-input.c +++ b/src/pulsecore/sink-input.c @@ -1594,7 +1594,8 @@ int pa_sink_input_finish_move(pa_sink_input *i, pa_sink *dest, pa_bool_t save) { return -PA_ERR_NOTSUPPORTED; if (pa_sink_input_is_passthrough(i) && !pa_sink_check_format(dest, i->format)) { - /* FIXME: Fire a message here so the client can renegotiate */ + pa_log_debug("New sink doesn't support stream format, sending format-changed and killing"); + pa_sink_input_send_event(i, PA_STREAM_EVENT_FORMAT_LOST, NULL); return -PA_ERR_NOTSUPPORTED; } -- 2.7.4