/* 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 "effect.h"+ −
#include <phonon/effectparameter.h>+ −
+ −
#include <medparam.h>+ −
#include <dmo.h>+ −
#include <dmodshow.h>+ −
+ −
QT_BEGIN_NAMESPACE+ −
+ −
#ifndef QT_NO_PHONON_EFFECT+ −
+ −
namespace Phonon+ −
{+ −
namespace DS9+ −
{+ −
Effect::Effect(CLSID effectClass, QObject *parent)+ −
: BackendNode(parent)+ −
{+ −
//creation of the filter+ −
for(int i = 0; i < FILTER_COUNT; ++i) {+ −
Filter &filter = m_filters[i];+ −
filter = Filter(CLSID_DMOWrapperFilter, IID_IBaseFilter);+ −
Q_ASSERT(filter);+ −
ComPointer<IDMOWrapperFilter> wrapper(filter, IID_IDMOWrapperFilter);+ −
Q_ASSERT(wrapper);+ −
wrapper->Init(effectClass, DMOCATEGORY_AUDIO_EFFECT);+ −
}+ −
}+ −
+ −
Effect::Effect(QObject *parent) : BackendNode(parent)+ −
{+ −
//at this point the QVector of Filter should be filled+ −
}+ −
+ −
Effect::~Effect()+ −
{+ −
}+ −
+ −
QList<Phonon::EffectParameter> Effect::parameters() const+ −
{+ −
QList<Phonon::EffectParameter> ret;+ −
ComPointer<IMediaParamInfo> paramInfo(m_filters[0], IID_IMediaParamInfo);+ −
if (!paramInfo) {+ −
return ret;+ −
}+ −
DWORD paramCount = 0;+ −
paramInfo->GetParamCount( ¶mCount);+ −
+ −
for(quint32 i = 0; i < paramCount; i++) {+ −
MP_PARAMINFO info;+ −
HRESULT hr = paramInfo->GetParamInfo(i, &info);+ −
Q_ASSERT(SUCCEEDED(hr));+ −
WCHAR *name = 0;+ −
hr = paramInfo->GetParamText(i, &name);+ −
Q_ASSERT(SUCCEEDED(hr));+ −
QVariant def, min, max;+ −
+ −
QVariantList values;+ −
+ −
switch(info.mpType)+ −
{+ −
case MPT_ENUM:+ −
{+ −
WCHAR *current = name;+ −
current += wcslen(current) + 1; //skip the name+ −
current += wcslen(current) + 1; //skip the unit+ −
for(; *current; current += wcslen(current) + 1) {+ −
values.append( QString::fromWCharArray(current) );+ −
}+ −
}+ −
//FALLTHROUGH+ −
case MPT_INT:+ −
def = int(info.mpdNeutralValue);+ −
min = int(info.mpdMinValue);+ −
max = int(info.mpdMaxValue);+ −
break;+ −
case MPT_FLOAT:+ −
def = info.mpdNeutralValue;+ −
min = info.mpdMinValue;+ −
max = info.mpdMaxValue;+ −
break;+ −
case MPT_BOOL:+ −
def = bool(info.mpdNeutralValue);+ −
break;+ −
case MPT_MAX:+ −
//Reserved ms-help://MS.PSDKSVR2003R2.1033/directshow/htm/mp_typeenumeration.htm+ −
break;+ −
}+ −
+ −
Phonon::EffectParameter::Hints hint = info.mopCaps == MP_CAPS_CURVE_INVSQUARE ?+ −
Phonon::EffectParameter::LogarithmicHint : Phonon::EffectParameter::Hints(0);+ −
+ −
const QString n = QString::fromWCharArray(name);+ −
ret.append(Phonon::EffectParameter(i, n, hint, def, min, max, values));+ −
::CoTaskMemFree(name); //let's free the memory+ −
}+ −
return ret;+ −
}+ −
+ −
QVariant Effect::parameterValue(const Phonon::EffectParameter &p) const+ −
{+ −
QVariant ret;+ −
ComPointer<IMediaParams> params(m_filters[0], IID_IMediaParams);+ −
Q_ASSERT(params);+ −
MP_DATA data;+ −
HRESULT hr = params->GetParam(p.id(), &data);+ −
if(SUCCEEDED(hr))+ −
return data;+ −
else+ −
return QVariant();+ −
}+ −
+ −
void Effect::setParameterValue(const Phonon::EffectParameter &p, const QVariant &v)+ −
{+ −
if (v.isNull()) {+ −
return;+ −
}+ −
+ −
for(int i=0; i < FILTER_COUNT ; ++i) {+ −
const Filter &filter = m_filters[i];+ −
ComPointer<IMediaParams> params(filter, IID_IMediaParams);+ −
Q_ASSERT(params);+ −
+ −
params->SetParam(p.id(), v.toFloat());+ −
}+ −
}+ −
+ −
}+ −
}+ −
+ −
#endif //QT_NO_PHONON_EFFECT+ −
+ −
QT_END_NAMESPACE+ −
+ −
#include "moc_effect.cpp"+ −