mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	sink-input,source-output: Deal with FIX* flags and extended API
The sample spec fixup when FIX* flags are set was not being propagated to the pa_format_info, causing the two to be out of sync when FIX* was used.
This commit is contained in:
		
							parent
							
								
									b156325c68
								
							
						
					
					
						commit
						ae9f6dc356
					
				
					 2 changed files with 22 additions and 4 deletions
				
			
		| 
						 | 
					@ -384,17 +384,26 @@ int pa_sink_input_new(
 | 
				
			||||||
    if (!data->muted_is_set)
 | 
					    if (!data->muted_is_set)
 | 
				
			||||||
        data->muted = FALSE;
 | 
					        data->muted = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data->flags & PA_SINK_INPUT_FIX_FORMAT)
 | 
					    if (data->flags & PA_SINK_INPUT_FIX_FORMAT) {
 | 
				
			||||||
 | 
					        pa_return_val_if_fail(pa_format_info_is_pcm(data->format), -PA_ERR_INVALID);
 | 
				
			||||||
        data->sample_spec.format = data->sink->sample_spec.format;
 | 
					        data->sample_spec.format = data->sink->sample_spec.format;
 | 
				
			||||||
 | 
					        pa_format_info_set_sample_format(data->format, data->sample_spec.format);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data->flags & PA_SINK_INPUT_FIX_RATE)
 | 
					    if (data->flags & PA_SINK_INPUT_FIX_RATE) {
 | 
				
			||||||
 | 
					        pa_return_val_if_fail(pa_format_info_is_pcm(data->format), -PA_ERR_INVALID);
 | 
				
			||||||
        data->sample_spec.rate = data->sink->sample_spec.rate;
 | 
					        data->sample_spec.rate = data->sink->sample_spec.rate;
 | 
				
			||||||
 | 
					        pa_format_info_set_rate(data->format, data->sample_spec.rate);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    original_cm = data->channel_map;
 | 
					    original_cm = data->channel_map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data->flags & PA_SINK_INPUT_FIX_CHANNELS) {
 | 
					    if (data->flags & PA_SINK_INPUT_FIX_CHANNELS) {
 | 
				
			||||||
 | 
					        pa_return_val_if_fail(pa_format_info_is_pcm(data->format), -PA_ERR_INVALID);
 | 
				
			||||||
        data->sample_spec.channels = data->sink->sample_spec.channels;
 | 
					        data->sample_spec.channels = data->sink->sample_spec.channels;
 | 
				
			||||||
        data->channel_map = data->sink->channel_map;
 | 
					        data->channel_map = data->sink->channel_map;
 | 
				
			||||||
 | 
					        pa_format_info_set_channels(data->format, data->sample_spec.channels);
 | 
				
			||||||
 | 
					        pa_format_info_set_channel_map(data->format, &data->channel_map);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_assert(pa_sample_spec_valid(&data->sample_spec));
 | 
					    pa_assert(pa_sample_spec_valid(&data->sample_spec));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -327,17 +327,26 @@ int pa_source_output_new(
 | 
				
			||||||
    if (!data->muted_is_set)
 | 
					    if (!data->muted_is_set)
 | 
				
			||||||
        data->muted = FALSE;
 | 
					        data->muted = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data->flags & PA_SOURCE_OUTPUT_FIX_FORMAT)
 | 
					    if (data->flags & PA_SOURCE_OUTPUT_FIX_FORMAT) {
 | 
				
			||||||
 | 
					        pa_return_val_if_fail(pa_format_info_is_pcm(data->format), -PA_ERR_INVALID);
 | 
				
			||||||
        data->sample_spec.format = data->source->sample_spec.format;
 | 
					        data->sample_spec.format = data->source->sample_spec.format;
 | 
				
			||||||
 | 
					        pa_format_info_set_sample_format(data->format, data->sample_spec.format);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data->flags & PA_SOURCE_OUTPUT_FIX_RATE)
 | 
					    if (data->flags & PA_SOURCE_OUTPUT_FIX_RATE) {
 | 
				
			||||||
 | 
					        pa_return_val_if_fail(pa_format_info_is_pcm(data->format), -PA_ERR_INVALID);
 | 
				
			||||||
 | 
					        pa_format_info_set_rate(data->format, data->sample_spec.rate);
 | 
				
			||||||
        data->sample_spec.rate = data->source->sample_spec.rate;
 | 
					        data->sample_spec.rate = data->source->sample_spec.rate;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    original_cm = data->channel_map;
 | 
					    original_cm = data->channel_map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data->flags & PA_SOURCE_OUTPUT_FIX_CHANNELS) {
 | 
					    if (data->flags & PA_SOURCE_OUTPUT_FIX_CHANNELS) {
 | 
				
			||||||
 | 
					        pa_return_val_if_fail(pa_format_info_is_pcm(data->format), -PA_ERR_INVALID);
 | 
				
			||||||
        data->sample_spec.channels = data->source->sample_spec.channels;
 | 
					        data->sample_spec.channels = data->source->sample_spec.channels;
 | 
				
			||||||
        data->channel_map = data->source->channel_map;
 | 
					        data->channel_map = data->source->channel_map;
 | 
				
			||||||
 | 
					        pa_format_info_set_channels(data->format, data->sample_spec.channels);
 | 
				
			||||||
 | 
					        pa_format_info_set_channel_map(data->format, &data->channel_map);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pa_assert(pa_sample_spec_valid(&data->sample_spec));
 | 
					    pa_assert(pa_sample_spec_valid(&data->sample_spec));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue