mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-10-29 05:40:27 -04:00 
			
		
		
		
	alsa: place defaults in properties as fallback
We place the currently configured runtime settings in the properties but clear the values when not negotiated. Don't do that but place the defaults (when set) instead.
This commit is contained in:
		
							parent
							
								
									4debdcd40b
								
							
						
					
					
						commit
						eca1f5685e
					
				
					 1 changed files with 20 additions and 12 deletions
				
			
		|  | @ -3533,28 +3533,36 @@ void spa_alsa_emit_node_info(struct state *state, bool full) | ||||||
| 	if (state->info.change_mask) { | 	if (state->info.change_mask) { | ||||||
| 		struct spa_dict_item items[7]; | 		struct spa_dict_item items[7]; | ||||||
| 		uint32_t i, n_items = 0; | 		uint32_t i, n_items = 0; | ||||||
| 		char latency[64], period[64], nperiods[64], headroom[64]; | 		char latency[64] = "", period[64] = "", nperiods[64] = "", headroom[64] = ""; | ||||||
| 
 | 
 | ||||||
| 		items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_DEVICE_API, "alsa"); | 		items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_DEVICE_API, "alsa"); | ||||||
| 		items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_MEDIA_CLASS, | 		items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_MEDIA_CLASS, | ||||||
| 				state->stream == SND_PCM_STREAM_PLAYBACK ? "Audio/Sink" : "Audio/Source"); | 				state->stream == SND_PCM_STREAM_PLAYBACK ? "Audio/Sink" : "Audio/Source"); | ||||||
| 		items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_DRIVER, "true"); | 		items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_DRIVER, "true"); | ||||||
| 		if (state->have_format) { | 
 | ||||||
|  | 		if (state->have_format) | ||||||
| 			snprintf(latency, sizeof(latency), "%lu/%d", state->buffer_frames / 2, state->rate); | 			snprintf(latency, sizeof(latency), "%lu/%d", state->buffer_frames / 2, state->rate); | ||||||
| 			items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_MAX_LATENCY, latency); | 		items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_MAX_LATENCY, latency[0] ? latency : NULL); | ||||||
|  | 
 | ||||||
|  | 		if (state->have_format) | ||||||
| 			snprintf(period, sizeof(period), "%lu", state->period_frames); | 			snprintf(period, sizeof(period), "%lu", state->period_frames); | ||||||
| 			items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.period-size", period); | 		else if (state->default_period_size) | ||||||
|  | 			snprintf(period, sizeof(period), "%u", state->default_period_size); | ||||||
|  | 		items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.period-size", period[0] ? period : NULL); | ||||||
|  | 
 | ||||||
|  | 		if (state->have_format) | ||||||
| 			snprintf(nperiods, sizeof(nperiods), "%lu", | 			snprintf(nperiods, sizeof(nperiods), "%lu", | ||||||
| 					state->period_frames != 0 ? state->buffer_frames / state->period_frames : 0); | 					state->period_frames != 0 ? state->buffer_frames / state->period_frames : 0); | ||||||
| 			items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.period-num", nperiods); | 		else if (state->default_period_num) | ||||||
|  | 			snprintf(nperiods, sizeof(nperiods), "%u", state->default_period_size); | ||||||
|  | 		items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.period-num", nperiods[0] ? nperiods : NULL); | ||||||
|  | 
 | ||||||
|  | 		if (state->have_format) | ||||||
| 			snprintf(headroom, sizeof(headroom), "%u", state->headroom); | 			snprintf(headroom, sizeof(headroom), "%u", state->headroom); | ||||||
| 			items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.headroom", headroom); | 		else if (state->default_headroom) | ||||||
| 		} else { | 			snprintf(headroom, sizeof(headroom), "%u", state->default_headroom); | ||||||
| 			items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_MAX_LATENCY, NULL); | 		items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.headroom", headroom[0] ? headroom : NULL); | ||||||
| 			items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.period-size", NULL); | 
 | ||||||
| 			items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.period-num", NULL); |  | ||||||
| 			items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.headroom", NULL); |  | ||||||
| 		} |  | ||||||
| 		state->info.props = &SPA_DICT_INIT(items, n_items); | 		state->info.props = &SPA_DICT_INIT(items, n_items); | ||||||
| 
 | 
 | ||||||
| 		if (state->info.change_mask & SPA_NODE_CHANGE_MASK_PARAMS) { | 		if (state->info.change_mask & SPA_NODE_CHANGE_MASK_PARAMS) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Wim Taymans
						Wim Taymans