diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-04-11 03:17:14 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-04-11 03:17:14 +0000 |
commit | 9a3774926d9f74a241dba298dd403a2a688f383a (patch) | |
tree | 48b75a9c0f33f32722fe4944c3a22cd61021e5b2 /libmpcodecs/vf_flip.c | |
parent | 9ab873a072fe81b541155933a9fb886d7925eb83 (diff) | |
download | mpv-9a3774926d9f74a241dba298dd403a2a688f383a.tar.bz2 mpv-9a3774926d9f74a241dba298dd403a2a688f383a.tar.xz |
new filter: flip
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5558 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/vf_flip.c')
-rw-r--r-- | libmpcodecs/vf_flip.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/libmpcodecs/vf_flip.c b/libmpcodecs/vf_flip.c new file mode 100644 index 0000000000..bc9c51ef4b --- /dev/null +++ b/libmpcodecs/vf_flip.c @@ -0,0 +1,84 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "../config.h" +#include "../mp_msg.h" + +#include "../mp_image.h" +#include "vf.h" + +#include "../libvo/fastmemcpy.h" + +struct vf_priv_s { + mp_image_t *dmpi; +}; + +//===========================================================================// + +static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){ + if(mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE){ + // try full DR ! + vf->priv->dmpi=vf_get_image(vf->next,mpi->imgfmt, + mpi->type, mpi->flags, mpi->width, mpi->height); + // set up mpi as a upside-down image of dmpi: + mpi->planes[0]=vf->priv->dmpi->planes[0]+ + vf->priv->dmpi->stride[0]*(vf->priv->dmpi->height-1); + mpi->stride[0]=-vf->priv->dmpi->stride[0]; + if(mpi->flags&MP_IMGFLAG_PLANAR){ + mpi->planes[1]=vf->priv->dmpi->planes[1]+ + vf->priv->dmpi->stride[1]*((vf->priv->dmpi->height>>1)-1); + mpi->stride[1]=-vf->priv->dmpi->stride[1]; + mpi->planes[2]=vf->priv->dmpi->planes[2]+ + vf->priv->dmpi->stride[2]*((vf->priv->dmpi->height>>1)-1); + mpi->stride[2]=-vf->priv->dmpi->stride[2]; + } + mpi->flags|=MP_IMGFLAG_DIRECT; + } +} + +static void put_image(struct vf_instance_s* vf, mp_image_t *mpi){ + if(mpi->flags&MP_IMGFLAG_DIRECT){ + vf_next_put_image(vf,vf->priv->dmpi); + return; // we've used DR, so we're ready... + } + + // hope we'll get DR buffer: + vf->priv->dmpi=vf_get_image(vf->next,mpi->imgfmt, + MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, + mpi->width, mpi->height); + + // set up mpi as a upside-down image of dmpi: + vf->priv->dmpi->planes[0]=mpi->planes[0]+ + mpi->stride[0]*(mpi->height-1); + vf->priv->dmpi->stride[0]=-mpi->stride[0]; + if(vf->priv->dmpi->flags&MP_IMGFLAG_PLANAR){ + vf->priv->dmpi->planes[1]=mpi->planes[1]+ + mpi->stride[1]*((mpi->height>>1)-1); + vf->priv->dmpi->stride[1]=-mpi->stride[1]; + vf->priv->dmpi->planes[2]=mpi->planes[2]+ + mpi->stride[2]*((mpi->height>>1)-1); + vf->priv->dmpi->stride[2]=-mpi->stride[2]; + } + + vf_next_put_image(vf,vf->priv->dmpi); +} + +//===========================================================================// + +static int open(vf_instance_t *vf, char* args){ + vf->get_image=get_image; + vf->put_image=put_image; + vf->priv=malloc(sizeof(struct vf_priv_s)); + return 1; +} + +vf_info_t vf_info_flip = { + "flip image upside-down", + "flip", + "A'rpi", + "", + open +}; + +//===========================================================================// |