summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/multimedia/spectrum/app/engine.cpp19
-rw-r--r--examples/multimedia/spectrum/app/engine.h1
-rw-r--r--src/plugins/qnx-audio/audio/qnxaudiooutput.cpp39
-rw-r--r--src/plugins/qnx-audio/audio/qnxaudiooutput.h6
4 files changed, 65 insertions, 0 deletions
diff --git a/examples/multimedia/spectrum/app/engine.cpp b/examples/multimedia/spectrum/app/engine.cpp
index 3a01fa7a7..eae4c8e74 100644
--- a/examples/multimedia/spectrum/app/engine.cpp
+++ b/examples/multimedia/spectrum/app/engine.cpp
@@ -103,6 +103,23 @@ Engine::Engine(QObject *parent)
this,
SLOT(spectrumChanged(FrequencySpectrum)));
+ // This code might misinterpret things like "-something -category". But
+ // it's unlikely that that needs to be supported so we'll let it go.
+ QStringList arguments = QCoreApplication::instance()->arguments();
+ for (int i = 0; i < arguments.count(); ++i) {
+ if (arguments.at(i) == QStringLiteral("--"))
+ break;
+
+ if (arguments.at(i) == QStringLiteral("-category")
+ || arguments.at(i) == QStringLiteral("--category")) {
+ ++i;
+ if (i < arguments.count())
+ m_audioOutputCategory = arguments.at(i);
+ else
+ --i;
+ }
+ }
+
initialize();
#ifdef DUMP_DATA
@@ -494,6 +511,7 @@ bool Engine::initialize()
}
m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this);
m_audioOutput->setNotifyInterval(NotifyIntervalMs);
+ m_audioOutput->setCategory(m_audioOutputCategory);
}
} else {
if (m_file)
@@ -508,6 +526,7 @@ bool Engine::initialize()
ENGINE_DEBUG << "Engine::initialize" << "m_bufferLength" << m_bufferLength;
ENGINE_DEBUG << "Engine::initialize" << "m_dataLength" << m_dataLength;
ENGINE_DEBUG << "Engine::initialize" << "format" << m_format;
+ ENGINE_DEBUG << "Engine::initialize" << "m_audioOutputCategory" << m_audioOutputCategory;
return result;
}
diff --git a/examples/multimedia/spectrum/app/engine.h b/examples/multimedia/spectrum/app/engine.h
index db76d7b42..af08b83cc 100644
--- a/examples/multimedia/spectrum/app/engine.h
+++ b/examples/multimedia/spectrum/app/engine.h
@@ -287,6 +287,7 @@ private:
const QList<QAudioDeviceInfo> m_availableAudioOutputDevices;
QAudioDeviceInfo m_audioOutputDevice;
QAudioOutput* m_audioOutput;
+ QString m_audioOutputCategory;
qint64 m_playPosition;
QBuffer m_audioOutputIODevice;
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)
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;