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/audioequalizer.cpp

    r561 r651  
    2929*/
    3030
    31 AudioEqualizer::AudioEqualizer(QObject *parent) : AbstractAudioEffect::AbstractAudioEffect(parent, createParams())
     31// Define functions which depend on concrete native effect class name
     32PHONON_MMF_DEFINE_EFFECT_FUNCTIONS(AudioEqualizer)
     33
     34AudioEqualizer::AudioEqualizer(QObject *parent, const QList<EffectParameter>& parameters)
     35    :   AbstractAudioEffect::AbstractAudioEffect(parent, parameters)
    3236{
     37
    3338}
    3439
    35 void AudioEqualizer::parameterChanged(const int pid,
     40int AudioEqualizer::effectParameterChanged(const EffectParameter &param,
    3641                                      const QVariant &value)
    3742{
    38     if (m_effect.data()) {
    39         const int band = pid;
    40         const int level = value.toInt();
    41         setBandLevel(band, level);
    42     }
     43    const int band = param.id() - ParameterBase + 1;
     44
     45    const qreal externalLevel = value.toReal();
     46    const int internalLevel = param.toInternalValue(externalLevel);
     47
     48    TRAPD(err, concreteEffect()->SetBandLevelL(band, internalLevel));
     49    return err;
    4350}
    4451
    45 void AudioEqualizer::connectAudioPlayer(AudioPlayer::NativePlayer *player)
     52
     53//-----------------------------------------------------------------------------
     54// Static functions
     55//-----------------------------------------------------------------------------
     56
     57const char* AudioEqualizer::description()
    4658{
    47     CAudioEqualizer *ptr = 0;
    48     QT_TRAP_THROWING(ptr = CAudioEqualizer::NewL(*player));
    49     m_effect.reset(ptr);
     59    return "Audio equalizer";
    5060}
    5161
    52 void AudioEqualizer::applyParameters()
     62bool AudioEqualizer::getParameters(CMdaAudioOutputStream *stream,
     63    QList<EffectParameter>& parameters)
    5364{
    54     if (m_effect.data()) {
    55         EffectParameter param;
    56         foreach (param, parameters()) {
    57             const int band = param.id();
    58             const int level = parameterValue(param).toInt();
    59             setBandLevel(band, level);
     65    bool supported = false;
     66
     67    QScopedPointer<CAudioEqualizer> effect;
     68    TRAPD(err, effect.reset(CAudioEqualizer::NewL(*stream)));
     69
     70    if (KErrNone == err) {
     71        supported = true;
     72
     73        TInt32 dbMin;
     74        TInt32 dbMax;
     75        effect->DbLevelLimits(dbMin, dbMax);
     76
     77        const int bandCount = effect->NumberOfBands();
     78
     79        for (int i = 0; i < bandCount; ++i) {
     80            // For some reason, band IDs are 1-based, as opposed to the
     81            // 0-based indices used in just about other Symbian API...!
     82            const int band = i + 1;
     83
     84            const qint32 hz = effect->CenterFrequency(band);
     85
     86            // We pass a floating-point parameter range of -1.0 to +1.0 for
     87            // each band in order to work around a limitation in
     88            // Phonon::EffectWidget.  See documentation of EffectParameter
     89            // for more details.
     90            EffectParameter param(
     91                 /* parameterId */        ParameterBase + i,
     92                 /* name */               tr("%1 Hz").arg(hz),
     93                 /* hints */              EffectParameter::LogarithmicHint,
     94                 /* defaultValue */       QVariant(qreal(0.0)),
     95                 /* minimumValue */       QVariant(qreal(-1.0)),
     96                 /* maximumValue */       QVariant(qreal(+1.0)));
     97
     98            param.setInternalRange(dbMin, dbMax);
     99            parameters.append(param);
    60100        }
    61101    }
    62 }
    63102
    64 void AudioEqualizer::setBandLevel(int band, int level)
    65 {
    66     CAudioEqualizer *const effect = static_cast<CAudioEqualizer *>(m_effect.data());
    67     // TODO: handle audio effect errors
    68     TRAP_IGNORE(effect->SetBandLevelL(band, level));
    69 }
    70 
    71 QList<EffectParameter> AudioEqualizer::createParams()
    72 {
    73     QList<EffectParameter> retval;
    74 
    75     // We temporarily create an AudioPlayer, and run the effect on it, so
    76     // we can extract the readonly data we need.
    77     AudioPlayer dummyPlayer;
    78 
    79     CAudioEqualizer *eqPtr = 0;
    80     QT_TRAP_THROWING(eqPtr = CAudioEqualizer::NewL(*dummyPlayer.nativePlayer()));
    81     QScopedPointer<CAudioEqualizer> e(eqPtr);
    82 
    83     TInt32 dbMin;
    84     TInt32 dbMax;
    85     e->DbLevelLimits(dbMin, dbMax);
    86 
    87     const int bandCount = e->NumberOfBands();
    88 
    89     for (int i = 0; i < bandCount; ++i) {
    90         const qint32 hz = e->CenterFrequency(i);
    91 
    92         const qint32 defVol = e->BandLevel(i);
    93 
    94         retval.append(EffectParameter(i,
    95                                       tr("Frequency band, %1 Hz").arg(hz),
    96                                       EffectParameter::LogarithmicHint,
    97                                       QVariant(qint32(defVol)),
    98                                       QVariant(qint32(dbMin)),
    99                                       QVariant(qint32(dbMax)),
    100                                       QVariantList(),
    101                                       QString()));
    102     }
    103 
    104     return retval;
     103    return supported;
    105104}
    106105
Note: See TracChangeset for help on using the changeset viewer.