diff options
Diffstat (limited to 'src/3rdparty/phonon/mmf/effectfactory.cpp')
-rw-r--r-- | src/3rdparty/phonon/mmf/effectfactory.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/mmf/effectfactory.cpp b/src/3rdparty/phonon/mmf/effectfactory.cpp new file mode 100644 index 0000000..9843a6c --- /dev/null +++ b/src/3rdparty/phonon/mmf/effectfactory.cpp @@ -0,0 +1,151 @@ +/* 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; + +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 + |