summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/vf_crop.c
diff options
context:
space:
mode:
authorrfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-04-27 21:04:00 +0000
committerrfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-04-27 21:04:00 +0000
commitf443581bb0c69fe3f9affd194baf235e2e85d0e0 (patch)
tree959838088b09ffe1cf66ae0df42e1edad457a638 /libmpcodecs/vf_crop.c
parent007449236fb9f4c18d021445a930f8773a624959 (diff)
downloadmpv-f443581bb0c69fe3f9affd194baf235e2e85d0e0.tar.bz2
mpv-f443581bb0c69fe3f9affd194baf235e2e85d0e0.tar.xz
slices support for vf_crop. now cropping black borders should make a
dvd play faster rather than slower... :) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@10008 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/vf_crop.c')
-rw-r--r--libmpcodecs/vf_crop.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/libmpcodecs/vf_crop.c b/libmpcodecs/vf_crop.c
index a0dd158128..6ad625fb9e 100644
--- a/libmpcodecs/vf_crop.c
+++ b/libmpcodecs/vf_crop.c
@@ -91,11 +91,40 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){
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));