summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoratmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-10-03 14:41:53 +0000
committeratmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-10-03 14:41:53 +0000
commitabb7153e942b7e7324d8d6d81dd696a366ab944c (patch)
tree05f0aa1a9857766b5c329446ab5610eadfee2720
parentd276fe563458936eb81e464ed439e0a2d80b3e69 (diff)
downloadmpv-abb7153e942b7e7324d8d6d81dd696a366ab944c.tar.bz2
mpv-abb7153e942b7e7324d8d6d81dd696a366ab944c.tar.xz
Monitor aspect stuff.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2054 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--cfg-mplayer.h4
-rw-r--r--libvo/aspect.c32
-rw-r--r--libvo/aspect.h15
3 files changed, 51 insertions, 0 deletions
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 79d9f3089f..a37329587a 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -64,6 +64,9 @@ extern int dvd_angle;
extern char * skinName;
#endif
+/* from libvo/aspect.c */
+extern float monitor_aspect;
+
/*
* CONF_TYPE_FUNC_FULL :
* allows own implemtations for passing the params
@@ -212,6 +215,7 @@ struct config conf[]={
{"xy", &screen_size_xy, CONF_TYPE_INT, CONF_RANGE, 0, 4096},
{"aspect", &movie_aspect, CONF_TYPE_FLOAT, CONF_RANGE, 0.2, 3.0},
{"noaspect", &movie_aspect, CONF_TYPE_FLAG, 0, 0, 0},
+ {"monitoraspect", &monitor_aspect, CONF_TYPE_FLOAT, CONF_RANGE, 0.2, 3.0},
{"vm", &vidmode, CONF_TYPE_FLAG, 0, 0, 1},
{"novm", &vidmode, CONF_TYPE_FLAG, 0, 1, 0},
{"fs", &fullscreen, CONF_TYPE_FLAG, 0, 0, 1},
diff --git a/libvo/aspect.c b/libvo/aspect.c
new file mode 100644
index 0000000000..b9302614e0
--- /dev/null
+++ b/libvo/aspect.c
@@ -0,0 +1,32 @@
+/* Stuff for correct aspect scaling. */
+#include "aspect.h"
+
+float monitor_aspect=4.0/3.0;
+
+/* aspect is called with the source resolution and the
+ * resolution, that the scaled image should fit into
+ */
+
+rect_t aspect(int srcw, int srch, int fitinw, int fitinh){
+ rect_t r,z;
+ r.w=fitinw;
+ r.x=0;
+ r.h=(int)(((float)fitinw / (float)srcw * (float)srch)
+ * ((float)fitinh/((float)fitinw/monitor_aspect)));
+ r.h+=r.h%2; // round
+ r.y=(fitinh-r.h)/2;
+ z=r;
+ //printf("aspect rez x: %d y: %d wh: %dx%d\n",r.x,r.y,r.w,r.h);
+ if(r.h>fitinh || r.h<srch){
+ r.h=fitinh;
+ r.y=0;
+ r.w=(int)(((float)fitinh / (float)srch * (float)srcw)
+ * ((float)fitinw/((float)fitinh/(1/monitor_aspect))));
+ r.w+=r.w%2; // round
+ r.x=(fitinw-r.w)/2;
+ }
+ if(r.w>fitinw) r=z;
+ //printf("aspect ret x: %d y: %d wh: %dx%d\n",r.x,r.y,r.w,r.h);
+ return r;
+}
+
diff --git a/libvo/aspect.h b/libvo/aspect.h
new file mode 100644
index 0000000000..c10d1ab41b
--- /dev/null
+++ b/libvo/aspect.h
@@ -0,0 +1,15 @@
+#ifndef __ASPECT_H
+#define __ASPECT_H
+/* Stuff for correct aspect scaling. */
+
+typedef struct {
+ int x; /* x,y starting coordinate */
+ int y; /* of upper left corner */
+ int w; /* width */
+ int h; /* height */
+} rect_t;
+
+rect_t aspect(int srcw, int srch, int fitinw, int fitinh);
+
+#endif
+