Ignore:
Timestamp:
Mar 8, 2010, 12:52:58 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.2 sources.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp

    r561 r651  
    3838AbstractAudioEffect::AbstractAudioEffect(QObject *parent,
    3939                                         const QList<EffectParameter> &params)
    40     :   MediaNode::MediaNode(parent)
     40    :   MediaNode(parent)
     41    ,   m_params(params)
    4142    ,   m_player(0)
    42     ,   m_params(params)
    4343{
     44
    4445}
    4546
    46 QList<EffectParameter> AbstractAudioEffect::parameters() const
     47QList<Phonon::EffectParameter> AbstractAudioEffect::parameters() const
    4748{
    48     return m_params;
     49    // Convert from QList<MMF::EffectParameter> to QList<Phonon::EffectParameter>
     50    QList<Phonon::EffectParameter> result;
     51    EffectParameter param;
     52    foreach (param, m_params)
     53        result += param;
     54    return result;
    4955}
    5056
    51 QVariant AbstractAudioEffect::parameterValue(const EffectParameter &queriedParam) const
     57QVariant AbstractAudioEffect::parameterValue(const Phonon::EffectParameter &queriedParam) const
    5258{
    5359    const QVariant &val = m_values.value(queriedParam.id());
     
    5965}
    6066
    61 void AbstractAudioEffect::setParameterValue(const EffectParameter &param,
     67void AbstractAudioEffect::setParameterValue(const Phonon::EffectParameter &param,
    6268                                            const QVariant &newValue)
    6369{
    6470    m_values.insert(param.id(), newValue);
    65     parameterChanged(param.id(), newValue);
    66     // TODO: handle audio effect errors
    67     TRAP_IGNORE(m_effect->ApplyL());
     71
     72    if (m_effect.data()) {
     73        const EffectParameter& internalParam = internalParameter(param.id());
     74        int err = parameterChanged(internalParam, newValue);
     75        // TODO: handle audio effect errors
     76        Q_UNUSED(err);
     77    }
     78}
     79
     80void AbstractAudioEffect::abstractPlayerChanged(AbstractPlayer *player)
     81{
     82    m_player = qobject_cast<AbstractMediaPlayer *>(player);
     83    m_effect.reset();
     84}
     85
     86void AbstractAudioEffect::stateChanged(Phonon::State newState,
     87                                       Phonon::State oldState)
     88{
     89    if (Phonon::LoadingState == oldState
     90        && Phonon::LoadingState != newState)
     91        createEffect();
    6892}
    6993
     
    7397    Q_ASSERT_X(!m_effect.data(), Q_FUNC_INFO, "Effect already created");
    7498
    75     AbstractMediaPlayer *const player =
    76         qobject_cast<AbstractMediaPlayer *>(mediaObject->abstractPlayer());
     99    abstractPlayerChanged(mediaObject->abstractPlayer());
    77100
    78     if (player) {
    79         m_player = player;
     101    connect(mediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)),
     102            SLOT(stateChanged(Phonon::State, Phonon::State)));
    80103
    81         if (AudioPlayer *audioPlayer = qobject_cast<AudioPlayer *>(player)) {
    82             connectAudioPlayer(audioPlayer->nativePlayer());
    83             applyParameters();
    84             // TODO: handle audio effect errors
    85             TRAP_IGNORE(m_effect->EnableL());
     104    connect(mediaObject, SIGNAL(abstractPlayerChanged(AbstractPlayer *)),
     105            SLOT(abstractPlayerChanged(AbstractPlayer *)));
     106
     107    if (mediaObject->state() != Phonon::LoadingState)
     108        createEffect();
     109}
     110
     111void AbstractAudioEffect::disconnectMediaObject(MediaObject *mediaObject)
     112{
     113    mediaObject->disconnect(this);
     114    abstractPlayerChanged(0);
     115}
     116
     117void AbstractAudioEffect::setEnabled(bool enabled)
     118{
     119    TInt err = KErrNone;
     120
     121    if (enabled)
     122        // TODO: handle audio effect errors
     123        TRAP(err, m_effect->EnableL())
     124    else
     125        // TODO: handle audio effect errors
     126        TRAP(err, m_effect->DisableL())
     127
     128    Q_UNUSED(err);
     129}
     130
     131void AbstractAudioEffect::createEffect()
     132{
     133    Q_ASSERT_X(m_player, Q_FUNC_INFO, "Invalid media player pointer");
     134
     135    if (AudioPlayer *audioPlayer = qobject_cast<AudioPlayer *>(m_player)) {
     136        createEffect(audioPlayer->nativePlayer());
     137    }
     138
     139    if (m_effect.data()) {
     140        EffectParameter param;
     141        int err = 0;
     142        foreach (param, m_params) {
     143            const QVariant value = parameterValue(param);
     144            err = parameterChanged(param, value);
    86145        }
     146        Q_UNUSED(err)
    87147    }
    88148}
    89149
    90 void AbstractAudioEffect::disconnectMediaObject(MediaObject * /*mediaObject*/)
     150const MMF::EffectParameter& AbstractAudioEffect::internalParameter(int id) const
    91151{
    92     m_player = 0;
    93     m_effect.reset();
     152    const EffectParameter *result = 0;
     153    for (int i=0; i<m_params.count() && !result; ++i) {
     154        if (m_params[i].id() == id)
     155            result = &m_params[i];
     156    }
     157    Q_ASSERT_X(result, Q_FUNC_INFO, "Parameter not found");
     158    return *result;
    94159}
     160
     161int AbstractAudioEffect::parameterChanged(const EffectParameter &param,
     162            const QVariant &value)
     163{
     164    int err = 0;
     165
     166    switch (param.id()) {
     167    case ParameterEnable:
     168        setEnabled(value.toBool());
     169        break;
     170    default:
     171        {
     172        const EffectParameter& internalParam = internalParameter(param.id());
     173        err = effectParameterChanged(internalParam, value);
     174        }
     175        break;
     176    }
     177
     178    if (!err)
     179        TRAP(err, m_effect->ApplyL());
     180
     181    return err;
     182}
     183
     184int AbstractAudioEffect::effectParameterChanged(
     185    const EffectParameter &param, const QVariant &value)
     186{
     187    // Default implementation
     188    Q_ASSERT_X(false, Q_FUNC_INFO, "Effect has no parameters");
     189    return 0;
     190}
     191
    95192
    96193QT_END_NAMESPACE
Note: See TracChangeset for help on using the changeset viewer.