Commit 20fbfbaf authored by Francois Cartegnie's avatar Francois Cartegnie

Qt: Compressor: create base class for factorization

parent 79ece335
...@@ -928,7 +928,7 @@ FilterSliderData::FilterSliderData( QObject *parent, ...@@ -928,7 +928,7 @@ FilterSliderData::FilterSliderData( QObject *parent,
{ {
slider->setMinimum( p_data->f_min / p_data->f_resolution ); slider->setMinimum( p_data->f_min / p_data->f_resolution );
slider->setMaximum( p_data->f_max / p_data->f_resolution ); slider->setMaximum( p_data->f_max / p_data->f_resolution );
nameLabel->setText( qfu( p_data->psz_descs ) ); nameLabel->setText( p_data->descs );
CONNECT( slider, valueChanged( int ), this, updateText( int ) ); CONNECT( slider, valueChanged( int ), this, updateText( int ) );
setValue( initialValue() ); setValue( initialValue() );
/* In case current == min|max text would not be first updated */ /* In case current == min|max text would not be first updated */
...@@ -946,7 +946,7 @@ void FilterSliderData::setValue( float f ) ...@@ -946,7 +946,7 @@ void FilterSliderData::setValue( float f )
void FilterSliderData::updateText( int i ) void FilterSliderData::updateText( int i )
{ {
float f = ((float) i) * p_data->f_resolution; float f = ((float) i) * p_data->f_resolution;
valueLabel->setText( qfu( p_data->psz_units ) valueLabel->setText( QString( p_data->units )
.prepend( "%1" ) .prepend( "%1" )
.arg( QString::number( f, 'f', 1 ) ) ); .arg( QString::number( f, 'f', 1 ) ) );
} }
...@@ -957,23 +957,23 @@ float FilterSliderData::initialValue() ...@@ -957,23 +957,23 @@ float FilterSliderData::initialValue()
float f = p_data->f_value; float f = p_data->f_value;
if( p_aout ) if( p_aout )
{ {
if ( var_Type( p_aout, p_data->psz_name ) == 0 ) if ( var_Type( p_aout, qtu(p_data->name) ) == 0 )
{ {
vlc_object_release( p_aout ); vlc_object_release( p_aout );
/* Not found, will try in config */ /* Not found, will try in config */
} }
else else
{ {
f = var_GetFloat( p_aout, p_data->psz_name ); f = var_GetFloat( p_aout, qtu(p_data->name) );
vlc_object_release( p_aout ); vlc_object_release( p_aout );
return f; return f;
} }
} }
if ( ! config_FindConfig( VLC_OBJECT(p_intf), p_data->psz_name ) ) if ( ! config_FindConfig( VLC_OBJECT(p_intf), qtu(p_data->name) ) )
return f; return f;
f = config_GetFloat( p_intf, p_data->psz_name ); f = config_GetFloat( p_intf, qtu(p_data->name) );
return f; return f;
} }
...@@ -983,7 +983,7 @@ void FilterSliderData::onValueChanged( int i ) ...@@ -983,7 +983,7 @@ void FilterSliderData::onValueChanged( int i )
vlc_object_t *p_aout = (vlc_object_t *) THEMIM->getAout(); vlc_object_t *p_aout = (vlc_object_t *) THEMIM->getAout();
if ( p_aout ) if ( p_aout )
{ {
var_SetFloat( p_aout, p_data->psz_name, f ); var_SetFloat( p_aout, qtu(p_data->name), f );
vlc_object_release( p_aout ); vlc_object_release( p_aout );
} }
writeToConfig(); writeToConfig();
...@@ -992,7 +992,72 @@ void FilterSliderData::onValueChanged( int i ) ...@@ -992,7 +992,72 @@ void FilterSliderData::onValueChanged( int i )
void FilterSliderData::writeToConfig() void FilterSliderData::writeToConfig()
{ {
float f = ((float) slider->value()) * p_data->f_resolution; float f = ((float) slider->value()) * p_data->f_resolution;
config_PutFloat( p_intf, p_data->psz_name, f ); config_PutFloat( p_intf, qtu(p_data->name), f );
}
AudioFilterControlWidget::AudioFilterControlWidget
( intf_thread_t *_p_intf, QWidget *parent, const char *_name ) :
QWidget( parent ), p_intf( _p_intf ), name( _name )
{}
void AudioFilterControlWidget::build()
{
QFont smallFont = QApplication::font();
smallFont.setPointSize( smallFont.pointSize() - 2 );
QVBoxLayout *layout = new QVBoxLayout( this );
slidersBox = new QGroupBox( qtr( "Enable" ) );
slidersBox->setCheckable( true );
layout->addWidget( slidersBox );
QGridLayout *ctrlLayout = new QGridLayout( slidersBox );
int i = 0;
foreach( const FilterSliderData::slider_data_t &data, controls )
{
QSlider *slider = new QSlider( Qt::Vertical );
QLabel *valueLabel = new QLabel();
valueLabel->setFont( smallFont );
valueLabel->setAlignment( Qt::AlignHCenter );
QLabel *nameLabel = new QLabel();
nameLabel->setFont( smallFont );
nameLabel->setAlignment( Qt::AlignHCenter );
FilterSliderData *filter =
new FilterSliderData( this, p_intf,
slider, valueLabel, nameLabel, & data );
ctrlLayout->addWidget( slider, 0, i, Qt::AlignHCenter );
ctrlLayout->addWidget( valueLabel, 1, i, Qt::AlignHCenter );
ctrlLayout->addWidget( nameLabel, 2, i, Qt::AlignHCenter );
i++;
}
vlc_object_t *p_aout = (vlc_object_t *)THEMIM->getAout();
char *psz_af;
if( p_aout )
{
psz_af = var_GetNonEmptyString( p_aout, "audio-filter" );
vlc_object_release( p_aout );
}
else
psz_af = config_GetPsz( p_intf, "audio-filter" );
if( psz_af && strstr( psz_af, qtu(name) ) != NULL )
slidersBox->setChecked( true );
else
slidersBox->setChecked( false );
CONNECT( slidersBox, toggled(bool), this, enable() );
free( psz_af );
}
AudioFilterControlWidget::~AudioFilterControlWidget()
{
}
void AudioFilterControlWidget::enable()
{
playlist_EnableAudioFilter( THEPL, qtu(name), slidersBox->isChecked() );
} }
/********************************************************************** /**********************************************************************
...@@ -1311,72 +1376,23 @@ void Equalizer::addCallbacks( vlc_object_t *p_aout ) ...@@ -1311,72 +1376,23 @@ void Equalizer::addCallbacks( vlc_object_t *p_aout )
* Dynamic range compressor * Dynamic range compressor
**********************************************************************/ **********************************************************************/
const FilterSliderData::slider_data_t Compressor::comp_controls[] = Compressor::Compressor( intf_thread_t *p_intf, QWidget *parent )
{ : AudioFilterControlWidget( p_intf, parent, "compressor" )
{ "compressor-rms-peak", _("RMS/peak"), "", 0.0f, 1.0f, 0.00f, 0.001f },
{ "compressor-attack", _("Attack"), _(" ms"), 1.5f, 400.0f, 25.00f, 0.100f },
{ "compressor-release", _("Release"), _(" ms"), 2.0f, 800.0f, 100.00f, 0.100f },
{ "compressor-threshold", _("Threshold"), _(" dB"), -30.0f, 0.0f, -11.00f, 0.010f },
{ "compressor-ratio", _("Ratio"), ":1", 1.0f, 20.0f, 8.00f, 0.010f },
{ "compressor-knee", _("Knee\nradius"), _(" dB"), 1.0f, 10.0f, 2.50f, 0.010f },
{ "compressor-makeup-gain", _("Makeup\ngain"), _(" dB"), 0.0f, 24.0f, 7.00f, 0.010f },
};
Compressor::Compressor( intf_thread_t *_p_intf, QWidget *_parent )
: QWidget( _parent ) , p_intf( _p_intf )
{ {
QFont smallFont = QApplication::font(); const FilterSliderData::slider_data_t a[7] =
smallFont.setPointSize( smallFont.pointSize() - 2 );
QVBoxLayout *layout = new QVBoxLayout( this );
compressorBox = new QGroupBox( qtr( "Enable" ) );
compressorBox->setCheckable( true );
layout->addWidget( compressorBox );
QGridLayout *ctrlLayout = new QGridLayout( compressorBox );
for( int i = 0 ; i < NUM_CP_CTRL ; i++ )
{
QSlider *slider = new QSlider( Qt::Vertical );
QLabel *valueLabel = new QLabel();
valueLabel->setFont( smallFont );
valueLabel->setAlignment( Qt::AlignHCenter );
QLabel *nameLabel = new QLabel();
nameLabel->setFont( smallFont );
nameLabel->setAlignment( Qt::AlignHCenter );
FilterSliderData *filter =
new FilterSliderData( this, p_intf,
slider, valueLabel, nameLabel, & comp_controls[i] );
ctrlLayout->addWidget( slider, 0, i, Qt::AlignHCenter );
ctrlLayout->addWidget( valueLabel, 1, i, Qt::AlignHCenter );
ctrlLayout->addWidget( nameLabel, 2, i, Qt::AlignHCenter );
}
vlc_object_t *p_aout = (vlc_object_t *)THEMIM->getAout();
char *psz_af;
if( p_aout )
{ {
psz_af = var_GetNonEmptyString( p_aout, "audio-filter" ); { "compressor-rms-peak", qtr("RMS/peak"), "", 0.0f, 1.0f, 0.00f, 0.001f },
vlc_object_release( p_aout ); { "compressor-attack", qtr("Attack"), qtr(" ms"), 1.5f, 400.0f, 25.00f, 0.100f },
} { "compressor-release", qtr("Release"), qtr(" ms"), 2.0f, 800.0f, 100.00f, 0.100f },
else { "compressor-threshold", qtr("Threshold"), qtr(" dB"), -30.0f, 0.0f, -11.00f, 0.010f },
psz_af = config_GetPsz( p_intf, "audio-filter" ); { "compressor-ratio", qtr("Ratio"), ":1", 1.0f, 20.0f, 8.00f, 0.010f },
{ "compressor-knee", qtr("Knee\nradius"), qtr(" dB"), 1.0f, 10.0f, 2.50f, 0.010f },
if( psz_af && strstr( psz_af, "compressor" ) != NULL ) { "compressor-makeup-gain", qtr("Makeup\ngain"), qtr(" dB"), 0.0f, 24.0f, 7.00f, 0.010f },
compressorBox->setChecked( true ); };
else for( int i=0; i<7 ;i++ ) controls.append( a[i] );
compressorBox->setChecked( false ); build();
CONNECT( compressorBox, toggled(bool), this, enable() );
free( psz_af );
} }
void Compressor::enable()
{
playlist_EnableAudioFilter( THEPL, "compressor", compressorBox->isChecked() );
}
/********************************************************************** /**********************************************************************
* Spatializer * Spatializer
**********************************************************************/ **********************************************************************/
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include <QTabWidget> #include <QTabWidget>
#define BANDS 10 #define BANDS 10
#define NUM_CP_CTRL 7
#define NUM_SP_CTRL 5 #define NUM_SP_CTRL 5
class QSignalMapper; class QSignalMapper;
...@@ -90,13 +89,13 @@ class FilterSliderData : public QObject ...@@ -90,13 +89,13 @@ class FilterSliderData : public QObject
public: public:
typedef struct typedef struct
{ {
const char *psz_name; QString name;
const char *psz_descs; QString descs;
const char *psz_units; QString units;
const float f_min; // min float f_min; // min
const float f_max; // max float f_max; // max
const float f_value; // value float f_value; // value
const float f_resolution; // resolution float f_resolution; // resolution
} slider_data_t; } slider_data_t;
FilterSliderData( QObject *parent, intf_thread_t *p_intf, FilterSliderData( QObject *parent, intf_thread_t *p_intf,
QSlider *slider, QSlider *slider,
...@@ -120,6 +119,25 @@ private: ...@@ -120,6 +119,25 @@ private:
const slider_data_t *p_data; const slider_data_t *p_data;
}; };
class AudioFilterControlWidget : public QWidget
{
Q_OBJECT
public:
AudioFilterControlWidget( intf_thread_t *, QWidget *, const char *name );
virtual ~AudioFilterControlWidget();
protected:
virtual void build();
QVector<FilterSliderData::slider_data_t> controls;
QGroupBox *slidersBox;
intf_thread_t *p_intf;
QString name; // filter's module name
protected slots:
void enable();
};
class Equalizer: public QWidget class Equalizer: public QWidget
{ {
Q_OBJECT Q_OBJECT
...@@ -151,20 +169,12 @@ private slots: ...@@ -151,20 +169,12 @@ private slots:
void setCorePreset(int); void setCorePreset(int);
}; };
class Compressor: public QWidget class Compressor: public AudioFilterControlWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
Compressor( intf_thread_t *, QWidget * ); Compressor( intf_thread_t *, QWidget * );
private:
static const FilterSliderData::slider_data_t comp_controls[NUM_CP_CTRL];
QGroupBox *compressorBox;
intf_thread_t *p_intf;
private slots:
void enable();
}; };
class Spatializer: public QWidget class Spatializer: public QWidget
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment