1
/* This file is part of the KDE project
2
Copyright (C) 2006 Tim Beaulen <tbscope@gmail.com>
3
Copyright (C) 2006-2007 Matthias Kretz <kretz@kde.org>
5
This program is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Library General Public
7
License as published by the Free Software Foundation; either
8
version 2 of the License, or (at your option) any later version.
10
This library is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
Library General Public License for more details.
15
You should have received a copy of the GNU Library General Public License
16
along with this library; see the file COPYING.LIB. If not, write to
17
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18
Boston, MA 02110-1301, USA.
22
#include "volumefadereffect.h"
23
#include "xineengine.h"
32
FadeCurveParameter = 1,
34
FadeTimeParameter = 3,
35
StartFadeParameter = 4
38
VolumeFaderEffectXT::VolumeFaderEffectXT()
39
: EffectXT("KVolumeFader"),
40
m_parameters(Phonon::VolumeFaderEffect::Fade3Decibel, 1.0f, 1.0f, 0)
44
VolumeFaderEffect::VolumeFaderEffect(QObject *parent)
45
: Effect(new VolumeFaderEffectXT, parent)
47
const QVariant one = 1.0;
48
const QVariant dZero = 0.0;
49
const QVariant iZero = 0;
50
addParameter(EffectParameter(VolumeParameter, tr("Volume"), 0, one, dZero, one));
51
addParameter(EffectParameter(FadeCurveParameter, tr("Fade Curve"),
52
EffectParameter::IntegerHint, iZero, iZero, 3));
53
addParameter(EffectParameter(FadeToParameter, tr("Fade To Volume"), 0, one, dZero, one));
54
addParameter(EffectParameter(FadeTimeParameter, tr("Fade Time"),
55
EffectParameter::IntegerHint, iZero, iZero, 10000));
56
addParameter(EffectParameter(StartFadeParameter, tr("Start Fade"),
57
EffectParameter::ToggledHint, iZero, iZero, 1));
60
VolumeFaderEffect::~VolumeFaderEffect()
64
QVariant VolumeFaderEffect::parameterValue(const EffectParameter &p) const
66
K_XT(const VolumeFaderEffect);
68
const int parameterId = p.id();
69
debug() << Q_FUNC_INFO << parameterId;
70
switch (static_cast<ParameterIds>(parameterId)) {
72
return static_cast<double>(volume());
73
case FadeCurveParameter:
74
return static_cast<int>(fadeCurve());
76
return static_cast<double>(xt->m_parameters.fadeTo);
77
case FadeTimeParameter:
78
return xt->m_parameters.fadeTime;
79
case StartFadeParameter:
83
qWarning() << "request for unknown parameter " << parameterId;
87
void VolumeFaderEffect::setParameterValue(const EffectParameter &p, const QVariant &newValue)
89
K_XT(VolumeFaderEffect);
91
const int parameterId = p.id();
92
debug() << Q_FUNC_INFO << parameterId << newValue;
93
switch (static_cast<ParameterIds>(parameterId)) {
95
setVolume(newValue.toDouble());
97
case FadeCurveParameter:
98
setFadeCurve(static_cast<Phonon::VolumeFaderEffect::FadeCurve>(newValue.toInt()));
100
case FadeToParameter:
101
xt->m_parameters.fadeTo = newValue.toDouble();
102
if (xt->m_pluginApi) {
103
xt->m_pluginApi->set_parameters(xt->m_plugin, &xt->m_parameters);
106
case FadeTimeParameter:
107
xt->m_parameters.fadeTime = newValue.toInt();
108
if (xt->m_pluginApi) {
109
xt->m_pluginApi->set_parameters(xt->m_plugin, &xt->m_parameters);
112
case StartFadeParameter:
113
if (newValue.toBool()) {
114
fadeTo(xt->m_parameters.fadeTo, xt->m_parameters.fadeTime);
118
qWarning() << "request for unknown parameter " << parameterId;
123
void VolumeFaderEffectXT::createInstance()
125
xine_audio_port_t *audioPort = fakeAudioPort();
126
Q_ASSERT(0 == m_plugin);
127
debug() << Q_FUNC_INFO << audioPort << " fadeTime = " << m_parameters.fadeTime;
128
m_plugin = xine_post_init(m_xine, "KVolumeFader", 1, &audioPort, 0);
129
xine_post_in_t *paraInput = xine_post_input(m_plugin, "parameters");
131
Q_ASSERT(paraInput->type == XINE_POST_DATA_PARAMETERS);
132
Q_ASSERT(paraInput->data);
133
m_pluginApi = reinterpret_cast<xine_post_api_t *>(paraInput->data);
134
m_pluginApi->set_parameters(m_plugin, &m_parameters);
137
void VolumeFaderEffect::getParameters() const
139
K_XT(const VolumeFaderEffect);
141
if (xt->m_pluginApi) {
142
xt->m_pluginApi->get_parameters(xt->m_plugin, &xt->m_parameters);
146
float VolumeFaderEffect::volume() const
148
K_XT(const VolumeFaderEffect);
150
//debug() << Q_FUNC_INFO;
152
return xt->m_parameters.currentVolume;
155
void VolumeFaderEffect::setVolume(float volume)
157
K_XT(VolumeFaderEffect);
159
//debug() << Q_FUNC_INFO << volume;
160
xt->m_parameters.currentVolume = volume;
161
// when we set the volume, set the fadeTo as well, so that we
162
// don't immediately fade back again
163
xt->m_parameters.fadeTo = volume;
164
if (xt->m_pluginApi) {
165
xt->m_pluginApi->set_parameters(xt->m_plugin, &xt->m_parameters);
169
Phonon::VolumeFaderEffect::FadeCurve VolumeFaderEffect::fadeCurve() const
171
K_XT(const VolumeFaderEffect);
173
//debug() << Q_FUNC_INFO;
175
return xt->m_parameters.fadeCurve;
178
void VolumeFaderEffect::setFadeCurve(Phonon::VolumeFaderEffect::FadeCurve curve)
180
K_XT(VolumeFaderEffect);
182
//debug() << Q_FUNC_INFO << curve;
183
xt->m_parameters.fadeCurve = curve;
184
if (xt->m_pluginApi) {
185
xt->m_pluginApi->set_parameters(xt->m_plugin, &xt->m_parameters);
189
void VolumeFaderEffect::fadeTo(float volume, int fadeTime)
191
K_XT(VolumeFaderEffect);
193
//debug() << Q_FUNC_INFO << volume << fadeTime;
194
xt->m_parameters.fadeTo = volume;
195
xt->m_parameters.fadeTime = fadeTime;
196
if (xt->m_pluginApi) {
197
xt->m_pluginApi->set_parameters(xt->m_plugin, &xt->m_parameters);
201
void VolumeFaderEffectXT::rewireTo(SourceNodeXT *source)
203
if (!source->audioOutputPort()) {
206
EffectXT::rewireTo(source);
207
Q_ASSERT(m_pluginApi);
209
m_pluginApi->set_parameters(m_plugin, &m_parameters);
212
}} //namespace Phonon::Xine
214
#include "volumefadereffect.moc"