summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-12-18 14:06:35 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-12-18 14:06:35 +0000
commitc632e897a8fb4c0e266ceb1f059449d39189abd1 (patch)
tree6ad364eeb3eff90d5592d913ed2fb3779b062b44 /libmpcodecs
parent93ef31d3d157ce70053f675819e89bd38cbd2f0a (diff)
downloadmpv-c632e897a8fb4c0e266ceb1f059449d39189abd1.tar.bz2
mpv-c632e897a8fb4c0e266ceb1f059449d39189abd1.tar.xz
add the flip filter at the end of the filter chain.
Fixes -vf pp -flip and the flip option in the Gui. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@14184 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/vd.c3
-rw-r--r--libmpcodecs/vf.c20
-rw-r--r--libmpcodecs/vf.h1
3 files changed, 23 insertions, 1 deletions
diff --git a/libmpcodecs/vd.c b/libmpcodecs/vd.c
index bc56293766..439cc8383a 100644
--- a/libmpcodecs/vd.c
+++ b/libmpcodecs/vd.c
@@ -253,7 +253,8 @@ csp_again:
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...
diff --git a/libmpcodecs/vf.c b/libmpcodecs/vf.c
index 60108ed736..bd591163d6 100644
--- a/libmpcodecs/vf.c
+++ b/libmpcodecs/vf.c
@@ -473,6 +473,26 @@ vf_instance_t* vf_open_filter(vf_instance_t* next, char *name, char **args){
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){
diff --git a/libmpcodecs/vf.h b/libmpcodecs/vf.h
index fe2b62a10b..85ae9a6f89 100644
--- a/libmpcodecs/vf.h
+++ b/libmpcodecs/vf.h
@@ -77,6 +77,7 @@ mp_image_t* vf_get_image(vf_instance_t* vf, unsigned int outfmt, int mp_imgtype,
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);