Index: Core/guilib/Geometry.cs
===================================================================
--- Core/guilib/Geometry.cs	(revision 26135)
+++ Core/guilib/Geometry.cs	(working copy)
@@ -46,7 +46,7 @@
     private int m_ScreenWidth = 100; // width of the screen
     private int m_ScreenHeight = 100; // height of the screen
     private Type m_eType = Type.Normal; // type of transformation used
-    private float m_fPixelRatio = 1.0f; // pixelratio correction 
+    private float m_fPixelRatio = 1.0f; // pixelratio of screen 
     private bool m_bUseNonLinearStretch = false; //AR uses non-linear stretch or not
 
 
@@ -131,7 +131,7 @@
       GetWindow(arVideoWidth, arVideoHeight, out rSource, out rDest, cropSettings);
     }
 
-    // used from planescene
+    // used from planescene indirectly
     public void GetWindow(int arVideoWidth, int arVideoHeight, out Rectangle rSource, out Rectangle rDest,
                           CropSettings cropSettings)
     {
@@ -139,6 +139,7 @@
       GetWindow(fSourceFrameRatio, out rSource, out rDest, cropSettings);
     }
 
+    //this is used from planescene directly
     public void GetWindow(int arVideoWidth, int arVideoHeight, out Rectangle rSource, out Rectangle rDest,
                           out bool bUseNonLinearStretch, CropSettings cropSettings)
     {
@@ -162,7 +163,8 @@
       int croppedImageHeight = ImageHeight - cropH;
 
       // suggested by ziphnor
-      float fSourcePixelRatio = fSourceFrameRatio / ((float)ImageWidth / (float)ImageHeight);
+      //float fSourcePixelRatio = fSourceFrameRatio / ((float)ImageWidth / (float)ImageHeight);
+      float fSourcePixelRatio = fSourceFrameRatio * ((float)ImageHeight / (float)ImageWidth);
       float fCroppedOutputFrameRatio = fSourcePixelRatio * ((float)croppedImageWidth / (float)croppedImageHeight) /
                                        PixelRatio;
 
@@ -217,22 +219,27 @@
 
         case Type.Normal:
           {
-            // maximize the movie width
-            float fNewWidth = (float)ScreenWidth;
-            float fNewHeight = (float)(fNewWidth / fCroppedOutputFrameRatio);
+            //when cropping the sourceimage, the image resolution and aspect ratio changes, but not the source pixel ratio (or image pixel ratio)
+            float fCroppedImageRatio = fSourcePixelRatio * ((float)croppedImageWidth / (float)croppedImageHeight);
 
-            if (fNewHeight > ScreenHeight)
+            Log.Debug("Image aspect ratio as reported to Geometry : {0}", fCroppedImageRatio);
+            
+            float fDestAspectRatio = PixelRatio * ((float)ScreenWidth / (float)ScreenHeight);
+            
+            float fNewWidth;
+            float fNewHeight;
+            if (fCroppedImageRatio >= fDestAspectRatio)
             {
-              fNewHeight = ScreenHeight;
-              fNewWidth = fNewHeight * fCroppedOutputFrameRatio;
+              //image wider than screen, so stretch to leftmost and rightmost edges of screen , but keep aspectratio
+              fNewWidth  = (float)ScreenWidth;
+              fNewHeight = fDestAspectRatio * ((float)ScreenHeight / fCroppedImageRatio);
+
             }
-
-            // this shouldnt happen, but just make sure that everything still fits onscreen
-            if (fNewWidth > ScreenWidth || fNewHeight > ScreenHeight)
+            else
             {
-              fNewWidth = (float)ImageWidth;
-              fNewWidth = (float)croppedImageWidth;
-              fNewHeight = (float)croppedImageHeight;
+              //image higher than screen, similar as above
+              fNewHeight = (float)ScreenHeight;
+              fNewWidth = (float)ScreenWidth * (fCroppedImageRatio / fDestAspectRatio);
             }
 
             // Centre the movie
@@ -537,7 +544,11 @@
     /// </summary>
     private float CalculateFrameAspectRatio()
     {
+      //fixme: this is only correct for square source pixels
       return (float)ImageWidth / (float)ImageHeight;
+      //should be based on imagepixelratio taken from headers(would mean new class member) or at least be reasonably guessed from resolution
+      //but that guess shuld be based on source material(file type header etc.) and thus doesnt fit here
+      //(see http://www.iki.fi/znark/video/conversion)
     }
   }
 }
\ No newline at end of file
Index: Core/Player/PlaneScene.cs
===================================================================
--- Core/Player/PlaneScene.cs	(revision 26135)
+++ Core/Player/PlaneScene.cs	(working copy)
@@ -27,6 +27,7 @@
 using MediaPortal.Player.Subtitles;
 using Microsoft.DirectX;
 using Microsoft.DirectX.Direct3D;
+using MediaPortal.Player;
 using Geometry = MediaPortal.GUI.Library.Geometry;
 
 namespace MediaPortal.Player
@@ -436,6 +437,8 @@
         _geometry.ARType = GUIGraphicsContext.ARType;
         _geometry.PixelRatio = GUIGraphicsContext.PixelRatio;
 
+        //maybe call geometry.getwindow version which can use videoformat
+
         _geometry.GetWindow(_arVideoWidth, _arVideoHeight, out _sourceRect, out _destinationRect,
                             out _useNonLinearStretch, _cropSettings);
         updateCrop = false;
@@ -589,6 +592,22 @@
         GUIGraphicsContext.InVmr9Render = true;
         if (width > 0 && height > 0)
         {
+          // FIX for mpc reporting wrong aspect ratio
+          // but this might be the preferred method for detecting aspect ratio, because g_player.getvideoformat
+          // yields more detailed information, that can be useful for pedantic geometry calculation
+          // as suggested here: http://www.iki.fi/znark/video/conversion
+
+          if (!g_Player.IsExternalPlayer) //&& (g_Player.IsTimeShifting || g_Player.IsTVRecording || g_Player.IsTV)
+          {
+            VideoStreamFormat VideoFormat = g_Player.GetVideoFormat();
+            if (VideoFormat.IsValid)
+            {
+              arWidth = VideoFormat.arX;
+              arHeight = VideoFormat.arY;
+            }
+          }
+          //maybe call getwindow version which can use videoformat
+          //end of FIX
           _vmr9Util.VideoWidth = width;
           _vmr9Util.VideoHeight = height;
           _vmr9Util.VideoAspectRatioX = arWidth;
