diff options
author | James McDonnell <jmcdonnell@blackberry.com> | 2017-03-24 11:31:56 -0400 |
---|---|---|
committer | James McDonnell <jmcdonnell@blackberry.com> | 2017-03-27 16:33:31 +0000 |
commit | 1221f6a7e3767e14d2afdfc806120953bd6535be (patch) | |
tree | 2667f6a27d99818167323fbd3ac2458bcf761452 /src/plugins | |
parent | 7d51214b609df7e5ec79b56f0c629e084cb886bc (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')
-rw-r--r-- | src/plugins/qnx-audio/audio/qnxaudiooutput.cpp | 39 | ||||
-rw-r--r-- | src/plugins/qnx-audio/audio/qnxaudiooutput.h | 6 |
2 files changed, 45 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(¶ms); if ((errorCode = snd_pcm_plugin_params(m_pcmHandle, ¶ms)) < 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) diff --git a/src/plugins/qnx-audio/audio/qnxaudiooutput.h b/src/plugins/qnx-audio/audio/qnxaudiooutput.h index 5ee69b542..c4fe37516 100644 --- a/src/plugins/qnx-audio/audio/qnxaudiooutput.h +++ b/src/plugins/qnx-audio/audio/qnxaudiooutput.h @@ -47,6 +47,7 @@ #include <QIODevice> #include <sys/asoundlib.h> +#include <sys/neutrino.h> QT_BEGIN_NAMESPACE @@ -80,6 +81,8 @@ public: QAudioFormat format() const Q_DECL_OVERRIDE; void setVolume(qreal volume) Q_DECL_OVERRIDE; qreal volume() const Q_DECL_OVERRIDE; + void setCategory(const QString &category) Q_DECL_OVERRIDE; + QString category() const Q_DECL_OVERRIDE; private slots: void pullData(); @@ -90,6 +93,8 @@ private: void setError(QAudio::Error error); void setState(QAudio::State state); + void setTypeName(snd_pcm_channel_params_t *params); + friend class QnxPushIODevice; qint64 write(const char *data, qint64 len); @@ -102,6 +107,7 @@ private: QAudio::State m_state; QAudioFormat m_format; qreal m_volume; + QString m_category; int m_periodSize; snd_pcm_t *m_pcmHandle; |