diff options
author | Tim Blechmann <tim@klingt.org> | 2024-04-16 09:48:40 +0800 |
---|---|---|
committer | Tim Blechmann <tim@klingt.org> | 2024-04-18 21:48:37 +0800 |
commit | cf14060511a3e23ac687b965e1a08c077f032f0d (patch) | |
tree | b64d2819a97ed7e7322dd95c60d7ac8a40893f4c /src | |
parent | 6d62ffd1100cf42716de6bb76223ec899fec650d (diff) |
pulseaudio: separate out error getter functions
* returning as `QUtf8StringView` allows us to enforce the character
encoding with the type system
* replacing .arg with << to reduce noise in tracing code / avoid qstring
conversions
Fixes: QTBUG-123447
Pick-to: 6.5 6.7
Change-Id: I53fcc289ebbeca1dd7628a1609cae7e9f6154c77
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/multimedia/pulseaudio/qaudioengine_pulse.cpp | 11 | ||||
-rw-r--r-- | src/multimedia/pulseaudio/qpulseaudiosink.cpp | 10 | ||||
-rw-r--r-- | src/multimedia/pulseaudio/qpulseaudiosource.cpp | 17 | ||||
-rw-r--r-- | src/multimedia/pulseaudio/qpulsehelpers.cpp | 10 | ||||
-rw-r--r-- | src/multimedia/pulseaudio/qpulsehelpers_p.h | 6 |
5 files changed, 37 insertions, 17 deletions
diff --git a/src/multimedia/pulseaudio/qaudioengine_pulse.cpp b/src/multimedia/pulseaudio/qaudioengine_pulse.cpp index 101e64b40..8571ed9d8 100644 --- a/src/multimedia/pulseaudio/qaudioengine_pulse.cpp +++ b/src/multimedia/pulseaudio/qaudioengine_pulse.cpp @@ -63,9 +63,10 @@ static bool updateDevicesMap(QReadWriteLock &lock, QByteArray defaultDeviceId, static void serverInfoCallback(pa_context *context, const pa_server_info *info, void *userdata) { using namespace Qt::Literals; + using namespace QPulseAudioInternal; if (!info) { - qWarning() << QStringLiteral("Failed to get server information: %s").arg(QString::fromUtf8(pa_strerror(pa_context_errno(context)))); + qWarning() << "Failed to get server information:" << currentError(context); return; } @@ -127,11 +128,12 @@ static void serverInfoCallback(pa_context *context, const pa_server_info *info, static void sinkInfoCallback(pa_context *context, const pa_sink_info *info, int isLast, void *userdata) { using namespace Qt::Literals; + using namespace QPulseAudioInternal; QPulseAudioEngine *pulseEngine = static_cast<QPulseAudioEngine *>(userdata); if (isLast < 0) { - qWarning() << QStringLiteral("Failed to get sink information: %s").arg(QString::fromUtf8(pa_strerror(pa_context_errno(context)))); + qWarning() << "Failed to get sink information:" << currentError(context); return; } @@ -306,6 +308,7 @@ QPulseAudioEngine::~QPulseAudioEngine() void QPulseAudioEngine::prepare() { + using namespace QPulseAudioInternal; bool keepGoing = true; bool ok = true; @@ -380,8 +383,8 @@ void QPulseAudioEngine::prepare() case PA_CONTEXT_FAILED: default: - qCritical() << QStringLiteral("PulseAudioService: Connection failure: %1") - .arg(QString::fromUtf8(pa_strerror(pa_context_errno(m_context)))); + qCritical() << "PulseAudioService: Connection failure:" + << currentError(m_context); keepGoing = false; ok = false; } diff --git a/src/multimedia/pulseaudio/qpulseaudiosink.cpp b/src/multimedia/pulseaudio/qpulseaudiosink.cpp index 62e625072..b974d8d1d 100644 --- a/src/multimedia/pulseaudio/qpulseaudiosink.cpp +++ b/src/multimedia/pulseaudio/qpulseaudiosink.cpp @@ -468,6 +468,8 @@ void QPulseAudioSink::userFeed() qint64 QPulseAudioSink::write(const char *data, qint64 len) { + using namespace QPulseAudioInternal; + QPulseAudioEngine *pulseEngine = QPulseAudioEngine::instance(); pulseEngine->lock(); @@ -477,8 +479,8 @@ qint64 QPulseAudioSink::write(const char *data, qint64 len) if (pa_stream_begin_write(m_stream, &dest, &nbytes) < 0) { pulseEngine->unlock(); - qCWarning(qLcPulseAudioOut) << "pa_stream_begin_write error:" - << pa_strerror(pa_context_errno(pulseEngine->context())); + qCWarning(qLcPulseAudioOut) + << "pa_stream_begin_write error:" << currentError(pulseEngine->context()); m_stateMachine.updateActiveOrIdle(false, QAudio::IOError); return 0; } @@ -497,8 +499,8 @@ qint64 QPulseAudioSink::write(const char *data, qint64 len) if ((pa_stream_write(m_stream, data, len, nullptr, 0, PA_SEEK_RELATIVE)) < 0) { pulseEngine->unlock(); - qCWarning(qLcPulseAudioOut) << "pa_stream_write error:" - << pa_strerror(pa_context_errno(pulseEngine->context())); + qCWarning(qLcPulseAudioOut) + << "pa_stream_write error:" << currentError(pulseEngine->context()); m_stateMachine.updateActiveOrIdle(false, QAudio::IOError); return 0; } diff --git a/src/multimedia/pulseaudio/qpulseaudiosource.cpp b/src/multimedia/pulseaudio/qpulseaudiosource.cpp index 7bff915fe..6eabb074e 100644 --- a/src/multimedia/pulseaudio/qpulseaudiosource.cpp +++ b/src/multimedia/pulseaudio/qpulseaudiosource.cpp @@ -29,6 +29,8 @@ static void inputStreamReadCallback(pa_stream *stream, size_t length, void *user static void inputStreamStateCallback(pa_stream *stream, void *userdata) { + using namespace QPulseAudioInternal; + Q_UNUSED(userdata); pa_stream_state_t state = pa_stream_get_state(stream); qCDebug(qLcPulseAudioIn) << "Stream state: " << QPulseAudioInternal::stateToQString(state); @@ -55,8 +57,7 @@ static void inputStreamStateCallback(pa_stream *stream, void *userdata) break; case PA_STREAM_FAILED: default: - const char *errorString = pa_strerror(pa_context_errno(pa_stream_get_context(stream))); - qWarning() << QStringLiteral("Stream error: %1").arg(QString::fromUtf8(errorString)); + qWarning() << "Stream error: " << currentError(stream); QPulseAudioEngine *pulseEngine = QPulseAudioEngine::instance(); pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); break; @@ -313,6 +314,8 @@ void QPulseAudioSource::close() qsizetype QPulseAudioSource::bytesReady() const { + using namespace QPulseAudioInternal; + if (!m_stateMachine.isActiveOrIdle()) return 0; @@ -320,8 +323,7 @@ qsizetype QPulseAudioSource::bytesReady() const int bytes = pa_stream_readable_size(m_stream); if (bytes < 0) { - qWarning() << "pa_stream_readable_size() failed:" - << pa_strerror(pa_context_errno(pa_stream_get_context(m_stream))); + qWarning() << "pa_stream_readable_size() failed:" << currentError(m_stream); return 0; } @@ -330,6 +332,8 @@ qsizetype QPulseAudioSource::bytesReady() const qint64 QPulseAudioSource::read(char *data, qint64 len) { + using namespace QPulseAudioInternal; + Q_ASSERT(data != nullptr || len == 0); m_stateMachine.updateActiveOrIdle(true, QAudio::NoError); @@ -367,10 +371,7 @@ qint64 QPulseAudioSource::read(char *data, qint64 len) // parameters, the audioBuffer pointer is set to point to the actual pulse audio data, and // the length is set to the length of this data. if (pa_stream_peek(m_stream, &audioBuffer, &readLength) < 0) { - const char *errorString = - pa_strerror(pa_context_errno(pa_stream_get_context(m_stream))); - qWarning() << QStringLiteral("pa_stream_peek() failed: %1") - .arg(QString::fromUtf8(errorString)); + qWarning() << "pa_stream_peek() failed:" << currentError(m_stream); pulseEngine->unlock(); return 0; } diff --git a/src/multimedia/pulseaudio/qpulsehelpers.cpp b/src/multimedia/pulseaudio/qpulsehelpers.cpp index 010de4c1b..69e874f06 100644 --- a/src/multimedia/pulseaudio/qpulsehelpers.cpp +++ b/src/multimedia/pulseaudio/qpulsehelpers.cpp @@ -199,6 +199,16 @@ QAudioFormat sampleSpecToAudioFormat(const pa_sample_spec &spec) return format; } +QUtf8StringView currentError(const pa_context *context) +{ + return pa_strerror(pa_context_errno(context)); } +QUtf8StringView currentError(const pa_stream *stream) +{ + return currentError(pa_stream_get_context(stream)); +} + +} // namespace QPulseAudioInternal + QT_END_NAMESPACE diff --git a/src/multimedia/pulseaudio/qpulsehelpers_p.h b/src/multimedia/pulseaudio/qpulsehelpers_p.h index 483c25b7e..8ea1bd259 100644 --- a/src/multimedia/pulseaudio/qpulsehelpers_p.h +++ b/src/multimedia/pulseaudio/qpulsehelpers_p.h @@ -96,7 +96,11 @@ static inline QString stateToQString(pa_context_state_t state) return u"Unknown state: %0"_s.arg(int(state)); } -} + +QUtf8StringView currentError(const pa_context *); +QUtf8StringView currentError(const pa_stream *); + +} // namespace QPulseAudioInternal QT_END_NAMESPACE |