summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cfg-common.h7
-rw-r--r--libmpcodecs/vf.c93
-rw-r--r--libmpcodecs/vf.h6
-rw-r--r--libmpcodecs/vf_1bpp.c3
-rw-r--r--libmpcodecs/vf_2xsai.c3
-rw-r--r--libmpcodecs/vf_bmovl.c3
-rw-r--r--libmpcodecs/vf_boxblur.c3
-rw-r--r--libmpcodecs/vf_crop.c3
-rw-r--r--libmpcodecs/vf_cropdetect.c3
-rw-r--r--libmpcodecs/vf_denoise3d.c3
-rw-r--r--libmpcodecs/vf_detc.c3
-rw-r--r--libmpcodecs/vf_dint.c3
-rw-r--r--libmpcodecs/vf_down3dright.c3
-rw-r--r--libmpcodecs/vf_dvbscale.c3
-rw-r--r--libmpcodecs/vf_eq.c3
-rw-r--r--libmpcodecs/vf_eq2.c3
-rw-r--r--libmpcodecs/vf_expand.c3
-rw-r--r--libmpcodecs/vf_fame.c3
-rw-r--r--libmpcodecs/vf_field.c3
-rw-r--r--libmpcodecs/vf_flip.c3
-rw-r--r--libmpcodecs/vf_format.c3
-rw-r--r--libmpcodecs/vf_halfpack.c3
-rw-r--r--libmpcodecs/vf_hqdn3d.c3
-rw-r--r--libmpcodecs/vf_il.c3
-rw-r--r--libmpcodecs/vf_lavc.c3
-rw-r--r--libmpcodecs/vf_lavcdeint.c3
-rw-r--r--libmpcodecs/vf_mirror.c3
-rw-r--r--libmpcodecs/vf_noise.c3
-rw-r--r--libmpcodecs/vf_palette.c3
-rw-r--r--libmpcodecs/vf_perspective.c3
-rw-r--r--libmpcodecs/vf_pp.c3
-rw-r--r--libmpcodecs/vf_rectangle.c3
-rw-r--r--libmpcodecs/vf_rgb2bgr.c3
-rw-r--r--libmpcodecs/vf_rotate.c3
-rw-r--r--libmpcodecs/vf_sab.c3
-rw-r--r--libmpcodecs/vf_scale.c71
-rw-r--r--libmpcodecs/vf_smartblur.c3
-rw-r--r--libmpcodecs/vf_swapuv.c3
-rw-r--r--libmpcodecs/vf_telecine.c3
-rw-r--r--libmpcodecs/vf_test.c3
-rw-r--r--libmpcodecs/vf_tfields.c3
-rw-r--r--libmpcodecs/vf_unsharp.c3
-rw-r--r--libmpcodecs/vf_vo.c3
-rw-r--r--libmpcodecs/vf_yuy2.c3
-rw-r--r--libmpcodecs/vf_yvu9.c3
-rw-r--r--m_config.c2
-rw-r--r--m_option.c444
-rw-r--r--m_option.h29
-rw-r--r--mplayer.c16
49 files changed, 702 insertions, 89 deletions
diff --git a/cfg-common.h b/cfg-common.h
index 4a8876eea3..ac222efd6f 100644
--- a/cfg-common.h
+++ b/cfg-common.h
@@ -150,7 +150,8 @@
{"pphelp", &pp_help, CONF_TYPE_PRINT_INDIRECT, CONF_NOCFG, 0, 0, NULL},
#endif
- {"vop", &vo_plugin_args, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
+ {"vop", &vo_plugin_args, CONF_TYPE_OBJ_SETTINGS_LIST, 0, 0, 0,&vf_obj_list },
+ {"vf", &vf_settings, CONF_TYPE_OBJ_SETTINGS_LIST, 0, 0, 0, &vf_obj_list},
// scaling:
{"sws", &sws_flags, CONF_TYPE_INT, 0, 0, 2, NULL},
@@ -336,6 +337,8 @@ extern int mf_w;
extern int mf_h;
extern float mf_fps;
extern char * mf_type;
+extern m_obj_settings_t* vf_settings;
+extern m_obj_list_t vf_obj_list;
struct config mfopts_conf[]={
{"on", &mf_support, CONF_TYPE_FLAG, 0, 0, 1, NULL},
@@ -346,7 +349,7 @@ struct config mfopts_conf[]={
{NULL, NULL, 0, 0, 0, 0, NULL}
};
-extern char** vo_plugin_args;
+extern m_obj_settings_t* vo_plugin_args;
#include "libaf/af.h"
extern af_cfg_t af_cfg; // Audio filter configuration, defined in libmpcodecs/dec_audio.c
diff --git a/libmpcodecs/vf.c b/libmpcodecs/vf.c
index d4629d7e12..e833065ad3 100644
--- a/libmpcodecs/vf.c
+++ b/libmpcodecs/vf.c
@@ -9,6 +9,8 @@
#include "../mp_msg.h"
#include "../help_mp.h"
+#include "../m_option.h"
+#include "../m_struct.h"
#include "img_format.h"
@@ -60,8 +62,6 @@ extern vf_info_t vf_info_detc;
extern vf_info_t vf_info_telecine;
extern vf_info_t vf_info_tfields;
-char** vo_plugin_args=(char**) NULL;
-
// list of available filters:
static vf_info_t* filter_list[]={
&vf_info_rectangle,
@@ -116,6 +116,17 @@ static vf_info_t* filter_list[]={
NULL
};
+// For the vf option
+m_obj_settings_t* vf_settings = NULL;
+// For the vop option
+m_obj_settings_t* vo_plugin_args = NULL;
+m_obj_list_t vf_obj_list = {
+ (void**)filter_list,
+ M_ST_OFF(vf_info_t,name),
+ M_ST_OFF(vf_info_t,info),
+ M_ST_OFF(vf_info_t,opts)
+};
+
//============================================================================
// mpi stuff:
@@ -306,7 +317,7 @@ static int vf_default_query_format(struct vf_instance_s* vf, unsigned int fmt){
return vf_next_query_format(vf,fmt);
}
-vf_instance_t* vf_open_plugin(vf_info_t** filter_list, vf_instance_t* next, char *name, char *args){
+vf_instance_t* vf_open_plugin(vf_info_t** filter_list, vf_instance_t* next, char *name, char **args){
vf_instance_t* vf;
int i;
for(i=0;;i++){
@@ -326,18 +337,48 @@ vf_instance_t* vf_open_plugin(vf_info_t** filter_list, vf_instance_t* next, char
vf->put_image=vf_next_put_image;
vf->default_caps=VFCAP_ACCEPT_STRIDE;
vf->default_reqs=0;
- if(vf->info->open(vf,args)>0) return vf; // Success!
+ if(vf->info->opts) { // vf_vo get some special argument
+ m_struct_t* st = vf->info->opts;
+ void* vf_priv = m_struct_alloc(st);
+ int n;
+ for(n = 0 ; args && args[2*n] ; n++)
+ m_struct_set(st,vf_priv,args[2*n],args[2*n+1]);
+ vf->priv = vf_priv;
+ args = NULL;
+ } else // Otherwise we should have the '_oldargs_'
+ if(args && !strcmp(args[0],"_oldargs_"))
+ args = (char**)args[1];
+ else
+ args = NULL;
+ if(vf->info->open(vf,(char*)args)>0) return vf; // Success!
free(vf);
mp_msg(MSGT_VFILTER,MSGL_ERR,MSGTR_CouldNotOpenVideoFilter,name);
return NULL;
}
-vf_instance_t* vf_open_filter(vf_instance_t* next, char *name, char *args){
- if(strcmp(name,"vo"))
- mp_msg(MSGT_VFILTER,MSGL_INFO,
- args ? MSGTR_OpeningVideoFilter "[%s=%s]\n"
- : MSGTR_OpeningVideoFilter "[%s]\n",name,args);
- return vf_open_plugin(filter_list,next,name,args);
+vf_instance_t* vf_open_filter(vf_instance_t* next, char *name, char **args){
+ if(args && strcmp(args[0],"_oldargs_")) {
+ int i,l = 0;
+ for(i = 0 ; args && args[2*i] ; i++)
+ l += 1 + strlen(args[2*i]) + 1 + strlen(args[2*i+1]);
+ l += strlen(name);
+ {
+ char str[l+1];
+ char* p = str;
+ p += sprintf(str,"%s",name);
+ for(i = 0 ; args && args[2*i] ; i++)
+ p += sprintf(p," %s=%s",args[2*i],args[2*i+1]);
+ mp_msg(MSGT_VFILTER,MSGL_INFO,MSGTR_OpeningVideoFilter "[%s]\n",str);
+ }
+ } else if(strcmp(name,"vo")) {
+ if(args && strcmp(args[0],"_oldargs_") == 0)
+ mp_msg(MSGT_VFILTER,MSGL_INFO,MSGTR_OpeningVideoFilter
+ "[%s=%s]\n", name,args[1]);
+ else
+ mp_msg(MSGT_VFILTER,MSGL_INFO,MSGTR_OpeningVideoFilter
+ "[%s]\n", name);
+ }
+ return vf_open_plugin(filter_list,next,name,args);
}
//============================================================================
@@ -425,19 +466,27 @@ void vf_next_draw_slice(struct vf_instance_s* vf,unsigned char** src, int * stri
//============================================================================
vf_instance_t* append_filters(vf_instance_t* last){
- vf_instance_t* vf;
- char** plugin_args = vo_plugin_args;
- if(!vo_plugin_args) return last;
- while(*plugin_args){
- char* name=strdup(*plugin_args);
- char* args=strchr(name,'=');
- if(args){args[0]=0;++args;}
- vf=vf_open_filter(last,name,args);
- if(vf) last=vf;
- free(name);
- ++plugin_args;
+ vf_instance_t* vf;
+ int i;
+
+ // -vf take precedence over -vop
+ if(vf_settings) {
+ // We want to add them in the 'right order'
+ for(i = 0 ; vf_settings[i].name ; i++)
+ /* NOP */;
+ for(i-- ; i >= 0 ; i--) {
+ //printf("Open filter %s\n",vf_settings[i].name);
+ vf = vf_open_filter(last,vf_settings[i].name,vf_settings[i].attribs);
+ if(vf) last=vf;
}
- return last;
+ } else if(vo_plugin_args) {
+ for(i = 0 ; vo_plugin_args[i].name ; i++) {
+ vf = vf_open_filter(last,vo_plugin_args[i].name,
+ vo_plugin_args[i].attribs);
+ if(vf) last=vf;
+ }
+ }
+ return last;
}
//============================================================================
diff --git a/libmpcodecs/vf.h b/libmpcodecs/vf.h
index ffe8ef934a..1f21500ac7 100644
--- a/libmpcodecs/vf.h
+++ b/libmpcodecs/vf.h
@@ -8,6 +8,8 @@ typedef struct vf_info_s {
const char *author;
const char *comment;
int (*open)(struct vf_instance_s* vf,char* args);
+ // Ptr to a struct dscribing the options
+ void* opts;
} vf_info_t;
typedef struct vf_image_context_s {
@@ -67,8 +69,8 @@ typedef struct vf_seteq_s
void vf_mpi_clear(mp_image_t* mpi,int x0,int y0,int w,int h);
mp_image_t* vf_get_image(vf_instance_t* vf, unsigned int outfmt, int mp_imgtype, int mp_imgflag, int w, int h);
-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_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_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);
diff --git a/libmpcodecs/vf_1bpp.c b/libmpcodecs/vf_1bpp.c
index 2d6a959dc9..f1c9e5920d 100644
--- a/libmpcodecs/vf_1bpp.c
+++ b/libmpcodecs/vf_1bpp.c
@@ -178,7 +178,8 @@ vf_info_t vf_info_1bpp = {
"1bpp",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_2xsai.c b/libmpcodecs/vf_2xsai.c
index 20db798722..21a8f48ab9 100644
--- a/libmpcodecs/vf_2xsai.c
+++ b/libmpcodecs/vf_2xsai.c
@@ -357,7 +357,8 @@ vf_info_t vf_info_2xsai = {
"2xsai",
"A'rpi",
"http://elektron.its.tudelft.nl/~dalikifa/",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_bmovl.c b/libmpcodecs/vf_bmovl.c
index 5cba56d6f0..8f5bad8f53 100644
--- a/libmpcodecs/vf_bmovl.c
+++ b/libmpcodecs/vf_bmovl.c
@@ -452,5 +452,6 @@ vf_info_t vf_info_bmovl = {
"bmovl",
"Per Wigren",
"",
- vf_open
+ vf_open,
+ NULL
};
diff --git a/libmpcodecs/vf_boxblur.c b/libmpcodecs/vf_boxblur.c
index a5e7f9767a..729c174d72 100644
--- a/libmpcodecs/vf_boxblur.c
+++ b/libmpcodecs/vf_boxblur.c
@@ -212,7 +212,8 @@ vf_info_t vf_info_boxblur = {
"boxblur",
"Michael Niedermayer",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_crop.c b/libmpcodecs/vf_crop.c
index f00cccadad..110bac5176 100644
--- a/libmpcodecs/vf_crop.c
+++ b/libmpcodecs/vf_crop.c
@@ -115,7 +115,8 @@ vf_info_t vf_info_crop = {
"crop",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_cropdetect.c b/libmpcodecs/vf_cropdetect.c
index c8d4aae560..e8bdf83e88 100644
--- a/libmpcodecs/vf_cropdetect.c
+++ b/libmpcodecs/vf_cropdetect.c
@@ -133,7 +133,8 @@ vf_info_t vf_info_cropdetect = {
"cropdetect",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_denoise3d.c b/libmpcodecs/vf_denoise3d.c
index 03b4569991..ea9e5f27a0 100644
--- a/libmpcodecs/vf_denoise3d.c
+++ b/libmpcodecs/vf_denoise3d.c
@@ -265,7 +265,8 @@ vf_info_t vf_info_denoise3d = {
"denoise3d",
"Daniel Moreno",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_detc.c b/libmpcodecs/vf_detc.c
index bccd3c6c9e..bf311d7938 100644
--- a/libmpcodecs/vf_detc.c
+++ b/libmpcodecs/vf_detc.c
@@ -457,7 +457,8 @@ vf_info_t vf_info_detc = {
"detc",
"Rich Felker",
"",
- open
+ open,
+ NULL
};
diff --git a/libmpcodecs/vf_dint.c b/libmpcodecs/vf_dint.c
index 679a306ae6..80f95b1263 100644
--- a/libmpcodecs/vf_dint.c
+++ b/libmpcodecs/vf_dint.c
@@ -191,5 +191,6 @@ vf_info_t vf_info_dint = {
"dint",
"A.G.",
"",
- open
+ open,
+ NULL
};
diff --git a/libmpcodecs/vf_down3dright.c b/libmpcodecs/vf_down3dright.c
index c142c05675..6a9f979420 100644
--- a/libmpcodecs/vf_down3dright.c
+++ b/libmpcodecs/vf_down3dright.c
@@ -139,6 +139,7 @@ vf_info_t vf_info_down3dright = {
"down3dright",
"Zdenek Kabelac",
"",
- open
+ open,
+ NULL
};
diff --git a/libmpcodecs/vf_dvbscale.c b/libmpcodecs/vf_dvbscale.c
index 987482e12b..3dcdb1b3fa 100644
--- a/libmpcodecs/vf_dvbscale.c
+++ b/libmpcodecs/vf_dvbscale.c
@@ -42,7 +42,8 @@ vf_info_t vf_info_dvbscale = {
"dvbscale",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_eq.c b/libmpcodecs/vf_eq.c
index 8ee2f6bf30..a5c27b7fd1 100644
--- a/libmpcodecs/vf_eq.c
+++ b/libmpcodecs/vf_eq.c
@@ -219,6 +219,7 @@ vf_info_t vf_info_eq = {
"eq",
"Richard Felker",
"",
- open
+ open,
+ NULL
};
diff --git a/libmpcodecs/vf_eq2.c b/libmpcodecs/vf_eq2.c
index 919b2ad8c9..ae7ce9beda 100644
--- a/libmpcodecs/vf_eq2.c
+++ b/libmpcodecs/vf_eq2.c
@@ -463,5 +463,6 @@ vf_info_t vf_info_eq2 = {
"eq2",
"Hampa Hug, Daniel Moreno, Richard Felker",
"",
- &open
+ &open,
+ NULL
};
diff --git a/libmpcodecs/vf_expand.c b/libmpcodecs/vf_expand.c
index 550fdb20b6..e3681d9d84 100644
--- a/libmpcodecs/vf_expand.c
+++ b/libmpcodecs/vf_expand.c
@@ -356,7 +356,8 @@ vf_info_t vf_info_expand = {
"expand",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_fame.c b/libmpcodecs/vf_fame.c
index a996019aa8..820865e0a5 100644
--- a/libmpcodecs/vf_fame.c
+++ b/libmpcodecs/vf_fame.c
@@ -145,7 +145,8 @@ vf_info_t vf_info_fame = {
"fame",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_field.c b/libmpcodecs/vf_field.c
index 0e2a5c9585..21efc7b59e 100644
--- a/libmpcodecs/vf_field.c
+++ b/libmpcodecs/vf_field.c
@@ -72,7 +72,8 @@ vf_info_t vf_info_field = {
"field",
"Rich Felker",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_flip.c b/libmpcodecs/vf_flip.c
index 78706aff2f..7977dd9229 100644
--- a/libmpcodecs/vf_flip.c
+++ b/libmpcodecs/vf_flip.c
@@ -90,7 +90,8 @@ vf_info_t vf_info_flip = {
"flip",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_format.c b/libmpcodecs/vf_format.c
index 5e351f0d2d..772a575478 100644
--- a/libmpcodecs/vf_format.c
+++ b/libmpcodecs/vf_format.c
@@ -66,7 +66,8 @@ vf_info_t vf_info_format = {
"format",
"A'rpi",
"FIXME! get_image()/put_image()",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_halfpack.c b/libmpcodecs/vf_halfpack.c
index dac3c61630..b4fc0e648f 100644
--- a/libmpcodecs/vf_halfpack.c
+++ b/libmpcodecs/vf_halfpack.c
@@ -216,6 +216,7 @@ vf_info_t vf_info_halfpack = {
"halfpack",
"Richard Felker",
"",
- open
+ open,
+ NULL
};
diff --git a/libmpcodecs/vf_hqdn3d.c b/libmpcodecs/vf_hqdn3d.c
index 341c282288..ce59d0f66e 100644
--- a/libmpcodecs/vf_hqdn3d.c
+++ b/libmpcodecs/vf_hqdn3d.c
@@ -290,7 +290,8 @@ vf_info_t vf_info_hqdn3d = {
"hqdn3d",
"Daniel Moreno & A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_il.c b/libmpcodecs/vf_il.c
index d4e9a840db..1cbf1135ec 100644
--- a/libmpcodecs/vf_il.c
+++ b/libmpcodecs/vf_il.c
@@ -145,7 +145,8 @@ vf_info_t vf_info_il = {
"il",
"Michael Niedermayer",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_lavc.c b/libmpcodecs/vf_lavc.c
index 5c84665368..57378e9b05 100644
--- a/libmpcodecs/vf_lavc.c
+++ b/libmpcodecs/vf_lavc.c
@@ -200,7 +200,8 @@ vf_info_t vf_info_lavc = {
"lavc",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_lavcdeint.c b/libmpcodecs/vf_lavcdeint.c
index eee128768c..7b4188eefe 100644
--- a/libmpcodecs/vf_lavcdeint.c
+++ b/libmpcodecs/vf_lavcdeint.c
@@ -183,7 +183,8 @@ vf_info_t vf_info_lavcdeint = {
"Joe Rabinoff",
"libavcodec's internal deinterlacer, in case you don't like "
"the builtin ones (invoked with -pp or -npp)",
- open
+ open,
+ NULL
};
diff --git a/libmpcodecs/vf_mirror.c b/libmpcodecs/vf_mirror.c
index a16a062ab4..3d77730e12 100644
--- a/libmpcodecs/vf_mirror.c
+++ b/libmpcodecs/vf_mirror.c
@@ -109,7 +109,8 @@ vf_info_t vf_info_mirror = {
"mirror",
"Eyck",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_noise.c b/libmpcodecs/vf_noise.c
index 7a1ce5b739..d11178a100 100644
--- a/libmpcodecs/vf_noise.c
+++ b/libmpcodecs/vf_noise.c
@@ -464,7 +464,8 @@ vf_info_t vf_info_noise = {
"noise",
"Michael Niedermayer",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_palette.c b/libmpcodecs/vf_palette.c
index b7f2cd7d2d..51d69405dc 100644
--- a/libmpcodecs/vf_palette.c
+++ b/libmpcodecs/vf_palette.c
@@ -190,7 +190,8 @@ vf_info_t vf_info_palette = {
"palette",
"A'rpi & Alex",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_perspective.c b/libmpcodecs/vf_perspective.c
index 30ee17fcd3..59e2f3f467 100644
--- a/libmpcodecs/vf_perspective.c
+++ b/libmpcodecs/vf_perspective.c
@@ -335,7 +335,8 @@ vf_info_t vf_info_perspective = {
"perspective",
"Michael Niedermayer",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_pp.c b/libmpcodecs/vf_pp.c
index 58b996bc72..f9b79039ea 100644
--- a/libmpcodecs/vf_pp.c
+++ b/libmpcodecs/vf_pp.c
@@ -239,7 +239,8 @@ vf_info_t vf_info_pp = {
"pp",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_rectangle.c b/libmpcodecs/vf_rectangle.c
index a27c3f8bff..2325c08410 100644
--- a/libmpcodecs/vf_rectangle.c
+++ b/libmpcodecs/vf_rectangle.c
@@ -168,5 +168,6 @@ vf_info_t vf_info_rectangle = {
"rectangle",
"Kim Minh Kaplan",
"",
- open
+ open,
+ NULL
};
diff --git a/libmpcodecs/vf_rgb2bgr.c b/libmpcodecs/vf_rgb2bgr.c
index 99574b17db..0db4b2c4d2 100644
--- a/libmpcodecs/vf_rgb2bgr.c
+++ b/libmpcodecs/vf_rgb2bgr.c
@@ -97,7 +97,8 @@ vf_info_t vf_info_rgb2bgr = {
"rgb2bgr",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_rotate.c b/libmpcodecs/vf_rotate.c
index fb5e7e96e8..5cb42a86ae 100644
--- a/libmpcodecs/vf_rotate.c
+++ b/libmpcodecs/vf_rotate.c
@@ -130,7 +130,8 @@ vf_info_t vf_info_rotate = {
"rotate",
"A'rpi",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_sab.c b/libmpcodecs/vf_sab.c
index d4b6d5b419..3c6e686ac9 100644
--- a/libmpcodecs/vf_sab.c
+++ b/libmpcodecs/vf_sab.c
@@ -311,7 +311,8 @@ vf_info_t vf_info_sab = {
"sab",
"Michael Niedermayer",
"",
- open
+ open,
+ NULL
};
//===========================================================================//
diff --git a/libmpcodecs/vf_scale.c b/libmpcodecs/vf_scale.c
index fd8a1f061b..9637804dd7 100644
--- a/libmpcodecs/vf_scale.c
+++ b/libmpcodecs/vf_scale.c
@@ -13,7 +13,10 @@
#include "../libvo/fastmemcpy.h"
#include "../postproc/swscale.h"
-struct vf_priv_s {
+#include "m_option.h"
+#include "m_struct.h"
+
+static struct vf_priv_s {
int w,h;
int v_chr_drop;
int param;
@@ -21,6 +24,14 @@ struct vf_priv_s {
struct SwsContext *ctx;
unsigned char* palette;
mp_image_t *dmpi;
+} vf_priv_dflt = {
+ -1,-1,
+ 0,
+ 0,
+ 0,
+ NULL,
+ NULL,
+ NULL
};
extern int opt_screen_size_x;
@@ -348,6 +359,7 @@ static int open(vf_instance_t *vf, char* args){
vf->put_image=put_image;
vf->query_format=query_format;
vf->control= control;
+ if(!vf->priv) {
vf->priv=malloc(sizeof(struct vf_priv_s));
// TODO: parse args ->
vf->priv->ctx=NULL;
@@ -356,6 +368,7 @@ static int open(vf_instance_t *vf, char* args){
vf->priv->v_chr_drop=0;
vf->priv->param=0;
vf->priv->palette=NULL;
+ } // if(!vf->priv)
if(args) sscanf(args, "%d:%d:%d:%d",
&vf->priv->w,
&vf->priv->h,
@@ -367,12 +380,66 @@ static int open(vf_instance_t *vf, char* args){
return 1;
}
+/// An example of presets usage
+static struct size_preset {
+ char* name;
+ int w, h;
+} vf_size_presets_defs[] = {
+ // TODO add more 'standard' resolutions
+ { "pal", 768, 576 },
+ { NULL, 0, 0}
+};
+
+#define ST_OFF(f) M_ST_OFF(struct size_preset,f)
+static m_option_t vf_size_