]> git.sesse.net Git - vlc/commitdiff
use config chain for the --sub-filter option.
authorAntoine Cellerier <dionoea@videolan.org>
Sun, 1 Oct 2006 16:33:59 +0000 (16:33 +0000)
committerAntoine Cellerier <dionoea@videolan.org>
Sun, 1 Oct 2006 16:33:59 +0000 (16:33 +0000)
Example:
  --sub-filter "marq{marquee=pouet}:marq{marquee=\$N,y=50,x=50}"
Sub filters other than marq still need to be changed
rc interface marq callbacks need to be fixed too

include/vlc_filter.h
modules/video_filter/marq.c
src/video_output/video_output.c
src/video_output/vout_subpictures.c

index 10db66bec801c8eca70442563d8bf3534dd5b4b9..bb651a69b1e2006386792ae3e9c44fe0a84700e7 100644 (file)
@@ -58,7 +58,7 @@ struct filter_t
     es_format_t         fmt_out;
 
     /* Filter configuration */
-    config_chain_t *        p_cfg;
+    config_chain_t *    p_cfg;
 
     picture_t *         ( * pf_video_filter ) ( filter_t *, picture_t * );
     block_t *           ( * pf_audio_filter ) ( filter_t *, block_t * );
index efbd180610a4f68ffeb32722e85515073703f918..ef1f2c29b66e81c60be3df6c5b723bbf2669d571 100644 (file)
@@ -130,6 +130,8 @@ static char *ppsz_pos_descriptions[] =
      { N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"),
      N_("Top-Left"), N_("Top-Right"), N_("Bottom-Left"), N_("Bottom-Right") };
 
+#define CFG_PREFIX "marq-"
+
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
@@ -139,26 +141,27 @@ vlc_module_begin();
     set_callbacks( CreateFilter, DestroyFilter );
     set_category( CAT_VIDEO );
     set_subcategory( SUBCAT_VIDEO_SUBPIC );
-    add_string( "marq-marquee", "VLC", NULL, MSG_TEXT, MSG_LONGTEXT,
+    add_string( CFG_PREFIX "marquee", "VLC", NULL, MSG_TEXT, MSG_LONGTEXT,
                 VLC_FALSE );
 
     set_section( N_("Position"), NULL );
-    add_integer( "marq-x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, VLC_TRUE );
-    add_integer( "marq-y", 0, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_TRUE );
-    add_integer( "marq-position", 5, NULL, POS_TEXT, POS_LONGTEXT, VLC_FALSE );
+    add_integer( CFG_PREFIX "x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, VLC_TRUE );
+    add_integer( CFG_PREFIX "y", 0, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_TRUE );
+    add_integer( CFG_PREFIX "position", 5, NULL, POS_TEXT, POS_LONGTEXT, VLC_FALSE );
 
     set_section( N_("Font"), NULL );
     /* 5 sets the default to top [1] left [4] */
     change_integer_list( pi_pos_values, ppsz_pos_descriptions, 0 );
-    add_integer_with_range( "marq-opacity", 255, 0, 255, NULL,
+    add_integer_with_range( CFG_PREFIX "opacity", 255, 0, 255, NULL,
         OPACITY_TEXT, OPACITY_LONGTEXT, VLC_FALSE );
-    add_integer( "marq-color", 0xFFFFFF, NULL, COLOR_TEXT, COLOR_LONGTEXT,
-                  VLC_FALSE );
+    add_integer( CFG_PREFIX "color", 0xFFFFFF, NULL, COLOR_TEXT, COLOR_LONGTEXT,
+                 VLC_FALSE );
         change_integer_list( pi_color_values, ppsz_color_descriptions, 0 );
-    add_integer( "marq-size", -1, NULL, SIZE_TEXT, SIZE_LONGTEXT, VLC_FALSE );
+    add_integer( CFG_PREFIX "size", -1, NULL, SIZE_TEXT, SIZE_LONGTEXT,
+                 VLC_FALSE );
 
     set_section( N_("Misc"), NULL );
-    add_integer( "marq-timeout", 0, NULL, TIMEOUT_TEXT, TIMEOUT_LONGTEXT,
+    add_integer( CFG_PREFIX "timeout", 0, NULL, TIMEOUT_TEXT, TIMEOUT_LONGTEXT,
                  VLC_FALSE );
 
     set_description( _("Marquee display") );
@@ -166,6 +169,10 @@ vlc_module_begin();
     add_shortcut( "time" );
 vlc_module_end();
 
+static const char *ppsz_filter_options[] = {
+    "marquee", "x", "y", "position", "color", "size", "timeout", NULL
+};
+
 /*****************************************************************************
  * CreateFilter: allocates marquee video filter
  *****************************************************************************/
@@ -185,9 +192,12 @@ static int CreateFilter( vlc_object_t *p_this )
     p_sys->p_style = malloc( sizeof( text_style_t ) );
     memcpy( p_sys->p_style, &default_text_style, sizeof( text_style_t ) );
 
+    config_ChainParse( p_filter, CFG_PREFIX, ppsz_filter_options,
+                       p_filter->p_cfg );
+
 #define CREATE_VAR( stor, type, var ) \
-    p_sys->stor = var_CreateGet##type( p_filter->p_libvlc, var ); \
-    var_AddCallback( p_filter->p_libvlc, var, MarqueeCallback, p_sys );
+    p_sys->stor = var_CreateGet##type( p_filter, var ); \
+    var_AddCallback( p_filter, var, MarqueeCallback, p_sys );
 
     CREATE_VAR( i_xoff, Integer, "marq-x" );
     CREATE_VAR( i_yoff, Integer, "marq-y" );
@@ -221,8 +231,8 @@ static void DestroyFilter( vlc_object_t *p_this )
 
     /* Delete the marquee variables */
 #define DEL_VAR(var) \
-    var_DelCallback( p_filter->p_libvlc, var, MarqueeCallback, p_sys ); \
-    var_Destroy( p_filter->p_libvlc, var );
+    var_DelCallback( p_filter, var, MarqueeCallback, p_sys ); \
+    var_Destroy( p_filter, var );
     DEL_VAR( "marq-x" );
     DEL_VAR( "marq-y" );
     DEL_VAR( "marq-marquee" );
index b686b3b11de4adfee6ddcd729b2c8665f26b6e7f..fc7530bd7e0918a178abd881078fd4d2fd966b55 100644 (file)
@@ -1555,7 +1555,7 @@ static int ParseVideoFilter2Chain( vout_thread_t *p_vout, char *psz_vfilters )
                             &p_vout->psz_vfilters[p_vout->i_vfilters_cfg],
                             &p_vout->p_vfilters_cfg[p_vout->i_vfilters_cfg],
                             psz_parser );
-            msg_Dbg( p_vout, "adding vfilter: %s\n",
+            msg_Dbg( p_vout, "adding vfilter: %s",
                      p_vout->psz_vfilters[p_vout->i_vfilters_cfg] );
             p_vout->i_vfilters_cfg++;
             if( psz_parser && psz_parser )
index 303d7babffeed6e9d719048c652edd8096db5936..cb75b68efe7d1bcb16bb6f99d1cdac44a0d7de4b 100644 (file)
@@ -98,7 +98,8 @@ spu_t *__spu_Create( vlc_object_t *p_this )
  */
 int spu_Init( spu_t *p_spu )
 {
-    char *psz_filter, *psz_filter_orig;
+    char *psz_filter;
+    char *psz_parser;
     vlc_value_t val;
 
     /* If the user requested a sub margin, we force the position. */
@@ -108,21 +109,28 @@ int spu_Init( spu_t *p_spu )
 
     var_Create( p_spu, "sub-filter", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
     var_Get( p_spu, "sub-filter", &val );
-    psz_filter = psz_filter_orig = val.psz_string;
-    while( psz_filter && *psz_filter )
+
+    psz_filter = val.psz_string;
+    psz_parser = psz_filter;
+
+    while( psz_parser && *psz_parser )
     {
-        char *psz_parser = strchr( psz_filter, ':' );
+        config_chain_t *p_cfg; /* Do we ever need to free this ? */
+        char *psz_name;
+
+        psz_parser = config_ChainCreate( &psz_name, &p_cfg, psz_parser );
 
-        if( psz_parser ) *psz_parser++ = 0;
+        msg_Dbg( p_spu, "adding sub-filter: %s", psz_name );
 
         p_spu->pp_filter[p_spu->i_filter] =
             vlc_object_create( p_spu, VLC_OBJECT_FILTER );
         vlc_object_attach( p_spu->pp_filter[p_spu->i_filter], p_spu );
         p_spu->pp_filter[p_spu->i_filter]->pf_sub_buffer_new = sub_new_buffer;
         p_spu->pp_filter[p_spu->i_filter]->pf_sub_buffer_del = sub_del_buffer;
+        p_spu->pp_filter[p_spu->i_filter]->p_cfg = p_cfg;;
         p_spu->pp_filter[p_spu->i_filter]->p_module =
             module_Need( p_spu->pp_filter[p_spu->i_filter],
-                         "sub filter", psz_filter, 0 );
+                         "sub filter", psz_name, 0 );
         if( p_spu->pp_filter[p_spu->i_filter]->p_module )
         {
             filter_owner_sys_t *p_sys = malloc( sizeof(filter_owner_sys_t) );
@@ -143,9 +151,8 @@ int spu_Init( spu_t *p_spu )
             msg_Dbg( p_spu, "can't add anymore filters" );
         }
 
-        psz_filter = psz_parser;
+        free( psz_name );
     }
-    if( psz_filter_orig ) free( psz_filter_orig );
 
     return VLC_EGENERIC;
 }