Changeset e1aabc8fe10fe18d159c32ac2fb34d3744744927

Show
Ignore:
Timestamp:
04/08/03 01:11:21 (5 years ago)
Author:
Gildas Bazin <gbazin@videolan.org>
git-committer:
Gildas Bazin <gbazin@videolan.org> 1059952281 +0000
git-parent:

[5a4904ce73768361bf61a6ddc863c6fc396e90d1]

git-author:
Gildas Bazin <gbazin@videolan.org> 1059952281 +0000
Message:

* src/misc/configuration.c, include/configuration.h, src/audio_output/intf.c, include/audio_output.h, modules/gui/gtk/display.[ch]: configuration variables now use vlc_callback_t callbacks (same as the object variables).
* modules/video_output/x11/*: support for the _NET_WM_STATE_FULLSCREEN hint from the Extended Window Manager Hints spec.
* modules/audio_output/alsa.c: support for 4.0 and 5.1 audio channels. This time it has been tested ;)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • include/audio_output.h

    r30336bb re1aabc8  
    33 ***************************************************************************** 
    44 * Copyright (C) 2002 VideoLAN 
    5  * $Id: audio_output.h,v 1.80 2003/05/04 22:42:14 gbazin Exp $ 
     5 * $Id: audio_output.h,v 1.81 2003/08/03 23:11:21 gbazin Exp $ 
    66 * 
    77 * Authors: Christophe Massiot <massiot@via.ecp.fr> 
     
    205205VLC_EXPORT( int, __aout_VolumeMute, ( vlc_object_t *, audio_volume_t * ) ); 
    206206VLC_EXPORT( int, aout_Restart, ( aout_instance_t * p_aout ) ); 
    207 VLC_EXPORT( void, aout_FindAndRestart, ( vlc_object_t * p_this ) ); 
     207VLC_EXPORT( int, aout_FindAndRestart, ( vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void * ) ); 
    208208VLC_EXPORT( int, aout_ChannelsRestart, ( vlc_object_t *, const char *, vlc_value_t, vlc_value_t, void * ) ); 
    209209 
  • include/configuration.h

    reb505a2 re1aabc8  
    55 ***************************************************************************** 
    66 * Copyright (C) 1999, 2000 VideoLAN 
    7  * $Id: configuration.h,v 1.28 2003/07/23 01:13:47 gbazin Exp $ 
     7 * $Id: configuration.h,v 1.29 2003/08/03 23:11:21 gbazin Exp $ 
    88 * 
    99 * Authors: Gildas Bazin <gbazin@netcourrier.com> 
     
    6565 
    6666    /* Function to call when commiting a change */ 
    67     void ( * pf_callback ) ( vlc_object_t * ); 
     67    vlc_callback_t pf_callback; 
     68    void          *p_callback_data; 
    6869 
    6970    char       **ppsz_list;        /* List of possible values for the option */ 
  • modules/audio_output/alsa.c

    r1ec7da4 re1aabc8  
    33 ***************************************************************************** 
    44 * Copyright (C) 2000-2001 VideoLAN 
    5  * $Id: alsa.c,v 1.33 2003/07/27 16:20:53 gbazin Exp $ 
     5 * $Id: alsa.c,v 1.34 2003/08/03 23:11:21 gbazin Exp $ 
    66 * 
    77 * Authors: Henri Fallon <henri@videolan.org> - Original Author 
     
    7373   2 for s16). */ 
    7474#define ALSA_DEFAULT_PERIOD_SIZE        1024 
    75 #define ALSA_DEFAULT_BUFFER_SIZE        ( ALSA_DEFAULT_PERIOD_SIZE << 4
     75#define ALSA_DEFAULT_BUFFER_SIZE        ( ALSA_DEFAULT_PERIOD_SIZE << 8
    7676#define ALSA_SPDIF_PERIOD_SIZE          A52_FRAME_NB 
    7777#define ALSA_SPDIF_BUFFER_SIZE          ( ALSA_SPDIF_PERIOD_SIZE << 4 ) 
     
    108108static void Probe( aout_instance_t * p_aout, 
    109109                   const char * psz_device, const char * psz_iec_device, 
    110                    int i_snd_pcm_format ) 
     110                   int *pi_snd_pcm_format ) 
    111111{ 
    112112    struct aout_sys_t * p_sys = p_aout->output.p_sys; 
     
    141141 
    142142        if ( snd_pcm_hw_params_set_format( p_sys->p_snd_pcm, p_hw, 
    143                                            i_snd_pcm_format ) < 0 ) 
    144         { 
    145             /* Assume a FPU enabled computer can handle float32 format. 
    146                If somebody tells us it's not always true then we'll have 
    147                to change this */ 
    148             msg_Warn( p_aout, "unable to set stream sample size and word order" 
    149                               ", disabling linear PCM audio" ); 
    150             snd_pcm_close( p_sys->p_snd_pcm ); 
    151             var_Destroy( p_aout, "audio-device" ); 
    152             return; 
     143                                           *pi_snd_pcm_format ) < 0 ) 
     144        { 
     145            if( *pi_snd_pcm_format != SND_PCM_FORMAT_S16 ) 
     146            { 
     147                *pi_snd_pcm_format = SND_PCM_FORMAT_S16; 
     148                if ( snd_pcm_hw_params_set_format( p_sys->p_snd_pcm, p_hw, 
     149                                                   *pi_snd_pcm_format ) < 0 ) 
     150                { 
     151                    msg_Warn( p_aout, "unable to set stream sample size and " 
     152                              "word order, disabling linear PCM audio" ); 
     153                    snd_pcm_close( p_sys->p_snd_pcm ); 
     154                    var_Destroy( p_aout, "audio-device" ); 
     155                    return; 
     156                } 
     157            } 
    153158        } 
    154159 
     
    157162        while ( i_channels > 0 ) 
    158163        { 
    159             /* Here we have to probe multi-channel capabilities but I have 
    160                no idea (at the moment) of how its managed by the ALSA 
    161                library. 
    162                It seems that '6' channels aren't well handled on a stereo 
    163                sound card like my i810 but it requires some more 
    164                investigations. That's why '4' and '6' cases are disabled. 
    165                -- Bozo */ 
    166164            if ( !snd_pcm_hw_params_test_channels( p_sys->p_snd_pcm, p_hw, 
    167165                                                   i_channels ) ) 
     
    340338    if ( var_Type( p_aout, "audio-device" ) == 0 ) 
    341339    { 
    342         Probe( p_aout, psz_device, psz_iec_device, i_snd_pcm_format ); 
     340        Probe( p_aout, psz_device, psz_iec_device, &i_snd_pcm_format ); 
     341        switch( i_snd_pcm_format ) 
     342        { 
     343        case SND_PCM_FORMAT_FLOAT: 
     344            i_vlc_pcm_format = VLC_FOURCC('f','l','3','2'); 
     345            break; 
     346        case SND_PCM_FORMAT_S16: 
     347            i_vlc_pcm_format = AOUT_FMT_S16_NE; 
     348            break; 
     349        } 
    343350    } 
    344351 
     
    361368               | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT 
    362369               | AOUT_CHAN_LFE; 
     370        free( psz_device ); 
     371        psz_device = strdup( "surround51" ); 
    363372    } 
    364373    else if ( val.i_int == AOUT_VAR_2F2R ) 
     
    368377            = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT 
    369378               | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT; 
     379        free( psz_device ); 
     380        psz_device = strdup( "surround40" ); 
    370381    } 
    371382    else if ( val.i_int == AOUT_VAR_STEREO ) 
     
    417428    else 
    418429    { 
     430        msg_Dbg( p_aout, "opening ALSA device `%s'", psz_device ); 
     431 
    419432        if ( ( i_snd_rc = snd_pcm_open( &p_sys->p_snd_pcm, psz_device, 
    420433                            SND_PCM_STREAM_PLAYBACK, 0 ) ) < 0 ) 
  • modules/gui/gtk/display.c

    rcf3c980 re1aabc8  
    33 ***************************************************************************** 
    44 * Copyright (C) 1999, 2000 VideoLAN 
    5  * $Id: display.c,v 1.10 2003/05/05 16:09:39 gbazin Exp $ 
     5 * $Id: display.c,v 1.11 2003/08/03 23:11:21 gbazin Exp $ 
    66 * 
    77 * Authors: Samuel Hocevar <sam@zoy.org> 
     
    216216 *                  option gnome-tooltips 
    217217 *****************************************************************************/ 
    218 void E_(GtkHideTooltips)( vlc_object_t *p_this ) 
     218int E_(GtkHideTooltips)( vlc_object_t *p_this, const char *psz_name, 
     219                         vlc_value_t oldval, vlc_value_t val, void *p_data ) 
    219220{ 
    220221    intf_thread_t *p_intf; 
     
    245246 
    246247    vlc_list_release( p_list ); 
     248    return VLC_SUCCESS; 
    247249} 
    248250 
     
    254256 * FIXME: GNOME only because of missing icons in gtk interface 
    255257 *****************************************************************************/ 
    256 void GtkHideToolbarText( vlc_object_t *p_this ) 
     258int GtkHideToolbarText( vlc_object_t *p_this, const char *psz_name, 
     259                        vlc_value_t oldval, vlc_value_t val, void *p_data ) 
    257260{ 
    258261    GtkToolbarStyle style; 
     
    282285 
    283286    vlc_list_release( p_list ); 
     287    return VLC_SUCCESS; 
    284288} 
    285289#endif 
  • modules/gui/gtk/display.h

    r2799d36 re1aabc8  
    33 ***************************************************************************** 
    44 * Copyright (C) 1999, 2000 VideoLAN 
    5  * $Id: display.h,v 1.2 2002/09/30 11:05:39 sam Exp $ 
     5 * $Id: display.h,v 1.3 2003/08/03 23:11:21 gbazin Exp $ 
    66 * 
    77 * Authors: Samuel Hocevar <sam@zoy.org> 
     
    2929gint E_(GtkModeManage)      ( intf_thread_t * p_intf ); 
    3030void E_(GtkDisplayDate)     ( GtkAdjustment *p_adj ); 
    31 void E_(GtkHideTooltips)    ( vlc_object_t * ); 
    32 void    GtkHideToolbarText  ( vlc_object_t * ); 
     31int  E_(GtkHideTooltips)    ( vlc_object_t *, const char *, 
     32                              vlc_value_t, vlc_value_t, void * ); 
     33int  GtkHideToolbarText     ( vlc_object_t *, const char *, 
     34                              vlc_value_t, vlc_value_t, void * ); 
    3335 
  • modules/video_output/x11/xcommon.c

    rda86628 re1aabc8  
    33 ***************************************************************************** 
    44 * Copyright (C) 1998-2001 VideoLAN 
    5  * $Id: xcommon.c,v 1.27 2003/08/02 14:06:22 gbazin Exp $ 
     5 * $Id: xcommon.c,v 1.28 2003/08/03 23:11:21 gbazin Exp $ 
    66 * 
    77 * Authors: Vincent Seguin <seguin@via.ecp.fr> 
     
    118118#endif 
    119119 
     120static void TestNetWMSupport( vout_thread_t * ); 
     121 
    120122/***************************************************************************** 
    121123 * Activate: allocate X11 video thread output method 
     
    269271    p_vout->p_sys->b_altfullscreen = 0; 
    270272    p_vout->p_sys->i_time_button_last_pressed = 0; 
     273 
     274    TestNetWMSupport( p_vout ); 
    271275 
    272276    return VLC_SUCCESS; 
     
    14541458                                     CWOverrideRedirect, 
    14551459                                     &attributes); 
    1456         } 
    1457  
    1458         /* Make sure the change is effective */ 
    1459         XReparentWindow( p_vout->p_sys->p_display, 
    1460                          p_vout->p_sys->p_win->base_window, 
    1461                          DefaultRootWindow( p_vout->p_sys->p_display ), 
    1462                          0, 0 ); 
     1460 
     1461            /* Make sure the change is effective */ 
     1462            XReparentWindow( p_vout->p_sys->p_display, 
     1463                             p_vout->p_sys->p_win->base_window, 
     1464                             DefaultRootWindow( p_vout->p_sys->p_display ), 
     1465                             0, 0 ); 
     1466        } 
     1467 
     1468        if( p_vout->p_sys->b_net_wm_state_fullscreen ) 
     1469        { 
     1470            XClientMessageEvent event; 
     1471 
     1472            memset( &event, 0, sizeof( XClientMessageEvent ) ); 
     1473 
     1474            event.type = ClientMessage; 
     1475            event.message_type = p_vout->p_sys->net_wm_state; 
     1476            event.display = p_vout->p_sys->p_display; 
     1477            event.window = p_vout->p_sys->p_win->base_window; 
     1478            event.format = 32; 
     1479            event.data.l[ 0 ] = 1; /* set property */ 
     1480            event.data.l[ 1 ] = p_vout->p_sys->net_wm_state_fullscreen; 
     1481 
     1482            XSendEvent( p_vout->p_sys->p_display, 
     1483                        DefaultRootWindow( p_vout->p_sys->p_display ), 
     1484                        False, SubstructureRedirectMask, 
     1485                        (XEvent*)&event ); 
     1486        } 
     1487        else 
     1488        { 
     1489            /* Make sure the change is effective */ 
     1490            XReparentWindow( p_vout->p_sys->p_display, 
     1491                             p_vout->p_sys->p_win->base_window, 
     1492                             DefaultRootWindow( p_vout->p_sys->p_display ), 
     1493                             0, 0 ); 
     1494        } 
    14631495 
    14641496        /* fullscreen window size and position */ 
     
    21982230} 
    21992231#endif 
     2232 
     2233/***************************************************************************** 
     2234 * TestNetWMSupport: tests for Extended Window Manager Hints support 
     2235 *****************************************************************************/ 
     2236static void TestNetWMSupport( vout_thread_t *p_vout ) 
     2237{ 
     2238    int i_ret, i_format; 
     2239    unsigned long i, i_items, i_bytesafter; 
     2240    Atom net_wm_supported, *p_args = NULL; 
     2241 
     2242    p_vout->p_sys->b_net_wm_state_fullscreen = VLC_FALSE; 
     2243    p_vout->p_sys->b_net_wm_state_above = VLC_FALSE; 
     2244    p_vout->p_sys->b_net_wm_state_below = VLC_FALSE; 
     2245    p_vout->p_sys->b_net_wm_state_stays_on_top = VLC_FALSE; 
     2246 
     2247    net_wm_supported = 
     2248        XInternAtom( p_vout->p_sys->p_display, "_NET_SUPPORTED", False ); 
     2249 
     2250    i_ret = XGetWindowProperty( p_vout->p_sys->p_display, 
     2251                                DefaultRootWindow( p_vout->p_sys->p_display ), 
     2252                                net_wm_supported, 
     2253                                0, 16384, False, AnyPropertyType, 
     2254                                &net_wm_supported, 
     2255                                &i_format, &i_items, &i_bytesafter, 
     2256                                (unsigned char **)&p_args ); 
     2257 
     2258    if( i_ret != Success || i_items == 0 ) return; 
     2259 
     2260    msg_Dbg( p_vout, "Window manager supports NetWM" ); 
     2261 
     2262    p_vout->p_sys->net_wm_state = 
     2263        XInternAtom( p_vout->p_sys->p_display, "_NET_WM_STATE", False ); 
     2264    p_vout->p_sys->net_wm_state_fullscreen = 
     2265        XInternAtom( p_vout->p_sys->p_display, "_NET_WM_STATE_FULLSCREEN", 
     2266                     False ); 
     2267    p_vout->p_sys->net_wm_state_above = 
     2268        XInternAtom( p_vout->p_sys->p_display, "_NET_WM_STATE_ABOVE", False ); 
     2269    p_vout->p_sys->net_wm_state_below = 
     2270        XInternAtom( p_vout->p_sys->p_display, "_NET_WM_STATE_BELOW", False ); 
     2271    p_vout->p_sys->net_wm_state_stays_on_top = 
     2272        XInternAtom( p_vout->p_sys->p_display, "_NET_WM_STATE_STAYS_ON_TOP", 
     2273                     False ); 
     2274 
     2275    for( i = 0; i < i_items; i++ ) 
     2276    { 
     2277        if( p_args[i] == p_vout->p_sys->net_wm_state_fullscreen ) 
     2278        { 
     2279            msg_Dbg( p_vout, 
     2280                     "Window manager supports _NET_WM_STATE_FULLSCREEN" ); 
     2281            p_vout->p_sys->b_net_wm_state_fullscreen = VLC_TRUE; 
     2282        } 
     2283        else if( p_args[i] == p_vout->p_sys->net_wm_state_above ) 
     2284        { 
     2285            msg_Dbg( p_vout, "Window manager supports _NET_WM_STATE_ABOVE" ); 
     2286            p_vout->p_sys->b_net_wm_state_above = VLC_TRUE; 
     2287        } 
     2288        else if( p_args[i] == p_vout->p_sys->net_wm_state_below ) 
     2289        { 
     2290            msg_Dbg( p_vout, "Window manager supports _NET_WM_STATE_BELOW" ); 
     2291            p_vout->p_sys->b_net_wm_state_below = VLC_TRUE; 
     2292        } 
     2293        else if( p_args[i] == p_vout->p_sys->net_wm_state_stays_on_top ) 
     2294        { 
     2295            msg_Dbg( p_vout, 
     2296                     "Window manager supports _NET_WM_STATE_STAYS_ON_TOP" ); 
     2297            p_vout->p_sys->b_net_wm_state_stays_on_top = VLC_TRUE; 
     2298        } 
     2299    } 
     2300 
     2301    XFree( p_args ); 
     2302} 
  • modules/video_output/x11/xcommon.h

    r2b5d294 re1aabc8  
    33 ***************************************************************************** 
    44 * Copyright (C) 1998-2001 VideoLAN 
    5  * $Id: xcommon.h,v 1.7 2003/07/29 09:32:14 sam Exp $ 
     5 * $Id: xcommon.h,v 1.8 2003/08/03 23:11:21 gbazin Exp $ 
    66 * 
    77 * Authors: Vincent Seguin <seguin@via.ecp.fr> 
     
    129129    mtime_t             i_time_button_last_pressed;   /* to track dbl-clicks */ 
    130130    Pixmap              cursor_pixmap; 
     131 
     132    /* Window manager properties */ 
     133    Atom                net_wm_state; 
     134    Atom                net_wm_state_fullscreen; 
     135    vlc_bool_t          b_net_wm_state_fullscreen; 
     136    Atom                net_wm_state_above; 
     137    vlc_bool_t          b_net_wm_state_above; 
     138    Atom                net_wm_state_stays_on_top; 
     139    vlc_bool_t          b_net_wm_state_stays_on_top; 
     140    Atom                net_wm_state_below; 
     141    vlc_bool_t          b_net_wm_state_below; 
    131142}; 
    132143 
  • src/audio_output/intf.c

    re27abe7 re1aabc8  
    33 ***************************************************************************** 
    44 * Copyright (C) 2002 VideoLAN 
    5  * $Id: intf.c,v 1.17 2003/02/12 14:22:23 hartman Exp $ 
     5 * $Id: intf.c,v 1.18 2003/08/03 23:11:21 gbazin Exp $ 
    66 * 
    77 * Authors: Christophe Massiot <massiot@via.ecp.fr> 
     
    386386 * rebuilding the audio-device and audio-channels variables. 
    387387 *****************************************************************************/ 
    388 void aout_FindAndRestart( vlc_object_t * p_this ) 
     388int aout_FindAndRestart( vlc_object_t * p_this, const char *psz_name, 
     389                         vlc_value_t oldval, vlc_value_t val, void *p_data ) 
    389390{ 
    390391    aout_instance_t * p_aout = vlc_object_find( p_this, VLC_OBJECT_AOUT, 
    391392                                                FIND_ANYWHERE ); 
    392393 
    393     if ( p_aout == NULL ) return
     394    if ( p_aout == NULL ) return VLC_SUCCESS
    394395 
    395396    if ( var_Type( p_aout, "audio-device" ) != 0 ) 
     
    404405    aout_Restart( p_aout ); 
    405406    vlc_object_release( p_aout ); 
     407 
     408    return VLC_SUCCESS; 
    406409} 
    407410 
  • src/misc/configuration.c

    reb505a2 re1aabc8  
    33 ***************************************************************************** 
    44 * Copyright (C) 2001 VideoLAN 
    5  * $Id: configuration.c,v 1.60 2003/07/23 01:13:48 gbazin Exp $ 
     5 * $Id: configuration.c,v 1.61 2003/08/03 23:11:21 gbazin Exp $ 
    66 * 
    77 * Authors: Gildas Bazin <gbazin@netcourrier.com> 
     
    219219{ 
    220220    module_config_t *p_config; 
     221    vlc_value_t oldval, val; 
    221222 
    222223    p_config = config_FindConfig( p_this, psz_name ); 
     
    239240    vlc_mutex_lock( p_config->p_lock ); 
    240241 
    241     /* free old string */ 
    242     if( p_config->psz_value ) free( p_config->psz_value )
     242    /* backup old value */ 
     243    oldval.psz_string = p_config->psz_value
    243244 
    244245    if( psz_value && *psz_value ) p_config->psz_value = strdup( psz_value ); 
    245246    else p_config->psz_value = NULL; 
    246247 
     248    val.psz_string = p_config->psz_value; 
     249 
    247250    vlc_mutex_unlock( p_config->p_lock ); 
    248251 
    249252    if( p_config->pf_callback ) 
    250253    { 
    251         p_config->pf_callback( p_this ); 
    252     } 
     254        p_config->pf_callback( p_this, psz_name, oldval, val, 
     255                               p_config->p_callback_data ); 
     256    } 
     257 
     258    /* free old string */ 
     259    if( oldval.psz_string ) free( oldval.psz_string ); 
    253260} 
    254261 
     
    263270{ 
    264271    module_config_t *p_config; 
     272    vlc_value_t oldval, val; 
    265273 
    266274    p_config = config_FindConfig( p_this, psz_name ); 
     
    279287    } 
    280288 
     289    /* backup old value */ 
     290    oldval.i_int = p_config->i_value; 
     291 
    281292    /* if i_min == i_max == 0, then do not use them */ 
    282293    if ((p_config->i_min == 0) && (p_config->i_max == 0)) 
     
    297308    } 
    298309 
     310    val.i_int = p_config->i_value; 
     311 
    299312    if( p_config->pf_callback ) 
    300313    { 
    301         p_config->pf_callback( p_this ); 
     314        p_config->pf_callback( p_this, psz_name, oldval, val, 
     315                               p_config->p_callback_data ); 
    302316    } 
    303317} 
     
    313327{ 
    314328    module_config_t *p_config; 
     329    vlc_value_t oldval, val; 
    315330 
    316331    p_config = config_FindConfig( p_this, psz_name ); 
     
    328343    } 
    329344 
     345    /* backup old value */ 
     346    oldval.f_float = p_config->f_value; 
     347 
    330348    /* if f_min == f_max == 0, then do not use them */ 
    331349    if ((p_config->f_min == 0) && (p_config->f_max == 0)) 
     
    346364    } 
    347365 
     366    val.f_float = p_config->f_value; 
     367 
    348368    if( p_config->pf_callback ) 
    349369    { 
    350         p_config->pf_callback( p_this ); 
     370        p_config->pf_callback( p_this, psz_name, oldval, val, 
     371                               p_config->p_callback_data ); 
    351372    } 
    352373}