mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	introduce pa_{sink|source}_get_latency_within_thread()
This commit is contained in:
		
							parent
							
								
									d035f4a3f3
								
							
						
					
					
						commit
						ce73e715c9
					
				
					 4 changed files with 55 additions and 0 deletions
				
			
		| 
						 | 
					@ -958,6 +958,32 @@ pa_usec_t pa_sink_get_latency(pa_sink *s) {
 | 
				
			||||||
    return usec;
 | 
					    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 */
 | 
					/* Called from main thread */
 | 
				
			||||||
void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
 | 
					void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
 | 
				
			||||||
    pa_sink_input *i;
 | 
					    pa_sink_input *i;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -295,4 +295,6 @@ void pa_sink_request_rewind(pa_sink*s, size_t nbytes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pa_sink_invalidate_requested_latency(pa_sink *s);
 | 
					void pa_sink_invalidate_requested_latency(pa_sink *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pa_usec_t pa_sink_get_latency_within_thread(pa_sink *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -617,6 +617,32 @@ pa_usec_t pa_source_get_latency(pa_source *s) {
 | 
				
			||||||
    return usec;
 | 
					    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 */
 | 
					/* Called from main thread */
 | 
				
			||||||
void pa_source_set_volume(pa_source *s, const pa_cvolume *volume) {
 | 
					void pa_source_set_volume(pa_source *s, const pa_cvolume *volume) {
 | 
				
			||||||
    pa_cvolume old_virtual_volume;
 | 
					    pa_cvolume old_virtual_volume;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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 */
 | 
					/*** To be called exclusively by source output drivers, from IO context */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pa_source_invalidate_requested_latency(pa_source *s);
 | 
					void pa_source_invalidate_requested_latency(pa_source *s);
 | 
				
			||||||
 | 
					pa_usec_t pa_source_get_latency_within_thread(pa_source *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue