diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2012-07-16 11:28:02 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-24 09:49:47 +0200 |
commit | ae728a4b1e2a0065bab67b5c3b114ef1c30b674a (patch) | |
tree | 36f5c3f60faca8d70dd94673dfa44570e6f367b4 /src/gsttools/qgstreameraudioinputselector.cpp | |
parent | 29a2d09a43b34c309b32d17a0a5ba2a4737342c5 (diff) |
Replaced endpoint control with audio input and output controls
Change-Id: I981aabe39d106ced4ee1240db9e5b653c6fa5e91
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'src/gsttools/qgstreameraudioinputselector.cpp')
-rw-r--r-- | src/gsttools/qgstreameraudioinputselector.cpp | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/src/gsttools/qgstreameraudioinputselector.cpp b/src/gsttools/qgstreameraudioinputselector.cpp new file mode 100644 index 000000000..95d6dde7c --- /dev/null +++ b/src/gsttools/qgstreameraudioinputselector.cpp @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgstreameraudioinputselector_p.h" + +#include <QtCore/QDir> +#include <QtCore/QDebug> + +#include <gst/gst.h> + +#ifdef HAVE_ALSA +#include <alsa/asoundlib.h> +#endif + +QGstreamerAudioInputSelector::QGstreamerAudioInputSelector(QObject *parent) + :QAudioInputSelectorControl(parent) +{ + update(); +} + +QGstreamerAudioInputSelector::~QGstreamerAudioInputSelector() +{ +} + +QList<QString> QGstreamerAudioInputSelector::availableInputs() const +{ + return m_names; +} + +QString QGstreamerAudioInputSelector::inputDescription(const QString& name) const +{ + QString desc; + + for (int i = 0; i < m_names.size(); i++) { + if (m_names.at(i).compare(name) == 0) { + desc = m_descriptions.at(i); + break; + } + } + return desc; +} + +QString QGstreamerAudioInputSelector::defaultInput() const +{ + if (m_names.size() > 0) + return m_names.at(0); + + return QString(); +} + +QString QGstreamerAudioInputSelector::activeInput() const +{ + return m_audioInput; +} + +void QGstreamerAudioInputSelector::setActiveInput(const QString& name) +{ + if (m_audioInput.compare(name) != 0) { + m_audioInput = name; + emit activeInputChanged(name); + } +} + +void QGstreamerAudioInputSelector::update() +{ + m_names.clear(); + m_descriptions.clear(); + + //use autoaudiosrc as the first default device + m_names.append("default:"); + m_descriptions.append(tr("System default device")); + + updatePulseDevices(); + updateAlsaDevices(); + updateOssDevices(); + if (m_names.size() > 0) + m_audioInput = m_names.at(0); +} + +void QGstreamerAudioInputSelector::updateAlsaDevices() +{ +#ifdef HAVE_ALSA + void **hints, **n; + if (snd_device_name_hint(-1, "pcm", &hints) < 0) { + qWarning()<<"no alsa devices available"; + return; + } + n = hints; + + while (*n != NULL) { + char *name = snd_device_name_get_hint(*n, "NAME"); + char *descr = snd_device_name_get_hint(*n, "DESC"); + char *io = snd_device_name_get_hint(*n, "IOID"); + + if ((name != NULL) && (descr != NULL)) { + if ( io == NULL || qstrcmp(io,"Input") == 0 ) { + m_names.append(QLatin1String("alsa:")+QString::fromUtf8(name)); + m_descriptions.append(QString::fromUtf8(descr)); + } + } + + if (name != NULL) + free(name); + if (descr != NULL) + free(descr); + if (io != NULL) + free(io); + n++; + } + snd_device_name_free_hint(hints); +#endif +} + +void QGstreamerAudioInputSelector::updateOssDevices() +{ + QDir devDir("/dev"); + devDir.setFilter(QDir::System); + QFileInfoList entries = devDir.entryInfoList(QStringList() << "dsp*"); + foreach(const QFileInfo& entryInfo, entries) { + m_names.append(QLatin1String("oss:")+entryInfo.filePath()); + m_descriptions.append(QString("OSS device %1").arg(entryInfo.fileName())); + } +} + +void QGstreamerAudioInputSelector::updatePulseDevices() +{ + GstElementFactory *factory = gst_element_factory_find("pulsesrc"); + if (factory) { + m_names.append("pulseaudio:"); + m_descriptions.append("PulseAudio device."); + gst_object_unref(GST_OBJECT(factory)); + } +} |