diff libmpcodecs/vf_expand.c @ 15099:bfb91d085f22

fix displaying of the subtitles when using slices
author henry
date Sun, 10 Apr 2005 15:37:43 +0000
parents dc5eaa0795d7
children b5456142675d
line wrap: on
line diff
--- a/libmpcodecs/vf_expand.c	Sun Apr 10 15:33:22 2005 +0000
+++ b/libmpcodecs/vf_expand.c	Sun Apr 10 15:37:43 2005 +0000
@@ -141,7 +141,10 @@
 	// yep, we're expanding image, not just copy.
 	if(vf->dmpi->planes[0]!=vf->priv->fb_ptr){
 	    // double buffering, so we need full clear :(
-	    remove_func(0,0,vf->priv->exp_w,vf->priv->exp_h);
+	    if (vf->priv->exp_y > 0)
+		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);
 	} else {
 	    // partial clear:
 	    vo_remove_text(vf->priv->exp_w,vf->priv->exp_h,remove_func);
@@ -261,10 +264,23 @@
 	vf_next_draw_slice(vf, vf->dmpi->planes, vf->dmpi->stride,
 			   vf->dmpi->w,vf->priv->exp_y,0,0);
     vf_next_draw_slice(vf,src,stride,w,h,x+vf->priv->exp_x,y+vf->priv->exp_y);
-    if(vf->priv->exp_y+vf->h<vf->dmpi->h && y+h == vf->h)
-	vf_next_draw_slice(vf, vf->dmpi->planes, vf->dmpi->stride,
+    if(vf->priv->exp_y+vf->h<vf->dmpi->h && y+h == vf->h) {
+	unsigned char *src2[MP_MAX_PLANES];
+	src2[0] = vf->dmpi->planes[0]
+		+ (vf->priv->exp_y+vf->h)*vf->dmpi->stride[0];
+	if(vf->dmpi->flags&MP_IMGFLAG_PLANAR){
+	    src2[1] = vf->dmpi->planes[1]
+		+ ((vf->priv->exp_y+vf->h)>>vf->dmpi->chroma_y_shift)*vf->dmpi->stride[1];
+	    src2[2] = vf->dmpi->planes[2]
+		+ ((vf->priv->exp_y+vf->h)>>vf->dmpi->chroma_y_shift)*vf->dmpi->stride[2];
+	} else {
+	    src2[1] = vf->dmpi->planes[1]; // passthrough rgb8 palette
+	}
+	
+	vf_next_draw_slice(vf, src2, vf->dmpi->stride,
 			   vf->dmpi->w,vf->dmpi->h-(vf->priv->exp_y+vf->h),
 			   0,vf->priv->exp_y+vf->h);
+    }
 }
 
 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){