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

📄 menu.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 4 页
字号:
    var_Change( p_object, psz_variable, VLC_VAR_FREELIST,                &val_list, &text_list );    return TRUE;}/***************************************************************************** * GtkDeinterlaceMenus: update interactive menus of the interface ***************************************************************************** *****************************************************************************/static gint GtkDeinterlaceMenus( gpointer          p_data,                                 GtkWidget *       p_root,                                 void(*pf_toggle )( GtkCheckMenuItem *, gpointer ) ){    intf_thread_t *     p_intf;    GtkWidget *         p_menu;    GtkWidget *         p_separator;    GtkWidget *         p_item;    GtkWidget *         p_item_active;    GSList *            p_group;    guint               i_item;    guint               i;    char                *ppsz_deinterlace_mode[] = { "discard", "blend", "mean", "bob", "linear", NULL };    char                *psz_deinterlace_option;    char                *psz_filter;    p_intf = (intf_thread_t *)p_data;    /* temporary hack to avoid blank menu when an open menu is removed */    if( GTK_MENU_ITEM(p_root)->submenu != NULL )    {        gtk_menu_popdown( GTK_MENU( GTK_MENU_ITEM(p_root)->submenu ) );    }    /* removes previous menu */    gtk_menu_item_remove_submenu( GTK_MENU_ITEM( p_root ) );    gtk_widget_set_sensitive( p_root, FALSE );    p_group = NULL;    /* menu container */    p_menu = gtk_menu_new();    gtk_object_set_data( GTK_OBJECT( p_menu ), "p_intf", p_intf );    /* special case for "off" item */    p_item = gtk_radio_menu_item_new_with_label( p_group, "None" );    p_group = gtk_radio_menu_item_group( GTK_RADIO_MENU_ITEM( p_item ) );    gtk_widget_show( p_item );    /* signal hanling for off */    gtk_signal_connect( GTK_OBJECT( p_item ), "toggled",                        GTK_SIGNAL_FUNC ( pf_toggle ), NULL );    gtk_menu_append( GTK_MENU( p_menu ), p_item );    p_separator = gtk_menu_item_new();    gtk_widget_set_sensitive( p_separator, FALSE );    gtk_widget_show( p_separator );    gtk_menu_append( GTK_MENU( p_menu ), p_separator );    /* search actual deinterlace mode */    psz_filter = config_GetPsz( p_intf, "filter" );    psz_deinterlace_option = strdup( "None" );    if( psz_filter && *psz_filter )    {       if( strstr ( psz_filter, "deinterlace" ) )       {            vlc_value_t val;            vout_thread_t *p_vout;            p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT,                                      FIND_ANYWHERE );            if( p_vout &&                var_Get( p_vout, "deinterlace-mode", &val ) == VLC_SUCCESS )            {                if( val.psz_string && *val.psz_string )                {                    free( psz_deinterlace_option );                    psz_deinterlace_option = val.psz_string;                }                else if( val.psz_string ) free( val.psz_string );            }            if( p_vout ) vlc_object_release( p_vout );       }    }    if( psz_filter )        free( psz_filter );    p_item_active = NULL;    i_item = 0;    /* create a set of deinteralce buttons and append them to the container */    for( i = 0; ppsz_deinterlace_mode[i] != NULL; i++ )    {        i_item++;        p_item = gtk_radio_menu_item_new_with_label( p_group, ppsz_deinterlace_mode[i] );        p_group = gtk_radio_menu_item_group( GTK_RADIO_MENU_ITEM( p_item ) );        gtk_widget_show( p_item );        if( !strcmp( ppsz_deinterlace_mode[i], psz_deinterlace_option ) )        {            p_item_active = p_item;        }        /* setup signal hanling */        gtk_signal_connect( GTK_OBJECT( p_item ), "toggled",                            GTK_SIGNAL_FUNC( pf_toggle ),                            NULL );        gtk_menu_append( GTK_MENU( p_menu ), p_item );    }    /* link the new menu to the menubar item */    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_root ), p_menu );    /* acitvation will call signals so we can only do it     * when submenu is attached to menu - to get intf_window     * We have to release the lock since input_ToggleES needs it */    if( p_item_active != NULL )    {        gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_item_active ),                                        TRUE );    }    /* be sure that menu is sensitive if non empty */    if( i_item > 0 )    {        gtk_widget_set_sensitive( p_root, TRUE );    }    return TRUE;}/***************************************************************************** * GtkSetupMenus: function that generates title/chapter/audio/subpic * menus with help from preceding functions ***************************************************************************** * Function called with the lock on stream *****************************************************************************/gint GtkSetupMenus( intf_thread_t * p_intf ){    es_descriptor_t *   p_audio_es;    es_descriptor_t *   p_spu_es;    GtkWidget *         p_menubar_menu;    GtkWidget *         p_popup_menu;    guint               i;    p_intf->p_sys->b_chapter_update |= p_intf->p_sys->b_title_update;    p_intf->p_sys->b_audio_update |= p_intf->p_sys->b_title_update |                                     p_intf->p_sys->b_program_update;    p_intf->p_sys->b_spu_update |= p_intf->p_sys->b_title_update |                                   p_intf->p_sys->b_program_update;    if( 1 )    {        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                                     p_intf->p_sys->p_window ), "menubar_deinterlace" ) );        p_popup_menu   = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                                     p_intf->p_sys->p_popup ), "popup_deinterlace" ) );        p_intf->p_sys->b_deinterlace_update = VLC_TRUE;        GtkDeinterlaceMenus( p_intf, p_menubar_menu, GtkMenubarDeinterlaceToggle );        p_intf->p_sys->b_deinterlace_update = VLC_TRUE;        GtkDeinterlaceMenus( p_intf, p_popup_menu, GtkPopupDeinterlaceToggle );        p_intf->p_sys->b_deinterlace_update = VLC_FALSE;    }    if( p_intf->p_sys->b_program_update )    {        pgrm_descriptor_t * p_pgrm;        if( p_intf->p_sys->p_input->stream.p_new_program )        {            p_pgrm = p_intf->p_sys->p_input->stream.p_new_program;        }        else        {            p_pgrm = p_intf->p_sys->p_input->stream.p_selected_program;        }        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                            p_intf->p_sys->p_window ), "menubar_program" ) );        GtkProgramMenu( p_intf, p_menubar_menu, p_pgrm,                        GtkMenubarProgramToggle );        p_intf->p_sys->b_program_update = VLC_TRUE;        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                            p_intf->p_sys->p_popup ), "popup_program" ) );        GtkProgramMenu( p_intf, p_popup_menu, p_pgrm,                        GtkPopupProgramToggle );        p_intf->p_sys->b_program_update = VLC_FALSE;    }    if( p_intf->p_sys->b_title_update )    {        char            psz_title[5];        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                            p_intf->p_sys->p_window ), "menubar_title" ) );        GtkRadioMenu( p_intf, p_menubar_menu, NULL, _("Title"), 1,                      p_intf->p_sys->p_input->stream.i_area_nb - 1,                      p_intf->p_sys->p_input->stream.p_selected_area->i_id,                      GtkMenubarTitleToggle );        snprintf( psz_title, 4, "%d",                  p_intf->p_sys->p_input->stream.p_selected_area->i_id );        psz_title[ 4 ] = '\0';        gtk_label_set_text( p_intf->p_sys->p_label_title, psz_title );        p_intf->p_sys->b_title_update = VLC_FALSE;    }    if( p_intf->p_sys->b_chapter_update )    {        char            psz_chapter[5];        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                             p_intf->p_sys->p_popup ), "popup_navigation" ) );        GtkTitleMenu( p_intf, p_popup_menu, GtkPopupNavigationToggle );#if 0        GtkRadioMenu( p_intf, p_menubar_menu, NULL, _("Title"), 1,                        p_intf->p_sys->p_input->stream.i_area_nb - 1,                        p_intf->p_sys->p_input->stream.p_selected_area->i_id,                        on_menubar_chapter_toggle );#endif        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                             p_intf->p_sys->p_window ), "menubar_chapter" ) );        GtkRadioMenu( p_intf, p_menubar_menu, NULL, _("Chapter"), 1,                        p_intf->p_sys->p_input->stream.p_selected_area->i_part_nb - 1,                        p_intf->p_sys->p_input->stream.p_selected_area->i_part,                        GtkMenubarChapterToggle );        snprintf( psz_chapter, 4, "%d",                  p_intf->p_sys->p_input->stream.p_selected_area->i_part );        psz_chapter[ 4 ] = '\0';        gtk_label_set_text( p_intf->p_sys->p_label_chapter, psz_chapter );        p_intf->p_sys->i_part =                p_intf->p_sys->p_input->stream.p_selected_area->i_part;        p_intf->p_sys->b_chapter_update = VLC_FALSE;    }    /* look for selected ES */    p_audio_es = NULL;    p_spu_es = NULL;    for( i = 0 ; i < p_intf->p_sys->p_input->stream.i_selected_es_number ; i++ )    {        if( p_intf->p_sys->p_input->stream.pp_selected_es[i]->i_cat == AUDIO_ES )        {            p_audio_es = p_intf->p_sys->p_input->stream.pp_selected_es[i];        }        if( p_intf->p_sys->p_input->stream.pp_selected_es[i]->i_cat == SPU_ES )        {            p_spu_es = p_intf->p_sys->p_input->stream.pp_selected_es[i];        }    }    vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock );    /* audio menus */    if( p_intf->p_sys->b_audio_update )    {        /* find audio root menu */        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                             p_intf->p_sys->p_window ), "menubar_audio" ) );        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                     p_intf->p_sys->p_popup ), "popup_language" ) );        p_intf->p_sys->b_audio_update = VLC_TRUE;        GtkLanguageMenus( p_intf, p_menubar_menu, p_audio_es, AUDIO_ES,                            GtkMenubarAudioToggle );        p_intf->p_sys->b_audio_update = VLC_TRUE;        GtkLanguageMenus( p_intf, p_popup_menu, p_audio_es, AUDIO_ES,                            GtkPopupAudioToggle );        p_intf->p_sys->b_audio_update = VLC_FALSE;    }    /* sub picture menus */    if( p_intf->p_sys->b_spu_update )    {        /* find spu root menu */        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                          p_intf->p_sys->p_window ), "menubar_subpictures" ) );        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                     p_intf->p_sys->p_popup ), "popup_subpictures" ) );        p_intf->p_sys->b_spu_update = VLC_TRUE;        GtkLanguageMenus( p_intf, p_menubar_menu, p_spu_es, SPU_ES,                            GtkMenubarSubtitleToggle  );        p_intf->p_sys->b_spu_update = VLC_TRUE;        GtkLanguageMenus( p_intf, p_popup_menu, p_spu_es, SPU_ES,                            GtkPopupSubtitleToggle );        p_intf->p_sys->b_spu_update = VLC_FALSE;    }    /* create audio channels and device menu (in menubar _and_ popup */    if( p_intf->p_sys->b_aout_update )    {        aout_instance_t *p_aout;        p_aout = (aout_instance_t*)vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE );        if( p_aout != NULL )        {            vlc_value_t val;            val.b_bool = VLC_FALSE;            var_Set( (vlc_object_t *)p_aout, "intf-change", val );            /* audio-channels */            p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                              p_intf->p_sys->p_window ), "menubar_audio_channels" ) );            p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                         p_intf->p_sys->p_popup ), "popup_audio_channels" ) );            GtkSetupVarMenu( p_intf, (vlc_object_t *)p_aout, p_popup_menu,                              "audio-channels",  GtkPopupAoutChannelsToggle );            GtkSetupVarMenu( p_intf, (vlc_object_t *)p_aout, p_menubar_menu,                              "audio-channels",  GtkPopupAoutChannelsToggle );            /* audio-device */            p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                              p_intf->p_sys->p_window ), "menubar_audio_device" ) );            p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                         p_intf->p_sys->p_popup ), "popup_audio_device" ) );            GtkSetupVarMenu( p_intf, (vlc_object_t *)p_aout, p_popup_menu,                              "audio-device",  GtkPopupAoutDeviceToggle );            GtkSetupVarMenu( p_intf, (vlc_object_t *)p_aout, p_menubar_menu,                              "audio-device",  GtkPopupAoutDeviceToggle );            vlc_object_release( (vlc_object_t *)p_aout );        }        p_intf->p_sys->b_aout_update = VLC_FALSE;    }    if( p_intf->p_sys->b_vout_update )    {        vout_thread_t *p_vout;        p_vout = (vout_thread_t*)vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE );        if( p_vout != NULL )        {            vlc_value_t val;            val.b_bool = VLC_FALSE;            var_Set( (vlc_object_t *)p_vout, "intf-change", val );            /* video-device */            p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                              p_intf->p_sys->p_window ), "menubar_video_device" ) );            p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(                         p_intf->p_sys->p_popup ), "popup_video_device" ) );            GtkSetupVarMenu( p_intf, (vlc_object_t *)p_vout, p_popup_menu,                              "video-device",  GtkPopupVoutDeviceToggle );            GtkSetupVarMenu( p_intf, (vlc_object_t *)p_vout, p_menubar_menu,                              "video-device",  GtkPopupVoutDeviceToggle );            vlc_object_release( (vlc_object_t *)p_vout );        }        p_intf->p_sys->b_vout_update = VLC_FALSE;    }    vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock );    return TRUE;}

⌨️ 快捷键说明

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