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"); format.setCodec("audio/pcm");
#endif #endif
if (!out_device.isFormatSupported(format) && if (!out_device.isNull() &&
(requested_out_rate==0) !out_device.isFormatSupported(format) &&
(requested_out_rate == 0)
) { ) {
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
out_rate = out_device.preferredFormat().sampleRate(); 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); 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); RTP_STREAM_DEBUG("Started resampling from %u to (out) %u Hz.", sample_rate, out_rate);
} else { } else {
if ((requested_out_rate!=0) && if ((requested_out_rate != 0) &&
(requested_out_rate != sample_rate) (requested_out_rate != sample_rate)
) { ) {
out_rate = requested_out_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->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++) { for (int col = 0; col < ui->streamTreeWidget->columnCount() - 1; col++) {
@ -1951,24 +1953,26 @@ void RtpPlayerDialog::fillAudioRateMenu()
// what's available. // what's available.
QAudioDevice cur_out_device = getCurrentDeviceInfo(); QAudioDevice cur_out_device = getCurrentDeviceInfo();
QSet<int>sample_rates; QSet<int>sample_rates;
sample_rates.insert(cur_out_device.preferredFormat().sampleRate()); if (!cur_out_device.isNull()) {
// Add 8000 if supported sample_rates.insert(cur_out_device.preferredFormat().sampleRate());
if ((cur_out_device.minimumSampleRate() <= 8000) && // Add 8000 if supported
(8000 <= cur_out_device.maximumSampleRate()) if ((cur_out_device.minimumSampleRate() <= 8000) &&
) { (8000 <= cur_out_device.maximumSampleRate())
sample_rates.insert(8000); ) {
} sample_rates.insert(8000);
// Add 16000 if supported }
if ((cur_out_device.minimumSampleRate() <= 16000) && // Add 16000 if supported
(16000 <= cur_out_device.maximumSampleRate()) if ((cur_out_device.minimumSampleRate() <= 16000) &&
) { (16000 <= cur_out_device.maximumSampleRate())
sample_rates.insert(16000); ) {
} sample_rates.insert(16000);
// Add 44100 if supported }
if ((cur_out_device.minimumSampleRate() <= 44100) && // Add 44100 if supported
(44100 <= cur_out_device.maximumSampleRate()) if ((cur_out_device.minimumSampleRate() <= 44100) &&
) { (44100 <= cur_out_device.maximumSampleRate())
sample_rates.insert(44100); ) {
sample_rates.insert(44100);
}
} }
// Sort values // Sort values
@ -1980,8 +1984,12 @@ void RtpPlayerDialog::fillAudioRateMenu()
ui->outputAudioRate->addItem(QString::number(rate)); ui->outputAudioRate->addItem(QString::number(rate));
} }
#else #else
foreach (int rate, getCurrentDeviceInfo().supportedSampleRates()) { QAudioDeviceInfo cur_out_device = getCurrentDeviceInfo();
ui->outputAudioRate->addItem(QString::number(rate));
if (!cur_out_device.isNull()) {
foreach (int rate, cur_out_device.supportedSampleRates()) {
ui->outputAudioRate->addItem(QString::number(rate));
}
} }
#endif #endif
ui->outputAudioRate->blockSignals(false); ui->outputAudioRate->blockSignals(false);