File indexing completed on 2024-04-21 04:48:17
0001 /* AUDEX CDDA EXTRACTOR 0002 * SPDX-FileCopyrightText: Copyright (C) 2007 Marco Nelles 0003 * <https://userbase.kde.org/Audex> 0004 * 0005 * SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 #include "lamewidget.h" 0009 0010 #include <QDebug> 0011 0012 lameWidget::lameWidget(Parameters *parameters, QWidget *parent) 0013 : lameWidgetUI(parent) 0014 { 0015 Q_UNUSED(parent); 0016 0017 this->parameters = parameters; 0018 if (!parameters) { 0019 qDebug() << "ParameterString is NULL!"; 0020 return; 0021 } 0022 0023 bitrates << 80 << 96 << 112 << 128 << 160 << 192 << 224 << 256 << 320; 0024 0025 real_bitrate = parameters->value(ENCODER_LAME_BITRATE_KEY, ENCODER_LAME_BITRATE).toInt(); 0026 p_cbr_flag = parameters->value(ENCODER_LAME_CBR_KEY).toBool(); 0027 enable_CBR(p_cbr_flag); 0028 preset = parameters->value(ENCODER_LAME_PRESET_KEY, ENCODER_LAME_PRESET).toInt(); 0029 switch (preset) { 0030 case ENCODER_LAME_PRESET_MEDIUM: 0031 radioButton_medium->setChecked(true); 0032 enable_custom(false); 0033 break; 0034 case ENCODER_LAME_PRESET_STANDARD: 0035 radioButton_standard->setChecked(true); 0036 enable_custom(false); 0037 break; 0038 case ENCODER_LAME_PRESET_EXTREME: 0039 radioButton_extreme->setChecked(true); 0040 enable_custom(false); 0041 break; 0042 case ENCODER_LAME_PRESET_INSANE: 0043 radioButton_insane->setChecked(true); 0044 enable_custom(false); 0045 break; 0046 case ENCODER_LAME_PRESET_CUSTOM: 0047 radioButton_custom->setChecked(true); 0048 enable_custom(true); 0049 break; 0050 } 0051 checkBox_cbr->setChecked(p_cbr_flag); 0052 checkBox_embedcover->setChecked(parameters->value(ENCODER_LAME_EMBED_COVER_KEY).toBool()); 0053 qlineedit_suffix->setText(parameters->value(ENCODER_LAME_SUFFIX_KEY, ENCODER_LAME_SUFFIX).toString()); 0054 0055 connect(radioButton_medium, SIGNAL(toggled(bool)), this, SLOT(enable_medium(bool))); 0056 connect(radioButton_medium, SIGNAL(toggled(bool)), this, SLOT(trigger_changed())); 0057 connect(radioButton_standard, SIGNAL(toggled(bool)), this, SLOT(enable_standard(bool))); 0058 connect(radioButton_standard, SIGNAL(toggled(bool)), this, SLOT(trigger_changed())); 0059 connect(radioButton_extreme, SIGNAL(toggled(bool)), this, SLOT(enable_extreme(bool))); 0060 connect(radioButton_extreme, SIGNAL(toggled(bool)), this, SLOT(trigger_changed())); 0061 connect(radioButton_insane, SIGNAL(toggled(bool)), this, SLOT(enable_insane(bool))); 0062 connect(radioButton_insane, SIGNAL(toggled(bool)), this, SLOT(trigger_changed())); 0063 connect(radioButton_custom, SIGNAL(toggled(bool)), this, SLOT(enable_custom(bool))); 0064 connect(radioButton_custom, SIGNAL(toggled(bool)), this, SLOT(trigger_changed())); 0065 0066 connect(checkBox_cbr, SIGNAL(toggled(bool)), this, SLOT(enable_CBR(bool))); 0067 connect(checkBox_cbr, SIGNAL(toggled(bool)), this, SLOT(trigger_changed())); 0068 0069 connect(horizontalSlider_bitrate, SIGNAL(valueChanged(int)), this, SLOT(bitrate_changed_by_slider(int))); 0070 connect(horizontalSlider_bitrate, SIGNAL(valueChanged(int)), this, SLOT(trigger_changed())); 0071 0072 connect(kintspinbox_bitrate, SIGNAL(valueChanged(int)), this, SLOT(bitrate_changed_by_spinbox(int))); 0073 connect(kintspinbox_bitrate, SIGNAL(valueChanged(int)), this, SLOT(trigger_changed())); 0074 0075 connect(checkBox_embedcover, SIGNAL(toggled(bool)), this, SLOT(trigger_changed())); 0076 0077 connect(qlineedit_suffix, SIGNAL(textEdited(const QString &)), this, SLOT(trigger_changed())); 0078 0079 changed = false; 0080 } 0081 0082 lameWidget::~lameWidget() 0083 { 0084 } 0085 0086 bool lameWidget::save() 0087 { 0088 bool success = true; 0089 0090 parameters->setValue(ENCODER_LAME_PRESET_KEY, preset); 0091 parameters->setValue(ENCODER_LAME_BITRATE_KEY, real_bitrate); 0092 parameters->setValue(ENCODER_LAME_CBR_KEY, checkBox_cbr->isChecked()); 0093 parameters->setValue(ENCODER_LAME_EMBED_COVER_KEY, checkBox_embedcover->isChecked()); 0094 parameters->setValue(ENCODER_LAME_SUFFIX_KEY, qlineedit_suffix->text()); 0095 0096 changed = false; 0097 0098 return success; 0099 } 0100 0101 void lameWidget::enable_medium(bool enable) 0102 { 0103 if (enable) 0104 preset = ENCODER_LAME_PRESET_MEDIUM; 0105 } 0106 0107 void lameWidget::enable_standard(bool enable) 0108 { 0109 if (enable) 0110 preset = ENCODER_LAME_PRESET_STANDARD; 0111 } 0112 0113 void lameWidget::enable_extreme(bool enable) 0114 { 0115 if (enable) 0116 preset = ENCODER_LAME_PRESET_EXTREME; 0117 } 0118 0119 void lameWidget::enable_insane(bool enable) 0120 { 0121 if (enable) 0122 preset = ENCODER_LAME_PRESET_INSANE; 0123 } 0124 0125 void lameWidget::enable_custom(bool enable) 0126 { 0127 checkBox_cbr->setEnabled(enable); 0128 label_targetbitrate->setEnabled(enable); 0129 horizontalSlider_bitrate->setEnabled(enable); 0130 kintspinbox_bitrate->setEnabled(enable); 0131 label_lowest->setEnabled(enable); 0132 label_highest->setEnabled(enable); 0133 if (enable) 0134 preset = ENCODER_LAME_PRESET_CUSTOM; 0135 } 0136 0137 template<class T> 0138 T square(const T &x) 0139 { 0140 return x * x; 0141 } 0142 0143 void lameWidget::enable_CBR(bool enable) 0144 { 0145 if (enable) { 0146 // find the nearest neighbor 0147 int d = 0, nd = 0, nb = -1, i; 0148 for (i = 0; i < bitrates.count(); ++i) { 0149 nd = square(real_bitrate - bitrates[i]); 0150 if ((i > 0) && (nd > d)) { 0151 nb = bitrates[i - 1]; 0152 break; 0153 } 0154 d = nd; 0155 } 0156 if (nb == -1) 0157 nb = bitrates.last(); 0158 0159 horizontalSlider_bitrate->blockSignals(true); 0160 horizontalSlider_bitrate->setMinimum(0); 0161 horizontalSlider_bitrate->setMaximum(8); 0162 horizontalSlider_bitrate->setSingleStep(1); 0163 horizontalSlider_bitrate->setPageStep(1); 0164 horizontalSlider_bitrate->setValue(i - 1); 0165 horizontalSlider_bitrate->blockSignals(false); 0166 0167 kintspinbox_bitrate->blockSignals(true); 0168 kintspinbox_bitrate->setMinimum(80); 0169 kintspinbox_bitrate->setMaximum(320); 0170 kintspinbox_bitrate->setSingleStep(16); 0171 kintspinbox_bitrate->setValue(nb); 0172 kintspinbox_bitrate->setReadOnly(true); 0173 kintspinbox_bitrate->blockSignals(false); 0174 0175 real_bitrate = nb; 0176 0177 p_cbr_flag = true; 0178 0179 } else { 0180 horizontalSlider_bitrate->blockSignals(true); 0181 horizontalSlider_bitrate->setMinimum(80); 0182 horizontalSlider_bitrate->setMaximum(320); 0183 horizontalSlider_bitrate->setSingleStep(1); 0184 horizontalSlider_bitrate->setPageStep(10); 0185 horizontalSlider_bitrate->setValue(real_bitrate); 0186 horizontalSlider_bitrate->blockSignals(false); 0187 0188 kintspinbox_bitrate->blockSignals(true); 0189 kintspinbox_bitrate->setMinimum(80); 0190 kintspinbox_bitrate->setMaximum(320); 0191 kintspinbox_bitrate->setSingleStep(1); 0192 kintspinbox_bitrate->setValue(real_bitrate); 0193 kintspinbox_bitrate->setReadOnly(false); 0194 kintspinbox_bitrate->blockSignals(false); 0195 0196 p_cbr_flag = false; 0197 } 0198 } 0199 0200 void lameWidget::bitrate_changed_by_slider(int bitrate) 0201 { 0202 if (p_cbr_flag) { 0203 if (bitrate < 0) 0204 bitrate = 0; 0205 if (bitrate >= bitrates.count()) 0206 bitrate = bitrates.count() - 1; 0207 0208 kintspinbox_bitrate->blockSignals(true); 0209 kintspinbox_bitrate->setValue(bitrates[bitrate]); 0210 kintspinbox_bitrate->blockSignals(false); 0211 0212 real_bitrate = bitrates[bitrate]; 0213 0214 } else { 0215 kintspinbox_bitrate->blockSignals(true); 0216 kintspinbox_bitrate->setValue(bitrate); 0217 kintspinbox_bitrate->blockSignals(false); 0218 0219 real_bitrate = bitrate; 0220 } 0221 } 0222 0223 void lameWidget::bitrate_changed_by_spinbox(int bitrate) 0224 { 0225 if (!p_cbr_flag) { 0226 horizontalSlider_bitrate->blockSignals(true); 0227 horizontalSlider_bitrate->setValue(bitrate); 0228 horizontalSlider_bitrate->blockSignals(false); 0229 0230 real_bitrate = bitrate; 0231 } 0232 } 0233 0234 void lameWidget::trigger_changed() 0235 { 0236 changed = (preset != parameters->value(ENCODER_LAME_PRESET_KEY, ENCODER_LAME_PRESET).toInt() 0237 || real_bitrate != parameters->value(ENCODER_LAME_BITRATE_KEY, ENCODER_LAME_BITRATE).toInt() 0238 || checkBox_cbr->isChecked() != parameters->value(ENCODER_LAME_CBR_KEY).toBool() 0239 || checkBox_embedcover->isChecked() != parameters->value(ENCODER_LAME_EMBED_COVER_KEY).toBool() 0240 || qlineedit_suffix->text() != parameters->value(ENCODER_LAME_SUFFIX_KEY, ENCODER_LAME_SUFFIX).toString()); 0241 0242 Q_EMIT triggerChanged(); 0243 }