From: Nikolay Tischenko Date: Tue, 28 Sep 2010 13:21:07 +0000 (+0700) Subject: Fixed crash when no gstreamer0.10-plugins-good-extra package installed X-Git-Tag: 1.3.1~2 X-Git-Url: http://git.maemo.org/git/?p=someplayer;a=commitdiff_plain;h=6bc16ab7b14486a857e4947edfd06e16d3ea686e;ds=sidebyside Fixed crash when no gstreamer0.10-plugins-good-extra package installed Improved equalizer, added presets support --- diff --git a/src/equalizerdialog.cpp b/src/equalizerdialog.cpp index 847d408..f583d4e 100644 --- a/src/equalizerdialog.cpp +++ b/src/equalizerdialog.cpp @@ -19,31 +19,34 @@ #include "equalizerdialog.h" #include "ui_equalizerdialog.h" +#include "config.h" + +using namespace SomePlayer::Storage; EqualizerDialog::EqualizerDialog(QWidget *parent) : QDialog(parent), ui(new Ui::EqualizerDialog) { ui->setupUi(this); - ui->band0Slider->setMinimum(-240); + ui->band0Slider->setMinimum(-120); ui->band0Slider->setValue(0); - ui->band1Slider->setMinimum(-240); + ui->band1Slider->setMinimum(-120); ui->band1Slider->setValue(0); - ui->band2Slider->setMinimum(-240); + ui->band2Slider->setMinimum(-120); ui->band2Slider->setValue(0); - ui->band3Slider->setMinimum(-240); + ui->band3Slider->setMinimum(-120); ui->band3Slider->setValue(0); - ui->band4Slider->setMinimum(-240); + ui->band4Slider->setMinimum(-120); ui->band4Slider->setValue(0); - ui->band5Slider->setMinimum(-240); + ui->band5Slider->setMinimum(-120); ui->band5Slider->setValue(0); - ui->band6Slider->setMinimum(-240); + ui->band6Slider->setMinimum(-120); ui->band6Slider->setValue(0); - ui->band7Slider->setMinimum(-240); + ui->band7Slider->setMinimum(-120); ui->band7Slider->setValue(0); - ui->band8Slider->setMinimum(-240); + ui->band8Slider->setMinimum(-120); ui->band8Slider->setValue(0); - ui->band9Slider->setMinimum(-240); + ui->band9Slider->setMinimum(-120); ui->band9Slider->setValue(0); ui->band0Slider->setMaximum(120); @@ -57,6 +60,10 @@ EqualizerDialog::EqualizerDialog(QWidget *parent) : ui->band8Slider->setMaximum(120); ui->band9Slider->setMaximum(120); + ui->masterSlider->setMinimum(-120); + ui->masterSlider->setMaximum(120); + ui->masterSlider->setValue(0); + connect(ui->band0Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value0_changed(int))); connect(ui->band1Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value1_changed(int))); connect(ui->band2Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value2_changed(int))); @@ -67,9 +74,10 @@ EqualizerDialog::EqualizerDialog(QWidget *parent) : connect(ui->band7Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value7_changed(int))); connect(ui->band8Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value8_changed(int))); connect(ui->band9Slider, SIGNAL(sliderMoved(int)), this, SLOT(_value9_changed(int))); - + connect(ui->masterSlider, SIGNAL(valueChanged(int)), this, SLOT(_value_master_changed(int))); connect(ui->enableToggleButton, SIGNAL(clicked()), this, SLOT(_state_changed())); - + connect(ui->saveButton, SIGNAL(clicked()), this, SLOT(_save_preset())); + connect(ui->presetComboBox, SIGNAL(activated(QString)), this, SLOT(_load_preset(QString))); } EqualizerDialog::~EqualizerDialog() @@ -124,5 +132,75 @@ void EqualizerDialog::setEqualizerEnabled(bool enabled) { ui->band7Slider->setEnabled(enabled); ui->band8Slider->setEnabled(enabled); ui->band9Slider->setEnabled(enabled); + ui->masterSlider->setEnabled(enabled); + ui->saveButton->setEnabled(enabled); + ui->presetComboBox->setEnabled(enabled); ui->enableToggleButton->setChecked(enabled); } + +void EqualizerDialog::_value_master_changed(int v) { + ui->band0Slider->setValue(v); + ui->band1Slider->setValue(v); + ui->band2Slider->setValue(v); + ui->band3Slider->setValue(v); + ui->band4Slider->setValue(v); + ui->band5Slider->setValue(v); + ui->band6Slider->setValue(v); + ui->band7Slider->setValue(v); + ui->band8Slider->setValue(v); + ui->band9Slider->setValue(v); + for (int i = 0; i < 10; i++) { + emit valueChanged(i, v); + } +} + +void EqualizerDialog::reloadPresets() { + Config config; + QStringList presets = config.getValue("equalizer/presets").toStringList(); + ui->presetComboBox->clear(); + ui->presetComboBox->addItems(presets); +} + +void EqualizerDialog::_save_preset() { + Config config; + QString name = ui->presetComboBox->currentText(); + QStringList presets = config.getValue("equalizer/presets").toStringList(); + if (!presets.contains(name)) + presets.append(name); + config.setValue("equalizer/presets", presets); + config.setValue(QString("equalizer_preset_")+name+"/band0", ui->band0Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band1", ui->band1Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band2", ui->band2Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band3", ui->band3Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band4", ui->band4Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band5", ui->band5Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band6", ui->band6Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band7", ui->band7Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band8", ui->band8Slider->value()); + config.setValue(QString("equalizer_preset_")+name+"/band9", ui->band9Slider->value()); + reloadPresets(); +} + +void EqualizerDialog::_load_preset(QString name) { + Config config; + ui->band0Slider->setValue(config.getValue("equalizer_preset_"+name+"/band0").toInt()); + _value0_changed(ui->band0Slider->value()); + ui->band1Slider->setValue(config.getValue("equalizer_preset_"+name+"/band1").toInt()); + _value1_changed(ui->band1Slider->value()); + ui->band2Slider->setValue(config.getValue("equalizer_preset_"+name+"/band2").toInt()); + _value2_changed(ui->band2Slider->value()); + ui->band3Slider->setValue(config.getValue("equalizer_preset_"+name+"/band3").toInt()); + _value3_changed(ui->band3Slider->value()); + ui->band4Slider->setValue(config.getValue("equalizer_preset_"+name+"/band4").toInt()); + _value4_changed(ui->band4Slider->value()); + ui->band5Slider->setValue(config.getValue("equalizer_preset_"+name+"/band5").toInt()); + _value5_changed(ui->band5Slider->value()); + ui->band6Slider->setValue(config.getValue("equalizer_preset_"+name+"/band6").toInt()); + _value6_changed(ui->band6Slider->value()); + ui->band7Slider->setValue(config.getValue("equalizer_preset_"+name+"/band7").toInt()); + _value7_changed(ui->band7Slider->value()); + ui->band8Slider->setValue(config.getValue("equalizer_preset_"+name+"/band8").toInt()); + _value8_changed(ui->band8Slider->value()); + ui->band9Slider->setValue(config.getValue("equalizer_preset_"+name+"/band9").toInt()); + _value9_changed(ui->band9Slider->value()); +} diff --git a/src/equalizerdialog.h b/src/equalizerdialog.h index 8486677..658e60e 100644 --- a/src/equalizerdialog.h +++ b/src/equalizerdialog.h @@ -40,6 +40,7 @@ signals: public slots: void setValue(int, int); void setEqualizerEnabled(bool); + void reloadPresets(); private slots: void _value0_changed(int v) { emit valueChanged(0, v);} @@ -52,8 +53,11 @@ private slots: void _value7_changed(int v) { emit valueChanged(7, v);} void _value8_changed(int v) { emit valueChanged(8, v);} void _value9_changed(int v) { emit valueChanged(9, v);} - + void _value_master_changed(int v); void _state_changed(); + void _save_preset(); + void _load_preset(QString); + private: Ui::EqualizerDialog *ui; }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 2767608..8f88fc6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -277,6 +277,7 @@ void MainWindow::_equalizer() { _equalizer_dialog->setValue(i, (int)(val * 10 + 0.5)); } _equalizer_dialog->setEqualizerEnabled(_player_form->isEqualizerEnabled()); + _equalizer_dialog->reloadPresets(); _equalizer_dialog->exec(); } else { QMessageBox::information(this, "Error", "No equalizer support. Please install gstreamer0.10-plugins-good-extra"); diff --git a/src/player/player.cpp b/src/player/player.cpp index 9395d8f..17976ba 100644 --- a/src/player/player.cpp +++ b/src/player/player.cpp @@ -35,8 +35,11 @@ Player::Player(QObject *parent) : _player = new Phonon::MediaObject(this); _output = new Phonon::AudioOutput(Phonon::MusicCategory, this); _player->setTickInterval(1000); - _equalizer == NULL; - _equalizer_enabled == false; + _equalizer = NULL; + _equalizer_enabled = false; + connect(_player, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(_stateChanged(Phonon::State,Phonon::State))); + connect(_player, SIGNAL(tick(qint64)), this, SLOT(_tick(qint64))); + _path = Phonon::createPath(_player, _output); QList effects = Phonon::BackendCapabilities::availableAudioEffects(); foreach (Phonon::EffectDescription desc, effects) { if (desc.name() == "equalizer-10bands") { @@ -47,7 +50,7 @@ Player::Player(QObject *parent) : QVariant var = config.getValue(QString("equalizer/band%1").arg(i)); setEqualizerValue(i, var.toDouble()); } - _equalizer_enabled = true; + enableEqualizer(); } else if (config.getValue("equalizer/equalizer") == "") { for (int i = 0; i < 10; i++) { config.setValue(QString("equalizer/band%1").arg(i), 0); @@ -55,9 +58,6 @@ Player::Player(QObject *parent) : } } } - connect(_player, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(_stateChanged(Phonon::State,Phonon::State))); - connect(_player, SIGNAL(tick(qint64)), this, SLOT(_tick(qint64))); - _path = Phonon::createPath(_player, _output); int seed = QTime::currentTime().msec(); qsrand(seed); _random = _config.getValue("playback/random").toBool(); @@ -159,7 +159,8 @@ void Player::_stateChanged(Phonon::State newState, Phonon::State /*oldState*/) { case Phonon::BufferingState: break; case Phonon::ErrorState: - _state = PLAYER_ERROR; + play(); // force +// _state = PLAYER_ERROR; break; } } @@ -217,6 +218,10 @@ void Player::setVolume(int v) { } void Player::equalizerValue(int band, double *val) { + if (_equalizer == NULL) { + *val = 0; + return; + } if (band < 0 || band > 9) { *val = -24; return; @@ -229,6 +234,8 @@ void Player::equalizerValue(int band, double *val) { } void Player::enableEqualizer() { + if (_equalizer == NULL) + return; _equalizer_enabled = true; _path.insertEffect(_equalizer); Config config; @@ -236,6 +243,8 @@ void Player::enableEqualizer() { } void Player::disableEqualizer() { + if (_equalizer == NULL) + return; _equalizer_enabled = false; _path.removeEffect(_equalizer); Config config; @@ -243,6 +252,8 @@ void Player::disableEqualizer() { } void Player::setEqualizerValue(int band, double value) { + if (_equalizer == NULL) + return; if (band < 0 || band > 9 || value < -24 || value > 12) { return; } diff --git a/src/playerform.cpp b/src/playerform.cpp index 31352d0..856edb7 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -93,7 +93,8 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : connect(_player, SIGNAL(tick(int,int)), this, SLOT(_tick(int,int))); connect(ui->randomButton, SIGNAL(clicked()), this, SLOT(_toggle_random())); connect(ui->repeatButton, SIGNAL(clicked()), this, SLOT(_toggle_repeat())); - connect(_seek_slider, SIGNAL(sliderReleased()), this, SLOT(_slider_released())); + connect(_seek_slider, SIGNAL(sliderMoved(int)), _player, SLOT(seek(int))); + //connect(_seek_slider, SIGNAL(sliderReleased()), this, SLOT(_slider_released())); connect(ui->volumeSlider, SIGNAL(sliderMoved(int)), _player, SLOT(setVolume(int))); connect(ui->playlistView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(_custom_context_venu_requested(QPoint))); connect(delete_action, SIGNAL(triggered()), this, SLOT(_delete_track())); diff --git a/src/ui/equalizerdialog.ui b/src/ui/equalizerdialog.ui index faa480d..ac470f6 100644 --- a/src/ui/equalizerdialog.ui +++ b/src/ui/equalizerdialog.ui @@ -25,6 +25,44 @@ 0 + + + Qt::Vertical + + + + + + + + + +12dB + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + -12dB + + + + + + Qt::Vertical @@ -111,7 +149,7 @@ 150 - 0 + 70 @@ -139,12 +177,59 @@ - + + + + 0 + 0 + + + + + 300 + 70 + + + + true + + + true + + + + + Qt::Horizontal - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 150 + 70 + + + + Save + + + false @@ -153,38 +238,5 @@ - - - buttonBox - accepted() - EqualizerDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - EqualizerDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - +