r37177 - in trunk: Changelog DOCS/xml/de/skin.xml DOCS/xml/en/skin.xml gui/app/app.c gui/app/app.h gui/dialog/menu.c gui/dialog/pixmaps/rotate.xpm gui/dialog/pixmaps/rotate0.xpm gui/dialog/pixmaps/...
Author: ib Date: Thu Apr 24 16:41:04 2014 New Revision: 37177 Log: New GUI feature: Rotate a video. It is accessible from the context menu. Based on a complain by Linus about video players that don't easily allow rotating a video. (Thanks to compn for pointing that out.) Realize the feature by adding and/or removing appropriate video filters. Additionally, add new GUI message evSetRotation and update documentation. Added: trunk/gui/dialog/pixmaps/rotate.xpm trunk/gui/dialog/pixmaps/rotate0.xpm trunk/gui/dialog/pixmaps/rotate180.xpm trunk/gui/dialog/pixmaps/rotate90ccw.xpm trunk/gui/dialog/pixmaps/rotate90cw.xpm Modified: trunk/Changelog trunk/gui/app/app.c trunk/gui/app/app.h trunk/gui/dialog/menu.c trunk/gui/interface.c trunk/gui/interface.h trunk/gui/ui/actions.c trunk/gui/win32/skinload.c trunk/gui/win32/skinload.h Changes in other areas also in this revision: Modified: trunk/DOCS/xml/de/skin.xml trunk/DOCS/xml/en/skin.xml trunk/help/help_mp-de.h trunk/help/help_mp-en.h Modified: trunk/Changelog ============================================================================== --- trunk/Changelog Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/Changelog Thu Apr 24 16:41:04 2014 (r37177) @@ -46,6 +46,8 @@ MPlayer * Updated skins (avifile, Blue, Blue-small, Clearlooks, Corelian, disappearer, mentalic, mplayer_red, nativeRed, neutron, phony, plastic, slim, softgrip, standard, trium, tvisor, xanim) + * Video can be rotated + * New GUI message: evSetRotation 1.1: "We gave up on 1.0" Modified: trunk/gui/app/app.c ============================================================================== --- trunk/gui/app/app.c Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/gui/app/app.c Thu Apr 24 16:41:04 2014 (r37177) @@ -75,6 +75,7 @@ static const evName evNames[] = { { evFullScreen, "evFullScreen" }, { evNormalSize, "evNormalSize" }, { evSetAspect, "evSetAspect" }, + { evSetRotation, "evSetRotation" }, { evIncVolume, "evIncVolume" }, { evDecVolume, "evDecVolume" }, { evSetVolume, "evSetVolume" }, Modified: trunk/gui/app/app.h ============================================================================== --- trunk/gui/app/app.h Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/gui/app/app.h Thu Apr 24 16:41:04 2014 (r37177) @@ -55,6 +55,7 @@ enum { evFullScreen, evNormalSize, evSetAspect, + evSetRotation, evIncVolume, evDecVolume, evSetVolume, Modified: trunk/gui/dialog/menu.c ============================================================================== --- trunk/gui/dialog/menu.c Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/gui/dialog/menu.c Thu Apr 24 16:41:04 2014 (r37177) @@ -98,6 +98,11 @@ #include "pixmaps/tv.xpm" #endif #include "pixmaps/empty1px.xpm" +#include "pixmaps/rotate.xpm" +#include "pixmaps/rotate0.xpm" +#include "pixmaps/rotate180.xpm" +#include "pixmaps/rotate90ccw.xpm" +#include "pixmaps/rotate90cw.xpm" int gtkPopupMenu; int gtkPopupMenuParam; @@ -442,6 +447,7 @@ GtkWidget * DVDChapterMenu; GtkWidget * DVDAudioLanguageMenu; GtkWidget * DVDSubtitleLanguageMenu; GtkWidget * AspectMenu; +GtkWidget * RotationMenu; GtkWidget * VCDSubMenu; GtkWidget * VCDTitleMenu; GtkWidget * CDSubMenu; @@ -614,8 +620,26 @@ GtkWidget * CreatePopUpMenu( void ) if ( guiInfo.VideoWindow ) { - int a11 = False, a169 = False, a43 = False, a235 = False; 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 { Added: trunk/gui/dialog/pixmaps/rotate.xpm ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/gui/dialog/pixmaps/rotate.xpm Thu Apr 24 16:41:04 2014 (r37177) @@ -0,0 +1,70 @@ +/* XPM */ +static const char * const rotate_xpm[] = { +"16 16 50 1 0 0", +" c #000000", +"! c #6E6E70", +"# c #8C99A6", +"$ c #929FAB", +"% c #97A2AE", +"& c #9AA4AF", +"' c #9FA8B1", +"( c #A3AAB2", +") c #A8AEB5", +"* c #A0A4AA", +"+ c #A4B4C3", +", c #A9B7C7", +"- c #ADB9C8", +". c #AFBBC8", +"/ c #B2BDC9", +"0 c #B6BEC9", +"1 c #B8C1CA", +"2 c #A0B0C2", +"3 c #A6B5C7", +"4 c #A9B7C8", +"5 c #B0BBC8", +"6 c #B1B9C3", +"7 c #9EAEC1", +"8 c #A3B4C7", +"9 c #A7B5C7", +": c #B4BDC9", +"; c #AEB7C1", +"< c #9CAEC3", +"= c #A0B1C5", +"> c #AAB7C8", +"? c #A9B4BF", +"@ c #9CAFC4", +"A c #9EB0C5", +"B c #A1B1C5", +"C c #A7B6C7", +"D c #AEBBC8", +"E c #A6B1BD", +"F c #9AAEC4", +"G c #A4B4C7", +"H c #AAB8C8", +"I c #A1AEBB", +"J c #91A2B6", +"K c #8C9EB2", +"L c #8FA0B4", +"M c #8FA0B2", +"N c #91A1B1", +"O c #95A3B2", +"P c #9AA7B5", +"Q c #95A1AD", +"R c None", +"RRRRRRRRRR RRR", +"RRRRRRRRR R !RR", +"RRRRRRRR RRRR RR", +"RRR!!!!!!!!!! RR", +"RRR!#$%&'()*! RR", +"RRR!+,-./01 ", +"RRR!234-5/06 R", +"RRR!7894-5:;! RR", +"RR !<=89>-5?!RRR", +"R @AB8C>DE!RRR", +" FA=GCHI!RRR", +"RR !JKLMNOPQ!RRR", +"RR !!!!!!!!!!RRR", +"RR RRRR RRRRRRRR", +"RR! R RRRRRRRRR", +"RRR RRRRRRRRRR" +}; Added: trunk/gui/dialog/pixmaps/rotate0.xpm ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/gui/dialog/pixmaps/rotate0.xpm Thu Apr 24 16:41:04 2014 (r37177) @@ -0,0 +1,23 @@ +/* XPM */ +static const char * const rotate0_xpm[] = { +"16 16 3 1 0 0", +" c #6E6E70", +"! c #4E4E50", +"# c None", +"################", +"################", +"####### #######", +"###### !! ######", +"##### !!!! #####", +"#### !!!!!! ####", +"### !!!!!!!! ###", +"####!# !! #!####", +"###### !! ######", +"###### !! ######", +"###### !! ######", +"###### !! ######", +"###### !! ######", +"###### !! ######", +"####### #######", +"################" +}; Added: trunk/gui/dialog/pixmaps/rotate180.xpm ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/gui/dialog/pixmaps/rotate180.xpm Thu Apr 24 16:41:04 2014 (r37177) @@ -0,0 +1,22 @@ +/* XPM */ +static const char * const rotate180_xpm[] = { +"16 16 2 1 0 0", +" c #4E4E50", +"! c None", +"!!!!!!! !!!!!!!!", +"!!!!!!! !!!!!!!", +"!!!!!!! !!!!!!", +"!!!!! ! !!", +"!!! ! !", +"!! !! !!! ", +"! !!!! !!!!! ", +" !!!! !!!!!! ", +" !!!!!! !!!! ", +" !!!!! !!!! !", +" !!! !! !!", +"! ! !!!", +"!! ! !!!!!", +"!!!!!! !!!!!!!", +"!!!!!!! !!!!!!!", +"!!!!!!!! !!!!!!!" +}; Added: trunk/gui/dialog/pixmaps/rotate90ccw.xpm ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/gui/dialog/pixmaps/rotate90ccw.xpm Thu Apr 24 16:41:04 2014 (r37177) @@ -0,0 +1,25 @@ +/* XPM */ +static const char * const rotate90ccw_xpm[] = { +"16 16 5 1 0 0", +" c #4E4E50", +"! c #4E4E51", +"# c #4F4F50", +"$ c #4F4F51", +"% c None", +"%%%%%%%%%%%%%%%%", +"%%%%%%%%%%%%%%%%", +"%%%%%%%% %%%%", +"%%%%%% %%", +"%%%%% %%%%!%", +"%%%% %%%%%%%%", +"%%%% #%%%%%%%%", +"%%% %%%%%%%%%", +"%%% %%%%%%%%%", +"%$% %$%%%%%%%", +"%$ $%%%%%%%", +"%% %%%%%%%%", +"%%% %%%%%%%%%", +"%%%%$$%%%%%%%%%%", +"%%%%%%%%%%%%%%%%", +"%%%%%%%%%%%%%%%%" +}; Added: trunk/gui/dialog/pixmaps/rotate90cw.xpm ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/gui/dialog/pixmaps/rotate90cw.xpm Thu Apr 24 16:41:04 2014 (r37177) @@ -0,0 +1,25 @@ +/* XPM */ +static const char * const rotate90cw_xpm[] = { +"16 16 5 1 0 0", +" c #4E4E50", +"! c #4E4E51", +"# c #4F4F50", +"$ c #4F4F51", +"% c None", +"%%%%%%%%%%%%%%%%", +"%%%%%%%%%%%%%%%%", +"%%%% %%%%%%%%", +"%% %%%%%%", +"%!%%%% %%%%%", +"%%%%%%%% %%%%", +"%%%%%%%%# %%%%", +"%%%%%%%%% %%%", +"%%%%%%%%% %%%", +"%%%%%%%$% %$%", +"%%%%%%%$ $%", +"%%%%%%%% %%", +"%%%%%%%%% %%%", +"%%%%%%%%%%$$%%%%", +"%%%%%%%%%%%%%%%%", +"%%%%%%%%%%%%%%%%" +}; Modified: trunk/gui/interface.c ============================================================================== --- trunk/gui/interface.c Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/gui/interface.c Thu Apr 24 16:41:04 2014 (r37177) @@ -194,6 +194,7 @@ static void remove_vf(char *vf) */ void guiInit(void) { + char **argvf; int ret; plItem *playlist; @@ -226,6 +227,9 @@ void guiInit(void) gtkASS.top_margin = ass_top_margin; gtkASS.bottom_margin = ass_bottom_margin; + argvf = get_vf("rotate"); + guiInfo.Rotation = (argvf && argvf[1] ? atoi(argvf[1]) : -1); + /* initialize graphical user interfaces */ wsInit(mDisplay); @@ -576,6 +580,36 @@ int gui(int what, void *data) if (gtkVfPP) add_vf("pp", NULL); + switch (guiInfo.Rotation) { + static const char *argvf[] = { "_oldargs_", NULL, NULL }; + + case -1: + remove_vf("rotate"); + remove_vf("flip"); + remove_vf("mirror"); + break; + + case 1: + argvf[1] = "1"; + add_vf("rotate", argvf); + remove_vf("flip"); + remove_vf("mirror"); + break; + + case 2: + argvf[1] = "2"; + add_vf("rotate", argvf); + remove_vf("flip"); + remove_vf("mirror"); + break; + + case 8: + remove_vf("rotate"); + add_vf("flip", NULL); + add_vf("mirror", NULL); + break; + } + /* audio opts */ // if ( ao_plugin_cfg.plugin_list ) { free( ao_plugin_cfg.plugin_list ); ao_plugin_cfg.plugin_list=NULL; } Modified: trunk/gui/interface.h ============================================================================== --- trunk/gui/interface.h Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/gui/interface.h Thu Apr 24 16:41:04 2014 (r37177) @@ -103,6 +103,8 @@ typedef struct { int VideoWidth; int VideoHeight; + int Rotation; + char *CodecName; int StreamType; Modified: trunk/gui/ui/actions.c ============================================================================== --- trunk/gui/ui/actions.c Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/gui/ui/actions.c Thu Apr 24 16:41:04 2014 (r37177) @@ -466,6 +466,31 @@ play: break; + case evSetRotation: + + switch (iparam) { + case 90: + guiInfo.Rotation = 1; + break; + + case -90: + guiInfo.Rotation = 2; + break; + + case 180: + guiInfo.Rotation = 8; + break; + + case 0: + default: + guiInfo.Rotation = -1; + break; + } + + guiInfo.MediumChanged = GUI_MEDIUM_SAME; + + break; + /* timer events */ case ivRedraw: { Modified: trunk/gui/win32/skinload.c ============================================================================== --- trunk/gui/win32/skinload.c Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/gui/win32/skinload.c Thu Apr 24 16:41:04 2014 (r37177) @@ -81,6 +81,7 @@ static const evName evNames[] = { evFullScreen, "evFullScreen" }, { evNormalSize, "evNormalSize" }, { evSetAspect, "evSetAspect" }, + { evSetRotation, "evSetRotation" }, { evIncVolume, "evIncVolume" }, { evDecVolume, "evDecVolume" }, { evSetVolume, "evSetVolume" }, Modified: trunk/gui/win32/skinload.h ============================================================================== --- trunk/gui/win32/skinload.h Thu Apr 24 15:51:20 2014 (r37176) +++ trunk/gui/win32/skinload.h Thu Apr 24 16:41:04 2014 (r37177) @@ -168,6 +168,7 @@ enum evFullScreen, evNormalSize, evSetAspect, + evSetRotation, evIncVolume, evDecVolume, evSetVolume,
participants (1)
-
ib