diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-02-02 17:21:19 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2008-02-02 17:21:19 +0000 |
commit | 949787e4102e9a2ab3636b48413cfa55d3bb313a (patch) | |
tree | 323b22a68cb51c23309ae7066e8d300ba093ac0f /libvo/aspect.c | |
parent | a2670cc5a48c597bebb17158e2a870218b24d27d (diff) | |
download | mpv-949787e4102e9a2ab3636b48413cfa55d3bb313a.tar.bz2 mpv-949787e4102e9a2ab3636b48413cfa55d3bb313a.tar.xz |
Make aspect adjustment calculation simpler and more flexible.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25949 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/aspect.c')
-rw-r--r-- | libvo/aspect.c | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/libvo/aspect.c b/libvo/aspect.c index 7a91d49e9c..dfed30d976 100644 --- a/libvo/aspect.c +++ b/libvo/aspect.c @@ -66,44 +66,27 @@ void aspect_save_screenres(int scrw, int scrh){ * resolution, that the scaled image should fit into */ -void aspect(int *srcw, int *srch, int zoom){ +void aspect_fit(int *srcw, int *srch, int fitw, int fith){ int tmpw; - if( !zoom && geometry_wh_changed ) { -#ifdef ASPECT_DEBUG - printf("aspect(0) no aspect forced!\n"); -#endif - return; // the user doesn't want to fix aspect - } - #ifdef ASPECT_DEBUG - printf("aspect(0) fitin: %dx%d zoom: %d screenaspect: %.2f\n",aspdat.scrw,aspdat.scrh, - zoom,monitor_aspect); + printf("aspect(0) fitin: %dx%d screenaspect: %.2f\n",aspdat.scrw,aspdat.scrh, + monitor_aspect); printf("aspect(1) wh: %dx%d (org: %dx%d)\n",*srcw,*srch,aspdat.prew,aspdat.preh); #endif - if(zoom){ - *srcw = aspdat.scrw; - *srch = (int)(((float)aspdat.scrw / (float)aspdat.prew * (float)aspdat.preh) + *srcw = fitw; + *srch = (int)(((float)fitw / (float)aspdat.prew * (float)aspdat.preh) * ((float)aspdat.scrh / ((float)aspdat.scrw / monitor_aspect))); - }else{ - *srcw = aspdat.prew; - *srch = (int)((float)aspdat.preh - * ((float)aspdat.scrh / ((float)aspdat.scrw / monitor_aspect))); - } *srch+= *srch%2; // round #ifdef ASPECT_DEBUG printf("aspect(2) wh: %dx%d (org: %dx%d)\n",*srcw,*srch,aspdat.prew,aspdat.preh); #endif if(*srch>aspdat.scrh || *srch<aspdat.orgh){ - if(zoom) - tmpw = (int)(((float)aspdat.scrh / (float)aspdat.preh * (float)aspdat.prew) - * ((float)aspdat.scrw / ((float)aspdat.scrh / (1.0/monitor_aspect)))); - else - tmpw = (int)((float)aspdat.prew + tmpw = (int)(((float)fith / (float)aspdat.preh * (float)aspdat.prew) * ((float)aspdat.scrw / ((float)aspdat.scrh / (1.0/monitor_aspect)))); tmpw+= tmpw%2; // round if(tmpw<=aspdat.scrw /*&& tmpw>=aspdat.orgw*/){ - *srch = zoom?aspdat.scrh:aspdat.preh; + *srch = fith; *srcw = tmpw; }else{ #ifndef ASPECT_TEST @@ -119,6 +102,18 @@ void aspect(int *srcw, int *srch, int zoom){ #endif } +void aspect(int *srcw, int *srch, int zoom){ + int fitw = zoom ? aspdat.scrw : aspdat.prew; + int fith = zoom ? aspdat.scrh : aspdat.preh; + if( !zoom && geometry_wh_changed ) { +#ifdef ASPECT_DEBUG + printf("aspect(0) no aspect forced!\n"); +#endif + return; // the user doesn't want to fix aspect + } + aspect_fit(srcw, srch, fitw, fith); +} + void panscan_init( void ) { vo_panscan_x=0; |