From 1221f6a7e3767e14d2afdfc806120953bd6535be Mon Sep 17 00:00:00 2001 From: James McDonnell Date: Fri, 24 Mar 2017 11:31:56 -0400 Subject: 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 --- src/plugins/qnx-audio/audio/qnxaudiooutput.cpp | 39 ++++++++++++++++++++++++++ src/plugins/qnx-audio/audio/qnxaudiooutput.h | 6 ++++ 2 files changed, 45 insertions(+) (limited to 'src/plugins') 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(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 #include +#include 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; -- cgit v1.2.3