src/3rdparty/phonon/mmf/effectfactory.cpp
changeset 0 1918ee327afb
child 3 41300fa6a67c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/effectfactory.cpp	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,155 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <QObject>
+#include <QCoreApplication>
+
+#include <AudioEqualizerBase.h>
+#include <BassBoostBase.h>
+#include <DistanceAttenuationBase.h>
+#include <DopplerBase.h>
+#include <EnvironmentalReverbBase.h>
+#include <ListenerOrientationBase.h>
+#include <LocationBase.h>
+#include <LoudnessBase.h>
+#include <SourceOrientationBase.h>
+#include <StereoWideningBase.h>
+
+#include "audioequalizer.h"
+#include "bassboost.h"
+
+#include "effectfactory.h"
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon;
+using namespace Phonon::MMF;
+
+/*! \class MMF::EffectFactory
+  \internal
+*/
+
+QHash<QByteArray, QVariant> EffectFactory::constructEffectDescription(const QString &name,
+                                                                      const QString &description)
+{
+    QHash<QByteArray, QVariant> retval;
+
+    retval.insert("name", name);
+    retval.insert("description", description);
+    retval.insert("available", true);
+
+    return retval;
+}
+
+
+QHash<QByteArray, QVariant> EffectFactory::audioEffectDescriptions(AbstractAudioEffect::Type type)
+{
+    switch (type)
+    {
+        case AbstractAudioEffect::EffectAudioEqualizer:
+            return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "audio equalizer"), "Audio equalizer.");
+        case AbstractAudioEffect::EffectBassBoost:
+            return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Bass boost"), "Bass boost.");
+        case AbstractAudioEffect::EffectDistanceAttenuation:
+            return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Distance Attenuation"), "Distance Attenuation.");
+        case AbstractAudioEffect::EffectEnvironmentalReverb:
+            return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Environmental Reverb"), "Environmental Reverb.");
+        case AbstractAudioEffect::EffectListenerOrientation:
+            return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Environmental Reverb"), "Environmental Reverb.");
+        case AbstractAudioEffect::EffectLoudness:
+            return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Loudness"), "Loudness.");
+        case AbstractAudioEffect::EffectSourceOrientation:
+            return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Source Orientation"), "Source Orientation.");
+        case AbstractAudioEffect::EffectStereoWidening:
+            return constructEffectDescription(QCoreApplication::translate("Phonon::MMF::EffectFactory", "Stereo Widening"), "Stereo Widening.");
+    }
+
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown effect type.");
+    return QHash<QByteArray, QVariant>();
+}
+
+AbstractAudioEffect *EffectFactory::createAudioEffect(AbstractAudioEffect::Type type,
+                                                      QObject *parent)
+{
+    Q_ASSERT(parent);
+
+    switch (type)
+    {
+        case AbstractAudioEffect::EffectBassBoost:
+            return new BassBoost(parent);
+        case AbstractAudioEffect::EffectAudioEqualizer:
+            return new AudioEqualizer(parent);
+        case AbstractAudioEffect::EffectDistanceAttenuation:
+        case AbstractAudioEffect::EffectEnvironmentalReverb:
+        case AbstractAudioEffect::EffectListenerOrientation:
+        case AbstractAudioEffect::EffectLoudness:
+        case AbstractAudioEffect::EffectSourceOrientation:
+        case AbstractAudioEffect::EffectStereoWidening:
+            ;
+    }
+
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown effect.");
+    return 0;
+}
+
+template<typename TEffect>
+bool isEffectSupported()
+{
+    AudioPlayer audioPlayer;
+
+    QScopedPointer<TEffect> eff;
+    TRAPD(errorCode, eff.reset(TEffect::NewL(*audioPlayer.player())));
+
+    return errorCode != KErrNone;
+}
+
+QList<int> EffectFactory::effectIndexes()
+{
+    QList<int> retval;
+
+    if (isEffectSupported<CAudioEqualizer>())
+        retval.append(AbstractAudioEffect::EffectAudioEqualizer);
+
+    if (isEffectSupported<CBassBoost>())
+        retval.append(AbstractAudioEffect::EffectBassBoost);
+
+    /* We haven't implemented these yet.
+    if (isEffectSupported<CDistanceAttenuation>())
+        retval.append(AbstractAudioEffect::EffectDistanceAttenuation);
+
+    if (isEffectSupported<CEnvironmentalReverb>())
+        retval.append(AbstractAudioEffect::EffectEnvironmentalReverb);
+
+    if (isEffectSupported<CLoudness>())
+        retval.append(AbstractAudioEffect::EffectLoudness);
+
+    if (isEffectSupported<CListenerOrientation>())
+        retval.append(AbstractAudioEffect::EffectListenerOrientation);
+
+    if (isEffectSupported<CSourceOrientation>())
+        retval.append(AbstractAudioEffect::EffectSourceOrientation);
+
+    if (isEffectSupported<CStereoWidening>())
+        retval.append(AbstractAudioEffect::EffectStereoWidening);
+    */
+
+    return retval;
+}
+
+QT_END_NAMESPACE
+