Lines Matching refs:slave

104 	snd_pcm_share_slave_t *slave;
121 static snd_pcm_uframes_t snd_pcm_share_slave_avail(snd_pcm_share_slave_t *slave)
124 snd_pcm_t *pcm = slave->pcm;
125 avail = slave->hw_ptr - *pcm->appl.ptr;
136 /* Return number of frames to mmap_commit the slave */
137 static snd_pcm_uframes_t _snd_pcm_share_slave_forward(snd_pcm_share_slave_t *slave)
145 slave_avail = snd_pcm_share_slave_avail(slave);
146 buffer_size = slave->pcm->buffer_size;
149 list_for_each(i, &slave->clients) {
176 safety_frames = slave->safety_threshold - slave_hw_avail;
200 snd_pcm_share_slave_t *slave = share->slave;
201 snd_pcm_t *spcm = slave->pcm;
209 // printf("state=%s hw_ptr=%ld appl_ptr=%ld slave appl_ptr=%ld safety=%ld silence=%ld\n", snd_pcm_state_name(share->state), slave->hw_ptr, share->appl_ptr, *slave->pcm->appl_ptr, slave->safety_threshold, slave->silence_frames);
220 share->hw_ptr = slave->hw_ptr;
227 slave_avail = snd_pcm_share_slave_avail(slave);
231 snd_pcm_sframes_t safety_missing = slave_hw_avail - slave->safety_threshold;
319 if (avail >= slave->silence_frames) {
322 snd_pcm_uframes_t size = slave->silence_frames;
337 silence_missing = slave->silence_frames - avail;
346 static snd_pcm_uframes_t _snd_pcm_share_slave_missing(snd_pcm_share_slave_t *slave)
350 /* snd_pcm_sframes_t avail = */ snd_pcm_avail_update(slave->pcm);
351 slave->hw_ptr = *slave->pcm->hw.ptr;
352 list_for_each(i, &slave->clients) {
364 snd_pcm_share_slave_t *slave = data;
365 snd_pcm_t *spcm = slave->pcm;
369 pfd[0].fd = slave->poll[0];
376 Pthread_mutex_lock(&slave->mutex);
377 err = pipe(slave->poll);
380 Pthread_mutex_unlock(&slave->mutex);
383 while (slave->open_count > 0) {
386 missing = _snd_pcm_share_slave_missing(slave);
391 hw_ptr = slave->hw_ptr + missing;
403 snd_pcm_sw_params_set_avail_min(spcm, &slave->sw_params, avail_min);
404 err = snd_pcm_sw_params(spcm, &slave->sw_params);
407 Pthread_mutex_unlock(&slave->mutex);
411 slave->polling = 1;
412 Pthread_mutex_unlock(&slave->mutex);
414 Pthread_mutex_lock(&slave->mutex);
420 slave->polling = 0;
421 pthread_cond_wait(&slave->poll_cond, &slave->mutex);
424 Pthread_mutex_unlock(&slave->mutex);
431 snd_pcm_share_slave_t *slave = share->slave;
432 snd_pcm_t *spcm = slave->pcm;
435 slave->hw_ptr = *slave->pcm->hw.ptr;
438 if (!slave->polling) {
439 pthread_cond_signal(&slave->poll_cond);
445 hw_ptr = slave->hw_ptr + missing;
457 snd_pcm_sw_params_set_avail_min(spcm, &slave->sw_params, avail_min);
458 err = snd_pcm_sw_params(spcm, &slave->sw_params);
480 return snd_pcm_info(share->slave->pcm, info);
486 snd_pcm_share_slave_t *slave = share->slave;
499 if (slave->format != SND_PCM_FORMAT_UNKNOWN) {
500 err = _snd_pcm_hw_params_set_format(params, slave->format);
505 if (slave->rate >= 0) {
507 slave->rate, 0);
511 if (slave->period_time >= 0) {
513 slave->period_time, 0);
517 if (slave->buffer_time >= 0) {
519 slave->buffer_time, 0);
530 snd_pcm_share_slave_t *slave = share->slave;
536 slave->channels, 0);
604 return snd_pcm_hw_refine(share->slave->pcm, params);
610 return _snd_pcm_hw_params_internal(share->slave->pcm, params);
626 snd_pcm_share_slave_t *slave = share->slave;
627 snd_pcm_t *spcm = slave->pcm;
629 Pthread_mutex_lock(&slave->mutex);
630 if (slave->setup_count) {
651 SNDERR("slave is already running with incompatible setup");
663 snd_pcm_sw_params_current(slave->pcm, &slave->sw_params);
665 slave->safety_threshold = slave->pcm->rate * 30 / 1000;
666 slave->safety_threshold += slave->pcm->period_size - 1;
667 slave->safety_threshold -= slave->safety_threshold % slave->pcm->period_size;
668 slave->silence_frames = slave->safety_threshold;
669 if (slave->pcm->stream == SND_PCM_STREAM_PLAYBACK)
670 snd_pcm_areas_silence(slave->pcm->running_areas, 0, slave->pcm->channels, slave->pcm->buffer_size, slave->pcm->format);
673 slave->setup_count++;
675 Pthread_mutex_unlock(&slave->mutex);
682 snd_pcm_share_slave_t *slave = share->slave;
684 Pthread_mutex_lock(&slave->mutex);
685 slave->setup_count--;
686 if (slave->setup_count == 0)
687 err = snd_pcm_hw_free(slave->pcm);
689 Pthread_mutex_unlock(&slave->mutex);
701 snd_pcm_share_slave_t *slave = share->slave;
704 Pthread_mutex_lock(&slave->mutex);
717 err = snd_pcm_delay(slave->pcm, &sd);
727 Pthread_mutex_unlock(&slave->mutex);
740 snd_pcm_share_slave_t *slave = share->slave;
747 return snd_pcm_hwsync(slave->pcm);
753 snd_pcm_share_slave_t *slave = share->slave;
755 Pthread_mutex_lock(&slave->mutex);
757 Pthread_mutex_unlock(&slave->mutex);
764 snd_pcm_share_slave_t *slave = share->slave;
777 return snd_pcm_delay(slave->pcm, delayp);
783 snd_pcm_share_slave_t *slave = share->slave;
785 Pthread_mutex_lock(&slave->mutex);
787 Pthread_mutex_unlock(&slave->mutex);
794 snd_pcm_share_slave_t *slave = share->slave;
796 Pthread_mutex_lock(&slave->mutex);
798 avail = snd_pcm_avail_update(slave->pcm);
800 Pthread_mutex_unlock(&slave->mutex);
803 share->hw_ptr = *slave->pcm->hw.ptr;
805 Pthread_mutex_unlock(&slave->mutex);
816 snd_pcm_share_slave_t *slave = share->slave;
818 Pthread_mutex_lock(&slave->mutex);
819 err = snd_pcm_htimestamp(slave->pcm, avail, tstamp);
820 Pthread_mutex_unlock(&slave->mutex);
830 snd_pcm_share_slave_t *slave = share->slave;
831 snd_pcm_t *spcm = slave->pcm;
850 frames = _snd_pcm_share_slave_forward(slave);
873 snd_pcm_share_slave_t *slave = share->slave;
875 Pthread_mutex_lock(&slave->mutex);
877 Pthread_mutex_unlock(&slave->mutex);
884 snd_pcm_share_slave_t *slave = share->slave;
886 Pthread_mutex_lock(&slave->mutex);
900 if (slave->prepared_count == 0) {
901 err = snd_pcm_prepare(slave->pcm);
905 slave->prepared_count++;
910 Pthread_mutex_unlock(&slave->mutex);
917 snd_pcm_share_slave_t *slave = share->slave;
920 Pthread_mutex_lock(&slave->mutex);
922 share->hw_ptr = *slave->pcm->hw.ptr;
924 Pthread_mutex_unlock(&slave->mutex);
931 snd_pcm_share_slave_t *slave = share->slave;
932 snd_pcm_t *spcm = slave->pcm;
936 Pthread_mutex_lock(&slave->mutex);
945 if (slave->running_count) {
971 if (slave->running_count == 0) {
981 if (slave->running_count == 0) {
986 slave->running_count++;
990 Pthread_mutex_unlock(&slave->mutex);
1007 snd_pcm_share_slave_t *slave = share->slave;
1012 err = snd_pcm_channel_info(slave->pcm, info);
1020 snd_pcm_share_slave_t *slave = share->slave;
1043 snd_pcm_sframes_t ret = snd_pcm_rewind(slave->pcm, frames);
1056 snd_pcm_share_slave_t *slave = share->slave;
1058 Pthread_mutex_lock(&slave->mutex);
1059 ret = snd_pcm_rewindable(slave->pcm);
1060 Pthread_mutex_unlock(&slave->mutex);
1067 snd_pcm_share_slave_t *slave = share->slave;
1069 Pthread_mutex_lock(&slave->mutex);
1071 Pthread_mutex_unlock(&slave->mutex);
1078 snd_pcm_share_slave_t *slave = share->slave;
1100 snd_pcm_sframes_t ret = INTERNAL(snd_pcm_forward)(slave->pcm, frames);
1113 snd_pcm_share_slave_t *slave = share->slave;
1115 Pthread_mutex_lock(&slave->mutex);
1116 ret = snd_pcm_forwardable(slave->pcm);
1117 Pthread_mutex_unlock(&slave->mutex);
1124 snd_pcm_share_slave_t *slave = share->slave;
1126 Pthread_mutex_lock(&slave->mutex);
1128 Pthread_mutex_unlock(&slave->mutex);
1136 snd_pcm_share_slave_t *slave = share->slave;
1149 } else if (slave->running_count > 1) {
1154 err = snd_pcm_delay(slave->pcm, &delay);
1156 snd_pcm_rewind(slave->pcm, delay);
1160 slave->prepared_count--;
1161 slave->running_count--;
1162 if (slave->running_count == 0) {
1163 int err = snd_pcm_drop(slave->pcm);
1171 snd_pcm_share_slave_t *slave = share->slave;
1173 Pthread_mutex_lock(&slave->mutex);
1195 Pthread_mutex_unlock(&slave->mutex);
1222 Pthread_mutex_unlock(&slave->mutex);
1229 snd_pcm_share_slave_t *slave = share->slave;
1231 Pthread_mutex_lock(&slave->mutex);
1259 Pthread_mutex_unlock(&slave->mutex);
1266 snd_pcm_share_slave_t *slave = share->slave;
1270 Pthread_mutex_lock(&slave->mutex);
1271 slave->open_count--;
1272 if (slave->open_count == 0) {
1273 pthread_cond_signal(&slave->poll_cond);
1274 Pthread_mutex_unlock(&slave->mutex);
1275 err = pthread_join(slave->thread, 0);
1277 err = snd_pcm_close(slave->pcm);
1278 pthread_mutex_destroy(&slave->mutex);
1279 pthread_cond_destroy(&slave->poll_cond);
1280 list_del(&slave->list);
1281 free(slave);
1285 Pthread_mutex_unlock(&slave->mutex);
1308 snd_pcm_share_slave_t *slave = share->slave;
1319 snd_pcm_dump(slave->pcm, out);
1394 snd_pcm_share_slave_t *slave = NULL;
1402 SNDERR("Invalid slave channel (%d) in binding", channels_map[k]);
1406 SNDERR("Repeated slave channel (%d) in binding", channels_map[k]);
1469 slave = s;
1473 if (!slave) {
1487 slave = calloc(1, sizeof(snd_pcm_share_slave_t) * 8);
1488 if (!slave) {
1498 INIT_LIST_HEAD(&slave->clients);
1499 slave->pcm = spcm;
1500 slave->channels = schannels;
1501 slave->format = sformat;
1502 slave->rate = srate;
1503 slave->period_time = speriod_time;
1504 slave->buffer_time = sbuffer_time;
1505 pthread_mutex_init(&slave->mutex, NULL);
1506 pthread_cond_init(&slave->poll_cond, NULL);
1507 list_add_tail(&slave->list, &snd_pcm_share_slaves);
1508 Pthread_mutex_lock(&slave->mutex);
1509 err = pthread_create(&slave->thread, NULL, snd_pcm_share_thread, slave);
1513 Pthread_mutex_lock(&slave->mutex);
1515 list_for_each(i, &slave->clients) {
1520 Pthread_mutex_unlock(&slave->mutex);
1532 share->slave = slave;
1543 pcm->tstamp_type = slave->pcm->tstamp_type;
1547 slave->open_count++;
1548 list_add_tail(&share->list, &slave->clients);
1550 Pthread_mutex_unlock(&slave->mutex);
1573 slave STR # Slave name
1575 slave { # Slave definition
1619 snd_config_t *slave = NULL, *sconf;
1635 if (strcmp(id, "slave") == 0) {
1636 slave = n;
1650 if (!slave) {
1651 SNDERR("slave is not defined");
1654 err = snd_pcm_slave_conf(root, slave, &sconf, 5,
1668 SNDERR("slave.pcm is not a string");