From 9bca59efc1500770008345ff12571892eeaa5b50 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 25 Mar 2009 00:26:44 +0100 Subject: make pa_source_set_max_rewind() work similar to pa_sink_set_max_rewind() --- src/pulsecore/source.c | 18 +++++++++++++++++- src/pulsecore/source.h | 4 +++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c index 6e5bf1ff..f1f8ef72 100644 --- a/src/pulsecore/source.c +++ b/src/pulsecore/source.c @@ -956,6 +956,11 @@ int pa_source_process_msg(pa_msgobject *object, int code, void *userdata, int64_ *((size_t*) userdata) = s->thread_info.max_rewind; return 0; + case PA_SOURCE_MESSAGE_SET_MAX_REWIND: + + pa_source_set_max_rewind_within_thread(s, (size_t) offset); + return 0; + case PA_SOURCE_MESSAGE_GET_LATENCY: if (s->monitor_of) { @@ -1083,7 +1088,7 @@ pa_usec_t pa_source_get_requested_latency(pa_source *s) { } /* Called from IO thread */ -void pa_source_set_max_rewind(pa_source *s, size_t max_rewind) { +void pa_source_set_max_rewind_within_thread(pa_source *s, size_t max_rewind) { pa_source_output *o; void *state = NULL; @@ -1100,6 +1105,17 @@ void pa_source_set_max_rewind(pa_source *s, size_t max_rewind) { } } +/* Called from main thread */ +void pa_source_set_max_rewind(pa_source *s, size_t max_rewind) { + pa_source_assert_ref(s); + + if (PA_SOURCE_IS_LINKED(s->state)) + pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_SET_MAX_REWIND, NULL, max_rewind, NULL) == 0); + else + pa_source_set_max_rewind_within_thread(s, max_rewind); +} + +/* Called from IO thread */ void pa_source_invalidate_requested_latency(pa_source *s) { pa_source_output *o; void *state = NULL; diff --git a/src/pulsecore/source.h b/src/pulsecore/source.h index 862e1aa9..210f5340 100644 --- a/src/pulsecore/source.h +++ b/src/pulsecore/source.h @@ -159,6 +159,7 @@ typedef enum pa_source_message { PA_SOURCE_MESSAGE_SET_LATENCY_RANGE, PA_SOURCE_MESSAGE_GET_LATENCY_RANGE, PA_SOURCE_MESSAGE_GET_MAX_REWIND, + PA_SOURCE_MESSAGE_SET_MAX_REWIND, PA_SOURCE_MESSAGE_MAX } pa_source_message_t; @@ -205,6 +206,7 @@ void pa_source_set_description(pa_source *s, const char *description); void pa_source_set_asyncmsgq(pa_source *s, pa_asyncmsgq *q); void pa_source_set_rtpoll(pa_source *s, pa_rtpoll *p); +void pa_source_set_max_rewind(pa_source *s, size_t max_rewind); void pa_source_set_latency_range(pa_source *s, pa_usec_t min_latency, pa_usec_t max_latency); void pa_source_detach(pa_source *s); @@ -259,7 +261,7 @@ void pa_source_detach_within_thread(pa_source *s); pa_usec_t pa_source_get_requested_latency_within_thread(pa_source *s); -void pa_source_set_max_rewind(pa_source *s, size_t max_rewind); +void pa_source_set_max_rewind_within_thread(pa_source *s, size_t max_rewind); void pa_source_set_latency_range_within_thread(pa_source *s, pa_usec_t min_latency, pa_usec_t max_latency); /*** To be called exclusively by source output drivers, from IO context */ -- cgit