diff libmpcodecs/vf_kerndeint.c @ 22757:6c3b8d7724f7

allows to de- and reactivate kerndeint on the fly
author cehoyos
date Thu, 22 Mar 2007 10:06:34 +0000
parents cea0eb833758
children a124f3abc1ec
line wrap: on
line diff
--- a/libmpcodecs/vf_kerndeint.c	Thu Mar 22 10:01:20 2007 +0000
+++ b/libmpcodecs/vf_kerndeint.c	Thu Mar 22 10:06:34 2007 +0000
@@ -43,6 +43,7 @@
 	int	thresh;
 	int	sharp;
 	int	twoway;
+	int	do_deinterlace;
 };
 
 
@@ -97,11 +98,15 @@
 	int map = vf->priv->map;
 	int sharp = vf->priv->sharp;
 	int twoway = vf->priv->twoway;
+	mp_image_t *dmpi, *pmpi;
 
-	mp_image_t *dmpi=vf_get_image(vf->next,mpi->imgfmt,
+	if(!vf->priv->do_deinterlace)
+		return vf_next_put_image(vf, mpi, pts);
+
+	dmpi=vf_get_image(vf->next,mpi->imgfmt,
 		MP_IMGTYPE_IP, MP_IMGFLAG_ACCEPT_STRIDE,
 		mpi->w,mpi->h);
-	mp_image_t *pmpi=vf_get_image(vf->next,mpi->imgfmt,
+	pmpi=vf_get_image(vf->next,mpi->imgfmt,
 		MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
 		mpi->w,mpi->h);
 	if(!dmpi) return 0;
@@ -287,8 +292,22 @@
 	return 0;
 }
 
+static int control(struct vf_instance_s* vf, int request, void* data){
+	switch (request)
+	{
+	case VFCTRL_GET_DEINTERLACE:
+		*(int*)data = vf->priv->do_deinterlace;
+		return CONTROL_OK;
+	case VFCTRL_SET_DEINTERLACE:
+		vf->priv->do_deinterlace = *(int*)data;
+		return CONTROL_OK;
+	}
+	return vf_next_control (vf, request, data);
+}
+
 static int open(vf_instance_t *vf, char* args){
 
+	vf->control=control;
 	vf->config=config;
 	vf->put_image=put_image;
         vf->query_format=query_format;
@@ -303,6 +322,7 @@
 	vf->priv->thresh = 10;
 	vf->priv->sharp = 0;
 	vf->priv->twoway = 0;
+	vf->priv->do_deinterlace=1;
 
         if (args)
         {