summaryrefslogtreecommitdiffstats
path: root/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
diff options
context:
space:
mode:
authorJames McDonnell <jmcdonnell@blackberry.com>2017-03-24 11:31:56 -0400
committerJames McDonnell <jmcdonnell@blackberry.com>2017-03-27 16:33:31 +0000
commit1221f6a7e3767e14d2afdfc806120953bd6535be (patch)
tree2667f6a27d99818167323fbd3ac2458bcf761452 /src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
parent7d51214b609df7e5ec79b56f0c629e084cb886bc (diff)
Propagate audio category into the QNX audio output object
For QNX 7.0.0, set the QNX stream type to the audio category. 6.6.0 doesn't support stream types. Add a -category command line argument to the spectrum example so that the audio category can be specified. Change-Id: I6a81210ce07dc4bd2f6cf81983c2f3e4c480ef0d Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
Diffstat (limited to 'src/plugins/qnx-audio/audio/qnxaudiooutput.cpp')
-rw-r--r--src/plugins/qnx-audio/audio/qnxaudiooutput.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp b/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
index d08d01e6d..084c5b371 100644
--- a/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
+++ b/src/plugins/qnx-audio/audio/qnxaudiooutput.cpp
@@ -214,6 +214,16 @@ qreal QnxAudioOutput::volume() const
return m_volume;
}
+void QnxAudioOutput::setCategory(const QString &category)
+{
+ m_category = category;
+}
+
+QString QnxAudioOutput::category() const
+{
+ return m_category;
+}
+
void QnxAudioOutput::pullData()
{
if (m_state == QAudio::StoppedState || m_state == QAudio::SuspendedState)
@@ -303,6 +313,7 @@ bool QnxAudioOutput::open()
}
snd_pcm_channel_params_t params = QnxAudioUtils::formatToChannelParams(m_format, QAudio::AudioOutput, info.max_fragment_size);
+ setTypeName(&params);
if ((errorCode = snd_pcm_plugin_params(m_pcmHandle, &params)) < 0) {
qWarning("QnxAudioOutput: open error, couldn't set channel params (0x%x)", -errorCode);
@@ -400,6 +411,34 @@ qint64 QnxAudioOutput::write(const char *data, qint64 len)
}
}
+#if _NTO_VERSION >= 700
+
+void QnxAudioOutput::setTypeName(snd_pcm_channel_params_t *params)
+{
+ if (m_category.isEmpty())
+ return;
+
+ QByteArray latin1Category = m_category.toLatin1();
+
+ if (QString::fromLatin1(latin1Category) != m_category) {
+ qWarning("QnxAudioOutput: audio category name isn't a Latin1 string.");
+ return;
+ }
+
+ if (latin1Category.size() >= static_cast<int>(sizeof(params->audio_type_name))) {
+ qWarning("QnxAudioOutput: audio category name too long.");
+ return;
+ }
+
+ strcpy(params->audio_type_name, latin1Category.constData());
+}
+
+#else
+
+void QnxAudioOutput::setTypeName(snd_pcm_channel_params_t *) {}
+
+#endif
+
QnxPushIODevice::QnxPushIODevice(QnxAudioOutput *output)
: QIODevice(output),
m_output(output)