changeset 6746:0e2b14e606ac

Round height or width to valid values when doing automatic calculation.
author kmkaplan
date Thu, 18 Jul 2002 14:06:32 +0000
parents 9734bfbb200a
children 8335b5a02032
files libmpcodecs/vf_scale.c
diffstat 1 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vf_scale.c	Wed Jul 17 23:28:37 2002 +0000
+++ b/libmpcodecs/vf_scale.c	Thu Jul 18 14:06:32 2002 +0000
@@ -103,13 +103,29 @@
     }
 
     // calculate the missing parameters:
+    switch(best) {
+    case IMGFMT_YUY2:		/* YUY2 needs w rounded to 2 */
+	if(vf->priv->w==-3) vf->priv->w=(vf->priv->h*width/height+1)&~1; else
+	if(vf->priv->w==-2) vf->priv->w=(vf->priv->h*d_width/d_height+1)&~1;
+	if(vf->priv->h==-3) vf->priv->h=vf->priv->w*height/width; else
+	if(vf->priv->h==-2) vf->priv->h=vf->priv->w*d_height/d_width;
+	break;
+    case IMGFMT_YV12:		/* YV12 needs w & h rounded to 2 */
+	if(vf->priv->w==-3) vf->priv->w=(vf->priv->h*width/height+1)&~1; else
+	if(vf->priv->w==-2) vf->priv->w=(vf->priv->h*d_width/d_height+1)&~1;
+	if(vf->priv->h==-3) vf->priv->h=(vf->priv->w*height/width+1)&~1; else
+	if(vf->priv->h==-2) vf->priv->h=(vf->priv->w*d_height/d_width+2)&~1;
+	break;
+    default:
     if(vf->priv->w==-3) vf->priv->w=vf->priv->h*width/height; else
     if(vf->priv->w==-2) vf->priv->w=vf->priv->h*d_width/d_height;
+    if(vf->priv->h==-3) vf->priv->h=vf->priv->w*height/width; else
+    if(vf->priv->h==-2) vf->priv->h=vf->priv->w*d_height/d_width;
+    break;
+    }
     if(vf->priv->w<0) vf->priv->w=width; else
     if(vf->priv->w==0) vf->priv->w=d_width;
     
-    if(vf->priv->h==-3) vf->priv->h=vf->priv->w*height/width; else
-    if(vf->priv->h==-2) vf->priv->h=vf->priv->w*d_height/d_width;
     if(vf->priv->h<0) vf->priv->h=height; else
     if(vf->priv->h==0) vf->priv->h=d_height;