Mercurial > mplayer.hg
changeset 14183:c9ff4fe2caaf
add the flip filter at the end of the filter chain.
Fixes -vf pp -flip and the flip option in the Gui.
author | reimar |
---|---|
date | Sat, 18 Dec 2004 14:06:35 +0000 |
parents | 584551fb6586 |
children | 3c825af3e761 |
files | libmpcodecs/vd.c libmpcodecs/vf.c libmpcodecs/vf.h |
diffstat | 3 files changed, 23 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpcodecs/vd.c Sat Dec 18 11:26:01 2004 +0000 +++ b/libmpcodecs/vd.c Sat Dec 18 14:06:35 2004 +0000 @@ -253,7 +253,8 @@ if(vo_flags&VFCAP_FLIPPED) flip^=1; if(flip && !(vo_flags&VFCAP_FLIP)){ // we need to flip, but no flipping filter avail. - sh->vfilter=vf=vf_open_filter(vf,"flip",NULL); + vf_add_before_vo(&vf, "flip", NULL); + sh->vfilter = vf; } // time to do aspect ratio corrections...
--- a/libmpcodecs/vf.c Sat Dec 18 11:26:01 2004 +0000 +++ b/libmpcodecs/vf.c Sat Dec 18 14:06:35 2004 +0000 @@ -473,6 +473,26 @@ return vf_open_plugin(filter_list,next,name,args); } +/** + * \brief adds a filter before the last one (which should be the vo filter). + * \param vf start of the filter chain. + * \param name name of the filter to add. + * \param args argument list for the filter. + * \return pointer to the filter instance that was created. + */ +vf_instance_t* vf_add_before_vo(vf_instance_t **vf, char *name, char **args) { + vf_instance_t *vo, *prev = NULL, *new; + // Find the last filter (should be vf_vo) + for (vo = *vf; vo->next; vo = vo->next) + prev = vo; + new = vf_open_filter(vo, name, args); + if (prev) + prev->next = new; + else + *vf = new; + return new; +} + //============================================================================ unsigned int vf_match_csp(vf_instance_t** vfp,unsigned int* list,unsigned int preferred){
--- a/libmpcodecs/vf.h Sat Dec 18 11:26:01 2004 +0000 +++ b/libmpcodecs/vf.h Sat Dec 18 14:06:35 2004 +0000 @@ -77,6 +77,7 @@ vf_instance_t* vf_open_plugin(vf_info_t** filter_list, vf_instance_t* next, char *name, char **args); vf_instance_t* vf_open_filter(vf_instance_t* next, char *name, char **args); +vf_instance_t* vf_add_before_vo(vf_instance_t **vf, char *name, char **args); vf_instance_t* vf_open_encoder(vf_instance_t* next, char *name, char *args); unsigned int vf_match_csp(vf_instance_t** vfp,unsigned int* list,unsigned int preferred);