mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	Use snd_pcm_generic_t and its callbacks
Use snd_pcm_generic_t and its callbacks.
This commit is contained in:
		
							parent
							
								
									842b573424
								
							
						
					
					
						commit
						97010dbfdb
					
				
					 1 changed files with 49 additions and 143 deletions
				
			
		| 
						 | 
				
			
			@ -52,8 +52,7 @@ struct _snd_pcm_scope {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _snd_pcm_meter {
 | 
			
		||||
	snd_pcm_t *slave;
 | 
			
		||||
	int close_slave;
 | 
			
		||||
	snd_pcm_generic_t gen;
 | 
			
		||||
	snd_pcm_uframes_t rptr;
 | 
			
		||||
	snd_pcm_uframes_t buf_size;
 | 
			
		||||
	snd_pcm_channel_area_t *buf_areas;
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +182,7 @@ static void *snd_pcm_meter_thread(void *data)
 | 
			
		|||
{
 | 
			
		||||
	snd_pcm_t *pcm = data;
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	snd_pcm_t *spcm = meter->slave;
 | 
			
		||||
	snd_pcm_t *spcm = meter->gen.slave;
 | 
			
		||||
	struct list_head *pos;
 | 
			
		||||
	snd_pcm_scope_t *scope;
 | 
			
		||||
	int reset;
 | 
			
		||||
| 
						 | 
				
			
			@ -272,8 +271,8 @@ static int snd_pcm_meter_close(snd_pcm_t *pcm)
 | 
			
		|||
	pthread_mutex_destroy(&meter->update_mutex);
 | 
			
		||||
	pthread_mutex_destroy(&meter->running_mutex);
 | 
			
		||||
	pthread_cond_destroy(&meter->running_cond);
 | 
			
		||||
	if (meter->close_slave)
 | 
			
		||||
		err = snd_pcm_close(meter->slave);
 | 
			
		||||
	if (meter->gen.close_slave)
 | 
			
		||||
		err = snd_pcm_close(meter->gen.slave);
 | 
			
		||||
	list_for_each_safe(pos, npos, &meter->scopes) {
 | 
			
		||||
		snd_pcm_scope_t *scope;
 | 
			
		||||
		scope = list_entry(pos, snd_pcm_scope_t, list);
 | 
			
		||||
| 
						 | 
				
			
			@ -283,60 +282,12 @@ static int snd_pcm_meter_close(snd_pcm_t *pcm)
 | 
			
		|||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_nonblock(snd_pcm_t *pcm, int nonblock)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_nonblock(meter->slave, nonblock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_async(snd_pcm_t *pcm, int sig, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_async(meter->slave, sig, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_info(snd_pcm_t *pcm, snd_pcm_info_t * info)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_info(meter->slave, info);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_channel_info(snd_pcm_t *pcm, snd_pcm_channel_info_t * info)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_channel_info(meter->slave, info);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_status(meter->slave, status);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static snd_pcm_state_t snd_pcm_meter_state(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_state(meter->slave);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_hwsync(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_hwsync(meter->slave);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_delay(meter->slave, delayp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_prepare(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	int err;
 | 
			
		||||
	atomic_inc(&meter->reset);
 | 
			
		||||
	err = snd_pcm_prepare(meter->slave);
 | 
			
		||||
	err = snd_pcm_prepare(meter->gen.slave);
 | 
			
		||||
	if (err >= 0) {
 | 
			
		||||
		if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
 | 
			
		||||
			meter->rptr = *pcm->appl.ptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -349,7 +300,7 @@ static int snd_pcm_meter_prepare(snd_pcm_t *pcm)
 | 
			
		|||
static int snd_pcm_meter_reset(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	int err = snd_pcm_reset(meter->slave);
 | 
			
		||||
	int err = snd_pcm_reset(meter->gen.slave);
 | 
			
		||||
	if (err >= 0) {
 | 
			
		||||
		if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
 | 
			
		||||
			meter->rptr = *pcm->appl.ptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -362,35 +313,17 @@ static int snd_pcm_meter_start(snd_pcm_t *pcm)
 | 
			
		|||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	int err;
 | 
			
		||||
	pthread_mutex_lock(&meter->running_mutex);
 | 
			
		||||
	err = snd_pcm_start(meter->slave);
 | 
			
		||||
	err = snd_pcm_start(meter->gen.slave);
 | 
			
		||||
	if (err >= 0)
 | 
			
		||||
		pthread_cond_signal(&meter->running_cond);
 | 
			
		||||
	pthread_mutex_unlock(&meter->running_mutex);
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_drop(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_drop(meter->slave);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_drain(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_drain(meter->slave);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_pause(snd_pcm_t *pcm, int enable)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_pause(meter->slave, enable);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static snd_pcm_sframes_t snd_pcm_meter_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	snd_pcm_sframes_t err = snd_pcm_rewind(meter->slave, frames);
 | 
			
		||||
	snd_pcm_sframes_t err = snd_pcm_rewind(meter->gen.slave, frames);
 | 
			
		||||
	if (err > 0 && pcm->stream == SND_PCM_STREAM_PLAYBACK)
 | 
			
		||||
		meter->rptr = *pcm->appl.ptr;
 | 
			
		||||
	return err;
 | 
			
		||||
| 
						 | 
				
			
			@ -399,33 +332,19 @@ static snd_pcm_sframes_t snd_pcm_meter_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t
 | 
			
		|||
static snd_pcm_sframes_t snd_pcm_meter_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	snd_pcm_sframes_t err = INTERNAL(snd_pcm_forward)(meter->slave, frames);
 | 
			
		||||
	snd_pcm_sframes_t err = INTERNAL(snd_pcm_forward)(meter->gen.slave, frames);
 | 
			
		||||
	if (err > 0 && pcm->stream == SND_PCM_STREAM_PLAYBACK)
 | 
			
		||||
		meter->rptr = *pcm->appl.ptr;
 | 
			
		||||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_resume(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_resume(meter->slave);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_poll_ask(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	if (meter->slave->fast_ops->poll_ask)
 | 
			
		||||
		return meter->slave->fast_ops->poll_ask(meter->slave->fast_op_arg);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static snd_pcm_sframes_t snd_pcm_meter_mmap_commit(snd_pcm_t *pcm,
 | 
			
		||||
						   snd_pcm_uframes_t offset,
 | 
			
		||||
						   snd_pcm_uframes_t size)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	snd_pcm_uframes_t old_rptr = *pcm->appl.ptr;
 | 
			
		||||
	snd_pcm_sframes_t result = snd_pcm_mmap_commit(meter->slave, offset, size);
 | 
			
		||||
	snd_pcm_sframes_t result = snd_pcm_mmap_commit(meter->gen.slave, offset, size);
 | 
			
		||||
	if (result <= 0)
 | 
			
		||||
		return result;
 | 
			
		||||
	if (pcm->stream == SND_PCM_STREAM_PLAYBACK) {
 | 
			
		||||
| 
						 | 
				
			
			@ -438,7 +357,7 @@ static snd_pcm_sframes_t snd_pcm_meter_mmap_commit(snd_pcm_t *pcm,
 | 
			
		|||
static snd_pcm_sframes_t snd_pcm_meter_avail_update(snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	snd_pcm_sframes_t result = snd_pcm_avail_update(meter->slave);
 | 
			
		||||
	snd_pcm_sframes_t result = snd_pcm_avail_update(meter->gen.slave);
 | 
			
		||||
	if (result <= 0)
 | 
			
		||||
		return result;
 | 
			
		||||
	if (pcm->stream == SND_PCM_STREAM_CAPTURE)
 | 
			
		||||
| 
						 | 
				
			
			@ -492,13 +411,13 @@ static int snd_pcm_meter_hw_refine_cchange(snd_pcm_t *pcm ATTRIBUTE_UNUSED, snd_
 | 
			
		|||
static int snd_pcm_meter_hw_refine_slave(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_hw_refine(meter->slave, params);
 | 
			
		||||
	return snd_pcm_hw_refine(meter->gen.slave, params);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_hw_params_slave(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return _snd_pcm_hw_params(meter->slave, params);
 | 
			
		||||
	return _snd_pcm_hw_params(meter->gen.slave, params);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_hw_refine(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
 | 
			
		||||
| 
						 | 
				
			
			@ -515,7 +434,7 @@ static int snd_pcm_meter_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t * params)
 | 
			
		|||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	unsigned int channel;
 | 
			
		||||
	snd_pcm_t *slave = meter->slave;
 | 
			
		||||
	snd_pcm_t *slave = meter->gen.slave;
 | 
			
		||||
	size_t buf_size_bytes;
 | 
			
		||||
	int err;
 | 
			
		||||
	err = snd_pcm_hw_params_slave(pcm, params,
 | 
			
		||||
| 
						 | 
				
			
			@ -567,23 +486,7 @@ static int snd_pcm_meter_hw_free(snd_pcm_t *pcm)
 | 
			
		|||
		meter->buf = 0;
 | 
			
		||||
		meter->buf_areas = 0;
 | 
			
		||||
	}
 | 
			
		||||
	return snd_pcm_hw_free(meter->slave);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t * params)
 | 
			
		||||
{
 | 
			
		||||
	snd_pcm_meter_t *meter = pcm->private_data;
 | 
			
		||||
	return snd_pcm_sw_params(meter->slave, params);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_mmap(snd_pcm_t *pcm ATTRIBUTE_UNUSED)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int snd_pcm_meter_munmap(snd_pcm_t *pcm ATTRIBUTE_UNUSED)
 | 
			
		||||
{
 | 
			
		||||
	return 0;
 | 
			
		||||
	return snd_pcm_hw_free(meter->gen.slave);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void snd_pcm_meter_dump(snd_pcm_t *pcm, snd_output_t *out)
 | 
			
		||||
| 
						 | 
				
			
			@ -595,39 +498,42 @@ static void snd_pcm_meter_dump(snd_pcm_t *pcm, snd_output_t *out)
 | 
			
		|||
		snd_pcm_dump_setup(pcm, out);
 | 
			
		||||
	}
 | 
			
		||||
	snd_output_printf(out, "Slave: ");
 | 
			
		||||
	snd_pcm_dump(meter->slave, out);
 | 
			
		||||
	snd_pcm_dump(meter->gen.slave, out);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static snd_pcm_ops_t snd_pcm_meter_ops = {
 | 
			
		||||
	.close = snd_pcm_meter_close,
 | 
			
		||||
	.info = snd_pcm_meter_info,
 | 
			
		||||
	.info = snd_pcm_generic_info,
 | 
			
		||||
	.hw_refine = snd_pcm_meter_hw_refine,
 | 
			
		||||
	.hw_params = snd_pcm_meter_hw_params,
 | 
			
		||||
	.hw_free = snd_pcm_meter_hw_free,
 | 
			
		||||
	.sw_params = snd_pcm_meter_sw_params,
 | 
			
		||||
	.channel_info = snd_pcm_meter_channel_info,
 | 
			
		||||
	.sw_params = snd_pcm_generic_sw_params,
 | 
			
		||||
	.channel_info = snd_pcm_generic_channel_info,
 | 
			
		||||
	.dump = snd_pcm_meter_dump,
 | 
			
		||||
	.nonblock = snd_pcm_meter_nonblock,
 | 
			
		||||
	.async = snd_pcm_meter_async,
 | 
			
		||||
	.mmap = snd_pcm_meter_mmap,
 | 
			
		||||
	.munmap = snd_pcm_meter_munmap,
 | 
			
		||||
	.nonblock = snd_pcm_generic_nonblock,
 | 
			
		||||
	.async = snd_pcm_generic_async,
 | 
			
		||||
	.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
 | 
			
		||||
	.poll_descriptors = snd_pcm_generic_poll_descriptors,
 | 
			
		||||
	.poll_revents = snd_pcm_generic_poll_revents,
 | 
			
		||||
	.mmap = snd_pcm_generic_mmap,
 | 
			
		||||
	.munmap = snd_pcm_generic_munmap,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static snd_pcm_fast_ops_t snd_pcm_meter_fast_ops = {
 | 
			
		||||
	.status = snd_pcm_meter_status,
 | 
			
		||||
	.state = snd_pcm_meter_state,
 | 
			
		||||
	.hwsync = snd_pcm_meter_hwsync,
 | 
			
		||||
	.delay = snd_pcm_meter_delay,
 | 
			
		||||
	.status = snd_pcm_generic_status,
 | 
			
		||||
	.state = snd_pcm_generic_state,
 | 
			
		||||
	.hwsync = snd_pcm_generic_hwsync,
 | 
			
		||||
	.delay = snd_pcm_generic_delay,
 | 
			
		||||
	.prepare = snd_pcm_meter_prepare,
 | 
			
		||||
	.reset = snd_pcm_meter_reset,
 | 
			
		||||
	.start = snd_pcm_meter_start,
 | 
			
		||||
	.drop = snd_pcm_meter_drop,
 | 
			
		||||
	.drain = snd_pcm_meter_drain,
 | 
			
		||||
	.pause = snd_pcm_meter_pause,
 | 
			
		||||
	.drop = snd_pcm_generic_drop,
 | 
			
		||||
	.drain = snd_pcm_generic_drain,
 | 
			
		||||
	.pause = snd_pcm_generic_pause,
 | 
			
		||||
	.rewind = snd_pcm_meter_rewind,
 | 
			
		||||
	.forward = snd_pcm_meter_forward,
 | 
			
		||||
	.resume = snd_pcm_meter_resume,
 | 
			
		||||
	.poll_ask = snd_pcm_meter_poll_ask,
 | 
			
		||||
	.resume = snd_pcm_generic_resume,
 | 
			
		||||
	.poll_ask = snd_pcm_generic_poll_ask,
 | 
			
		||||
	.writei = snd_pcm_mmap_writei,
 | 
			
		||||
	.writen = snd_pcm_mmap_writen,
 | 
			
		||||
	.readi = snd_pcm_mmap_readi,
 | 
			
		||||
| 
						 | 
				
			
			@ -658,8 +564,8 @@ int snd_pcm_meter_open(snd_pcm_t **pcmp, const char *name, unsigned int frequenc
 | 
			
		|||
	meter = calloc(1, sizeof(snd_pcm_meter_t));
 | 
			
		||||
	if (!meter)
 | 
			
		||||
		return -ENOMEM;
 | 
			
		||||
	meter->slave = slave;
 | 
			
		||||
	meter->close_slave = close_slave;
 | 
			
		||||
	meter->gen.slave = slave;
 | 
			
		||||
	meter->gen.close_slave = close_slave;
 | 
			
		||||
	meter->delay.tv_sec = 0;
 | 
			
		||||
	meter->delay.tv_nsec = 1000000000 / frequency;
 | 
			
		||||
	INIT_LIST_HEAD(&meter->scopes);
 | 
			
		||||
| 
						 | 
				
			
			@ -956,7 +862,7 @@ snd_pcm_uframes_t snd_pcm_meter_get_bufsize(snd_pcm_t *pcm)
 | 
			
		|||
	snd_pcm_meter_t *meter;
 | 
			
		||||
	assert(pcm->type == SND_PCM_TYPE_METER);
 | 
			
		||||
	meter = pcm->private_data;
 | 
			
		||||
	assert(meter->slave->setup);
 | 
			
		||||
	assert(meter->gen.slave->setup);
 | 
			
		||||
	return meter->buf_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -970,8 +876,8 @@ unsigned int snd_pcm_meter_get_channels(snd_pcm_t *pcm)
 | 
			
		|||
	snd_pcm_meter_t *meter;
 | 
			
		||||
	assert(pcm->type == SND_PCM_TYPE_METER);
 | 
			
		||||
	meter = pcm->private_data;
 | 
			
		||||
	assert(meter->slave->setup);
 | 
			
		||||
	return meter->slave->channels;
 | 
			
		||||
	assert(meter->gen.slave->setup);
 | 
			
		||||
	return meter->gen.slave->channels;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -984,8 +890,8 @@ unsigned int snd_pcm_meter_get_rate(snd_pcm_t *pcm)
 | 
			
		|||
	snd_pcm_meter_t *meter;
 | 
			
		||||
	assert(pcm->type == SND_PCM_TYPE_METER);
 | 
			
		||||
	meter = pcm->private_data;
 | 
			
		||||
	assert(meter->slave->setup);
 | 
			
		||||
	return meter->slave->rate;
 | 
			
		||||
	assert(meter->gen.slave->setup);
 | 
			
		||||
	return meter->gen.slave->rate;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -998,7 +904,7 @@ snd_pcm_uframes_t snd_pcm_meter_get_now(snd_pcm_t *pcm)
 | 
			
		|||
	snd_pcm_meter_t *meter;
 | 
			
		||||
	assert(pcm->type == SND_PCM_TYPE_METER);
 | 
			
		||||
	meter = pcm->private_data;
 | 
			
		||||
	assert(meter->slave->setup);
 | 
			
		||||
	assert(meter->gen.slave->setup);
 | 
			
		||||
	return meter->now;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1012,8 +918,8 @@ snd_pcm_uframes_t snd_pcm_meter_get_boundary(snd_pcm_t *pcm)
 | 
			
		|||
	snd_pcm_meter_t *meter;
 | 
			
		||||
	assert(pcm->type == SND_PCM_TYPE_METER);
 | 
			
		||||
	meter = pcm->private_data;
 | 
			
		||||
	assert(meter->slave->setup);
 | 
			
		||||
	return meter->slave->boundary;
 | 
			
		||||
	assert(meter->gen.slave->setup);
 | 
			
		||||
	return meter->gen.slave->boundary;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -1080,7 +986,7 @@ static int s16_enable(snd_pcm_scope_t *scope)
 | 
			
		|||
{
 | 
			
		||||
	snd_pcm_scope_s16_t *s16 = scope->private_data;
 | 
			
		||||
	snd_pcm_meter_t *meter = s16->pcm->private_data;
 | 
			
		||||
	snd_pcm_t *spcm = meter->slave;
 | 
			
		||||
	snd_pcm_t *spcm = meter->gen.slave;
 | 
			
		||||
	snd_pcm_channel_area_t *a;
 | 
			
		||||
	unsigned int c;
 | 
			
		||||
	int idx;
 | 
			
		||||
| 
						 | 
				
			
			@ -1173,7 +1079,7 @@ static void s16_update(snd_pcm_scope_t *scope)
 | 
			
		|||
{
 | 
			
		||||
	snd_pcm_scope_s16_t *s16 = scope->private_data;
 | 
			
		||||
	snd_pcm_meter_t *meter = s16->pcm->private_data;
 | 
			
		||||
	snd_pcm_t *spcm = meter->slave;
 | 
			
		||||
	snd_pcm_t *spcm = meter->gen.slave;
 | 
			
		||||
	snd_pcm_sframes_t size;
 | 
			
		||||
	snd_pcm_uframes_t offset;
 | 
			
		||||
	size = meter->now - s16->old;
 | 
			
		||||
| 
						 | 
				
			
			@ -1290,9 +1196,9 @@ int16_t *snd_pcm_scope_s16_get_channel_buffer(snd_pcm_scope_t *scope,
 | 
			
		|||
	assert(scope->ops == &s16_ops);
 | 
			
		||||
	s16 = scope->private_data;
 | 
			
		||||
	meter = s16->pcm->private_data;
 | 
			
		||||
	assert(meter->slave->setup);
 | 
			
		||||
	assert(meter->gen.slave->setup);
 | 
			
		||||
	assert(s16->buf_areas);
 | 
			
		||||
	assert(channel < meter->slave->channels);
 | 
			
		||||
	assert(channel < meter->gen.slave->channels);
 | 
			
		||||
	return s16->buf_areas[channel].addr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue