Lines Matching defs:play

252 		if (lhandle == lhandle->loopback->play) {
260 if (lhandle == lhandle->loopback->play) {
336 if ((err = setparams_stream(loop->play, pt_params)) < 0) {
337 logit(LOG_CRIT, "Unable to set parameters for %s stream: %s\n", loop->play->id, snd_strerror(err));
345 if ((err = setparams_bufsize(loop->play, p_params, pt_params, bufsize / loop->play->pitch)) < 0) {
346 logit(LOG_CRIT, "Unable to set buffer parameters for %s stream: %s\n", loop->play->id, snd_strerror(err));
354 if ((err = setparams_set(loop->play, p_params, p_swparams, bufsize / loop->play->pitch)) < 0) {
355 logit(LOG_CRIT, "Unable to set sw parameters for %s stream: %s\n", loop->play->id, snd_strerror(err));
365 if (snd_pcm_link(loop->capt->handle, loop->play->handle) >= 0)
368 if ((err = snd_pcm_prepare(loop->play->handle)) < 0) {
369 logit(LOG_CRIT, "Prepare %s error: %s\n", loop->play->id, snd_strerror(err));
378 snd_pcm_dump(loop->play->handle, loop->output);
419 if (snd_pcm_delay(loop->play->handle, &pdelay) >= 0 &&
424 loop->xrun_buf_pcount = loop->play->buf_count;
446 (double)loop->play->rate_req) * 1000;
454 (double)loop->play->rate) * 1000;
458 maxbuf = ((double)loop->play->buffer_size /
459 (double)loop->play->rate) * 1000;
462 (double)loop->play->rate) * 1000;
465 avail_min = (((double)loop->play->buffer_size -
466 (double)loop->play->avail_min ) /
467 (double)loop->play->rate) * 1000;
498 if (loop->play->buf == loop->capt->buf) {
510 struct loopback_handle *play = loop->play;
517 ppos = (play->buf_pos + play->buf_count) % play->buf_size;
522 if (count1 > buf_avail(play))
523 count1 = buf_avail(play);
524 if (count1 + ppos > play->buf_size)
525 count1 = play->buf_size - ppos;
528 memcpy(play->buf + ppos * play->frame_size,
531 play->buf_count += count1;
534 ppos %= play->buf_size;
546 struct loopback_handle *play = loop->play;
576 loop->src_data.output_frames = play->buf_size -
587 pos1 = (play->buf_pos + play->buf_count) % play->buf_size;
590 if (count1 + pos1 > play->buf_size)
591 count1 = play->buf_size - pos1;
592 if (count1 > buf_avail(play))
593 count1 = buf_avail(play);
598 pos * play->channels,
599 (int *)(play->buf +
600 pos1 * play->frame_size),
601 count1 * play->channels);
604 pos * play->channels,
605 (short *)(play->buf +
606 pos1 * play->frame_size),
607 count1 * play->channels);
608 play->buf_count += count1;
612 pos1 %= play->buf_size;
617 (long)loop->src_out_frames, play->buf_count);
623 loop->src_data.data_out + pos * play->channels,
624 loop->src_out_frames * play->channels * sizeof(float));
638 if (loop->play->buf == loop->capt->buf) {
639 loop->play->buf_count += count;
649 if (lhandle == lhandle->loopback->play) {
803 struct loopback_handle *play = loop->play;
806 if (loop->play->buf == loop->capt->buf) {
807 if ((snd_pcm_uframes_t)count > loop->play->buf_count)
808 count = loop->play->buf_count;
812 play->buf_pos += count;
813 play->buf_pos %= play->buf_size;
814 play->buf_count -= count;
822 if ((snd_pcm_uframes_t)count > play->buf_count)
823 count = play->buf_count;
824 play->buf_count -= count;
831 struct loopback_handle *play = loop->play;
839 snd_output_printf(loop->output, "%s: xrun sync %i %i\n", loop->id, capt->xrun_pending, play->xrun_pending);
872 if ((err = snd_pcm_delay(play->handle, &pdelay)) < 0) {
875 play->xrun_pending = 1;
877 err = suspend(play);
882 logit(LOG_CRIT, "%s playback delay failed: %s\n", play->id, snd_strerror(err));
887 play->counter = pdelay;
888 if (play->buf != capt->buf)
890 pdelay += play->buf_count;
895 pdelay1 = pdelay * play->pitch;
898 play->total_queued = 0;
916 (long)capt->buf_count, (long)play->buf_count);
932 diff = (delay1 - fill) / play->pitch;
933 if ((snd_pcm_uframes_t)diff > play->buf_count)
934 diff = play->buf_count;
940 pdelay1 = pdelay * play->pitch;
961 if (play->xrun_pending) {
962 play->xrun_pending = 0;
963 diff = (fill - delay1) / play->pitch;
966 "sync: xrun_pending, silence filling %li / buf_count=%li\n", (long)diff, play->buf_count);
967 if (fill > delay1 && play->buf_count < (snd_pcm_uframes_t)diff) {
968 diff = diff - play->buf_count;
972 play->buf_pos -= diff;
973 play->buf_pos %= play->buf_size;
974 err = snd_pcm_format_set_silence(play->format, play->buf + play->buf_pos * play->frame_size,
975 diff * play->channels);
978 play->buf_count += diff;
980 if ((err = snd_pcm_prepare(play->handle)) < 0) {
981 logit(LOG_CRIT, "%s prepare failed: %s\n", play->id, snd_strerror(err));
984 delay1 = writeit(play);
994 if ((err = snd_pcm_start(play->handle)) < 0) {
995 logit(LOG_CRIT, "%s start failed: %s\n", play->id, snd_strerror(err));
999 diff = (fill - delay1) / play->pitch;
1001 delay1 = play->buf_size - play->buf_pos;
1004 "sync: playback short, silence filling %li / buf_count=%li\n", (long)delay1, play->buf_count);
1007 err = snd_pcm_format_set_silence(play->format, play->buf + play->buf_pos * play->frame_size,
1008 delay1 * play->channels);
1011 play->buf_pos += delay1;
1012 play->buf_pos %= play->buf_size;
1013 play->buf_count += delay1;
1016 writeit(play);
1023 if (snd_pcm_delay(play->handle, &pdelay) < 0)
1025 if (play->buf != capt->buf)
1027 pdelay += play->buf_count;
1032 pdelay1 = pdelay * play->pitch;
1089 loop->play->pitch * loop->capt->pitch);
1100 (loop->play->pitch * loop->capt->pitch);
1108 set_rate_shift(loop->play, 1 / pitch);
1113 (loop->play->pitch * loop->capt->pitch);
1237 if (lhandle->loopback->play == lhandle) {
1238 // play only
1290 int stream = lhandle == lhandle->loopback->play ?
1388 if ((err = openit(loop->play)) < 0)
1392 snprintf(id, sizeof(id), "%s/%s", loop->play->id, loop->capt->id);
1397 if (loop->sync == SYNC_TYPE_AUTO && (loop->play->ctl_rate_shift || loop->play->ctl_pitch))
1445 if (loop->play->buf == loop->capt->buf)
1446 loop->play->buf = NULL;
1447 freeit(loop->play);
1454 closeit(loop->play);
1496 loop->play->format = format;
1504 loop->pollfd_count = loop->play->ctl_pollfd_count +
1506 if ((err = snd_pcm_poll_descriptors_count(loop->play->handle)) < 0)
1508 loop->play->pollfd_count = err;
1523 loop->play->format = loop->capt->format = err;
1528 loop->play->rate_req = loop->capt->rate_req = err;
1532 loop->play->channels = loop->capt->channels = err;
1538 loop->latency_reqtime = frames_to_time(loop->play->rate_req,
1542 loop->latency = time_to_frames(loop->play->rate_req, loop->latency_reqtime);
1546 showlatency(loop->output, loop->latency, loop->play->rate_req, "Latency");
1547 if (loop->play->access == loop->capt->access &&
1548 loop->play->format == loop->capt->format &&
1549 loop->play->rate == loop->capt->rate &&
1550 loop->play->channels == loop->capt->channels &&
1554 if ((err = init_handle(loop->play, 1)) < 0)
1558 if (loop->play->buf_size < loop->capt->buf_size) {
1559 char *nbuf = realloc(loop->play->buf,
1566 loop->play->buf = nbuf;
1567 loop->play->buf_size = loop->capt->buf_size;
1568 } else if (loop->capt->buf_size < loop->play->buf_size) {
1570 loop->play->buf_size *
1571 loop->play->frame_size);
1577 loop->capt->buf_size = loop->play->buf_size;
1579 loop->capt->buf = loop->play->buf;
1581 if ((err = init_handle(loop->play, 1)) < 0)
1585 if (loop->play->rate_req != loop->play->rate ||
1589 format1 = loop->play->format;
1592 if (loop->play->format != format1 ||
1610 loop->play->format != SND_PCM_FORMAT_S16) &&
1612 loop->play->format != SND_PCM_FORMAT_S32)) {
1613 logit(LOG_CRIT, "samplerate conversion supports only %s or %s formats (play=%s, capt=%s)\n", snd_pcm_format_name(SND_PCM_FORMAT_S16), snd_pcm_format_name(SND_PCM_FORMAT_S32), snd_pcm_format_name(loop->play->format), snd_pcm_format_name(loop->capt->format));
1619 loop->play->channels, &err);
1625 loop->src_data.data_out = calloc(1, sizeof(float)*loop->play->channels*loop->play->buf_size);
1630 loop->src_data.src_ratio = (double)loop->play->rate /
1652 lhandle_start(loop->play);
1654 if ((err = snd_pcm_format_set_silence(loop->play->format,
1655 loop->play->buf,
1656 loop->play->buf_size * loop->play->channels)) < 0) {
1661 snd_output_printf(loop->output, "%s: capt->buffer_size = %li, play->buffer_size = %li\n", loop->id, loop->capt->buf_size, loop->play->buf_size);
1667 count = get_whole_latency(loop) / loop->play->pitch;
1668 loop->play->buf_count = count;
1669 if (loop->play->buf == loop->capt->buf)
1671 err = writeit(loop->play);
1674 if (count > loop->play->buffer_size)
1675 count = loop->play->buffer_size;
1677 logit(LOG_CRIT, "%s: initial playback fill error (%i/%i/%u)\n", loop->id, err, (int)count, loop->play->buffer_size);
1694 if ((err = snd_pcm_start(loop->play->handle)) < 0) {
1695 logit(LOG_CRIT, "pcm start %s error: %s\n", loop->play->id, snd_strerror(err));
1712 if ((err = snd_pcm_drop(loop->play->handle)) < 0)
1713 logit(LOG_WARNING, "pcm drop %s error: %s\n", loop->play->id, snd_strerror(err));
1716 if ((err = snd_pcm_hw_free(loop->play->handle)) < 0)
1717 logit(LOG_WARNING, "pcm hw_free %s error: %s\n", loop->play->id, snd_strerror(err));
1729 err = snd_pcm_poll_descriptors(loop->play->handle, fds + idx, loop->play->pollfd_count);
1732 idx += loop->play->pollfd_count;
1738 if (loop->play->ctl_pollfd_count > 0 &&
1740 err = snd_ctl_poll_descriptors(loop->play->ctl, fds + idx, loop->play->ctl_pollfd_count);
1743 idx += loop->play->ctl_pollfd_count;
1760 if (snd_pcm_delay(loop->play->handle, &delay) < 0)
1762 loop->play->last_delay = delay;
1763 delay += loop->play->buf_count;
1809 if (lhandle == loop->play)
1858 struct loopback_handle *play = loop->play;
1870 if ((err = snd_pcm_delay(play->handle, &pdelay)) < 0)
1871 snd_output_printf(loop->output, "%s: delay error: %s / %li / %li\n", play->id, snd_strerror(err), play->buf_size, play->buf_count);
1873 snd_output_printf(loop->output, "%s: delay %li / %li / %li\n", play->id, pdelay, play->buf_size, play->buf_count);
1881 err = snd_pcm_poll_descriptors_revents(play->handle, fds,
1882 play->pollfd_count,
1886 idx += play->pollfd_count;
1904 if (play->ctl_pollfd_count > 0 &&
1906 err = snd_ctl_poll_descriptors_revents(play->ctl, fds + idx,
1907 play->ctl_pollfd_count,
1912 err = handle_ctl_events(play, events);
1918 idx += play->ctl_pollfd_count;
1944 if (play->stall > 20) {
1945 play->stall = 0;
1946 increase_playback_avail_min(play);
1949 play->stall++;
1953 play->stall = 0;
1959 pcount = writeit(play);
1962 play->stall = 0;
1963 if (play->xrun_pending || loop->reinit)
1967 if (play->xrun_pending || capt->xrun_pending) {
1980 play->counter >= play->sync_point &&
1981 capt->counter >= play->sync_point) {
1983 diff = ((double)(((double)play->total_queued * play->pitch) +
2006 play->counter -= play->sync_point;
2007 capt->counter -= play->sync_point;
2008 play->total_queued = 0;
2027 play->total_queued += pqueued;
2035 if ((err = snd_pcm_delay(play->handle, &pdelay)) < 0)
2036 snd_output_printf(loop->output, "%s: end delay error: %s / %li / %li\n", play->id, snd_strerror(err), play->buf_size, play->buf_count);
2038 snd_output_printf(loop->output, "%s: end delay %li / %li / %li\n", play->id, pdelay, play->buf_size, play->buf_count);
2092 show_handle(loop->play, "playback");