]> git.sesse.net Git - vlc/commitdiff
Make logo-x, logo-y operate relative to upper left corner. logo-x/-y/-position/...
authorMark Moriarty <markfm@videolan.org>
Fri, 4 Mar 2005 12:12:11 +0000 (12:12 +0000)
committerMark Moriarty <markfm@videolan.org>
Fri, 4 Mar 2005 12:12:11 +0000 (12:12 +0000)
modules/control/rc.c
modules/video_filter/logo.c

index 355f356af2673c70894af512a860992eb8f6d934..2411789e9de275b92e82518d1ad2edfb47fda5f5 100644 (file)
@@ -418,6 +418,17 @@ static void Run( intf_thread_t *p_intf )
     var_Create( p_intf, "time-size", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
     var_AddCallback( p_intf, "time-size", Other, NULL );
     
+    /* logo on the fly items */
+    var_Create( p_intf, "logo-x", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
+    var_AddCallback( p_intf, "logo-x", Other, NULL );
+    var_Create( p_intf, "logo-y", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
+    var_AddCallback( p_intf, "logo-y", Other, NULL );
+    var_Create( p_intf, "logo-position", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
+    var_AddCallback( p_intf, "logo-position", Other, NULL );
+    var_Create( p_intf, "logo-transparency", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
+    var_AddCallback( p_intf, "logo-transparency", Other, NULL );
+    
+    
     var_Create( p_intf, "pause", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
     var_AddCallback( p_intf, "pause", Input, NULL );
     var_Create( p_intf, "seek", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
@@ -709,21 +720,26 @@ static void Run( intf_thread_t *p_intf )
             if (p_intf->p_sys->b_extend)
             {
                 msg_rc(_("| marq-marquee STRING  . . overlay STRING in video\n"));
-                msg_rc(_("| marq-x X . . . . .  offset of marquee, from left\n"));
-                msg_rc(_("| marq-y Y . . . . . . offset of marquee, from top\n"));
+                msg_rc(_("| marq-x X . . . . . . . . . . . .offset from left\n"));
+                msg_rc(_("| marq-y Y . . . . . . . . . . . . offset from top\n"));
                 msg_rc(_("| marq-position #. . .  .relative position control\n"));
-                msg_rc(_("| marq-color # . . . .  font color of marquee, RGB\n"));
-                msg_rc(_("| marq-opacity # . . . . . . . .opacity of marquee\n"));
-                msg_rc(_("| marq-timeout T. . . .  timeout of marquee, in ms\n"));
-                msg_rc(_("| marq-size # . . . font size of marquee, in pixels\n"));
+                msg_rc(_("| marq-color # . . . . . . . . . . font color, RGB\n"));
+                msg_rc(_("| marq-opacity # . . . . . . . . . . . . . opacity\n"));
+                msg_rc(_("| marq-timeout T. . . . . . . . . . timeout, in ms\n"));
+                msg_rc(_("| marq-size # . . . . . . . . font size, in pixels\n"));
                 msg_rc(  "| \n");
                 msg_rc(_("| time-format STRING . . . overlay STRING in video\n"));
-                msg_rc(_("| time-x X . . . . .offset of timestamp, from left\n"));
-                msg_rc(_("| time-y Y . . . . . offset of timestamp, from top\n"));
-                msg_rc(_("| time-position #. . .  .relative position control\n"));
-                msg_rc(_("| time-color # . . .  font color of timestamp, RGB\n"));
-                msg_rc(_("| time-opacity # . . . . . . .opacity of timestamp\n"));
-                msg_rc(_("| time-size # . .font size of timestamp, in pixels\n"));
+                msg_rc(_("| time-x X . . . . . . . . . . . .offset from left\n"));
+                msg_rc(_("| time-y Y . . . . . . . . . . . . offset from top\n"));
+                msg_rc(_("| time-position #. . . . . . . . relative position\n"));
+                msg_rc(_("| time-color # . . . . . . . . . . font color, RGB\n"));
+                msg_rc(_("| time-opacity # . . . . . . . . . . . . . opacity\n"));
+                msg_rc(_("| time-size # . . . . . . . . font size, in pixels\n"));
+                msg_rc(  "| \n");
+                msg_rc(_("| logo-x X . . . . . . . . . . . .offset from left\n"));
+                msg_rc(_("| logo-y Y . . . . . . . . . . . . offset from top\n"));
+                msg_rc(_("| logo-position #. . . . . . . . relative position\n"));
+                msg_rc(_("| logo-transparency #. . . . . . . . .transparency\n"));
                 msg_rc(  "| \n");
             }    
             msg_rc(_("| help . . . . . . . . . . . . . this help message\n"));
@@ -1216,6 +1232,38 @@ static int Other( vlc_object_t *p_this, char const *psz_cmd,
             var_Set( p_inp->p_libvlc, "time-size", val );
         }
     }
+    else if( !strcmp( psz_cmd, "logo-x" ) )
+    {
+        if( strlen( newval.psz_string ) > 0) 
+        {
+            val.i_int = atoi( newval.psz_string );
+            var_Set( p_inp->p_libvlc, "logo-x", val );
+        }
+    }
+    else if( !strcmp( psz_cmd, "logo-y" ) )
+    {
+        if( strlen( newval.psz_string ) > 0) 
+        {
+            val.i_int = atoi( newval.psz_string );
+            var_Set( p_inp->p_libvlc, "logo-y", val );
+        }
+    }
+    else if( !strcmp( psz_cmd, "logo-position" ) )
+    {
+        if( strlen( newval.psz_string ) > 0) 
+        {
+            val.i_int = atoi( newval.psz_string );
+            var_Set( p_inp->p_libvlc, "logo-position", val );
+        }
+    }
+    else if( !strcmp( psz_cmd, "logo-transparency" ) )
+    {
+        if( strlen( newval.psz_string ) > 0) 
+        {
+            val.i_int = strtol( newval.psz_string, NULL, 0 );
+            var_Set( p_inp->p_libvlc, "logo-transparency", val );
+        }
+    }
 
     /*
      * sanity check
index b311004f72f7c14a0108ebb09cc53fa176ab453f..9bd00ed243a3255f23c4b92ae3ea7969fbd4bfce 100644 (file)
@@ -34,6 +34,7 @@
 #include "vlc_filter.h"
 #include "filter_common.h"
 #include "vlc_image.h"
+#include "osd.h"
 
 #ifdef LoadImage
 #   undef LoadImage
@@ -95,7 +96,7 @@ vlc_module_begin();
 
     add_file( "logo-file", NULL, NULL, FILE_TEXT, FILE_LONGTEXT, VLC_FALSE );
     add_integer( "logo-x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, VLC_FALSE );
-    add_integer( "logo-y", -1, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_FALSE );
+    add_integer( "logo-y", 0, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_FALSE );
     add_integer_with_range( "logo-transparency", 255, 0, 255, NULL,
         TRANS_TEXT, TRANS_LONGTEXT, VLC_FALSE );
     add_integer( "logo-position", 6, NULL, POS_TEXT, POS_LONGTEXT, VLC_TRUE );
@@ -195,7 +196,7 @@ static int Create( vlc_object_t *p_this )
         free( p_sys );
         return VLC_EGENERIC;
     }
-
+    
     p_sys->i_width = p_sys->p_pic->p[Y_PLANE].i_visible_pitch;
     p_sys->i_height = p_sys->p_pic->p[Y_PLANE].i_visible_lines;
 
@@ -522,13 +523,6 @@ static int CreateFilter( vlc_object_t *p_this )
     var_AddCallback( p_input->p_libvlc, "logo-transparency", LogoCallback, p_sys );
     vlc_object_release( p_input );
 
-    p_sys->b_absolute = VLC_TRUE;
-    if( p_sys->posx < 0 || p_sys->posy < 0 )
-    {
-        p_sys->b_absolute = VLC_FALSE;
-        p_sys->posx = 0; p_sys->posy = 0;
-    }
-
     p_sys->p_pic = LoadImage( p_this, p_sys->psz_filename );
     if( !p_sys->p_pic )
     {
@@ -637,11 +631,23 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date )
     }
 
     vout_CopyPicture( p_filter, &p_region->picture, p_sys->p_pic );
-    p_region->i_x = 0;
-    p_region->i_y = 0;
-    p_spu->i_x = p_sys->posx;
-    p_spu->i_y = p_sys->posy;
-    p_spu->i_flags = p_sys->pos;
+
+    /*  where to locate the logo: */
+    if( p_sys->posx < 0 || p_sys->posy < 0 )
+    {   /* set to one of the 9 relative locations */
+        p_spu->i_flags = p_sys->pos;
+        p_spu->i_x = 0;
+        p_spu->i_y = 0;
+        p_spu->b_absolute = VLC_FALSE;
+    }
+    else
+    {   /*  set to an absolute xy, referenced to upper left corner */
+           p_spu->i_flags = OSD_ALIGN_LEFT | OSD_ALIGN_TOP;
+        p_spu->i_x = p_sys->posx;
+        p_spu->i_y = p_sys->posy;
+        p_spu->b_absolute = VLC_TRUE;
+    }
+
     p_spu->p_region = p_region;
     p_spu->i_alpha = p_sys->i_trans;