[vlc-commits] marq: add --marq-file to read/update the text from a file

Rémi Denis-Courmont git at videolan.org
Thu May 10 18:51:14 CEST 2012


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu May 10 19:49:01 2012 +0300| [fdfdfc52ee5b0842d879dd98736eac3bf9806c93] | committer: Rémi Denis-Courmont

marq: add --marq-file to read/update the text from a file

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fdfdfc52ee5b0842d879dd98736eac3bf9806c93
---

 modules/video_filter/marq.c |   43 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 42 insertions(+), 1 deletions(-)

diff --git a/modules/video_filter/marq.c b/modules/video_filter/marq.c
index 9806b90..e15cd79 100644
--- a/modules/video_filter/marq.c
+++ b/modules/video_filter/marq.c
@@ -46,7 +46,7 @@ static int  CreateFilter ( vlc_object_t * );
 static void DestroyFilter( vlc_object_t * );
 static subpicture_t *Filter( filter_t *, mtime_t );
 
-
+static char *ReadFile( filter_t *, const char * );
 static int MarqueeCallback( vlc_object_t *p_this, char const *psz_var,
                             vlc_value_t oldval, vlc_value_t newval,
                             void *p_data );
@@ -74,6 +74,7 @@ struct filter_sys_t
     int i_timeout;
 
     char *format; /**< marquee text format */
+    char *filepath; /**< marquee file path */
     char *message; /**< marquee plain text */
 
     text_style_t *p_style; /* font control */
@@ -99,6 +100,8 @@ struct filter_sys_t
     "$N = name, $O = audio language, $P = position (in %), $R = rate, " \
     "$S = audio sample rate (in kHz), " \
     "$T = time, $U = publisher, $V = volume, $_ = new line) ")
+#define FILE_TEXT N_("Text file")
+#define FILE_LONGTEXT N_("File to read the marquee text from.")
 #define POSX_TEXT N_("X offset")
 #define POSX_LONGTEXT N_("X offset, from the left screen edge." )
 #define POSY_TEXT N_("Y offset")
@@ -152,6 +155,7 @@ vlc_module_begin ()
     set_subcategory( SUBCAT_VIDEO_SUBPIC )
     add_string( CFG_PREFIX "marquee", "VLC", MSG_TEXT, MSG_LONGTEXT,
                 false )
+    add_loadfile( CFG_PREFIX "file", NULL, FILE_TEXT, FILE_LONGTEXT, true )
 
     set_section( N_("Position"), NULL )
     add_integer( CFG_PREFIX "x", 0, POSX_TEXT, POSX_LONGTEXT, true )
@@ -217,6 +221,7 @@ static int CreateFilter( vlc_object_t *p_this )
     var_AddCallback( p_filter, "marq-refresh", MarqueeCallback, p_sys );
     CREATE_VAR( i_pos, Integer, "marq-position" );
     CREATE_VAR( format, String, "marq-marquee" );
+    p_sys->filepath = var_InheritString( p_filter, "marq-file" );
     p_sys->message = NULL;
     p_sys->p_style->i_font_alpha = var_CreateGetIntegerCommand( p_filter,
                                                             "marq-opacity" );
@@ -255,6 +260,7 @@ static void DestroyFilter( vlc_object_t *p_this )
     vlc_mutex_destroy( &p_sys->lock );
     text_style_Delete( p_sys->p_style );
     free( p_sys->format );
+    free( p_sys->filepath );
     free( p_sys->message );
     free( p_sys );
 }
@@ -274,6 +280,16 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date )
     if( p_sys->last_time + p_sys->i_refresh > date )
         goto out;
 
+    if( p_sys->filepath != NULL )
+    {
+        char *fmt = ReadFile( p_filter, p_sys->filepath );
+        if( fmt != NULL )
+        {
+            free( p_sys->format );
+            p_sys->format = fmt;
+        }
+    }
+
     char *msg = str_format( p_filter, p_sys->format ? p_sys->format : "" );
     if( unlikely( msg == NULL ) )
         goto out;
@@ -331,6 +347,31 @@ out:
     return p_spu;
 }
 
+static char *ReadFile( filter_t *obj, const char *path )
+{
+    FILE *stream = fopen( path, "rt" );
+    if( stream == NULL )
+    {
+        msg_Err( obj, "cannot open %s: %m", path );
+        return NULL;
+    }
+
+    char *line = NULL;
+
+    ssize_t len = getline( &line, &(size_t){ 0 }, stream );
+    if( len == -1 )
+    {
+        msg_Err( obj, "cannot read %s: %m", path );
+        clearerr( stream );
+        line = NULL;
+    }
+    fclose( stream );
+
+    if( len >= 1 && line[len - 1] == '\n' )
+        line[--len]  = '\0';
+    return line;
+}
+
 /**********************************************************************
  * Callback to update params on the fly
  **********************************************************************/



More information about the vlc-commits mailing list