Lines Matching refs:pcm
2 * \file pcm/pcm_meter.c
78 static void snd_pcm_meter_add_frames(snd_pcm_t *pcm,
83 snd_pcm_meter_t *meter = pcm->private_data;
84 if (frames > pcm->buffer_size)
85 frames = pcm->buffer_size;
89 snd_pcm_uframes_t src_offset = ptr % pcm->buffer_size;
91 snd_pcm_uframes_t src_cont = pcm->buffer_size - src_offset;
98 pcm->channels, n, pcm->format);
101 if (ptr == pcm->boundary)
106 static void snd_pcm_meter_update_main(snd_pcm_t *pcm)
108 snd_pcm_meter_t *meter = pcm->private_data;
114 areas = snd_pcm_mmap_areas(pcm);
115 rptr = *pcm->hw.ptr;
120 frames += pcm->boundary;
122 assert((snd_pcm_uframes_t) frames <= pcm->buffer_size);
123 snd_pcm_meter_add_frames(pcm, areas, old_rptr,
130 static int snd_pcm_meter_update_scope(snd_pcm_t *pcm)
132 snd_pcm_meter_t *meter = pcm->private_data;
139 areas = snd_pcm_mmap_areas(pcm);
141 rptr = *pcm->hw.ptr;
151 frames += pcm->boundary;
153 assert((snd_pcm_uframes_t) frames <= pcm->buffer_size);
154 snd_pcm_meter_add_frames(pcm, areas, old_rptr,
189 snd_pcm_t *pcm = data;
190 snd_pcm_meter_t *meter = pcm->private_data;
222 if (pcm->stream == SND_PCM_STREAM_PLAYBACK) {
225 now += pcm->boundary;
228 if ((snd_pcm_uframes_t) now >= pcm->boundary)
229 now -= pcm->boundary;
232 if (pcm->stream == SND_PCM_STREAM_CAPTURE)
233 reset = snd_pcm_meter_update_scope(pcm);
272 static int snd_pcm_meter_close(snd_pcm_t *pcm)
274 snd_pcm_meter_t *meter = pcm->private_data;
293 static int snd_pcm_meter_prepare(snd_pcm_t *pcm)
295 snd_pcm_meter_t *meter = pcm->private_data;
300 if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
301 meter->rptr = *pcm->appl.ptr;
303 meter->rptr = *pcm->hw.ptr;
308 static int snd_pcm_meter_reset(snd_pcm_t *pcm)
310 snd_pcm_meter_t *meter = pcm->private_data;
313 if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
314 meter->rptr = *pcm->appl.ptr;
319 static int snd_pcm_meter_start(snd_pcm_t *pcm)
321 snd_pcm_meter_t *meter = pcm->private_data;
331 static snd_pcm_sframes_t snd_pcm_meter_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
333 snd_pcm_meter_t *meter = pcm->private_data;
335 if (err > 0 && pcm->stream == SND_PCM_STREAM_PLAYBACK)
336 meter->rptr = *pcm->appl.ptr;
340 static snd_pcm_sframes_t snd_pcm_meter_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
342 snd_pcm_meter_t *meter = pcm->private_data;
344 if (err > 0 && pcm->stream == SND_PCM_STREAM_PLAYBACK)
345 meter->rptr = *pcm->appl.ptr;
349 static snd_pcm_sframes_t snd_pcm_meter_mmap_commit(snd_pcm_t *pcm,
353 snd_pcm_meter_t *meter = pcm->private_data;
354 snd_pcm_uframes_t old_rptr = *pcm->appl.ptr;
358 if (pcm->stream == SND_PCM_STREAM_PLAYBACK) {
359 snd_pcm_meter_add_frames(pcm, snd_pcm_mmap_areas(pcm), old_rptr, result);
360 meter->rptr = *pcm->appl.ptr;
365 static snd_pcm_sframes_t snd_pcm_meter_avail_update(snd_pcm_t *pcm)
367 snd_pcm_meter_t *meter = pcm->private_data;
371 if (pcm->stream == SND_PCM_STREAM_CAPTURE)
372 snd_pcm_meter_update_main(pcm);
376 static int snd_pcm_meter_hw_refine_cprepare(snd_pcm_t *pcm ATTRIBUTE_UNUSED, snd_pcm_hw_params_t *params)
388 static int snd_pcm_meter_hw_refine_sprepare(snd_pcm_t *pcm ATTRIBUTE_UNUSED, snd_pcm_hw_params_t *sparams)
397 static int snd_pcm_meter_hw_refine_schange(snd_pcm_t *pcm ATTRIBUTE_UNUSED, snd_pcm_hw_params_t *params,
408 static int snd_pcm_meter_hw_refine_cchange(snd_pcm_t *pcm ATTRIBUTE_UNUSED, snd_pcm_hw_params_t *params,
419 static int snd_pcm_meter_hw_refine_slave(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
421 snd_pcm_meter_t *meter = pcm->private_data;
425 static int snd_pcm_meter_hw_params_slave(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
427 snd_pcm_meter_t *meter = pcm->private_data;
431 static int snd_pcm_meter_hw_refine(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
433 return snd_pcm_hw_refine_slave(pcm, params,
441 static int snd_pcm_meter_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t * params)
443 snd_pcm_meter_t *meter = pcm->private_data;
448 err = snd_pcm_hw_params_slave(pcm, params,
476 err = pthread_create(&meter->thread, NULL, snd_pcm_meter_thread, pcm);
481 static int snd_pcm_meter_hw_free(snd_pcm_t *pcm)
483 snd_pcm_meter_t *meter = pcm->private_data;
498 static void snd_pcm_meter_dump(snd_pcm_t *pcm, snd_output_t *out)
500 snd_pcm_meter_t *meter = pcm->private_data;
502 if (pcm->setup) {
504 snd_pcm_dump_setup(pcm, out);
572 snd_pcm_t *pcm;
585 err = snd_pcm_new(&pcm, SND_PCM_TYPE_METER, name, slave->stream, slave->mode);
590 pcm->mmap_rw = 1;
591 pcm->mmap_shadow = 1;
592 pcm->ops = &snd_pcm_meter_ops;
593 pcm->fast_ops = &snd_pcm_meter_fast_ops;
594 pcm->private_data = meter;
595 pcm->poll_fd = slave->poll_fd;
596 pcm->poll_events = slave->poll_events;
597 pcm->tstamp_type = slave->tstamp_type;
598 snd_pcm_link_hw_ptr(pcm, slave);
599 snd_pcm_link_appl_ptr(pcm, slave);
600 *pcmp = pcm;
609 static int snd_pcm_meter_add_scope_conf(snd_pcm_t *pcm, const char *name,
619 snd_pcm_meter_t *meter = pcm->private_data;
692 err = open_func(pcm, name, root, conf);
718 pcm.name {
723 pcm STR # Slave PCM name
725 pcm { } # Slave PCM definition
844 * \param pcm PCM handle
848 int snd_pcm_meter_add_scope(snd_pcm_t *pcm, snd_pcm_scope_t *scope)
851 assert(pcm->type == SND_PCM_TYPE_METER);
852 meter = pcm->private_data;
859 * \param pcm PCM handle
863 snd_pcm_scope_t *snd_pcm_meter_search_scope(snd_pcm_t *pcm, const char *name)
867 assert(pcm->type == SND_PCM_TYPE_METER);
868 meter = pcm->private_data;
880 * \param pcm PCM handle
883 snd_pcm_uframes_t snd_pcm_meter_get_bufsize(snd_pcm_t *pcm)
886 assert(pcm->type == SND_PCM_TYPE_METER);
887 meter = pcm->private_data;
894 * \param pcm PCM handle
897 unsigned int snd_pcm_meter_get_channels(snd_pcm_t *pcm)
900 assert(pcm->type == SND_PCM_TYPE_METER);
901 meter = pcm->private_data;
908 * \param pcm PCM handle
911 unsigned int snd_pcm_meter_get_rate(snd_pcm_t *pcm)
914 assert(pcm->type == SND_PCM_TYPE_METER);
915 meter = pcm->private_data;
922 * \param pcm PCM handle
925 snd_pcm_uframes_t snd_pcm_meter_get_now(snd_pcm_t *pcm)
928 assert(pcm->type == SND_PCM_TYPE_METER);
929 meter = pcm->private_data;
936 * \param pcm PCM handle
939 snd_pcm_uframes_t snd_pcm_meter_get_boundary(snd_pcm_t *pcm)
942 assert(pcm->type == SND_PCM_TYPE_METER);
943 meter = pcm->private_data;
1000 snd_pcm_t *pcm;
1011 snd_pcm_meter_t *meter = s16->pcm->private_data;
1100 snd_pcm_meter_t *meter = s16->pcm->private_data;
1107 if (size > (snd_pcm_sframes_t)s16->pcm->buffer_size)
1108 size = s16->pcm->buffer_size;
1154 snd_pcm_meter_t *meter = s16->pcm->private_data;
1172 * \param pcm The pcm handle
1181 int snd_pcm_scope_s16_open(snd_pcm_t *pcm, const char *name,
1187 assert(pcm->type == SND_PCM_TYPE_METER);
1188 meter = pcm->private_data;
1199 s16->pcm = pcm;
1220 meter = s16->pcm->private_data;