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 | |
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')
-rw-r--r-- | libmpcodecs/Makefile | 2 | ||||
-rw-r--r-- | libmpcodecs/vf.c | 2 | ||||
-rw-r--r-- | libmpcodecs/vf_flip.c | 84 |
3 files changed, 87 insertions, 1 deletions
diff --git a/libmpcodecs/Makefile b/libmpcodecs/Makefile index 0721f2b326..e56e87b323 100644 --- a/libmpcodecs/Makefile +++ b/libmpcodecs/Makefile @@ -6,7 +6,7 @@ LIBNAME2 = libmpencoders.a AUDIO_SRCS=dec_audio.c ad.c ad_a52.c ad_acm.c ad_alaw.c ad_dk3adpcm.c ad_dk4adpcm.c ad_dshow.c ad_dvdpcm.c ad_ffmpeg.c ad_hwac3.c ad_imaadpcm.c ad_mp3.c ad_msadpcm.c ad_pcm.c ad_roqaudio.c ad_msgsm.c ad_faad.c ad_vorbis.c ad_libmad.c VIDEO_SRCS=dec_video.c vd.c vd_null.c vd_cinepak.c vd_qtrpza.c vd_ffmpeg.c vd_dshow.c vd_vfw.c vd_odivx.c vd_divx4.c vd_raw.c vd_xanim.c vd_msvidc.c vd_fli.c vd_qtrle.c vd_qtsmc.c vd_roqvideo.c vd_cyuv.c vd_nuv.c vd_libmpeg2.c vd_msrle.c vd_huffyuv.c vd_zlib.c vd_mpegpes.c -VFILTER_SRCS=vf.c vf_vo.c vf_crop.c vf_expand.c vf_pp.c vf_scale.c vf_fame.c vf_format.c vf_yuy2.c +VFILTER_SRCS=vf.c vf_vo.c vf_crop.c vf_expand.c vf_pp.c vf_scale.c vf_fame.c vf_format.c vf_yuy2.c vf_flip.c ENCODER_SRCS=ve.c ve_divx4.c ve_lavc.c ve_vfw.c ve_rawrgb.c ifeq ($(PNG),yes) diff --git a/libmpcodecs/vf.c b/libmpcodecs/vf.c index a71b246381..f26e63e37a 100644 --- a/libmpcodecs/vf.c +++ b/libmpcodecs/vf.c @@ -17,6 +17,7 @@ extern vf_info_t vf_info_scale; extern vf_info_t vf_info_fame; extern vf_info_t vf_info_format; extern vf_info_t vf_info_yuy2; +extern vf_info_t vf_info_flip; char** vo_plugin_args=(char**) NULL; @@ -31,6 +32,7 @@ static vf_info_t* filter_list[]={ &vf_info_fame, &vf_info_format, &vf_info_yuy2, + &vf_info_flip, NULL }; 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 +}; + +//===========================================================================// |