Lines Matching defs:meter
83 snd_pcm_meter_t *meter = pcm->private_data;
88 snd_pcm_uframes_t dst_offset = ptr % meter->buf_size;
90 snd_pcm_uframes_t dst_cont = meter->buf_size - dst_offset;
96 snd_pcm_areas_copy(meter->buf_areas, dst_offset,
108 snd_pcm_meter_t *meter = pcm->private_data;
113 locked = (pthread_mutex_trylock(&meter->update_mutex) >= 0);
116 old_rptr = meter->rptr;
117 meter->rptr = rptr;
127 pthread_mutex_unlock(&meter->update_mutex);
132 snd_pcm_meter_t *meter = pcm->private_data;
138 pthread_mutex_lock(&meter->update_mutex);
142 old_rptr = meter->rptr;
143 if (atomic_read(&meter->reset)) {
145 atomic_dec(&meter->reset);
148 meter->rptr = rptr;
157 pthread_mutex_unlock(&meter->update_mutex);
190 snd_pcm_meter_t *meter = pcm->private_data;
191 snd_pcm_t *spcm = meter->gen.slave;
195 list_for_each(pos, &meter->scopes) {
199 while (!meter->closed) {
203 pthread_mutex_lock(&meter->running_mutex);
209 if (meter->running) {
210 list_for_each(pos, &meter->scopes) {
214 meter->running = 0;
216 pthread_cond_wait(&meter->running_cond,
217 &meter->running_mutex);
218 pthread_mutex_unlock(&meter->running_mutex);
221 pthread_mutex_unlock(&meter->running_mutex);
231 meter->now = now;
236 while (atomic_read(&meter->reset)) {
238 atomic_dec(&meter->reset);
242 list_for_each(pos, &meter->scopes) {
249 if (!meter->running) {
250 list_for_each(pos, &meter->scopes) {
255 meter->running = 1;
257 list_for_each(pos, &meter->scopes) {
262 nanosleep(&meter->delay, NULL);
264 list_for_each(pos, &meter->scopes) {
274 snd_pcm_meter_t *meter = pcm->private_data;
277 pthread_mutex_destroy(&meter->update_mutex);
278 pthread_mutex_destroy(&meter->running_mutex);
279 pthread_cond_destroy(&meter->running_cond);
280 if (meter->gen.close_slave)
281 err = snd_pcm_close(meter->gen.slave);
282 list_for_each_safe(pos, npos, &meter->scopes) {
287 if (meter->dl_handle)
288 snd_dlclose(meter->dl_handle);
289 free(meter);
295 snd_pcm_meter_t *meter = pcm->private_data;
297 atomic_add(&meter->reset, 1);
298 err = snd_pcm_prepare(meter->gen.slave);
301 meter->rptr = *pcm->appl.ptr;
303 meter->rptr = *pcm->hw.ptr;
310 snd_pcm_meter_t *meter = pcm->private_data;
311 int err = snd_pcm_reset(meter->gen.slave);
314 meter->rptr = *pcm->appl.ptr;
321 snd_pcm_meter_t *meter = pcm->private_data;
323 pthread_mutex_lock(&meter->running_mutex);
324 err = snd_pcm_start(meter->gen.slave);
326 pthread_cond_signal(&meter->running_cond);
327 pthread_mutex_unlock(&meter->running_mutex);
333 snd_pcm_meter_t *meter = pcm->private_data;
334 snd_pcm_sframes_t err = snd_pcm_rewind(meter->gen.slave, frames);
336 meter->rptr = *pcm->appl.ptr;
342 snd_pcm_meter_t *meter = pcm->private_data;
343 snd_pcm_sframes_t err = INTERNAL(snd_pcm_forward)(meter->gen.slave, frames);
345 meter->rptr = *pcm->appl.ptr;
353 snd_pcm_meter_t *meter = pcm->private_data;
355 snd_pcm_sframes_t result = snd_pcm_mmap_commit(meter->gen.slave, offset, size);
360 meter->rptr = *pcm->appl.ptr;
367 snd_pcm_meter_t *meter = pcm->private_data;
368 snd_pcm_sframes_t result = snd_pcm_avail_update(meter->gen.slave);
421 snd_pcm_meter_t *meter = pcm->private_data;
422 return snd_pcm_hw_refine(meter->gen.slave, params);
427 snd_pcm_meter_t *meter = pcm->private_data;
428 return _snd_pcm_hw_params_internal(meter->gen.slave, params);
443 snd_pcm_meter_t *meter = pcm->private_data;
445 snd_pcm_t *slave = meter->gen.slave;
456 meter->buf_size = slave->buffer_size;
457 while (meter->buf_size < slave->rate)
458 meter->buf_size *= 2;
459 buf_size_bytes = snd_pcm_frames_to_bytes(slave, meter->buf_size);
460 assert(!meter->buf);
461 meter->buf = malloc(buf_size_bytes);
462 if (!meter->buf)
464 meter->buf_areas = malloc(sizeof(*meter->buf_areas) * slave->channels);
465 if (!meter->buf_areas) {
466 free(meter->buf);
470 snd_pcm_channel_area_t *a = &meter->buf_areas[channel];
471 a->addr = meter->buf + buf_size_bytes / slave->channels * channel;
475 meter->closed = 0;
476 err = pthread_create(&meter->thread, NULL, snd_pcm_meter_thread, pcm);
483 snd_pcm_meter_t *meter = pcm->private_data;
485 meter->closed = 1;
486 pthread_mutex_lock(&meter->running_mutex);
487 pthread_cond_signal(&meter->running_cond);
488 pthread_mutex_unlock(&meter->running_mutex);
489 err = pthread_join(meter->thread, 0);
491 free(meter->buf);
492 free(meter->buf_areas);
493 meter->buf = NULL;
494 meter->buf_areas = NULL;
495 return snd_pcm_hw_free(meter->gen.slave);
500 snd_pcm_meter_t *meter = pcm->private_data;
507 snd_pcm_dump(meter->gen.slave, out);
573 snd_pcm_meter_t *meter;
576 meter = calloc(1, sizeof(snd_pcm_meter_t));
577 if (!meter)
579 meter->gen.slave = slave;
580 meter->gen.close_slave = close_slave;
581 meter->delay.tv_sec = 0;
582 meter->delay.tv_nsec = 1000000000 / frequency;
583 INIT_LIST_HEAD(&meter->scopes);
587 free(meter);
594 pcm->private_data = meter;
602 pthread_mutex_init(&meter->update_mutex, NULL);
603 pthread_mutex_init(&meter->running_mutex, NULL);
604 pthread_cond_init(&meter->running_cond, NULL);
619 snd_pcm_meter_t *meter = pcm->private_data;
696 meter->dl_handle = h;
705 Show meter (visual waveform representation).
719 type meter # Meter PCM
850 snd_pcm_meter_t *meter;
852 meter = pcm->private_data;
853 list_add_tail(&scope->list, &meter->scopes);
865 snd_pcm_meter_t *meter;
868 meter = pcm->private_data;
869 list_for_each(pos, &meter->scopes) {
879 * \brief Get meter buffer size from a #SND_PCM_TYPE_METER PCM
881 * \return meter buffer size in frames
885 snd_pcm_meter_t *meter;
887 meter = pcm->private_data;
888 assert(meter->gen.slave->setup);
889 return meter->buf_size;
893 * \brief Get meter channels from a #SND_PCM_TYPE_METER PCM
895 * \return meter channels count
899 snd_pcm_meter_t *meter;
901 meter = pcm->private_data;
902 assert(meter->gen.slave->setup);
903 return meter->gen.slave->channels;
907 * \brief Get meter rate from a #SND_PCM_TYPE_METER PCM
913 snd_pcm_meter_t *meter;
915 meter = pcm->private_data;
916 assert(meter->gen.slave->setup);
917 return meter->gen.slave->rate;
921 * \brief Get meter "now" frame pointer from a #SND_PCM_TYPE_METER PCM
927 snd_pcm_meter_t *meter;
929 meter = pcm->private_data;
930 assert(meter->gen.slave->setup);
931 return meter->now;
941 snd_pcm_meter_t *meter;
943 meter = pcm->private_data;
944 assert(meter->gen.slave->setup);
945 return meter->gen.slave->boundary;
950 * \param scope PCM meter scope
960 * \param scope PCM meter scope
970 * \param scope PCM meter scope
980 * \param scope PCM meter scope
990 * \param scope PCM meter scope
1011 snd_pcm_meter_t *meter = s16->pcm->private_data;
1012 snd_pcm_t *spcm = meter->gen.slave;
1018 s16->buf = (int16_t *) meter->buf;
1052 s16->buf = malloc(meter->buf_size * 2 * spcm->channels);
1065 a->addr = s16->buf + c * meter->buf_size;
1100 snd_pcm_meter_t *meter = s16->pcm->private_data;
1101 snd_pcm_t *spcm = meter->gen.slave;
1104 size = meter->now - s16->old;
1109 offset = s16->old % meter->buf_size;
1112 snd_pcm_uframes_t cont = meter->buf_size - offset;
1118 meter->buf_areas, offset,
1124 meter->buf_areas, offset,
1130 meter->buf_areas, offset,
1137 meter->buf_areas, offset,
1148 s16->old = meter->now;
1154 snd_pcm_meter_t *meter = s16->pcm->private_data;
1155 s16->old = meter->now;
1184 snd_pcm_meter_t *meter;
1188 meter = pcm->private_data;
1202 list_add_tail(&scope->list, &meter->scopes);
1217 snd_pcm_meter_t *meter;
1220 meter = s16->pcm->private_data;
1221 assert(meter->gen.slave->setup);
1223 assert(channel < meter->gen.slave->channels);