📄 extended_panels.cpp
字号:
CONNECT( slider, valueChanged( int ), this, ValueChange( int ) ); hlayout->addWidget( slider ); } layout->addLayout( hlayout ); break; } case VLC_VAR_BOOL: { QCheckBox *button = new QCheckBox( psz_label, box ); button->setObjectName( psz_var ); button->setChecked( var_GetBool( p_obj, psz_var ) ); CONNECT( button, clicked( bool ), this, ValueChange( bool ) ); layout->addWidget( button ); break; } case VLC_VAR_VOID: { if( i_type & VLC_VAR_ISCOMMAND ) { QPushButton *button = new QPushButton( psz_label, box ); button->setObjectName( psz_var ); CONNECT( button, clicked( bool ), this, ValueChange( bool ) ); layout->addWidget( button ); } else { QLabel *label = new QLabel( psz_label, box ); layout->addWidget( label ); } break; } default: msg_Warn( p_intf, "Unhandled var type for %s", psz_var ); break; } free( name.psz_string ); } var_Change( p_obj, "controls", VLC_VAR_FREELIST, &val, &text ); vlc_object_release( p_obj ); } else { msg_Dbg( p_intf, "Couldn't find v4l2 instance" ); ui.help->show(); }}void ExtV4l2::ValueChange( bool value ){ ValueChange( (int)value );}void ExtV4l2::ValueChange( int value ){ QObject *s = sender(); vlc_object_t *p_obj = (vlc_object_t*)vlc_object_find_name( p_intf, "v4l2", FIND_ANYWHERE ); if( p_obj ) { char *psz_var = strdup( qtu( s->objectName() ) ); int i_type = var_Type( p_obj, psz_var ); switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_INTEGER: if( i_type & VLC_VAR_HASCHOICE ) { QComboBox *combobox = qobject_cast<QComboBox*>( s ); value = combobox->itemData( value ).toInt(); } var_SetInteger( p_obj, psz_var, value ); break; case VLC_VAR_BOOL: var_SetBool( p_obj, psz_var, value ); break; case VLC_VAR_VOID: var_SetVoid( p_obj, psz_var ); break; } free( psz_var ); vlc_object_release( p_obj ); } else { msg_Warn( p_intf, "Oops, v4l2 object isn't available anymore" ); Refresh(); }}/********************************************************************** * Equalizer **********************************************************************/static const QString band_frequencies[] ={ " 60 Hz ", " 170 Hz ", " 310 Hz ", " 600 Hz ", " 1 kHz ", " 3 kHz ", " 6 kHz ", " 12 kHz ", " 14 kHz ", " 16 kHz "};Equalizer::Equalizer( intf_thread_t *_p_intf, QWidget *_parent ) : QWidget( _parent ) , p_intf( _p_intf ){ QFont smallFont = QApplication::font( static_cast<QWidget*>( 0 ) ); smallFont.setPointSize( smallFont.pointSize() - 3 ); ui.setupUi( this ); ui.preampLabel->setFont( smallFont ); /* Setup of presetsComboBox */ presetsComboBox = ui.presetsCombo; CONNECT( presetsComboBox, currentIndexChanged( int ), this, updateUISliderValues( int ) ); CONNECT( presetsComboBox, activated( int ), this, setCorePreset( int ) ); /* Add the sliders for the Bands */ QGridLayout *grid = new QGridLayout( ui.frame ); grid->setMargin( 0 ); for( int i = 0 ; i < BANDS ; i++ ) { bands[i] = new QSlider( Qt::Vertical ); bands[i]->setMaximum( 400 ); bands[i]->setValue( 200 ); CONNECT( bands[i], valueChanged( int ), this, setCoreBands() ); band_texts[i] = new QLabel( band_frequencies[i] + "\n0.0dB" ); band_texts[i]->setFont( smallFont ); grid->addWidget( bands[i], 0, i ); grid->addWidget( band_texts[i], 1, i ); } /* Add the listed presets */ for( int i = 0 ; i < NB_PRESETS ; i ++ ) { presetsComboBox->addItem( qtr( preset_list_text[i] ), QVariant( preset_list[i] ) ); } /* Connects */ BUTTONACT( ui.enableCheck, enable() ); BUTTONACT( ui.eq2PassCheck, set2Pass() ); CONNECT( ui.preampSlider, valueChanged( int ), this, setPreamp() ); /* Do the update from the value of the core */ updateUIFromCore();}Equalizer::~Equalizer(){}void Equalizer::clean(){ ui.enableCheck->setChecked( false ); enable();}/* Write down initial values */void Equalizer::updateUIFromCore(){ char *psz_af; float f_preamp; int i_preset; aout_instance_t *p_aout = ( aout_instance_t * )vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_aout ) { psz_af = var_GetNonEmptyString( p_aout, "audio-filter" ); if( var_GetBool( p_aout, "equalizer-2pass" ) ) ui.eq2PassCheck->setChecked( true ); f_preamp = var_GetFloat( p_aout, "equalizer-preamp" ); i_preset = presetsComboBox->findData( QVariant( var_GetString( p_aout, "equalizer-preset" ) ) ); vlc_object_release( p_aout ); } else { psz_af = config_GetPsz( p_intf, "audio-filter" ); if( config_GetInt( p_intf, "equalizer-2pass" ) ) ui.eq2PassCheck->setChecked( true ); f_preamp = config_GetFloat( p_intf, "equalizer-preamp" ); i_preset = presetsComboBox->findData( QVariant( config_GetPsz( p_intf, "equalizer-preset" ) ) ); } if( psz_af && strstr( psz_af, "equalizer" ) != NULL ) ui.enableCheck->setChecked( true ); enable( ui.enableCheck->isChecked() ); presetsComboBox->setCurrentIndex( i_preset ); free( psz_af );}/* Functin called when enableButton is toggled */void Equalizer::enable(){ bool en = ui.enableCheck->isChecked(); aout_EnableFilter( VLC_OBJECT( p_intf ), "equalizer", en ? true : false );// aout_EnableFilter( VLC_OBJECT( p_intf ), "upmixer",// en ? true : false );// aout_EnableFilter( VLC_OBJECT( p_intf ), "vsurround",// en ? true : false ); enable( en ); if( presetsComboBox->currentIndex() < 0 ) presetsComboBox->setCurrentIndex( 0 );}void Equalizer::enable( bool en ){ ui.eq2PassCheck->setEnabled( en ); presetsComboBox->setEnabled( en ); ui.presetLabel->setEnabled( en ); ui.preampLabel->setEnabled( en ); ui.preampSlider->setEnabled( en ); for( int i = 0 ; i< BANDS; i++ ) { bands[i]->setEnabled( en ); band_texts[i]->setEnabled( en ); }}/* Function called when the set2Pass button is activated */void Equalizer::set2Pass(){ aout_instance_t *p_aout= ( aout_instance_t * )vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); bool b_2p = ui.eq2PassCheck->isChecked(); if( p_aout == NULL ) config_PutInt( p_intf, "equalizer-2pass", b_2p ); else { var_SetBool( p_aout, "equalizer-2pass", b_2p ); config_PutInt( p_intf, "equalizer-2pass", b_2p ); for( int i = 0; i < p_aout->i_nb_inputs; i++ ) { p_aout->pp_inputs[i]->b_restart = true; } vlc_object_release( p_aout ); }}/* Function called when the preamp slider is moved */void Equalizer::setPreamp(){ const float f = ( float )( ui.preampSlider->value() ) /10 - 20; aout_instance_t *p_aout= ( aout_instance_t * )vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); ui.preampLabel->setText( qtr( "Preamp\n" ) + QString::number( f, 'f', 1 ) + qtr( "dB" ) ); if( p_aout ) { //delCallbacks( p_aout ); var_SetFloat( p_aout, "equalizer-preamp", f ); //addCallbacks( p_aout ); vlc_object_release( p_aout ); } config_PutFloat( p_intf, "equalizer-preamp", f );}void Equalizer::setCoreBands(){ /**\todo smoothing */ QString values; for( int i = 0; i < BANDS; i++ ) { const float f_val = (float)( bands[i]->value() ) / 10 - 20; QString val = QString("%1").arg( f_val, 5, 'f', 1 ); band_texts[i]->setText( band_frequencies[i] + "\n" + val + "dB" ); values += " " + val; } const char *psz_values = values.toAscii().constData(); aout_instance_t *p_aout= ( aout_instance_t * )vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_aout ) { //delCallbacks( p_aout ); var_SetString( p_aout, "equalizer-bands", psz_values ); //addCallbacks( p_aout ); vlc_object_release( p_aout ); }}void Equalizer::updateUISliderValues( int i_preset ){ if( i_preset < 0 ) return; char *p = createValuesFromPreset( i_preset ); char *psz = p; float f_preamp = eqz_preset_10b[i_preset]->f_preamp; if ( p ) { for( int i = 0; i < BANDS; i++ ) { const float f = us_strtod(p, &p ); bands[i]->setValue( (int)( ( f + 20 ) * 10 ) ); band_texts[i]->setText( band_frequencies[i] + "\n" + QString("%1").arg( f, 5, 'f', 1 ) + "dB" ); if( p == NULL || *p == '\0' ) break; p++; if( *p == '\0' ) break; } free( psz ); } ui.preampSlider->setValue( (int)( ( f_preamp + 20 ) * 10 ) ); ui.preampLabel->setText( qtr( "Preamp\n" ) + QString::number( f_preamp, 'f', 1 ) + qtr( "dB" ) );}char * Equalizer::createValuesFromPreset( int i_preset ){ char *psz_values; QString values; /* Create the QString in Qt */ for( int i = 0 ; i< BANDS ;i++ ) values += QString( " %1" ).arg( eqz_preset_10b[i_preset]->f_amp[i] ); /* Convert it to char * */ if( !asprintf( &psz_values, "%s", values.toAscii().constData() ) ) return NULL; return psz_values;}void Equalizer::setCorePreset( int i_preset ){ char *psz_values = createValuesFromPreset( i_preset ); if( !psz_values ) return ; aout_instance_t *p_aout= ( aout_instance_t * )vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_aout ) { delCallbacks( p_aout ); var_SetString( p_aout , "equalizer-preset" , preset_list[i_preset] ); var_SetString( p_aout, "equalizer-bands", psz_values ); var_SetFloat( p_aout, "equalizer-preamp", eqz_preset_10b[i_preset]->f_preamp ); addCallbacks( p_aout ); vlc_object_release( p_aout ); } config_PutPsz( p_intf, "equalizer-bands", psz_values ); config_PutPsz( p_intf, "equalizer-preset", preset_list[i_preset] ); config_PutFloat( p_intf, "equalizer-preamp", eqz_preset_10b[i_preset]->f_preamp );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -