mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	pcm:plug: save converter config
Passed config is freed after call to open, thus it is invalid when trying to extract the converter name. So config entry is saved for later usage. Signed-off-by: Andreas Pape <apape@de.adit-jv.com> Signed-off-by: Mounesh Sutar <sutar.mounesh@gmail.com> Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									7c2093b1c1
								
							
						
					
					
						commit
						653faa8991
					
				
					 1 changed files with 14 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -50,7 +50,7 @@ typedef struct {
 | 
			
		|||
	snd_pcm_format_t sformat;
 | 
			
		||||
	int schannels;
 | 
			
		||||
	int srate;
 | 
			
		||||
	const snd_config_t *rate_converter;
 | 
			
		||||
	snd_config_t *rate_converter;
 | 
			
		||||
	enum snd_pcm_plug_route_policy route_policy;
 | 
			
		||||
	snd_pcm_route_ttable_entry_t *ttable;
 | 
			
		||||
	int ttable_ok;
 | 
			
		||||
| 
						 | 
				
			
			@ -64,6 +64,10 @@ static int snd_pcm_plug_close(snd_pcm_t *pcm)
 | 
			
		|||
	snd_pcm_plug_t *plug = pcm->private_data;
 | 
			
		||||
	int err, result = 0;
 | 
			
		||||
	free(plug->ttable);
 | 
			
		||||
	if (plug->rate_converter) {
 | 
			
		||||
		snd_config_delete(plug->rate_converter);
 | 
			
		||||
		plug->rate_converter = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	assert(plug->gen.slave == plug->req_slave);
 | 
			
		||||
	if (plug->gen.close_slave) {
 | 
			
		||||
		snd_pcm_unlink_hw_ptr(pcm, plug->req_slave);
 | 
			
		||||
| 
						 | 
				
			
			@ -1108,7 +1112,6 @@ int snd_pcm_plug_open(snd_pcm_t **pcmp,
 | 
			
		|||
	plug->sformat = sformat;
 | 
			
		||||
	plug->schannels = schannels;
 | 
			
		||||
	plug->srate = srate;
 | 
			
		||||
	plug->rate_converter = rate_converter;
 | 
			
		||||
	plug->gen.slave = plug->req_slave = slave;
 | 
			
		||||
	plug->gen.close_slave = close_slave;
 | 
			
		||||
	plug->route_policy = route_policy;
 | 
			
		||||
| 
						 | 
				
			
			@ -1125,6 +1128,15 @@ int snd_pcm_plug_open(snd_pcm_t **pcmp,
 | 
			
		|||
	pcm->ops = &snd_pcm_plug_ops;
 | 
			
		||||
	pcm->fast_ops = slave->fast_ops;
 | 
			
		||||
	pcm->fast_op_arg = slave->fast_op_arg;
 | 
			
		||||
	if (rate_converter) {
 | 
			
		||||
		err = snd_config_copy(&plug->rate_converter,
 | 
			
		||||
				      (snd_config_t *)rate_converter);
 | 
			
		||||
		if (err < 0) {
 | 
			
		||||
			snd_pcm_free(pcm);
 | 
			
		||||
			free(plug);
 | 
			
		||||
			return err;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	pcm->private_data = plug;
 | 
			
		||||
	pcm->poll_fd = slave->poll_fd;
 | 
			
		||||
	pcm->poll_events = slave->poll_events;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue