mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
pacat: make pacat respond to cork/uncork events
Pacat remembers the number of cork requests, and then cork/uncork the stream accordingly. With this change, it makes below test script work correctly: pacat -p --property=media.role="music" <long-sound> & sleep 2 pacat -p --property=media.role="phone" <short-sound> wait Initial idea by Lu Guanqun, but modified by Colin Guthrie (so blame me if it's broken)
This commit is contained in:
parent
c862c5caa4
commit
cef16430d0
1 changed files with 20 additions and 0 deletions
|
|
@ -91,6 +91,8 @@ static int32_t latency_msec = 0, process_time_msec = 0;
|
|||
static pa_bool_t raw = TRUE;
|
||||
static int file_format = -1;
|
||||
|
||||
static uint32_t cork_requests = 0;
|
||||
|
||||
/* A shortcut for terminating the application */
|
||||
static void quit(int ret) {
|
||||
pa_assert(mainloop_api);
|
||||
|
|
@ -408,6 +410,24 @@ static void stream_event_callback(pa_stream *s, const char *name, pa_proplist *p
|
|||
|
||||
t = pa_proplist_to_string_sep(pl, ", ");
|
||||
pa_log("Got event '%s', properties '%s'", name, t);
|
||||
|
||||
if (pa_streq(name, PA_STREAM_EVENT_REQUEST_CORK)) {
|
||||
if (cork_requests == 0) {
|
||||
pa_log(_("Cork request stack is empty: corking stream"));
|
||||
pa_operation_unref(pa_stream_cork(s, 1, NULL, NULL));
|
||||
}
|
||||
cork_requests++;
|
||||
} else if (pa_streq(name, PA_STREAM_EVENT_REQUEST_UNCORK)) {
|
||||
if (cork_requests == 1) {
|
||||
pa_log(_("Cork request stack is empty: uncorking stream"));
|
||||
pa_operation_unref(pa_stream_cork(s, 0, NULL, NULL));
|
||||
}
|
||||
if (cork_requests == 0)
|
||||
pa_log(_("Warning: Received more uncork requests than cork requests!"));
|
||||
else
|
||||
cork_requests--;
|
||||
}
|
||||
|
||||
pa_xfree(t);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue