changeset 24243:aeffa880c7d6

Add code to clear left and right borders not only top and bottom. Patch by Tomas Janousek (tomi nomi cz) with small modifications by me.
author reimar
date Tue, 28 Aug 2007 13:54:27 +0000
parents 76f5d8892c04
children e446bad0872c
files libmpcodecs/vf_expand.c
diffstat 1 files changed, 20 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vf_expand.c	Tue Aug 28 11:20:24 2007 +0000
+++ b/libmpcodecs/vf_expand.c	Tue Aug 28 13:54:27 2007 +0000
@@ -78,8 +78,22 @@
 	if(y0>=vf->priv->exp_y+orig_h) return;
 	h=y-y0;
     }
-    if(x0>=vf->priv->exp_x || x0+w<=vf->priv->exp_x+orig_w) return;
-    // TODO  clear left and right side of the image if needed
+    if(x0<vf->priv->exp_x){
+	// it has parts on the left side of the image:
+	int x=x0+w;
+	if(x>vf->priv->exp_x) x=vf->priv->exp_x;
+	remove_func_2(x0,y0,x-x0,h);
+	if(x0+w<=vf->priv->exp_x) return;
+	w-=x-x0;x0=x;
+    }
+    if(x0+w>vf->priv->exp_x+orig_w){
+	// it has parts on the right side of the image:
+	int x=x0;
+	if(x<vf->priv->exp_x+orig_w) x=vf->priv->exp_x+orig_w;
+	remove_func_2(x,y0,x0+w-x,h);
+	if(x0>=vf->priv->exp_x+orig_w) return;
+	w=x-x0;
+    }
 }
 
 static void draw_func(int x0,int y0, int w,int h,unsigned char* src, unsigned char *srca, int stride){
@@ -154,6 +168,10 @@
 		remove_func_2(0,0,vf->priv->exp_w,vf->priv->exp_y);
 	    if (vf->priv->exp_y+h < vf->priv->exp_h)
 		remove_func_2(0,vf->priv->exp_y+h,vf->priv->exp_w,vf->priv->exp_h-h-vf->priv->exp_y);
+	    if (vf->priv->exp_x > 0)
+		remove_func_2(0,vf->priv->exp_y,vf->priv->exp_x,h);
+	    if (vf->priv->exp_x+w < vf->priv->exp_w)
+		remove_func_2(vf->priv->exp_x+w,vf->priv->exp_y,vf->priv->exp_w-w-vf->priv->exp_x,h);
 	} else {
 	    // partial clear:
 	    vo_remove_text(vf->priv->exp_w,vf->priv->exp_h,remove_func);