RTP player: fixed issue with no audio card available in Qt6

This commit is contained in:
Jirka Novak 2022-07-10 22:48:47 +02:00 committed by Gerald Combs
parent ea91c5785a
commit 476eb0e627
2 changed files with 33 additions and 24 deletions

View File

@ -236,8 +236,9 @@ quint32 RtpAudioStream::calculateAudioOutRate(QAudioDeviceInfo out_device, unsig
format.setCodec("audio/pcm");
#endif
if (!out_device.isFormatSupported(format) &&
(requested_out_rate==0)
if (!out_device.isNull() &&
!out_device.isFormatSupported(format) &&
(requested_out_rate == 0)
) {
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
out_rate = out_device.preferredFormat().sampleRate();
@ -247,7 +248,7 @@ quint32 RtpAudioStream::calculateAudioOutRate(QAudioDeviceInfo out_device, unsig
audio_resampler_ = speex_resampler_init(1, sample_rate, out_rate, 10, NULL);
RTP_STREAM_DEBUG("Started resampling from %u to (out) %u Hz.", sample_rate, out_rate);
} else {
if ((requested_out_rate!=0) &&
if ((requested_out_rate != 0) &&
(requested_out_rate != sample_rate)
) {
out_rate = requested_out_rate;

View File

@ -510,7 +510,9 @@ void RtpPlayerDialog::rescanPackets(bool rescale_axes)
}
audio_stream->setTimingMode(timing_mode);
audio_stream->decode(cur_out_device);
//if (!cur_out_device.isNull()) {
audio_stream->decode(cur_out_device);
//}
}
for (int col = 0; col < ui->streamTreeWidget->columnCount() - 1; col++) {
@ -1951,24 +1953,26 @@ void RtpPlayerDialog::fillAudioRateMenu()
// what's available.
QAudioDevice cur_out_device = getCurrentDeviceInfo();
QSet<int>sample_rates;
sample_rates.insert(cur_out_device.preferredFormat().sampleRate());
// Add 8000 if supported
if ((cur_out_device.minimumSampleRate() <= 8000) &&
(8000 <= cur_out_device.maximumSampleRate())
) {
sample_rates.insert(8000);
}
// Add 16000 if supported
if ((cur_out_device.minimumSampleRate() <= 16000) &&
(16000 <= cur_out_device.maximumSampleRate())
) {
sample_rates.insert(16000);
}
// Add 44100 if supported
if ((cur_out_device.minimumSampleRate() <= 44100) &&
(44100 <= cur_out_device.maximumSampleRate())
) {
sample_rates.insert(44100);
if (!cur_out_device.isNull()) {
sample_rates.insert(cur_out_device.preferredFormat().sampleRate());
// Add 8000 if supported
if ((cur_out_device.minimumSampleRate() <= 8000) &&
(8000 <= cur_out_device.maximumSampleRate())
) {
sample_rates.insert(8000);
}
// Add 16000 if supported
if ((cur_out_device.minimumSampleRate() <= 16000) &&
(16000 <= cur_out_device.maximumSampleRate())
) {
sample_rates.insert(16000);
}
// Add 44100 if supported
if ((cur_out_device.minimumSampleRate() <= 44100) &&
(44100 <= cur_out_device.maximumSampleRate())
) {
sample_rates.insert(44100);
}
}
// Sort values
@ -1980,8 +1984,12 @@ void RtpPlayerDialog::fillAudioRateMenu()
ui->outputAudioRate->addItem(QString::number(rate));
}
#else
foreach (int rate, getCurrentDeviceInfo().supportedSampleRates()) {
ui->outputAudioRate->addItem(QString::number(rate));
QAudioDeviceInfo cur_out_device = getCurrentDeviceInfo();
if (!cur_out_device.isNull()) {
foreach (int rate, cur_out_device.supportedSampleRates()) {
ui->outputAudioRate->addItem(QString::number(rate));
}
}
#endif
ui->outputAudioRate->blockSignals(false);