summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-04-16 09:48:40 +0800
committerTim Blechmann <tim@klingt.org>2024-04-18 21:48:37 +0800
commitcf14060511a3e23ac687b965e1a08c077f032f0d (patch)
treeb64d2819a97ed7e7322dd95c60d7ac8a40893f4c /src
parent6d62ffd1100cf42716de6bb76223ec899fec650d (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.cpp11
-rw-r--r--src/multimedia/pulseaudio/qpulseaudiosink.cpp10
-rw-r--r--src/multimedia/pulseaudio/qpulseaudiosource.cpp17
-rw-r--r--src/multimedia/pulseaudio/qpulsehelpers.cpp10
-rw-r--r--src/multimedia/pulseaudio/qpulsehelpers_p.h6
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