# HG changeset patch # User arpi # Date 1018495034 0 # Node ID 2d0b4090497f3ed35d58fe0cd1f6c6c517235eca # Parent 4016b44a1230b6b2fe6fee7bde5efa02496847e5 new filter: flip diff -r 4016b44a1230 -r 2d0b4090497f libmpcodecs/Makefile --- a/libmpcodecs/Makefile Thu Apr 11 02:54:42 2002 +0000 +++ b/libmpcodecs/Makefile Thu Apr 11 03:17:14 2002 +0000 @@ -6,7 +6,7 @@ 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 -r 4016b44a1230 -r 2d0b4090497f libmpcodecs/vf.c --- a/libmpcodecs/vf.c Thu Apr 11 02:54:42 2002 +0000 +++ b/libmpcodecs/vf.c Thu Apr 11 03:17:14 2002 +0000 @@ -17,6 +17,7 @@ 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 @@ &vf_info_fame, &vf_info_format, &vf_info_yuy2, + &vf_info_flip, NULL }; diff -r 4016b44a1230 -r 2d0b4090497f libmpcodecs/vf_flip.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmpcodecs/vf_flip.c Thu Apr 11 03:17:14 2002 +0000 @@ -0,0 +1,84 @@ +#include +#include +#include + +#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 +}; + +//===========================================================================//