int select_audio(demuxer_t* demuxer, int audio_id, char* audio_lang) { if (audio_id == -1 && audio_lang) audio_id = demuxer_audio_track_by_lang(demuxer, audio_lang); if (audio_id == -1) audio_id = demuxer_default_audio_track(demuxer); if (audio_id != -1) // -1 (automatic) is the default behaviour of demuxers demuxer_switch_audio(demuxer, audio_id); if (audio_id == -2) { // some demuxers don't yet know how to switch to no sound demuxer->audio->id = -2; demuxer->audio->sh = NULL; } return demuxer->audio->id; }
GtkWidget * create_PopUpMenu( void ) { GtkWidget * window1; GtkWidget * Menu = NULL; GtkWidget * SubMenu = NULL; GtkWidget * MenuItem = NULL; GtkWidget * H, * N, * D, * F; demuxer_t *demuxer = mpctx_get_demuxer(guiInfo.mpcontext); mixer_t *mixer = mpctx_get_mixer(guiInfo.mpcontext); int global_sub_size = mpctx_get_global_sub_size(guiInfo.mpcontext); Menu=gtk_menu_new(); gtk_widget_realize (Menu); window1 = gtk_widget_get_toplevel(Menu); AddMenuItem( window1, (const char*)about_xpm, Menu,MSGTR_MENU_AboutMPlayer" ", evAbout ); AddSeparator( Menu ); SubMenu=AddSubMenu( window1, (const char*)open_xpm, Menu,MSGTR_MENU_Open ); AddMenuItem( window1, (const char*)file2_xpm, SubMenu,MSGTR_MENU_PlayFile" ", evLoadPlay ); #ifdef CONFIG_CDDA AddMenuItem( window1, (const char*)playcd_xpm, SubMenu,MSGTR_MENU_PlayCD, evPlayCD ); CDSubMenu=AddSubMenu( window1, (const char*)cd_xpm, Menu,MSGTR_MENU_CD ); AddMenuItem( window1, (const char*)playcd_xpm, CDSubMenu,MSGTR_MENU_PlayDisc,evPlayCD ); AddSeparator( CDSubMenu ); CDTitleMenu=AddSubMenu( window1, (const char*)title_xpm, CDSubMenu,MSGTR_MENU_Titles ); if ( guiInfo.Tracks && ( guiInfo.StreamType == STREAMTYPE_CDDA ) ) { char tmp[32]; int i; for ( i=1; i <= guiInfo.Tracks; i++ ) { snprintf( tmp,32,MSGTR_MENU_Title,i ); //AddMenuItem( CDTitleMenu,tmp,( i << 16 ) + ivSetCDTrack ); AddMenuCheckItem(window1, (const char*)empty1px_xpm, CDTitleMenu,tmp, guiInfo.Track == i, ( i << 16 ) + ivSetCDTrack ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, CDTitleMenu,MSGTR_MENU_None,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } #endif #ifdef CONFIG_VCD AddMenuItem( window1, (const char*)playvcd_xpm, SubMenu,MSGTR_MENU_PlayVCD, evPlayVCD ); VCDSubMenu=AddSubMenu( window1, (const char*)vcd_xpm, Menu,MSGTR_MENU_VCD ); AddMenuItem( window1, (const char*)playvcd_xpm, VCDSubMenu,MSGTR_MENU_PlayDisc,evPlayVCD ); AddSeparator( VCDSubMenu ); VCDTitleMenu=AddSubMenu( window1, (const char*)title_xpm, VCDSubMenu,MSGTR_MENU_Titles ); if ( guiInfo.Tracks && ( guiInfo.StreamType == STREAMTYPE_VCD ) ) { char tmp[32]; int i; for ( i=1; i < guiInfo.Tracks; i++ ) { snprintf( tmp,32,MSGTR_MENU_Title,i ); //AddMenuItem( VCDTitleMenu,tmp,( i << 16 ) + ivSetVCDTrack ); AddMenuCheckItem(window1, (const char*)empty1px_xpm, VCDTitleMenu,tmp, guiInfo.Track == i + 1, ( ( i + 1 ) << 16 ) + ivSetVCDTrack ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, VCDTitleMenu,MSGTR_MENU_None,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } #endif #ifdef CONFIG_DVDREAD AddMenuItem( window1, (const char*)playdvd_xpm, SubMenu,MSGTR_MENU_PlayDVD, evPlayDVD ); DVDSubMenu=AddSubMenu( window1, (const char*)dvd_xpm, Menu,MSGTR_MENU_DVD ); AddMenuItem( window1, (const char*)playdvd_xpm, DVDSubMenu,MSGTR_MENU_PlayDisc" ", evPlayDVD ); // AddMenuItem( DVDSubMenu,MSGTR_MENU_ShowDVDMenu, evNone ); AddSeparator( DVDSubMenu ); DVDTitleMenu=AddSubMenu( window1, (const char*)title_xpm, DVDSubMenu,MSGTR_MENU_Titles ); if ( guiInfo.Tracks && ( guiInfo.StreamType == STREAMTYPE_DVD ) ) { char tmp[32]; int i; for ( i=1 ; i<= guiInfo.Tracks; i++ ) { snprintf( tmp,32,MSGTR_MENU_Title,i); AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDTitleMenu,tmp, guiInfo.Track == i, (i << 16) + ivSetDVDTitle ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, DVDTitleMenu,MSGTR_MENU_None,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } DVDChapterMenu=AddSubMenu( window1, (const char*)chapter_xpm, DVDSubMenu,MSGTR_MENU_Chapters ); if ( guiInfo.Chapters && ( guiInfo.StreamType == STREAMTYPE_DVD ) ) { char tmp[32]; int i; for ( i=1; i <= guiInfo.Chapters; i++ ) { snprintf( tmp,32,MSGTR_MENU_Chapter,i ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDChapterMenu,tmp,guiInfo.Chapter == i, ( i << 16 ) + ivSetDVDChapter ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, DVDChapterMenu,MSGTR_MENU_None,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } DVDAudioLanguageMenu=AddSubMenu( window1, (const char*)audiolang_xpm, DVDSubMenu,MSGTR_MENU_AudioLanguages ); if ( guiInfo.AudioStreams && ( guiInfo.StreamType == STREAMTYPE_DVD ) ) { char tmp[64]; int i, id = demuxer ? demuxer->audio->id : audio_id; for ( i=0; i < guiInfo.AudioStreams; i++ ) { snprintf( tmp,64,"%s - %s %s",GetLanguage( guiInfo.AudioStream[i].language ), ChannelTypes[ guiInfo.AudioStream[i].type ], ChannelNumbers[ guiInfo.AudioStream[i].channels ] ); // if ( id == -1 ) id=audio_id; //guiInfo.AudioStream[i].id; AddMenuCheckItem( window1, (const char*)dolby_xpm, DVDAudioLanguageMenu,tmp, id == guiInfo.AudioStream[i].id, ( guiInfo.AudioStream[i].id << 16 ) + ivSetDVDAudio ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, DVDAudioLanguageMenu,MSGTR_MENU_None,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } DVDSubtitleLanguageMenu=AddSubMenu( window1, (const char*)sublang_xpm, DVDSubMenu,MSGTR_MENU_SubtitleLanguages ); if ( guiInfo.Subtitles && ( guiInfo.StreamType == STREAMTYPE_DVD ) ) { char tmp[64]; int i; AddMenuItem( window1, (const char*)empty1px_xpm, DVDSubtitleLanguageMenu,MSGTR_MENU_None,( (unsigned short)-1 << 16 ) + ivSetDVDSubtitle ); for ( i=0; i < guiInfo.Subtitles; i++ ) { av_strlcpy( tmp,GetLanguage( guiInfo.Subtitle[i].language ),sizeof(tmp) ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDSubtitleLanguageMenu,tmp, dvdsub_id == guiInfo.Subtitle[i].id, ( guiInfo.Subtitle[i].id << 16 ) + ivSetDVDSubtitle ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, DVDSubtitleLanguageMenu,MSGTR_MENU_None,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } #endif AddMenuItem( window1, (const char*)url_xpm, SubMenu,MSGTR_MENU_PlayURL, evLoadURL ); AddMenuItem( window1, (const char*)sub_xpm, SubMenu,MSGTR_MENU_LoadSubtitle" ", evLoadSubtitle ); AddMenuItem( window1, (const char*)nosub_xpm, SubMenu,MSGTR_MENU_DropSubtitle,evDropSubtitle ); AddMenuItem( window1, (const char*)loadeaf_xpm, SubMenu,MSGTR_MENU_LoadExternAudioFile, evLoadAudioFile ); SubMenu=AddSubMenu(window1, (const char*)play_xpm, Menu,MSGTR_MENU_Playing ); AddMenuItem( window1, (const char*)play_xpm, SubMenu,MSGTR_MENU_Play" ", evPlay ); AddMenuItem( window1, (const char*)pause_xpm, SubMenu,MSGTR_MENU_Pause, evPause ); AddMenuItem( window1, (const char*)stop_xpm, SubMenu,MSGTR_MENU_Stop, evStop ); AddMenuItem( window1, (const char*)next_xpm, SubMenu,MSGTR_MENU_NextStream, evNext ); AddMenuItem( window1, (const char*)prev_xpm, SubMenu,MSGTR_MENU_PrevStream, evPrev ); // AddSeparator( SubMenu ); // AddMenuItem( SubMenu,"Back 10 sec", evBackward10sec ); // AddMenuItem( SubMenu,"Fwd 10 sec", evForward10sec ); // AddMenuItem( SubMenu,"Back 1 min", evBackward1min ); // AddMenuItem( SubMenu,"Fwd 1 min", evForward1min ); // SubMenu=AddSubMenu( Menu,MSGTR_MENU_Size ); // AddMenuItem( SubMenu,MSGTR_MENU_NormalSize" ", evNormalSize ); // AddMenuItem( SubMenu,MSGTR_MENU_DoubleSize, evDoubleSize ); // AddMenuItem( SubMenu,MSGTR_MENU_FullScreen, evFullScreen ); // if ( guiInfo.Playing ) { AspectMenu=AddSubMenu( window1, (const char*)aspect_xpm, Menu,MSGTR_MENU_AspectRatio ); AddMenuItem( window1, (const char*)aspect11_xpm, AspectMenu,MSGTR_MENU_Original,( 1 << 16 ) + evSetAspect ); AddMenuItem( window1, (const char*)aspect169_xpm, AspectMenu,"16:9",( 2 << 16 ) + evSetAspect ); AddMenuItem( window1, (const char*)aspect43_xpm, AspectMenu,"4:3",( 3 << 16 ) + evSetAspect ); AddMenuItem( window1, (const char*)aspect235_xpm, AspectMenu,"2.35",( 4 << 16 ) + evSetAspect ); } if ( guiInfo.Playing && demuxer && guiInfo.StreamType != STREAMTYPE_DVD ) { int i,c = 0; for ( i=0; i < MAX_A_STREAMS; i++ ) if ( demuxer->a_streams[i] ) c++; if ( c > 1 ) { SubMenu=AddSubMenu( window1, (const char*)empty_xpm, Menu,MSGTR_MENU_AudioTrack ); for ( i=0; i < MAX_A_STREAMS; i++ ) if ( demuxer->a_streams[i] ) { int aid = ((sh_audio_t *)demuxer->a_streams[i])->aid; int selected_id = (audio_id == aid || (audio_id == -1 && aid == demuxer_default_audio_track(mpctx_get_demuxer(guiInfo.mpcontext)))); char tmp[32]; snprintf( tmp,32,MSGTR_MENU_Track,aid ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, SubMenu,tmp,selected_id,( aid << 16 ) + ivSetAudio ); } } for ( c=0,i=0; i < MAX_V_STREAMS; i++ ) if ( demuxer->v_streams[i] ) c++; if ( c > 1 ) { SubMenu=AddSubMenu( window1, (const char*)empty_xpm, Menu,MSGTR_MENU_VideoTrack ); for ( i=0; i < MAX_V_STREAMS; i++ ) if ( demuxer->v_streams[i] ) { int vid = ((sh_video_t *)demuxer->v_streams[i])->vid; char tmp[32]; snprintf( tmp,32,MSGTR_MENU_Track,vid ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, SubMenu,tmp,video_id == vid,( vid << 16 ) + ivSetVideo ); } } } /* cheap subtitle switching for non-DVD streams */ if ( global_sub_size && guiInfo.StreamType != STREAMTYPE_DVD ) { int i; SubMenu=AddSubMenu( window1, (const char*)subtitle_xpm, Menu, MSGTR_MENU_Subtitles ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, SubMenu, MSGTR_MENU_None, guiInfo.mpcontext->global_sub_pos == -1, (-1 << 16) + ivSetSubtitle ); for ( i=0; i < global_sub_size; i++ ) { char tmp[32]; snprintf( tmp, 32, MSGTR_MENU_Track, i ); AddMenuCheckItem( window1,(const char*)empty1px_xpm,SubMenu,tmp,guiInfo.mpcontext->global_sub_pos == i,( i << 16 ) + ivSetSubtitle ); } } AddSeparator( Menu ); MenuItem=AddMenuCheckItem( window1, (const char*)sound_xpm, Menu,MSGTR_MENU_Mute,mixer->muted,evMute ); if ( !guiInfo.AudioChannels ) gtk_widget_set_sensitive( MenuItem,FALSE ); AddMenuItem( window1, (const char*)playlist_xpm, Menu,MSGTR_MENU_PlayList, evPlaylist ); AddMenuItem( window1, (const char*)skin_xpm, Menu,MSGTR_MENU_SkinBrowser, evSkinBrowser ); AddMenuItem( window1, (const char*)prefs_xpm, Menu,MSGTR_MENU_Preferences, evPreferences ); AddMenuItem( window1, (const char*)equalizer_xpm, Menu,MSGTR_Equalizer, evEqualizer ); if ( guiInfo.VideoWindow ) { int b1 = 0, b2 = 0, b_half = 0; AddSeparator( Menu ); if ( !guiApp.videoWindow.isFullScreen && guiInfo.Playing ) { if ( ( guiApp.videoWindow.Width == guiInfo.VideoWidth * 2 )&& ( guiApp.videoWindow.Height == guiInfo.VideoHeight * 2 ) ) b2=1; else if ( ( guiApp.videoWindow.Width == guiInfo.VideoWidth / 2 ) && ( guiApp.videoWindow.Height == guiInfo.VideoHeight / 2 ) ) b_half=1; else b1=1; } else b1=!guiApp.videoWindow.isFullScreen; H=AddMenuCheckItem( window1, (const char*)half_xpm, Menu,MSGTR_MENU_HalfSize,b_half,evHalfSize ); N=AddMenuCheckItem( window1, (const char*)normal_xpm, Menu,MSGTR_MENU_NormalSize" ",b1,evNormalSize ); D=AddMenuCheckItem( window1, (const char*)double_xpm, Menu,MSGTR_MENU_DoubleSize,b2,evDoubleSize ); F=AddMenuCheckItem( window1, (const char*)full_xpm, Menu,MSGTR_MENU_FullScreen,guiApp.videoWindow.isFullScreen,evFullScreen ); if ( !guiInfo.Playing ) { gtk_widget_set_sensitive( H,FALSE ); gtk_widget_set_sensitive( N,FALSE ); gtk_widget_set_sensitive( D,FALSE ); gtk_widget_set_sensitive( F,FALSE ); } } AddSeparator( Menu ); AddMenuItem( window1, (const char*)exit_xpm, Menu,MSGTR_MENU_Exit, evExit ); return Menu; }
GtkWidget * CreatePopUpMenu( void ) { GtkWidget * window1; GtkWidget * Menu = NULL; GtkWidget * SubMenu = NULL; GtkWidget * MenuItem = NULL; GtkWidget * H, * N, * D, * F; demuxer_t *demuxer = mpctx_get_demuxer(guiInfo.mpcontext); mixer_t *mixer = mpctx_get_mixer(guiInfo.mpcontext); int subs = 0, sub_pos; Menu=gtk_menu_new(); gtk_widget_realize (Menu); window1 = gtk_widget_get_toplevel(Menu); AddMenuItem( window1, (const char*)about_xpm, Menu,MSGTR_GUI_AboutMPlayer" ", evAbout ); AddSeparator( Menu ); SubMenu=AddSubMenu( window1, (const char*)open_xpm, Menu,MSGTR_GUI_Open ); AddMenuItem( window1, (const char*)file2_xpm, SubMenu,MSGTR_GUI_File"... ", evLoadPlay ); #ifdef CONFIG_CDDA AddMenuItem( window1, (const char*)playcd_xpm, SubMenu,MSGTR_GUI_CD, evPlayCD ); CDSubMenu=AddSubMenu( window1, (const char*)cd_xpm, Menu,MSGTR_GUI_CD ); AddMenuItem( window1, (const char*)playcd_xpm, CDSubMenu,MSGTR_GUI_Play,evPlayCD ); AddSeparator( CDSubMenu ); CDTitleMenu=AddSubMenu( window1, (const char*)title_xpm, CDSubMenu,MSGTR_GUI_Titles ); if ( guiInfo.Tracks && ( guiInfo.StreamType == STREAMTYPE_CDDA ) ) { char tmp[32]; int i; for ( i=1;i <= guiInfo.Tracks;i++ ) { snprintf( tmp,32,MSGTR_GUI_TitleNN,i ); //AddMenuItem( CDTitleMenu,tmp,( i << 16 ) + ivSetCDTrack ); AddMenuCheckItem(window1, (const char*)empty1px_xpm, CDTitleMenu,tmp, guiInfo.Track == i, ( i << 16 ) + ivSetCDTrack ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, CDTitleMenu,MSGTR_GUI__none_,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } #endif #ifdef CONFIG_VCD AddMenuItem( window1, (const char*)playvcd_xpm, SubMenu,MSGTR_GUI_VCD, evPlayVCD ); VCDSubMenu=AddSubMenu( window1, (const char*)vcd_xpm, Menu,MSGTR_GUI_VCD ); AddMenuItem( window1, (const char*)playvcd_xpm, VCDSubMenu,MSGTR_GUI_Play,evPlayVCD ); AddSeparator( VCDSubMenu ); VCDTitleMenu=AddSubMenu( window1, (const char*)title_xpm, VCDSubMenu,MSGTR_GUI_Titles ); if ( guiInfo.Tracks && ( guiInfo.StreamType == STREAMTYPE_VCD ) ) { char tmp[32]; int i; for ( i=1;i < guiInfo.Tracks;i++ ) { snprintf( tmp,32,MSGTR_GUI_TitleNN,i ); //AddMenuItem( VCDTitleMenu,tmp,( i << 16 ) + ivSetVCDTrack ); AddMenuCheckItem(window1, (const char*)empty1px_xpm, VCDTitleMenu,tmp, guiInfo.Track == i + 1, ( ( i + 1 ) << 16 ) + ivSetVCDTrack ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, VCDTitleMenu,MSGTR_GUI__none_,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } #endif #ifdef CONFIG_DVDREAD AddMenuItem( window1, (const char*)playdvd_xpm, SubMenu,MSGTR_GUI_DVD, evPlayDVD ); DVDSubMenu=AddSubMenu( window1, (const char*)dvd_xpm, Menu,MSGTR_GUI_DVD ); AddMenuItem( window1, (const char*)playdvd_xpm, DVDSubMenu,MSGTR_GUI_Play" ", evPlayDVD ); // AddMenuItem( DVDSubMenu,MSGTR_MENU_ShowDVDMenu, evNone ); AddSeparator( DVDSubMenu ); DVDTitleMenu=AddSubMenu( window1, (const char*)title_xpm, DVDSubMenu,MSGTR_GUI_Titles ); if ( guiInfo.Tracks && ( guiInfo.StreamType == STREAMTYPE_DVD ) ) { char tmp[32]; int i; for ( i=1 ; i<= guiInfo.Tracks;i++ ) { snprintf( tmp,32,MSGTR_GUI_TitleNN,i); AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDTitleMenu,tmp, guiInfo.Track == i, (i << 16) + ivSetDVDTitle ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, DVDTitleMenu,MSGTR_GUI__none_,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } DVDChapterMenu=AddSubMenu( window1, (const char*)chapter_xpm, DVDSubMenu,MSGTR_GUI_Chapters ); if ( guiInfo.Chapters && ( guiInfo.StreamType == STREAMTYPE_DVD ) ) { char tmp[32]; int i; for ( i=1;i <= guiInfo.Chapters;i++ ) { snprintf( tmp,32,MSGTR_GUI_ChapterNN,i ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDChapterMenu,tmp,guiInfo.Chapter == i, ( i << 16 ) + ivSetDVDChapter ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, DVDChapterMenu,MSGTR_GUI__none_,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } DVDAudioLanguageMenu=AddSubMenu( window1, (const char*)audio_xpm, DVDSubMenu,MSGTR_GUI_AudioTracks ); if ( guiInfo.AudioStreams && demuxer && ( guiInfo.StreamType == STREAMTYPE_DVD ) ) { char tmp[64]; int i; for ( i=0;i < guiInfo.AudioStreams;i++ ) { snprintf( tmp,64,"%s - %s %s",GetLanguage( &guiInfo.AudioStream[i].language, GET_LANG_INT ), ChannelTypes[ guiInfo.AudioStream[i].type ], ChannelNumbers[ guiInfo.AudioStream[i].channels ] ); AddMenuCheckItem( window1, (const char*)dolby_xpm, DVDAudioLanguageMenu,tmp, demuxer->audio->id == guiInfo.AudioStream[i].id, ( guiInfo.AudioStream[i].id << 16 ) + ivSetDVDAudio ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, DVDAudioLanguageMenu,MSGTR_GUI__none_,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } DVDSubtitleLanguageMenu=AddSubMenu( window1, (const char*)subtitle_xpm, DVDSubMenu,MSGTR_GUI_Subtitles ); if ( guiInfo.Subtitles && ( guiInfo.StreamType == STREAMTYPE_DVD ) ) { char tmp[64]; int i; AddMenuItem( window1, (const char*)empty1px_xpm, DVDSubtitleLanguageMenu,MSGTR_GUI__none_,( (unsigned short)-1 << 16 ) + ivSetDVDSubtitle ); for ( i=0;i < guiInfo.Subtitles;i++ ) { av_strlcpy( tmp,GetLanguage( &guiInfo.Subtitle[i].language, GET_LANG_INT ),sizeof(tmp) ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, DVDSubtitleLanguageMenu,tmp, dvdsub_id == guiInfo.Subtitle[i].id, ( guiInfo.Subtitle[i].id << 16 ) + ivSetDVDSubtitle ); } } else { MenuItem=AddMenuItem( window1, (const char*)empty1px_xpm, DVDSubtitleLanguageMenu,MSGTR_GUI__none_,evNone ); gtk_widget_set_sensitive( MenuItem,FALSE ); } #endif #if defined(CONFIG_LIBCDIO) || defined(CONFIG_DVDREAD) AddMenuItem( window1, (const char*)playimage_xpm, SubMenu,MSGTR_GUI_Image"... ", evPlayImage ); #endif AddMenuItem( window1, (const char*)url_xpm, SubMenu,MSGTR_GUI_URL"...", evLoadURL ); #ifdef CONFIG_TV AddMenuItem( window1, (const char*)tv_xpm, SubMenu,MSGTR_GUI_TV, evPlayTV ); #endif AddSeparator( SubMenu ); AddMenuItem( window1, (const char*)loadeaf_xpm, SubMenu,MSGTR_GUI_AudioTrack"...", evLoadAudioFile ); AddMenuItem( window1, (const char*)sub_xpm, SubMenu,MSGTR_GUI_Subtitle"... ", evLoadSubtitle ); AddMenuItem( window1, (const char*)nosub_xpm, SubMenu,MSGTR_GUI_DropSubtitle,evDropSubtitle ); SubMenu=AddSubMenu(window1, (const char*)play_xpm, Menu,MSGTR_GUI_Playback ); AddMenuItem( window1, (const char*)play_xpm, SubMenu,MSGTR_GUI_Play" ", evPlay ); AddMenuItem( window1, (const char*)pause_xpm, SubMenu,MSGTR_GUI_Pause, evPause ); AddMenuItem( window1, (const char*)stop_xpm, SubMenu,MSGTR_GUI_Stop, evStop ); AddMenuItem( window1, (const char*)next_xpm, SubMenu,MSGTR_GUI_Next, evNext ); AddMenuItem( window1, (const char*)prev_xpm, SubMenu,MSGTR_GUI_Previous, evPrev ); // AddSeparator( SubMenu ); // AddMenuItem( SubMenu,"Back 10 sec", evBackward10sec ); // AddMenuItem( SubMenu,"Fwd 10 sec", evForward10sec ); // AddMenuItem( SubMenu,"Back 1 min", evBackward1min ); // AddMenuItem( SubMenu,"Fwd 1 min", evForward1min ); // SubMenu=AddSubMenu( Menu,MSGTR_MENU_Size ); // AddMenuItem( SubMenu,MSGTR_GUI_SizeNormal" ", evNormalSize ); // AddMenuItem( SubMenu,MSGTR_GUI_SizeDouble, evDoubleSize ); // AddMenuItem( SubMenu,MSGTR_GUI_SizeFullscreen, evFullScreen + ( True << 16 ) ); if ( guiInfo.VideoWindow ) { AddSeparator( Menu ); RotationMenu=AddSubMenu( window1, (const char*)rotate_xpm, Menu,MSGTR_GUI_Rotation ); N=AddMenuCheckItem( window1, (const char*)rotate0_xpm, RotationMenu,MSGTR_GUI__none_, guiInfo.Rotation == -1, evSetRotation ); D=AddMenuCheckItem( window1, (const char*)rotate90cw_xpm, RotationMenu,MSGTR_GUI_Rotation90CW, guiInfo.Rotation == 1, evSetRotation + ( 90 << 16 ) ); F=AddMenuCheckItem( window1, (const char*)rotate90ccw_xpm, RotationMenu,MSGTR_GUI_Rotation90CCW, guiInfo.Rotation == 2, evSetRotation + ( -90 << 16 ) ); H=AddMenuCheckItem( window1, (const char*)rotate180_xpm, RotationMenu,MSGTR_GUI_Rotation180, guiInfo.Rotation == 8, evSetRotation + ( 180 << 16 ) ); if ( !guiInfo.Playing ) { gtk_widget_set_sensitive( N,FALSE ); gtk_widget_set_sensitive( D,FALSE ); gtk_widget_set_sensitive( F,FALSE ); gtk_widget_set_sensitive( H,FALSE ); } } if ( guiInfo.VideoWindow ) { int a11 = False, a169 = False, a43 = False, a235 = False; if (movie_aspect == -1.0f) a11 = True; else { a169 = (FFABS(movie_aspect - 16.0f / 9.0f) <= 0.01f); a43 = (FFABS(movie_aspect - 4.0f / 3.0f) <= 0.01f); a235 = (FFABS(movie_aspect - 2.35f) <= 0.01f); } AspectMenu=AddSubMenu( window1, (const char*)aspect_xpm, Menu,MSGTR_GUI_AspectRatio ); H=AddMenuCheckItem( window1, (const char*)aspect11_xpm, AspectMenu,MSGTR_GUI_Original, a11, evSetAspect + ( 1 << 16 ) ); N=AddMenuCheckItem( window1, (const char*)aspect169_xpm, AspectMenu,"16:9", a169, evSetAspect + ( 2 << 16 ) ); D=AddMenuCheckItem( window1, (const char*)aspect43_xpm, AspectMenu,"4:3", a43, evSetAspect + ( 3 << 16 ) ); F=AddMenuCheckItem( window1, (const char*)aspect235_xpm, AspectMenu,MSGTR_GUI_235To1, a235, evSetAspect + ( 4 << 16 ) ); if ( !guiInfo.Playing ) { gtk_widget_set_sensitive( H,FALSE ); gtk_widget_set_sensitive( N,FALSE ); gtk_widget_set_sensitive( D,FALSE ); gtk_widget_set_sensitive( F,FALSE ); } } if ( guiInfo.VideoWindow ) { int b1 = False, b2 = False, b_half = False; if ( !guiApp.videoWindow.isFullScreen && guiInfo.Playing ) { if ( ( guiApp.videoWindow.Width == guiInfo.VideoWidth * 2 )&& ( guiApp.videoWindow.Height == guiInfo.VideoHeight * 2 ) ) b2=True; else if ( ( guiApp.videoWindow.Width == guiInfo.VideoWidth / 2 ) && ( guiApp.videoWindow.Height == guiInfo.VideoHeight / 2 ) ) b_half=True; else b1=( guiApp.videoWindow.Width == guiInfo.VideoWidth && guiApp.videoWindow.Height == guiInfo.VideoHeight ); } else b1=!guiApp.videoWindow.isFullScreen; F=AddMenuCheckItem( window1, (const char*)full_xpm, Menu,MSGTR_GUI_SizeFullscreen,guiApp.videoWindow.isFullScreen,evFullScreen + ( True << 16 ) ); D=AddMenuCheckItem( window1, (const char*)double_xpm, Menu,MSGTR_GUI_SizeDouble,b2,evDoubleSize ); N=AddMenuCheckItem( window1, (const char*)normal_xpm, Menu,MSGTR_GUI_SizeNormal" ",b1,evNormalSize ); H=AddMenuCheckItem( window1, (const char*)half_xpm, Menu,MSGTR_GUI_SizeHalf,b_half,evHalfSize ); if ( !guiInfo.Playing ) { gtk_widget_set_sensitive( H,FALSE ); gtk_widget_set_sensitive( N,FALSE ); gtk_widget_set_sensitive( D,FALSE ); gtk_widget_set_sensitive( F,FALSE ); } } AddSeparator( Menu ); MenuItem=AddMenuCheckItem( window1, (const char*)sound_xpm, Menu,MSGTR_GUI_Mute,mixer->muted,evMute ); if ( !guiInfo.AudioChannels ) gtk_widget_set_sensitive( MenuItem,FALSE ); if ( guiInfo.Playing && demuxer && guiInfo.StreamType != STREAMTYPE_DVD ) { int i,c = 0; for ( i=0;i < MAX_A_STREAMS;i++ ) if ( demuxer->a_streams[i] ) c++; if ( c > 1 ) { SubMenu=AddSubMenu( window1, (const char*)audio_xpm, Menu,MSGTR_GUI_AudioTracks ); for ( i=0;i < MAX_A_STREAMS;i++ ) if ( demuxer->a_streams[i] ) { int aid = ((sh_audio_t *)demuxer->a_streams[i])->aid; int selected_id = (audio_id == aid || (audio_id == -1 && aid == demuxer_default_audio_track(demuxer))); char lng[32], tmp[64]; if ( demuxer_audio_lang( demuxer, i, lng, sizeof(lng) ) == 0 ) snprintf( tmp,sizeof(tmp),MSGTR_GUI_TrackN" - %s",aid,GetLanguage( lng, GET_LANG_CHR ) ); else snprintf( tmp,sizeof(tmp),MSGTR_GUI_TrackN,aid ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, SubMenu,tmp,selected_id,( aid << 16 ) + ivSetAudio ); } } for ( c=0,i=0;i < MAX_V_STREAMS;i++ ) if ( demuxer->v_streams[i] ) c++; if ( c > 1 ) { SubMenu=AddSubMenu( window1, (const char*)video_xpm, Menu,MSGTR_GUI_VideoTracks ); for ( i=0;i < MAX_V_STREAMS;i++ ) if ( demuxer->v_streams[i] ) { int vid = ((sh_video_t *)demuxer->v_streams[i])->vid; char tmp[32]; int selected_id = (video_id == vid || (video_id == -1 && vid == demuxer_default_video_track(demuxer))); snprintf( tmp,32,MSGTR_GUI_TrackN,vid ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, SubMenu,tmp,selected_id,( vid << 16 ) + ivSetVideo ); } } } /* cheap subtitle switching for non-DVD streams */ mpctx_get_global_sub_info(guiInfo.mpcontext, &subs, &sub_pos); if ( subs && guiInfo.StreamType != STREAMTYPE_DVD ) { int i, j, subs0 = guiInfo.mpcontext->sub_counts[SUB_SOURCE_SUBS], subs1 = guiInfo.mpcontext->sub_counts[SUB_SOURCE_VOBSUB]; SubMenu=AddSubMenu( window1, (const char*)subtitle_xpm, Menu, MSGTR_GUI_Subtitles ); AddMenuCheckItem( window1, (const char*)empty1px_xpm, SubMenu, MSGTR_GUI__none_, sub_pos == -1, (-1 << 16) + ivSetSubtitle ); for ( i=0;i < subs;i++ ) { int ret = -1; char lng[32], tmp[64], *lang = NULL; /* file */ if ( i < subs0 ) { if ( guiInfo.mpcontext->set_of_subtitles[i] ) lang = guiInfo.mpcontext->set_of_subtitles[i]->filename; #ifdef CONFIG_ASS if ( ass_track && ass_track->name ) lang = ass_track->name; #endif if ( lang ) { av_strlcpy( lng, mp_basename(lang), sizeof(lng) ); ret = 0; } } /* VOBsub */ else if ( ( i >= subs0 && i < subs0 + subs1 ) && vo_vobsub ) { lang = vobsub_get_id( vo_vobsub, vobsub_get_id_by_index( vo_vobsub, i - subs0 ) ); if ( lang ) { av_strlcpy( lng, lang, sizeof(lng) ); ret = 0; } } /* embedded (demuxer) */ else if ( ( i >= subs0 + subs1 ) && demuxer ) { for ( j=0;j < MAX_S_STREAMS;j++ ) { if ( demuxer->s_streams[j] ) ret++; if ( ret == i - subs0 - subs1 ) { ret = demuxer_sub_lang( demuxer, j, lng, sizeof(lng) ); break; } } } if ( ret == 0 ) snprintf( tmp, sizeof(tmp), MSGTR_GUI_TrackN" - %s", i, GetLanguage( lng, GET_LANG_CHR ) ); else snprintf( tmp, sizeof(tmp), MSGTR_GUI_TrackN, i ); AddMenuCheckItem( window1,(const char*)empty1px_xpm,SubMenu,tmp,sub_pos == i,( i << 16 ) + ivSetSubtitle ); } } AddSeparator( Menu ); AddMenuItem( window1, (const char*)equalizer_xpm, Menu,MSGTR_GUI_Equalizer, evEqualizer ); AddMenuItem( window1, (const char*)playlist_xpm, Menu,MSGTR_GUI_Playlist, evPlaylist ); AddMenuItem( window1, (const char*)skin_xpm, Menu,MSGTR_GUI_SkinBrowser, evSkinBrowser ); AddMenuItem( window1, (const char*)prefs_xpm, Menu,MSGTR_GUI_Preferences, evPreferences ); AddSeparator( Menu ); AddMenuItem( window1, (const char*)exit_xpm, Menu,MSGTR_GUI_Quit, evExit ); return Menu; }