diff libmpcodecs/vf_crop.c @ 10007:b2d257e35577

slices support for vf_crop. now cropping black borders should make a dvd play faster rather than slower... :)
author rfelker
date Sun, 27 Apr 2003 21:04:00 +0000
parents 74e8cd83708f
children 89cb47cb1fc4
line wrap: on
line diff
--- a/libmpcodecs/vf_crop.c	Sun Apr 27 18:55:04 2003 +0000
+++ b/libmpcodecs/vf_crop.c	Sun Apr 27 21:04:00 2003 +0000
@@ -91,11 +91,40 @@
     return vf_next_put_image(vf,dmpi);
 }
 
+static void start_slice(struct vf_instance_s* vf, mp_image_t *mpi){
+    if(!vf->next->draw_slice){
+	mpi->flags&=~MP_IMGFLAG_DRAW_CALLBACK;
+	return;
+    }
+    vf_get_image(vf->next, mpi->imgfmt, mpi->type, mpi->flags,
+	vf->priv->crop_w, vf->priv->crop_h);
+}
+
+static void draw_slice(struct vf_instance_s* vf,
+        unsigned char** src, int* stride, int w,int h, int x, int y){
+    //mp_msg(MSGT_VFILTER, MSGL_V, "crop slice %d %d %d %d ->", w,h,x,y);
+    if ((x -= vf->priv->crop_x) < 0) {
+	w += x;
+	x = 0;
+    }
+    if ((y -= vf->priv->crop_y) < 0) {
+	h += y;
+	y = 0;
+    }
+    if (x+w > vf->priv->crop_w) w = vf->priv->crop_w-x;
+    if (y+h > vf->priv->crop_h) h = vf->priv->crop_h-y;
+    //mp_msg(MSGT_VFILTER, MSGL_V, "%d %d %d %d\n", w,h,x,y);
+    if ((w < 0) || (h < 0)) return;
+    vf_next_draw_slice(vf,src,stride,w,h,x,y);
+}
+
 //===========================================================================//
 
 static int open(vf_instance_t *vf, char* args){
     vf->config=config;
     vf->put_image=put_image;
+    vf->start_slice=start_slice;
+    vf->draw_slice=draw_slice;
     vf->default_reqs=VFCAP_ACCEPT_STRIDE;
     if(!vf->priv) {
     vf->priv=malloc(sizeof(struct vf_priv_s));