mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	rework volume/mute APIs: split out pa_xx_set_soft_volume() and add force_refresh argument to read functions
This commit is contained in:
		
							parent
							
								
									29daef7a26
								
							
						
					
					
						commit
						3ec4a5db99
					
				
					 4 changed files with 38 additions and 14 deletions
				
			
		| 
						 | 
					@ -856,18 +856,29 @@ void pa_sink_set_volume(pa_sink *s, const pa_cvolume *volume) {
 | 
				
			||||||
        s->set_volume = NULL;
 | 
					        s->set_volume = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!s->set_volume)
 | 
					    if (!s->set_volume)
 | 
				
			||||||
        pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SINK_MESSAGE_SET_VOLUME, volume, 0, NULL);
 | 
					        pa_sink_set_soft_volume(s, volume);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (changed)
 | 
					    if (changed)
 | 
				
			||||||
        pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_CHANGE, s->index);
 | 
					        pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_CHANGE, s->index);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Called from main thread */
 | 
					/* Called from main thread */
 | 
				
			||||||
const pa_cvolume *pa_sink_get_volume(pa_sink *s) {
 | 
					void pa_sink_set_soft_volume(pa_sink *s, const pa_cvolume *volume) {
 | 
				
			||||||
 | 
					    pa_sink_assert_ref(s);
 | 
				
			||||||
 | 
					    pa_assert(volume);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (PA_SINK_IS_LINKED(s->state))
 | 
				
			||||||
 | 
					        pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SINK_MESSAGE_SET_VOLUME, volume, 0, NULL);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        s->thread_info.soft_volume = *volume;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Called from main thread */
 | 
				
			||||||
 | 
					const pa_cvolume *pa_sink_get_volume(pa_sink *s, pa_bool_t force_refresh) {
 | 
				
			||||||
    pa_sink_assert_ref(s);
 | 
					    pa_sink_assert_ref(s);
 | 
				
			||||||
    pa_assert(PA_SINK_IS_LINKED(s->state));
 | 
					    pa_assert(PA_SINK_IS_LINKED(s->state));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->refresh_volume) {
 | 
					    if (s->refresh_volume || force_refresh) {
 | 
				
			||||||
        struct pa_cvolume old_volume = s->volume;
 | 
					        struct pa_cvolume old_volume = s->volume;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (s->get_volume && s->get_volume(s) < 0)
 | 
					        if (s->get_volume && s->get_volume(s) < 0)
 | 
				
			||||||
| 
						 | 
					@ -904,12 +915,12 @@ void pa_sink_set_mute(pa_sink *s, pa_bool_t mute) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Called from main thread */
 | 
					/* Called from main thread */
 | 
				
			||||||
pa_bool_t pa_sink_get_mute(pa_sink *s) {
 | 
					pa_bool_t pa_sink_get_mute(pa_sink *s, pa_bool_t force_refresh) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_sink_assert_ref(s);
 | 
					    pa_sink_assert_ref(s);
 | 
				
			||||||
    pa_assert(PA_SINK_IS_LINKED(s->state));
 | 
					    pa_assert(PA_SINK_IS_LINKED(s->state));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->refresh_muted) {
 | 
					    if (s->refresh_muted || force_refresh) {
 | 
				
			||||||
        pa_bool_t old_muted = s->muted;
 | 
					        pa_bool_t old_muted = s->muted;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (s->get_mute && s->get_mute(s) < 0)
 | 
					        if (s->get_mute && s->get_mute(s) < 0)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -239,9 +239,10 @@ int pa_sink_suspend(pa_sink *s, pa_bool_t suspend);
 | 
				
			||||||
int pa_sink_suspend_all(pa_core *c, pa_bool_t suspend);
 | 
					int pa_sink_suspend_all(pa_core *c, pa_bool_t suspend);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pa_sink_set_volume(pa_sink *sink, const pa_cvolume *volume);
 | 
					void pa_sink_set_volume(pa_sink *sink, const pa_cvolume *volume);
 | 
				
			||||||
const pa_cvolume *pa_sink_get_volume(pa_sink *sink);
 | 
					void pa_sink_set_soft_volume(pa_sink *s, const pa_cvolume *volume);
 | 
				
			||||||
 | 
					const pa_cvolume *pa_sink_get_volume(pa_sink *sink, pa_bool_t force_refresh);
 | 
				
			||||||
void pa_sink_set_mute(pa_sink *sink, pa_bool_t mute);
 | 
					void pa_sink_set_mute(pa_sink *sink, pa_bool_t mute);
 | 
				
			||||||
pa_bool_t pa_sink_get_mute(pa_sink *sink);
 | 
					pa_bool_t pa_sink_get_mute(pa_sink *sink, pa_bool_t force_refres);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned pa_sink_linked_by(pa_sink *s); /* Number of connected streams */
 | 
					unsigned pa_sink_linked_by(pa_sink *s); /* Number of connected streams */
 | 
				
			||||||
unsigned pa_sink_used_by(pa_sink *s); /* Number of connected streams which are not corked */
 | 
					unsigned pa_sink_used_by(pa_sink *s); /* Number of connected streams which are not corked */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -520,18 +520,29 @@ void pa_source_set_volume(pa_source *s, const pa_cvolume *volume) {
 | 
				
			||||||
        s->set_volume = NULL;
 | 
					        s->set_volume = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!s->set_volume)
 | 
					    if (!s->set_volume)
 | 
				
			||||||
        pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_SET_VOLUME, volume, 0, NULL);
 | 
					        pa_source_set_soft_volume(s, volume);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (changed)
 | 
					    if (changed)
 | 
				
			||||||
        pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_CHANGE, s->index);
 | 
					        pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_CHANGE, s->index);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Called from main thread */
 | 
					/* Called from main thread */
 | 
				
			||||||
const pa_cvolume *pa_source_get_volume(pa_source *s) {
 | 
					void pa_source_set_soft_volume(pa_source *s, const pa_cvolume *volume) {
 | 
				
			||||||
 | 
					    pa_source_assert_ref(s);
 | 
				
			||||||
 | 
					    pa_assert(volume);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (PA_SOURCE_IS_LINKED(s->state))
 | 
				
			||||||
 | 
					        pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_SET_VOLUME, volume, 0, NULL);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        s->thread_info.soft_volume = *volume;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Called from main thread */
 | 
				
			||||||
 | 
					const pa_cvolume *pa_source_get_volume(pa_source *s, pa_bool_t force_refresh) {
 | 
				
			||||||
    pa_source_assert_ref(s);
 | 
					    pa_source_assert_ref(s);
 | 
				
			||||||
    pa_assert(PA_SOURCE_IS_LINKED(s->state));
 | 
					    pa_assert(PA_SOURCE_IS_LINKED(s->state));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->refresh_volume) {
 | 
					    if (s->refresh_volume || force_refresh) {
 | 
				
			||||||
        pa_cvolume old_volume = s->volume;
 | 
					        pa_cvolume old_volume = s->volume;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (s->get_volume && s->get_volume(s) < 0)
 | 
					        if (s->get_volume && s->get_volume(s) < 0)
 | 
				
			||||||
| 
						 | 
					@ -568,12 +579,12 @@ void pa_source_set_mute(pa_source *s, pa_bool_t mute) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Called from main thread */
 | 
					/* Called from main thread */
 | 
				
			||||||
pa_bool_t pa_source_get_mute(pa_source *s) {
 | 
					pa_bool_t pa_source_get_mute(pa_source *s, pa_bool_t force_refresh) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_source_assert_ref(s);
 | 
					    pa_source_assert_ref(s);
 | 
				
			||||||
    pa_assert(PA_SOURCE_IS_LINKED(s->state));
 | 
					    pa_assert(PA_SOURCE_IS_LINKED(s->state));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->refresh_muted) {
 | 
					    if (s->refresh_muted || force_refresh) {
 | 
				
			||||||
        pa_bool_t old_muted = s->muted;
 | 
					        pa_bool_t old_muted = s->muted;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (s->get_mute && s->get_mute(s) < 0)
 | 
					        if (s->get_mute && s->get_mute(s) < 0)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -226,9 +226,10 @@ int pa_source_suspend(pa_source *s, pa_bool_t suspend);
 | 
				
			||||||
int pa_source_suspend_all(pa_core *c, pa_bool_t suspend);
 | 
					int pa_source_suspend_all(pa_core *c, pa_bool_t suspend);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pa_source_set_volume(pa_source *source, const pa_cvolume *volume);
 | 
					void pa_source_set_volume(pa_source *source, const pa_cvolume *volume);
 | 
				
			||||||
const pa_cvolume *pa_source_get_volume(pa_source *source);
 | 
					void pa_source_set_soft_volume(pa_source *s, const pa_cvolume *volume);
 | 
				
			||||||
 | 
					const pa_cvolume *pa_source_get_volume(pa_source *source, pa_bool_t force_refresh);
 | 
				
			||||||
void pa_source_set_mute(pa_source *source, pa_bool_t mute);
 | 
					void pa_source_set_mute(pa_source *source, pa_bool_t mute);
 | 
				
			||||||
pa_bool_t pa_source_get_mute(pa_source *source);
 | 
					pa_bool_t pa_source_get_mute(pa_source *source, pa_bool_t force_refresh);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned pa_source_linked_by(pa_source *s); /* Number of connected streams */
 | 
					unsigned pa_source_linked_by(pa_source *s); /* Number of connected streams */
 | 
				
			||||||
unsigned pa_source_used_by(pa_source *s); /* Number of connected streams that are not corked */
 | 
					unsigned pa_source_used_by(pa_source *s); /* Number of connected streams that are not corked */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue