diff options
| author | Lennart Poettering <lennart@poettering.net> | 2009-04-05 02:46:38 +0200 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2009-04-05 02:46:38 +0200 | 
| commit | ce73e715c9c822beb797c023700c92bcc08464e7 (patch) | |
| tree | d7af7f7c8853a426a32a710cfcec904187413f03 | |
| parent | d035f4a3f3e73fd67d69a03c03adc9a08f30ef21 (diff) | |
introduce pa_{sink|source}_get_latency_within_thread()
| -rw-r--r-- | src/pulsecore/sink.c | 26 | ||||
| -rw-r--r-- | src/pulsecore/sink.h | 2 | ||||
| -rw-r--r-- | src/pulsecore/source.c | 26 | ||||
| -rw-r--r-- | src/pulsecore/source.h | 1 | 
4 files changed, 55 insertions, 0 deletions
| diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index 73ad247d..a0f0ea7e 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -958,6 +958,32 @@ pa_usec_t pa_sink_get_latency(pa_sink *s) {      return usec;  } +/* Called from IO thread */ +pa_usec_t pa_sink_get_latency_within_thread(pa_sink *s) { +    pa_usec_t usec = 0; +    pa_msgobject *o; + +    pa_sink_assert_ref(s); +    pa_assert(PA_SINK_IS_LINKED(s->thread_info.state)); + +    /* The returned value is supposed to be in the time domain of the sound card! */ + +    if (s->thread_info.state == PA_SINK_SUSPENDED) +        return 0; + +    if (!(s->flags & PA_SINK_LATENCY)) +        return 0; + +    o = PA_MSGOBJECT(s); + +    /* We probably should make this a proper vtable callback instead of going through process_msg() */ + +    if (o->process_msg(o, PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0) +        return -1; + +    return usec; +} +  /* Called from main thread */  void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {      pa_sink_input *i; diff --git a/src/pulsecore/sink.h b/src/pulsecore/sink.h index 7d1e11ef..634bf3ef 100644 --- a/src/pulsecore/sink.h +++ b/src/pulsecore/sink.h @@ -295,4 +295,6 @@ void pa_sink_request_rewind(pa_sink*s, size_t nbytes);  void pa_sink_invalidate_requested_latency(pa_sink *s); +pa_usec_t pa_sink_get_latency_within_thread(pa_sink *s); +  #endif diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c index 1c3377be..252e23ab 100644 --- a/src/pulsecore/source.c +++ b/src/pulsecore/source.c @@ -617,6 +617,32 @@ pa_usec_t pa_source_get_latency(pa_source *s) {      return usec;  } +/* Called from IO thread */ +pa_usec_t pa_source_get_latency_within_thread(pa_source *s) { +    pa_usec_t usec = 0; +    pa_msgobject *o; + +    pa_source_assert_ref(s); +    pa_assert(PA_SOURCE_IS_LINKED(s->thread_info.state)); + +    /* The returned value is supposed to be in the time domain of the sound card! */ + +    if (s->thread_info.state == PA_SOURCE_SUSPENDED) +        return 0; + +    if (!(s->flags & PA_SOURCE_LATENCY)) +        return 0; + +    o = PA_MSGOBJECT(s); + +    /* We probably should make this a proper vtable callback instead of going through process_msg() */ + +    if (o->process_msg(o, PA_SOURCE_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0) +        return -1; + +    return usec; +} +  /* Called from main thread */  void pa_source_set_volume(pa_source *s, const pa_cvolume *volume) {      pa_cvolume old_virtual_volume; diff --git a/src/pulsecore/source.h b/src/pulsecore/source.h index 210f5340..652783ef 100644 --- a/src/pulsecore/source.h +++ b/src/pulsecore/source.h @@ -267,5 +267,6 @@ void pa_source_set_latency_range_within_thread(pa_source *s, pa_usec_t min_laten  /*** To be called exclusively by source output drivers, from IO context */  void pa_source_invalidate_requested_latency(pa_source *s); +pa_usec_t pa_source_get_latency_within_thread(pa_source *s);  #endif | 
