555 | | // set myth sizes and pa buffer metrics |
556 | | fragment_size = (float)sample_rate * 0.020f * // 20msec |
557 | | (float)(audio_bits / 8 * audio_channels); |
558 | | soundcard_buffer_size = 16 * fragment_size; |
559 | | buffer_settings.maxlength = soundcard_buffer_size; |
560 | | buffer_settings.tlength = fragment_size * 4; |
561 | | buffer_settings.prebuf = (uint32_t)-1; |
562 | | buffer_settings.minreq = (uint32_t)-1; |
563 | | VERBOSE(VB_AUDIO, LOC + fn_log_tag + |
564 | | QString("fragment size %1, soundcard buffer size %2") |
565 | | .arg(fragment_size).arg(soundcard_buffer_size)); |
566 | | |
570 | | | PA_STREAM_NO_REMIX_CHANNELS; |
| 558 | | PA_STREAM_NO_REMIX_CHANNELS |
| 559 | | PA_STREAM_ADJUST_LATENCY; |
| 560 | |
| 561 | // request pa buffer metrics |
| 562 | pa_buffer_attr buffer_settings; |
| 563 | buffer_settings.tlength = pa_usec_to_bytes(80000, &sample_spec); |
| 564 | // request 80msec total buffer |
| 565 | buffer_settings.prebuf = buffer_settings.tlength / 4; |
| 566 | // limit size of pre-buffer before play starts |
| 567 | buffer_settings.maxlength = (uint32_t)-1; |
| 568 | buffer_settings.minreq = (uint32_t)-1; |
| 569 | VERBOSE(VB_AUDIO+VB_EXTRA, LOC + |
| 570 | QString("PulseAudio buffer settings requested: maxlength %1, tlength %2," |
| 571 | " prebuf %3, minreq %4").arg(buffer_settings.maxlength) |
| 572 | .arg(buffer_settings.tlength).arg(buffer_settings.prebuf) |
| 573 | .arg(buffer_settings.minreq)); |
| 574 | |
608 | | return (connected && !failed); |
| 612 | if (connected && !failed) |
| 613 | { |
| 614 | const pa_buffer_attr *buffer_metrics = pa_stream_get_buffer_attr(pstream); |
| 615 | VERBOSE(VB_AUDIO+VB_EXTRA, LOC + |
| 616 | QString("PulseAudio buffer metrics - maxlength %1, tlength %2, prebuf %3, minreq %4") |
| 617 | .arg(buffer_metrics->maxlength).arg(buffer_metrics->tlength) |
| 618 | .arg(buffer_metrics->prebuf).arg(buffer_metrics->minreq)); |
| 619 | |
| 620 | // set myth sizes |
| 621 | fragment_size = buffer_metrics->minreq; |
| 622 | soundcard_buffer_size = buffer_metrics->tlength; |
| 623 | VERBOSE(VB_AUDIO, LOC + fn_log_tag + |
| 624 | QString("Myth fragment size %1, soundcard buffer size %2") |
| 625 | .arg(fragment_size).arg(soundcard_buffer_size)); |
| 626 | return true; |
| 627 | } |
| 628 | return false; |