* Copyright (C) 2000-2004, 2003 the VideoLAN team
* $Id$
*
- * Authors: Clément Stenac <zorglub@videolan.org>
+ * Authors: Clément 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
*
* 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.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <vlc/vlc.h>
-#include <vlc/aout.h>
-#include <aout_internal.h>
-#include <vlc/vout.h>
-#include <vlc/intf.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_aout.h>
+#include <vlc_vout.h>
+#include <vlc_interface.h>
#include <math.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." )
+#define SMOOTH_TIP N_( "Controls the blending of equalizer bands. The higher" \
+ " this 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 );
-
+ char *, bool );
+static void ChangeVFiltersString( intf_thread_t *, char *, bool );
+static void ChangeVFilters2String( intf_thread_t *, char *, bool );
/* IDs for the controls and the menu commands */
enum
char *psz_filter;
char *psz_name;
char *psz_help;
+ bool b_vfilter2;
};
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") },
- { "magnify", N_("Magnify"), N_("Magnifies part of the image") },
+ { "clone", N_("Image clone"), N_("Creates several clones of the image"), false },
+ { "gradient", N_("Cartoon effect"), N_("Gradient effects (cartoon) on the image"), true },
+ { "invert", N_("Image inversion") , N_("Inverts the colors of the image"), true },
+ { "motionblur", N_("Blurring"), N_("Adds motion blurring to the image"), true },
+ { "ripple", N_("Water effect"), N_("Adds water effect to the image"), true },
+ { "wave", N_("Wave effect"), N_("Adds wave effect to the image"), true },
+ { "transform", N_("Transformation"), N_("Rotates or flips the image"), false },
+ { "magnify", N_("Magnify"), N_("Magnifies part of the image"), false },
+ { "puzzle", N_("Puzzle"), N_("Turns the image into a puzzle"), false },
{ NULL, NULL, NULL } /* Do not remove this line */
};
/* Create static box to surround the adjust controls */
wxStaticBox *adjust_box =
- new wxStaticBox( panel, -1, wxU(_("Adjust Image")) );
+ new wxStaticBox( panel, -1, wxU(_("Image adjustment" )) );
wxStaticBoxSizer *adjust_sizer =
new wxStaticBoxSizer( adjust_box, wxVERTICAL );
adjust_sizer->SetMinSize( -1, 50 );
{
wxCheckBox *box = new wxCheckBox( panel, Filter0_Event + i,
wxU( _( vfilters[i].psz_name ) ) );
- t_col_sizer->Add( box, 0, wxALL, 4 );
+ t_col_sizer->Add( box, 0, wxALL, 2 );
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 );
+ 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);
hue_slider->Disable();
gamma_slider->Disable();
}
- if( psz_filters ) free( psz_filters );
+ free( psz_filters );
int i_value = config_GetInt( p_intf, "hue" );
if( i_value > 0 && i_value < 360 )
if( f_value > 0 && f_value < 10 )
gamma_slider->SetValue( (int)(10 * f_value) );
- b_update = VLC_FALSE;
+ b_update = false;
return panel;
}
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." ) ) );
+ headphone_check->SetToolTip( wxU(_("Imitates the effect of "
+ "surround sound when using headphones." ) ) );
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." ) ) );
+ normvol_check->SetToolTip( wxU(_("Prevents the audio output "
+ "level from going over a predefined value." ) ) );
wxStaticText *normvol_label = new wxStaticText( panel, -1,
wxU( _("Maximum level") ) );
eq_chkbox = new wxCheckBox( panel, EqEnable_Event,
wxU(_("Enable") ) );
eq_chkbox->SetToolTip( wxU(_("Enable the equalizer. You can either "
- "manually change the bands or use a preset (Audio Menu->Equalizer)." ) ) );
+ "manually adjust the bands or use a preset (Audio Menu->Equalizer)." ) ) );
top_sizer->Add( eq_chkbox, 0, wxALL, 2 );
eq_2p_chkbox = new wxCheckBox( panel, Eq2Pass_Event,
wxU(_("2 Pass") ) );
- eq_2p_chkbox->SetToolTip( wxU(_("If you enable this setting, the "
- "equalizer filter will be applied twice. The effect will be sharper.") ) );
+ eq_2p_chkbox->SetToolTip( wxU(_("Apply the equalizer twice. "
+ "The resulting effect will be sharper.") ) );
top_sizer->Add( eq_2p_chkbox, 0, wxALL, 2 );
top_sizer->Add( eq_restoredefaults_button, 0, wxALL, 2 );
top_sizer->Add( 0, 0, 1, wxALL, 2 );
- smooth_text = new wxStaticText( panel, -1, wxU( "Smooth :" ));
- smooth_text->SetToolTip( wxU( SMOOTH_TIP ) );
+ smooth_text = new wxStaticText( panel, -1, wxU( _("Smooth :") ));
+ smooth_text->SetToolTip( wxU( _(SMOOTH_TIP) ) );
top_sizer->Add( smooth_text, 0, wxALL, 2 );
smooth_slider =new wxSlider( panel, Smooth_Event, 0, 0, 10 ,
wxDefaultPosition, wxSize( 100, -1 ) );
- smooth_slider->SetToolTip( wxU( SMOOTH_TIP ) );
+ smooth_slider->SetToolTip( wxU( _(SMOOTH_TIP) ) );
top_sizer->Add( smooth_slider, 0, wxALL, 2 );
i_smooth = 0;
eq_gridsizer->Add( band_sliders[i], 1, wxEXPAND|wxALL, 2 );
}
- preamp_text = new wxStaticText( panel, -1, wxT( "Preamp\n12.0dB" ) );
+ preamp_text = new wxStaticText( panel, -1, wxU( _("Preamp\n12.0dB") ) );
wxFont font= preamp_text->GetFont();
font.SetPointSize(7);
preamp_text->SetFont( font );
aout_instance_t *p_aout = (aout_instance_t *)vlc_object_find(p_intf,
VLC_OBJECT_AOUT, FIND_ANYWHERE);
- char *psz_af = NULL;
+ char *psz_af;
if( p_aout )
{
- psz_af = var_GetString( p_aout, "audio-filter" );
+ psz_af = var_GetNonEmptyString( p_aout, "audio-filter" );
if( var_GetBool( p_aout, "equalizer-2pass" ) )
eq_2p_chkbox->SetValue( true );
- vlc_object_release( p_aout );
+ vlc_object_release( p_aout );
}
else
{
if( config_GetInt( p_intf, "equalizer-2pass" ) )
eq_2p_chkbox->SetValue( true );
}
- if( psz_af != NULL ? strstr( psz_af, "equalizer" ) != NULL : VLC_FALSE )
+ if( psz_af != NULL && strstr( psz_af, "equalizer" ) )
{
eq_chkbox->SetValue( true );
} else {
void ExtraPanel::OnIdle( wxIdleEvent &event )
{
CheckAout();
- if( b_update == VLC_TRUE )
+ if( b_update == true )
{
- if( b_my_update == VLC_TRUE )
+ if( b_my_update == true )
{
- b_update = b_my_update = VLC_FALSE;
+ b_update = b_my_update = false;
return;
}
char *p = psz_bands;
const wxString preamp = wxT("Preamp\n");
preamp_text->SetLabel( preamp + wxU( psz_val ) + wxT( "dB" ) );
eq_chkbox->SetValue( TRUE );
- b_update = VLC_FALSE;
+ b_update = false;
}
}
aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
VLC_OBJECT_AOUT, FIND_ANYWHERE);
ChangeFiltersString( p_intf,p_aout, "equalizer",
- event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+ event.IsChecked() ? true : false );
if( event.IsChecked() )
{
if( p_aout == NULL )
{
vlc_value_t val;
- vlc_bool_t b_previous = eq_chkbox->IsChecked();
+ bool b_previous = eq_chkbox->IsChecked();
val.f_float = 12.0;
IntfPreampCallback( NULL, NULL, val,val, this );
config_PutFloat( p_intf, "equalizer-preamp", 12.0 );
aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
VLC_OBJECT_AOUT, FIND_ANYWHERE);
- vlc_bool_t b_2p = event.IsChecked() ? VLC_TRUE : VLC_FALSE;
+ bool b_2p = event.IsChecked() ? true : false;
if( p_aout == NULL )
{
{
for( int i = 0; i < p_aout->i_nb_inputs; i++ )
{
- p_aout->pp_inputs[i]->b_restart = VLC_TRUE;
+ p_aout->pp_inputs[i]->b_restart = true;
}
}
vlc_object_release( p_aout );
{
var_SetFloat( p_aout, "equalizer-preamp", f );
config_PutFloat( p_intf, "equalizer-preamp", f );
- b_my_update = VLC_TRUE;
+ b_my_update = true;
vlc_object_release( p_aout );
}
}
{
var_SetString( p_aout, "equalizer-bands", psz_values );
config_PutPsz( p_intf, "equalizer-bands", psz_values );
- b_my_update = VLC_TRUE;
+ b_my_update = true;
vlc_object_release( p_aout );
}
}
aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
VLC_OBJECT_AOUT, FIND_ANYWHERE);
ChangeFiltersString( p_intf , p_aout, "headphone_channel_mixer",
- event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+ event.IsChecked() ? true : false );
if( p_aout != NULL )
vlc_object_release( p_aout );
}
aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
VLC_OBJECT_AOUT, FIND_ANYWHERE);
ChangeFiltersString( p_intf , p_aout, "normvol",
- event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+ event.IsChecked() ? true : false );
if( p_aout != NULL )
vlc_object_release( p_aout );
}
void ExtraPanel::OnEnableAdjust(wxCommandEvent& event)
{
ChangeVFiltersString( p_intf, "adjust",
- event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+ event.IsChecked() ? true : false );
if( event.IsChecked() )
{
/* FIXME */
void ExtraPanel::OnRatio( wxCommandEvent& event )
{
- config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str() );
+ config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str(wxConvUTF8) );
}
int i_filter = event.GetId() - Filter0_Event ;
if( vfilters[i_filter].psz_filter )
{
- ChangeVFiltersString( p_intf, vfilters[i_filter].psz_filter ,
- event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+ if( vfilters[i_filter].b_vfilter2 )
+ ChangeVFilters2String( p_intf, vfilters[i_filter].psz_filter ,
+ event.IsChecked() ? true : false );
+ else
+ ChangeVFiltersString( p_intf, vfilters[i_filter].psz_filter ,
+ event.IsChecked() ? true : false );
}
}
void ExtraPanel::OnFiltersInfo(wxCommandEvent& event)
{
- wxMessageBox( wxU( _("Select the video effects filters to apply. "
+ wxMessageBox( wxU( _("Filtering effects to apply to the video. "
"You must restart the stream for these settings to "
- "take effect.\n"
- "To configure the filters, go to the Preferences, "
- "and go to Modules/Video Filters. "
- "You can then configure each filter.\n"
- "If you want fine control over the filters ( to choose "
- "the order in which they are applied ), you need to enter "
- "manually a filters string (Preferences / Video / Filters)."
+ "take effect.\n\n"
+ "To configure these filters, go to Preferences / Video / "
+ "Filters. In order to control the order in which they "
+ "are applied, enter a filters string in the Video Filter "
+ "Module inside the preferences."
) ),
- wxU( _("More information" ) ), wxOK | wxICON_INFORMATION,
+ wxU( _("More Information" ) ), wxOK | wxICON_INFORMATION,
this->p_parent );
}
/**********************************
p_intf->p_sys->p_aout = p_aout;
f_preamp = var_GetFloat( p_aout, "equalizer-preamp" );
- psz_bands = var_GetString( p_aout, "equalizer-bands" );
- b_update = VLC_TRUE;
+ psz_bands = var_GetNonEmptyString( p_aout, "equalizer-bands" );
+ if( psz_bands == NULL )
+ psz_bands = strdup("");
+ b_update = true;
}
vlc_object_release( p_aout );
}
}
-
static void ChangeVFiltersString( intf_thread_t *p_intf,
- char *psz_name, vlc_bool_t b_add )
+ char *psz_name, bool b_add )
{
vout_thread_t *p_vout;
char *psz_parser, *psz_string;
free( psz_string );
}
+static void ChangeVFilters2String( intf_thread_t *p_intf,
+ char *psz_name, bool b_add )
+{
+ vout_thread_t *p_vout;
+ char *psz_parser, *psz_string;
+
+ psz_string = config_GetPsz( p_intf, "video-filter" );
+
+ if( !psz_string ) psz_string = strdup("");
+
+ psz_parser = strstr( psz_string, psz_name );
+
+ if( b_add )
+ {
+ if( !psz_parser )
+ {
+ psz_parser = psz_string;
+ asprintf( &psz_string, (*psz_string) ? "%s:%s" : "%s%s",
+ psz_string, psz_name );
+ free( psz_parser );
+ }
+ else
+ {
+ return;
+ }
+ }
+ else
+ {
+ if( psz_parser )
+ {
+ memmove( psz_parser, psz_parser + strlen(psz_name) +
+ (*(psz_parser + strlen(psz_name)) == ':' ? 1 : 0 ),
+ strlen(psz_parser + strlen(psz_name)) + 1 );
+
+ /* Remove trailing : : */
+ if( *(psz_string+strlen(psz_string ) -1 ) == ':' )
+ {
+ *(psz_string+strlen(psz_string ) -1 ) = '\0';
+ }
+ }
+ else
+ {
+ free( psz_string );
+ return;
+ }
+ }
+ /* Vout is not kept, so put that in the config */
+ config_PutPsz( p_intf, "video-filter", psz_string );
+
+ /* Try to set on the fly */
+ p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
+ FIND_ANYWHERE );
+ if( p_vout )
+ {
+ var_SetString( p_vout, "video-filter", psz_string );
+ vlc_object_release( p_vout );
+ }
+ free( psz_string );
+}
+
static void ChangeFiltersString( intf_thread_t *p_intf,
aout_instance_t * p_aout,
- char *psz_name, vlc_bool_t b_add )
+ char *psz_name, bool b_add )
{
char *psz_parser, *psz_string;
if( p_aout )
{
- psz_string = var_GetString( p_aout, "audio-filter" );
+ psz_string = var_GetNonEmptyString( p_aout, "audio-filter" );
}
else
{
var_SetString( p_aout, "audio-filter", psz_string );
for( int i = 0; i < p_aout->i_nb_inputs; i++ )
{
- p_aout->pp_inputs[i]->b_restart = VLC_TRUE;
+ p_aout->pp_inputs[i]->b_restart = true;
}
}
free( psz_string );
ExtraPanel *p_panel = (ExtraPanel *)param;
p_panel->psz_bands = strdup( newval.psz_string );
- p_panel->b_update = VLC_TRUE;
+ p_panel->b_update = true;
return VLC_SUCCESS;
}
ExtraPanel *p_panel = (ExtraPanel *)param;
p_panel->f_preamp = newval.f_float;
- p_panel->b_update = VLC_TRUE;
+ p_panel->b_update = true;
return VLC_SUCCESS;
}
wxFrame( p_parent, -1, wxU(_("Extended controls")), wxDefaultPosition,
wxDefaultSize, wxDEFAULT_FRAME_STYLE )
{
- fprintf(stderr,"Creating extrawindow\n");
p_intf = _p_intf;
SetIcon( *p_intf->p_sys->p_icon );
wxBoxSizer *window_sizer = new wxBoxSizer( wxVERTICAL );
SetSizer( window_sizer );
-// panel = new ExtraPanel( p_intf, this );//_extra_panel;
panel = _extra_panel;
window_sizer->Add( panel );