~ubuntu-branches/ubuntu/oneiric/phonon/oneiric-201108111512

« back to all changes in this revision

Viewing changes to xine/volumefadereffect.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2011-01-24 10:12:11 UTC
  • mfrom: (0.5.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20110124101211-w9rew7q0dmwbwhqx
Tags: 4:4.7.0really4.4.4-0ubuntu1
* New upstream release
* Xine and GStreamer backends now split out source, remove build-deps and
  binary packages from debian/control
* Remove 02_no_rpath.patch, now upstream
* Disable kubuntu04_no_va_mangle.patch, no longer applies
* Remove kubuntu_05_gst_codec_installer_window_id.diff, kubuntu_06_forward_events.diff,
  kubuntu_07_include_fix.diff, gstreamer now separate

Show diffs side-by-side

added added

removed removed

Lines of Context:
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>
4
 
 
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.
9
 
 
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.
14
 
 
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.
19
 
 
20
 
*/
21
 
 
22
 
#include "volumefadereffect.h"
23
 
#include "xineengine.h"
24
 
 
25
 
namespace Phonon
26
 
{
27
 
namespace Xine
28
 
{
29
 
 
30
 
enum ParameterIds {
31
 
    VolumeParameter = 0,
32
 
    FadeCurveParameter = 1,
33
 
    FadeToParameter = 2,
34
 
    FadeTimeParameter = 3,
35
 
    StartFadeParameter = 4
36
 
};
37
 
 
38
 
VolumeFaderEffectXT::VolumeFaderEffectXT()
39
 
    : EffectXT("KVolumeFader"),
40
 
    m_parameters(Phonon::VolumeFaderEffect::Fade3Decibel, 1.0f, 1.0f, 0)
41
 
{
42
 
}
43
 
 
44
 
VolumeFaderEffect::VolumeFaderEffect(QObject *parent)
45
 
    : Effect(new VolumeFaderEffectXT, parent)
46
 
{
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));
58
 
}
59
 
 
60
 
VolumeFaderEffect::~VolumeFaderEffect()
61
 
{
62
 
}
63
 
 
64
 
QVariant VolumeFaderEffect::parameterValue(const EffectParameter &p) const
65
 
{
66
 
    K_XT(const VolumeFaderEffect);
67
 
 
68
 
    const int parameterId = p.id();
69
 
    debug() << Q_FUNC_INFO << parameterId;
70
 
    switch (static_cast<ParameterIds>(parameterId)) {
71
 
    case VolumeParameter:
72
 
        return static_cast<double>(volume());
73
 
    case FadeCurveParameter:
74
 
        return static_cast<int>(fadeCurve());
75
 
    case FadeToParameter:
76
 
        return static_cast<double>(xt->m_parameters.fadeTo);
77
 
    case FadeTimeParameter:
78
 
        return xt->m_parameters.fadeTime;
79
 
    case StartFadeParameter:
80
 
        return 0;
81
 
    }
82
 
 
83
 
    qWarning() << "request for unknown parameter " << parameterId;
84
 
    return QVariant();
85
 
}
86
 
 
87
 
void VolumeFaderEffect::setParameterValue(const EffectParameter &p, const QVariant &newValue)
88
 
{
89
 
    K_XT(VolumeFaderEffect);
90
 
 
91
 
    const int parameterId = p.id();
92
 
    debug() << Q_FUNC_INFO << parameterId << newValue;
93
 
    switch (static_cast<ParameterIds>(parameterId)) {
94
 
    case VolumeParameter:
95
 
        setVolume(newValue.toDouble());
96
 
        break;
97
 
    case FadeCurveParameter:
98
 
        setFadeCurve(static_cast<Phonon::VolumeFaderEffect::FadeCurve>(newValue.toInt()));
99
 
        break;
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);
104
 
        }
105
 
        break;
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);
110
 
        }
111
 
        break;
112
 
    case StartFadeParameter:
113
 
        if (newValue.toBool()) {
114
 
            fadeTo(xt->m_parameters.fadeTo, xt->m_parameters.fadeTime);
115
 
        }
116
 
        break;
117
 
    default:
118
 
        qWarning() << "request for unknown parameter " << parameterId;
119
 
        break;
120
 
    }
121
 
}
122
 
 
123
 
void VolumeFaderEffectXT::createInstance()
124
 
{
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");
130
 
    Q_ASSERT(paraInput);
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);
135
 
}
136
 
 
137
 
void VolumeFaderEffect::getParameters() const
138
 
{
139
 
    K_XT(const VolumeFaderEffect);
140
 
 
141
 
    if (xt->m_pluginApi) {
142
 
        xt->m_pluginApi->get_parameters(xt->m_plugin, &xt->m_parameters);
143
 
    }
144
 
}
145
 
 
146
 
float VolumeFaderEffect::volume() const
147
 
{
148
 
    K_XT(const VolumeFaderEffect);
149
 
 
150
 
    //debug() << Q_FUNC_INFO;
151
 
    getParameters();
152
 
    return xt->m_parameters.currentVolume;
153
 
}
154
 
 
155
 
void VolumeFaderEffect::setVolume(float volume)
156
 
{
157
 
    K_XT(VolumeFaderEffect);
158
 
 
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);
166
 
    }
167
 
}
168
 
 
169
 
Phonon::VolumeFaderEffect::FadeCurve VolumeFaderEffect::fadeCurve() const
170
 
{
171
 
    K_XT(const VolumeFaderEffect);
172
 
 
173
 
    //debug() << Q_FUNC_INFO;
174
 
    getParameters();
175
 
    return xt->m_parameters.fadeCurve;
176
 
}
177
 
 
178
 
void VolumeFaderEffect::setFadeCurve(Phonon::VolumeFaderEffect::FadeCurve curve)
179
 
{
180
 
    K_XT(VolumeFaderEffect);
181
 
 
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);
186
 
    }
187
 
}
188
 
 
189
 
void VolumeFaderEffect::fadeTo(float volume, int fadeTime)
190
 
{
191
 
    K_XT(VolumeFaderEffect);
192
 
 
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);
198
 
    }
199
 
}
200
 
 
201
 
void VolumeFaderEffectXT::rewireTo(SourceNodeXT *source)
202
 
{
203
 
    if (!source->audioOutputPort()) {
204
 
        return;
205
 
    }
206
 
    EffectXT::rewireTo(source);
207
 
    Q_ASSERT(m_pluginApi);
208
 
    Q_ASSERT(m_plugin);
209
 
    m_pluginApi->set_parameters(m_plugin, &m_parameters);
210
 
}
211
 
 
212
 
}} //namespace Phonon::Xine
213
 
 
214
 
#include "volumefadereffect.moc"
215
 
// vim: sw=4 ts=4