summary refs log tree commit diff
path: root/pkgs/applications
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2006-07-10 17:14:16 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2006-07-10 17:14:16 +0000
commit791b680a9fa66087cfe29e945ce2b9cdd64876ac (patch)
tree45c96b4bd385307d167f783ca830df97a9aeb077 /pkgs/applications
parent02e13f0eb4ef057f27e8828f673a4162fa743752 (diff)
downloadnixlib-791b680a9fa66087cfe29e945ce2b9cdd64876ac.tar
nixlib-791b680a9fa66087cfe29e945ce2b9cdd64876ac.tar.gz
nixlib-791b680a9fa66087cfe29e945ce2b9cdd64876ac.tar.bz2
nixlib-791b680a9fa66087cfe29e945ce2b9cdd64876ac.tar.lz
nixlib-791b680a9fa66087cfe29e945ce2b9cdd64876ac.tar.xz
nixlib-791b680a9fa66087cfe29e945ce2b9cdd64876ac.tar.zst
nixlib-791b680a9fa66087cfe29e945ce2b9cdd64876ac.zip
* Revive the aspect ratio patches (for screens rotated through Xrandr).
svn path=/nixpkgs/trunk/; revision=5672
Diffstat (limited to 'pkgs/applications')
-rw-r--r--pkgs/applications/video/MPlayer/default.nix5
-rw-r--r--pkgs/applications/video/MPlayer/mplayer-aspect.patch96
-rw-r--r--pkgs/applications/video/MPlayer/mplayer-pivot.patch112
3 files changed, 213 insertions, 0 deletions
diff --git a/pkgs/applications/video/MPlayer/default.nix b/pkgs/applications/video/MPlayer/default.nix
index 2a94f3f22f8b..e956548dcbdf 100644
--- a/pkgs/applications/video/MPlayer/default.nix
+++ b/pkgs/applications/video/MPlayer/default.nix
@@ -40,4 +40,9 @@ stdenv.mkDerivation {
   ];
 
   configureFlags = if cacaSupport then "--enable-caca" else "--disable-caca";
+
+  # These fix MPlayer's aspect ratio when run in a screen rotated with
+  # Xrandr.
+  # See: http://itdp.de/~itdp/html/mplayer-dev-eng/2005-08/msg00427.html
+  patches = [./mplayer-aspect.patch ./mplayer-pivot.patch];
 }
diff --git a/pkgs/applications/video/MPlayer/mplayer-aspect.patch b/pkgs/applications/video/MPlayer/mplayer-aspect.patch
new file mode 100644
index 000000000000..7e7dedaa2bfa
--- /dev/null
+++ b/pkgs/applications/video/MPlayer/mplayer-aspect.patch
@@ -0,0 +1,96 @@
+diff -rc MPlayer-1.0pre8-orig/libvo/aspect.c MPlayer-1.0pre8/libvo/aspect.c
+*** MPlayer-1.0pre8-orig/libvo/aspect.c	2006-06-11 20:35:43.000000000 +0200
+--- MPlayer-1.0pre8/libvo/aspect.c	2006-07-10 18:55:11.000000000 +0200
+***************
+*** 11,16 ****
+--- 11,19 ----
+  #include <stdio.h>
+  #endif
+  
++ int vo_physical_width = 0;
++ int vo_physical_height = 0;
++ 
+  int vo_panscan_x = 0;
+  int vo_panscan_y = 0;
+  float vo_panscan_amount = 0;
+***************
+*** 18,24 ****
+  
+  #include "video_out.h"
+  
+! float monitor_aspect=4.0/3.0;
+  float monitor_pixel_aspect=0;
+  extern float movie_aspect;
+  
+--- 21,27 ----
+  
+  #include "video_out.h"
+  
+! float monitor_aspect=-1.0f;
+  float monitor_pixel_aspect=0;
+  extern float movie_aspect;
+  
+***************
+*** 48,53 ****
+--- 51,68 ----
+    aspdat.preh = preh;
+  }
+  
++ static void init_monitor_aspect( void )
++ {
++   if (monitor_aspect != -1.0f) return;
++   if (vo_physical_width == 0 || vo_physical_height == 0) {
++     // if there's no other indication, assume square pixels
++     vo_physical_width = aspdat.scrw;
++     vo_physical_height = aspdat.scrh;
++   }
++   mp_msg(MSGT_VO,MSGL_V,"\naspect: monitor aspect detected %d:%d\n", vo_physical_width, vo_physical_height);
++   monitor_aspect = 1.0f * vo_physical_width / vo_physical_height;
++ }
++ 
+  void aspect_save_screenres(int scrw, int scrh){
+  #ifdef ASPECT_DEBUG
+    printf("aspect_save_screenres %dx%d \n",scrw,scrh);
+***************
+*** 56,61 ****
+--- 71,77 ----
+    aspdat.scrh = scrh;
+    if (monitor_pixel_aspect)
+      monitor_aspect = monitor_pixel_aspect * scrw / scrh;
++   init_monitor_aspect(); // now is a good time
+  }
+  
+  /* aspect is called with the source resolution and the
+diff -rc MPlayer-1.0pre8-orig/libvo/aspect.h MPlayer-1.0pre8/libvo/aspect.h
+*** MPlayer-1.0pre8-orig/libvo/aspect.h	2006-06-11 20:35:43.000000000 +0200
+--- MPlayer-1.0pre8/libvo/aspect.h	2006-07-10 18:52:04.000000000 +0200
+***************
+*** 2,7 ****
+--- 2,10 ----
+  #define __ASPECT_H
+  /* Stuff for correct aspect scaling. */
+  
++ extern int vo_physical_width;
++ extern int vo_physical_height;
++ 
+  extern int vo_panscan_x;
+  extern int vo_panscan_y;
+  extern float vo_panscan_amount;
+diff -rc MPlayer-1.0pre8-orig/libvo/x11_common.c MPlayer-1.0pre8/libvo/x11_common.c
+*** MPlayer-1.0pre8-orig/libvo/x11_common.c	2006-06-11 20:35:43.000000000 +0200
+--- MPlayer-1.0pre8/libvo/x11_common.c	2006-07-10 18:52:04.000000000 +0200
+***************
+*** 463,468 ****
+--- 463,474 ----
+          if (!vo_screenheight)
+              vo_screenheight = DisplayHeight(mDisplay, mScreen);
+      }
++     if (vo_physical_width == 0) {
++ 	vo_physical_width = DisplayWidthMM(mDisplay, mScreen);
++     }
++     if (vo_physical_height == 0) {
++ 	vo_physical_height = DisplayHeightMM(mDisplay, mScreen);
++     }
+      // get color depth (from root window, or the best visual):
+      XGetWindowAttributes(mDisplay, mRootWin, &attribs);
+      depth = attribs.depth;
diff --git a/pkgs/applications/video/MPlayer/mplayer-pivot.patch b/pkgs/applications/video/MPlayer/mplayer-pivot.patch
new file mode 100644
index 000000000000..33afa32a009a
--- /dev/null
+++ b/pkgs/applications/video/MPlayer/mplayer-pivot.patch
@@ -0,0 +1,112 @@
+--- MPlayer/configure.orig	2005-08-21 23:47:47.000000000 +0200
++++ MPlayer/configure	2005-08-21 23:55:02.000000000 +0200
+@@ -162,6 +162,7 @@
+   --enable-lircc         enable LIRCCD (LIRC client daemon) input [autodetect]
+   --enable-joystick      enable joystick support [disable]
+   --disable-vm           disable support X video mode extensions [autodetect]
++  --disable-randr        disable support for X resize and rotate extension [autodetect]
+   --disable-xf86keysym   disable support for 'multimedia' keys [autodetect]
+   --disable-tv           disable TV Interface (tv/dvb grabbers) [enable]
+   --disable-tv-v4l       disable Video4Linux TV Interface support [autodetect]
+@@ -252,6 +253,7 @@
+   --enable-xv            build with Xv render support for X 4.x [autodetect]
+   --enable-xvmc          build with XvMC acceleration for X 4.x [disable]
+   --enable-vm            build with XF86VidMode support for X11 [autodetect]
++  --enable-randr         build with XRandR support for X11 [autodetect]
+   --enable-xinerama      build with Xinerama support for X11 [autodetect]
+   --enable-x11           build with X11 render support [autodetect]
+   --enable-fbdev         build with FBDev render support [autodetect]
+@@ -1351,6 +1353,7 @@
+ _mga=auto
+ _xmga=auto
+ _vm=auto
++_randr=auto
+ _xf86keysym=auto
+ _mlib=auto
+ _sgiaudio=auto
+@@ -1562,6 +1565,8 @@
+   --disable-xmga)	_xmga=no	;;
+   --enable-vm)		_vm=yes		;;
+   --disable-vm)		_vm=no		;;
++  --enable-randr)	_randr=yes	;;
++  --disable-randr)	_randr=no	;;
+   --enable-xf86keysym)	_xf86keysym=yes	;;
+   --disable-xf86keysym)	_xf86keysym=no	;;
+   --enable-mlib)	_mlib=yes	;;
+@@ -3603,6 +3608,25 @@
+ fi
+ echores "$_vm"
+ 
++# X Resize, Rotate and Reflect extension
++echocheck "Xrandr"
++if test "$_x11" = yes && test "$_randr" = auto; then
++  cat > $TMPC <<EOF
++#include <X11/Xlib.h>
++#include <X11/extensions/Xrandr.h>
++int main(void) { (void) XRRQueryExtension(0, 0, 0); return 0; }
++EOF
++  _randr=no
++  cc_check $_inc_x11 -lXrandr $_ld_x11 && _randr=yes
++fi
++if test "$_randr" = yes ; then
++  _def_randr='#define HAVE_XRANDR 1'
++  _ld_randr='-lXrandr'
++else
++  _def_randr='#undef HAVE_XRANDR'
++fi
++echores "$_randr"
++
+ # Check for the presence of special keycodes, like audio control buttons
+ # that XFree86 might have.  Used to be bundled with the xf86vm check, but
+ # has nothing to do with xf86vm and XFree 3.x has xf86vm but does NOT
+@@ -6762,7 +6786,7 @@
+ SLIBSUF=.so
+ 
+ # video output
+-X_LIB = $_ld_gl $_ld_dga $_ld_xv $_ld_xvmc $_ld_vm $_ld_xinerama $_ld_x11 $_ld_sock
++X_LIB = $_ld_gl $_ld_dga $_ld_xv $_ld_xvmc $_ld_vm $_ld_randr $_ld_xinerama $_ld_x11 $_ld_sock
+ GGI_LIB = $_ld_ggi
+ MLIB_LIB =  $_ld_mlib
+ MLIB_INC = $_inc_mlib
+@@ -7465,6 +7489,7 @@
+ $_def_xv
+ $_def_xvmc
+ $_def_vm
++$_def_randr
+ $_def_xf86keysym
+ $_def_xinerama
+ $_def_gl
+--- MPlayer/libvo/x11_common.c.orig	2005-08-21 23:56:20.000000000 +0200
++++ MPlayer/libvo/x11_common.c	2005-08-22 00:05:17.000000000 +0200
+@@ -39,6 +39,10 @@
+ #include <X11/extensions/xf86vmode.h>
+ #endif
+ 
++#ifdef HAVE_XRANDR
++#include <X11/extensions/Xrandr.h>
++#endif
++
+ #ifdef HAVE_XF86XK
+ #include <X11/XF86keysym.h>
+ #endif
+@@ -434,6 +438,20 @@
+         int clock;
+ 
+         XF86VidModeGetModeLine(mDisplay, mScreen, &clock, &modeline);
++#ifdef HAVE_XRANDR
++        {
++            Rotation current_rotation;
++
++            XRRRotations(mDisplay, mScreen, &current_rotation);
++            if ((current_rotation&RR_Rotate_90) != 0 ||
++                    (current_rotation&RR_Rotate_270) != 0) {
++                unsigned short tmp;
++                tmp = modeline.hdisplay;
++                modeline.hdisplay = modeline.vdisplay;
++                modeline.vdisplay = tmp;
++            }
++        }
++#endif
+         if (!vo_screenwidth)
+             vo_screenwidth = modeline.hdisplay;
+         if (!vo_screenheight)