⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extended_panels.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                        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 + -