mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-10-29 05:40:25 -04:00 
			
		
		
		
	Added missing functions. Removed unused one
This commit is contained in:
		
							parent
							
								
									cc0f850c56
								
							
						
					
					
						commit
						ce112d1d7f
					
				
					 6 changed files with 93 additions and 48 deletions
				
			
		|  | @ -136,6 +136,8 @@ int snd_pcm_info(snd_pcm_t *handle, snd_pcm_info_t *info); | |||
| int snd_pcm_params_info(snd_pcm_t *handle, snd_pcm_params_info_t *info); | ||||
| int snd_pcm_params(snd_pcm_t *handle, snd_pcm_params_t *params); | ||||
| int snd_pcm_setup(snd_pcm_t *handle, snd_pcm_setup_t *setup); | ||||
| int snd_pcm_channel_info(snd_pcm_t *handle, snd_pcm_channel_info_t *info); | ||||
| int snd_pcm_channel_params(snd_pcm_t *handle, snd_pcm_channel_params_t *params); | ||||
| int snd_pcm_channel_setup(snd_pcm_t *handle, snd_pcm_channel_setup_t *setup); | ||||
| int snd_pcm_status(snd_pcm_t *handle, snd_pcm_status_t *status); | ||||
| int snd_pcm_prepare(snd_pcm_t *handle); | ||||
|  |  | |||
|  | @ -107,6 +107,18 @@ int snd_pcm_setup(snd_pcm_t *handle, snd_pcm_setup_t *setup) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int snd_pcm_channel_info(snd_pcm_t *handle, snd_pcm_channel_info_t *info) | ||||
| { | ||||
| 	assert(handle && info); | ||||
| 	return handle->fast_ops->channel_info(handle->fast_op_arg, info); | ||||
| } | ||||
| 
 | ||||
| int snd_pcm_channel_params(snd_pcm_t *handle, snd_pcm_channel_params_t *params) | ||||
| { | ||||
| 	assert(handle && params); | ||||
| 	return handle->fast_ops->channel_params(handle->fast_op_arg, params); | ||||
| } | ||||
| 
 | ||||
| int snd_pcm_channel_setup(snd_pcm_t *handle, snd_pcm_channel_setup_t *setup) | ||||
| { | ||||
| 	assert(handle && setup); | ||||
|  | @ -161,52 +173,6 @@ int snd_pcm_go(snd_pcm_t *handle) | |||
| 	return handle->fast_ops->go(handle->fast_op_arg); | ||||
| } | ||||
| 
 | ||||
| #if 0 | ||||
| int snd_pcm_synchro(snd_pcm_synchro_cmd_t cmd,  | ||||
| 		    unsigned int reqs_count, snd_pcm_synchro_request_t *reqs, | ||||
| 		    snd_pcm_synchro_mode_t mode) | ||||
| { | ||||
| 	snd_pcm_sync_request_t *sync_reqs; | ||||
| 	snd_pcm_sync_t sync; | ||||
| 	unsigned int k; | ||||
| 	int ret; | ||||
| 	assert(reqs_count > 0 && reqs); | ||||
| 	sync_reqs = __builtin_alloca(sizeof(*sync_reqs) * reqs_count); | ||||
| 	switch (cmd) { | ||||
| 	case SND_PCM_SYNCHRO_GO: | ||||
| 		sync.cmd = SND_PCM_IOCTL_GO; | ||||
| 		break; | ||||
| 	default: | ||||
| 		assert(0); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 	sync.mode = mode; | ||||
| 	sync.requests_count = reqs_count; | ||||
| 	sync.requests = sync_reqs; | ||||
| 	for (k = 0; k < reqs_count; ++k) { | ||||
| 		switch (snd_pcm_type(reqs[k].handle)) { | ||||
| 		case SND_PCM_TYPE_HW: | ||||
| 		case SND_PCM_TYPE_PLUG: | ||||
| 			sync_reqs[k].fd = snd_pcm_file_descriptor(reqs[k].handle); | ||||
| 			break; | ||||
| 		default: | ||||
| 			/* Not yet implemented */ | ||||
| 			assert(0); | ||||
| 			return -ENOSYS; | ||||
| 		} | ||||
| 	} | ||||
| 	if (ioctl(sync_reqs[0].fd, SND_PCM_IOCTL_SYNC, &sync) < 0) | ||||
| 		ret = -errno; | ||||
| 	else | ||||
| 		ret = 0; | ||||
| 	for (k = 0; k < reqs_count; ++k) { | ||||
| 		reqs[k].tstamp = sync_reqs[k].tstamp; | ||||
| 		reqs[k].result = sync_reqs[k].result; | ||||
| 	} | ||||
| 	return ret; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| int snd_pcm_drain(snd_pcm_t *handle) | ||||
| { | ||||
| 	assert(handle); | ||||
|  |  | |||
|  | @ -103,6 +103,24 @@ static int snd_pcm_hw_setup(void *private, snd_pcm_setup_t * setup) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_hw_channel_info(void *private, snd_pcm_channel_info_t * info) | ||||
| { | ||||
| 	snd_pcm_hw_t *hw = (snd_pcm_hw_t*) private; | ||||
| 	int fd = hw->fd; | ||||
| 	if (ioctl(fd, SND_PCM_IOCTL_CHANNEL_INFO, info) < 0) | ||||
| 		return -errno; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_hw_channel_params(void *private, snd_pcm_channel_params_t * params) | ||||
| { | ||||
| 	snd_pcm_hw_t *hw = (snd_pcm_hw_t*) private; | ||||
| 	int fd = hw->fd; | ||||
| 	if (ioctl(fd, SND_PCM_IOCTL_CHANNEL_PARAMS, params) < 0) | ||||
| 		return -errno; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_hw_channel_setup(void *private, snd_pcm_channel_setup_t * setup) | ||||
| { | ||||
| 	snd_pcm_hw_t *hw = (snd_pcm_hw_t*) private; | ||||
|  | @ -369,6 +387,8 @@ struct snd_pcm_ops snd_pcm_hw_ops = { | |||
| 
 | ||||
| struct snd_pcm_fast_ops snd_pcm_hw_fast_ops = { | ||||
| 	nonblock: snd_pcm_hw_nonblock, | ||||
| 	channel_info: snd_pcm_hw_channel_info, | ||||
| 	channel_params: snd_pcm_hw_channel_params, | ||||
| 	channel_setup: snd_pcm_hw_channel_setup, | ||||
| 	status: snd_pcm_hw_status, | ||||
| 	frame_io: snd_pcm_hw_frame_io, | ||||
|  |  | |||
|  | @ -34,6 +34,8 @@ struct snd_pcm_ops { | |||
| struct snd_pcm_fast_ops { | ||||
| 	int (*nonblock)(void *private, int nonblock); | ||||
| 	int (*status)(void *private, snd_pcm_status_t *status); | ||||
| 	int (*channel_info)(void *private, snd_pcm_channel_info_t *info); | ||||
| 	int (*channel_params)(void *private, snd_pcm_channel_params_t *params); | ||||
| 	int (*channel_setup)(void *private, snd_pcm_channel_setup_t *setup); | ||||
| 	int (*prepare)(void *private); | ||||
| 	int (*go)(void *private); | ||||
|  |  | |||
|  | @ -313,6 +313,42 @@ static int snd_pcm_multi_pause(void *private, int enable) | |||
| 	return snd_pcm_pause(multi->slaves[0].handle, enable); | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_multi_channel_info(void *private, snd_pcm_channel_info_t *info) | ||||
| { | ||||
| 	int err; | ||||
| 	snd_pcm_multi_t *multi = (snd_pcm_multi_t*) private; | ||||
| 	unsigned int channel = info->channel; | ||||
| 	unsigned int i; | ||||
| 	for (i = 0; i < multi->bindings_count; ++i) { | ||||
| 		if (multi->bindings[i].client_channel == channel) { | ||||
| 			info->channel = multi->bindings[i].slave_channel; | ||||
| 			err = snd_pcm_channel_info(multi->slaves[multi->bindings[i].slave].handle, info); | ||||
| 			info->channel = channel; | ||||
| 			return err; | ||||
| 		} | ||||
| 	} | ||||
| 	info->channel = channel; | ||||
| 	return -EINVAL; | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_multi_channel_params(void *private, snd_pcm_channel_params_t *params) | ||||
| { | ||||
| 	int err; | ||||
| 	snd_pcm_multi_t *multi = (snd_pcm_multi_t*) private; | ||||
| 	unsigned int channel = params->channel; | ||||
| 	unsigned int i; | ||||
| 	for (i = 0; i < multi->bindings_count; ++i) { | ||||
| 		if (multi->bindings[i].client_channel == channel) { | ||||
| 			params->channel = multi->bindings[i].slave_channel; | ||||
| 			err = snd_pcm_channel_params(multi->slaves[multi->bindings[i].slave].handle, params); | ||||
| 			params->channel = channel; | ||||
| 			return err; | ||||
| 		} | ||||
| 	} | ||||
| 	params->channel = channel; | ||||
| 	return -EINVAL; | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_multi_channel_setup(void *private, snd_pcm_channel_setup_t *setup) | ||||
| { | ||||
| 	int err; | ||||
|  | @ -699,6 +735,8 @@ struct snd_pcm_ops snd_pcm_multi_ops = { | |||
| 
 | ||||
| struct snd_pcm_fast_ops snd_pcm_multi_fast_ops = { | ||||
| 	nonblock: snd_pcm_multi_nonblock, | ||||
| 	channel_info: snd_pcm_multi_channel_info, | ||||
| 	channel_params: snd_pcm_multi_channel_params, | ||||
| 	channel_setup: snd_pcm_multi_channel_setup, | ||||
| 	status: snd_pcm_multi_status, | ||||
| 	frame_io: snd_pcm_multi_frame_io, | ||||
|  |  | |||
|  | @ -377,10 +377,25 @@ static int snd_pcm_plug_pause(void *private, int enable) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_plug_channel_info(void *private ATTRIBUTE_UNUSED, snd_pcm_channel_info_t *info ATTRIBUTE_UNUSED) | ||||
| { | ||||
| 	/* FIXME: if route plugin is not inserted or its ttable is trivial
 | ||||
| 	   this should be implemented */ | ||||
| 	return -ENOSYS; | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_plug_channel_params(void *private ATTRIBUTE_UNUSED, snd_pcm_channel_params_t *params ATTRIBUTE_UNUSED) | ||||
| { | ||||
| 	/* FIXME: if route plugin is not inserted or its ttable is trivial
 | ||||
| 	   this should be implemented */ | ||||
| 	return -ENOSYS; | ||||
| } | ||||
| 
 | ||||
| static int snd_pcm_plug_channel_setup(void *private ATTRIBUTE_UNUSED, snd_pcm_channel_setup_t *setup ATTRIBUTE_UNUSED) | ||||
| { | ||||
| 	/* FIXME: non mmap setups */ | ||||
| 	return -ENXIO; | ||||
| 	/* FIXME: if route plugin is not inserted or its ttable is trivial
 | ||||
| 	   this should be implemented for non mmap setups */ | ||||
| 	return -ENOSYS; | ||||
| } | ||||
| 
 | ||||
| static ssize_t snd_pcm_plug_frame_data(void *private, off_t offset) | ||||
|  | @ -642,6 +657,8 @@ struct snd_pcm_ops snd_pcm_plug_ops = { | |||
| 
 | ||||
| struct snd_pcm_fast_ops snd_pcm_plug_fast_ops = { | ||||
| 	nonblock: snd_pcm_plug_nonblock, | ||||
| 	channel_info: snd_pcm_plug_channel_info, | ||||
| 	channel_params: snd_pcm_plug_channel_params, | ||||
| 	channel_setup: snd_pcm_plug_channel_setup, | ||||
| 	status: snd_pcm_plug_status, | ||||
| 	frame_io: snd_pcm_plug_frame_io, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Abramo Bagnara
						Abramo Bagnara