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

📄 extrapanel.cpp

📁 video linux conference
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************** * extrapanel.cpp : wxWindows plugin for vlc ***************************************************************************** * Copyright (C) 2000-2004, 2003 VideoLAN * $Id: extrapanel.cpp 10974 2005-05-11 15:34:24Z gbazin $ * * Authors: Cl閙ent Stenac <zorglub@videolan.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include <vlc/vlc.h>#include <vlc/aout.h>#include <aout_internal.h>#include <vlc/vout.h>#include <vlc/intf.h>#include <math.h>#include "wxwindows.h"/***************************************************************************** * Local class declarations. *****************************************************************************//* FIXME */#define SMOOTH_TIP N_( "If this setting is not zero, the bands will move " \                "together when you move one. The higher the value is, the " \                "more correlated their movement will be." )static int IntfBandsCallback( vlc_object_t *, char const *,                              vlc_value_t, vlc_value_t, void * );static int IntfPreampCallback( vlc_object_t *, char const *,                               vlc_value_t, vlc_value_t, void * );static void ChangeFiltersString( intf_thread_t *, aout_instance_t *,                                 char *, vlc_bool_t );static void ChangeVFiltersString( intf_thread_t *, char *, vlc_bool_t );/* IDs for the controls and the menu commands */enum{    Notebook_Event,    Adjust_Event,    RestoreDefaults_Event,    Hue_Event,    Contrast_Event,    Brightness_Event,    Saturation_Event,    Gamma_Event,    Ratio_Event,    FiltersInfo_Event,    Filter0_Event, Filter1_Event, Filter2_Event, Filter3_Event, Filter4_Event,    Filter5_Event, Filter6_Event, Filter7_Event, Filter8_Event, Filter9_Event,    EqEnable_Event,    Eq2Pass_Event,    EqRestore_Event,    Smooth_Event,    Preamp_Event,    Band0_Event,Band1_Event,Band2_Event,Band3_Event,Band4_Event,    Band5_Event,Band6_Event,Band7_Event,Band8_Event,Band9_Event,    NormVol_Event, NVSlider_Event, HeadPhone_Event};BEGIN_EVENT_TABLE( ExtraPanel, wxPanel )    EVT_IDLE( ExtraPanel::OnIdle )    /* Equalizer */    EVT_CHECKBOX( EqEnable_Event, ExtraPanel::OnEnableEqualizer )    EVT_CHECKBOX( Eq2Pass_Event, ExtraPanel::OnEq2Pass )    EVT_BUTTON( EqRestore_Event, ExtraPanel::OnEqRestore )    EVT_COMMAND_SCROLL( Preamp_Event, ExtraPanel::OnPreamp )    EVT_COMMAND_SCROLL( Smooth_Event, ExtraPanel::OnEqSmooth )    EVT_COMMAND_SCROLL(Band0_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band1_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band2_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band3_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band4_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band5_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band6_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band7_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band8_Event, ExtraPanel::OnChangeEqualizer)    EVT_COMMAND_SCROLL(Band9_Event, ExtraPanel::OnChangeEqualizer)    /* Video */    EVT_CHECKBOX( Adjust_Event, ExtraPanel::OnEnableAdjust )    EVT_BUTTON( RestoreDefaults_Event, ExtraPanel::OnRestoreDefaults )    EVT_COMMAND_SCROLL(Hue_Event, ExtraPanel::OnAdjustUpdate)    EVT_COMMAND_SCROLL(Contrast_Event, ExtraPanel::OnAdjustUpdate)    EVT_COMMAND_SCROLL(Brightness_Event, ExtraPanel::OnAdjustUpdate)    EVT_COMMAND_SCROLL(Saturation_Event, ExtraPanel::OnAdjustUpdate)    EVT_COMMAND_SCROLL(Gamma_Event, ExtraPanel::OnAdjustUpdate)    EVT_BUTTON( FiltersInfo_Event, ExtraPanel::OnFiltersInfo )    EVT_CHECKBOX( Filter0_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter1_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter2_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter3_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter4_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter5_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter6_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter7_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter8_Event, ExtraPanel::OnSelectFilter )    EVT_CHECKBOX( Filter9_Event, ExtraPanel::OnSelectFilter )    /* Audio */    EVT_CHECKBOX( NormVol_Event, ExtraPanel::OnNormvol )    EVT_CHECKBOX( HeadPhone_Event, ExtraPanel::OnHeadphone )    EVT_COMMAND_SCROLL( NVSlider_Event, ExtraPanel::OnNormvolSlider )END_EVENT_TABLE()struct filter {    char *psz_filter;    char *psz_name;    char *psz_help;};static const struct filter vfilters[] ={    { "clone", N_("Image clone"), N_("Creates several clones of the image") },    { "distort", N_("Distortion"), N_("Adds distorsion effects") },    { "invert", N_("Image inversion") , N_("Inverts the image colors") },    { "crop", N_("Image cropping"), N_("Crops the image") },    { "motionblur", N_("Blurring"), N_("Creates a motion blurring on the image") },    { "transform",  N_("Transformation"), N_("Rotates or flips the image") },    { NULL, NULL, NULL } /* Do not remove this line */};/***************************************************************************** * Constructor. *****************************************************************************/ExtraPanel::ExtraPanel( intf_thread_t *_p_intf, wxWindow *_p_parent ):        wxPanel( _p_parent , -1, wxDefaultPosition, wxDefaultSize ){    p_intf = _p_intf;    p_parent = _p_parent;    SetAutoLayout( TRUE );    wxBoxSizer *extra_sizer = new wxBoxSizer( wxHORIZONTAL );    notebook = new wxNotebook( this, Notebook_Event );#if (!wxCHECK_VERSION(2,5,0))    wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook );#endif    notebook->AddPage( VideoPanel( notebook ), wxU(_("Video")) );    notebook->AddPage( EqzPanel( notebook ), wxU(_("Equalizer")) );    notebook->AddPage( AudioPanel( notebook ), wxU(_("Audio")) );#if (!wxCHECK_VERSION(2,5,0))    extra_sizer->Add( notebook_sizer, 1, wxEXPAND, 0 );#else    extra_sizer->Add( notebook, 1, wxEXPAND, 0 );#endif    SetSizerAndFit( extra_sizer );    extra_sizer->Layout();}ExtraPanel::~ExtraPanel(){}/* Video Panel constructor */wxPanel *ExtraPanel::VideoPanel( wxWindow *parent ){    char *psz_filters;    wxPanel *panel = new wxPanel( parent, -1 );    wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL );    /* Create static box to surround the adjust controls */    wxStaticBox *adjust_box =           new wxStaticBox( panel, -1, wxU(_("Adjust Image")) );    wxStaticBoxSizer *adjust_sizer =        new wxStaticBoxSizer( adjust_box, wxVERTICAL );    adjust_sizer->SetMinSize( -1, 50 );    /* Create flex grid */    wxFlexGridSizer *adjust_gridsizer =        new wxFlexGridSizer( 6, 2, 0, 0);    adjust_gridsizer->AddGrowableCol(1);    /* Create the adjust button */    wxCheckBox * adjust_check = new wxCheckBox( panel, Adjust_Event,                                                 wxU(_("Enable")));    /* Create the restore to defaults button */    restoredefaults_button =        new wxButton( panel, RestoreDefaults_Event,        wxU(_("Restore Defaults")), wxDefaultPosition);    wxStaticText *hue_text = new wxStaticText( panel, -1,                                       wxU(_("Hue")) );    hue_slider = new wxSlider ( panel, Hue_Event, 0, 0,                                360, wxDefaultPosition, wxDefaultSize );    wxStaticText *contrast_text = new wxStaticText( panel, -1,                                       wxU(_("Contrast")) );    contrast_slider = new wxSlider ( panel, Contrast_Event, 0, 0,                                200, wxDefaultPosition, wxDefaultSize);    wxStaticText *brightness_text = new wxStaticText( panel, -1,                                       wxU(_("Brightness")) );    brightness_slider = new wxSlider ( panel, Brightness_Event, 0, 0,                           200, wxDefaultPosition, wxDefaultSize) ;    wxStaticText *saturation_text = new wxStaticText( panel, -1,                                          wxU(_("Saturation")) );    saturation_slider = new wxSlider ( panel, Saturation_Event, 0, 0,                           300, wxDefaultPosition, wxDefaultSize );    wxStaticText *gamma_text = new wxStaticText( panel, -1,                                          wxU(_("Gamma")) );    gamma_slider = new wxSlider ( panel, Gamma_Event, 0, 0,                           100, wxDefaultPosition, wxDefaultSize );    adjust_gridsizer->Add( adjust_check, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( restoredefaults_button, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( hue_text, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( hue_slider, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( contrast_text, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( contrast_slider, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( brightness_text, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( brightness_slider, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( saturation_text, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( saturation_slider, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( gamma_text, 1, wxEXPAND|wxALL, 2 );    adjust_gridsizer->Add( gamma_slider, 1, wxEXPAND|wxALL, 2 );    adjust_sizer->Add( adjust_gridsizer, 1, wxEXPAND|wxALL, 2);    panel_sizer->Add( adjust_sizer , 1, wxTOP, 2 );#if 0    /* Create sizer to surround the other controls */    wxBoxSizer *other_sizer = new wxBoxSizer( wxVERTICAL );    wxStaticBox *video_box =            new wxStaticBox( panel, -1, wxU(_("Video Options")) );    /* Create the sizer for the frame */    wxStaticBoxSizer *video_sizer =       new wxStaticBoxSizer( video_box, wxVERTICAL );    video_sizer->SetMinSize( -1, 50 );    static const wxString ratio_array[] =    {        wxT("4:3"),        wxT("16:9"),    };    wxBoxSizer *ratio_sizer = new wxBoxSizer( wxHORIZONTAL );    wxStaticText *ratio_text = new wxStaticText( panel, -1,                                          wxU(_("Aspect Ratio")) );    ratio_combo = new wxComboBox( panel, Ratio_Event, wxT(""),                                  wxDefaultPosition, wxSize( 80 , -1),                                  WXSIZEOF(ratio_array), ratio_array,                                  0 );    ratio_sizer->Add( ratio_text, 0, wxALL, 2 );    ratio_sizer->Add( ratio_combo, 0, wxALL, 2 );    ratio_sizer->Layout();    video_sizer->Add( ratio_sizer  , 0 , wxALL , 2 );    video_sizer->Layout();#endif    wxStaticBox *filter_box =                  new wxStaticBox( panel, -1, wxU(_("Video Filters")) );    wxStaticBoxSizer *filter_sizer =                   new wxStaticBoxSizer( filter_box, wxHORIZONTAL );    wxBoxSizer *t_col_sizer = new wxBoxSizer( wxVERTICAL );    for( int i = 0 ; vfilters[i].psz_filter != NULL ; i++ )    {        wxCheckBox *box = new wxCheckBox( panel, Filter0_Event + i,                                          wxU( _( vfilters[i].psz_name ) ) );        t_col_sizer->Add( box, 0, wxALL, 4 );        box->SetToolTip( wxU( _( vfilters[i].psz_help ) ) );    }    filter_sizer->Add( t_col_sizer );    filter_sizer->Add( new wxButton( panel, FiltersInfo_Event,                            wxU(_("More info" ) ) ), 0, wxALL, 4 );#if 0    other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0);    other_sizer->Add( filter_sizer, 0, wxALL | wxEXPAND , 0);    other_sizer->Layout();    panel_sizer->Add(other_sizer , 1 );#endif    panel_sizer->Add( filter_sizer, 1, wxTOP|wxLEFT, 2 );    panel->SetSizerAndFit( panel_sizer );    /* Layout the whole panel */    panel_sizer->Layout();    panel_sizer->SetSizeHints( panel );    /* Write down initial values */    psz_filters = config_GetPsz( p_intf, "vout-filter" );    if( psz_filters && strstr( psz_filters, "adjust" ) )    {        adjust_check->SetValue( 1 );        restoredefaults_button->Enable();        saturation_slider->Enable();        contrast_slider->Enable();        brightness_slider->Enable();        hue_slider->Enable();        gamma_slider->Enable();    }    else    {        adjust_check->SetValue( 0 );        restoredefaults_button->Disable();        saturation_slider->Disable();        contrast_slider->Disable();        brightness_slider->Disable();        hue_slider->Disable();        gamma_slider->Disable();    }    if( psz_filters ) free( psz_filters );    int i_value = config_GetInt( p_intf, "hue" );    if( i_value > 0 && i_value < 360 )        hue_slider->SetValue( i_value );    float f_value;    f_value = config_GetFloat( p_intf, "saturation" );    if( f_value > 0 && f_value < 5 )        saturation_slider->SetValue( (int)(100 * f_value) );    f_value = config_GetFloat( p_intf, "contrast" );    if( f_value > 0 && f_value < 4 )        contrast_slider->SetValue( (int)(100 * f_value) );    f_value = config_GetFloat( p_intf, "brightness" );    if( f_value > 0 && f_value < 2 )        brightness_slider->SetValue( (int)(100 * f_value) );    f_value = config_GetFloat( p_intf, "gamma" );    if( f_value > 0 && f_value < 10 )        gamma_slider->SetValue( (int)(10 * f_value) );    b_update = VLC_FALSE;    return panel;}/* Audio panel constructor */wxPanel *ExtraPanel::AudioPanel( wxWindow *parent ){    char *psz_filters;    wxPanel *panel = new wxPanel( parent, -1 );    wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL );    /* Create static box to surround the adjust controls */    wxStaticBox *filter_box =           new wxStaticBox( panel, -1, wxU(_("Audio filters")) );    wxStaticBoxSizer *filter_sizer =        new wxStaticBoxSizer( filter_box, wxVERTICAL );    filter_sizer->SetMinSize( -1, 50 );    wxCheckBox * headphone_check = new wxCheckBox( panel, HeadPhone_Event,                                    wxU(_("Headphone virtualization")));    headphone_check->SetToolTip( wxU(_("This filter gives the feeling of a "             "5.1 speaker set when using a headphone." ) ) );    wxCheckBox * normvol_check = new wxCheckBox( panel, NormVol_Event,                                    wxU(_("Volume normalization")));    normvol_check->SetToolTip( wxU(_("This filter prevents the audio output "                         "power from going over a defined value." ) ) );    wxStaticText *normvol_label = new wxStaticText( panel, -1,                                   wxU( _("Maximum level") ) );    wxSlider *normvol_slider = new wxSlider ( panel, NVSlider_Event, 20, 5,                           100, wxDefaultPosition, wxSize( 100, -1 ) );    filter_sizer->Add( headphone_check, 0, wxALL, 4 );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -