]> git.sesse.net Git - vlc/blobdiff - src/video_output/vout_intf.c
Add snapshot command to rc interface and make snapshot-width and snapshot-height...
[vlc] / src / video_output / vout_intf.c
index 3239a9e1c2297312ff9a6a6d916efad55f261eda..bf9481d3c109e49e5da78ec3569e613c57ac6993 100644 (file)
@@ -43,6 +43,7 @@
 
 #include <vlc_strings.h>
 #include <vlc_charset.h>
+#include "../libvlc.h"
 
 /*****************************************************************************
  * Local prototypes
@@ -97,7 +98,7 @@ void *vout_RequestWindow( vout_thread_t *p_vout,
 
     /* Check whether someone provided us with a window ID */
     var_Get( p_vout->p_libvlc, "drawable", &val );
-    if( val.i_int ) return (void *)val.i_int;
+    if( val.i_int ) return (void *)(intptr_t)val.i_int;
 
     /* Find if the main interface supports embedding */
     p_list = vlc_list_find( p_vout, VLC_OBJECT_INTF, FIND_ANYWHERE );
@@ -106,7 +107,7 @@ void *vout_RequestWindow( vout_thread_t *p_vout,
     for( i = 0; i < p_list->i_count; i++ )
     {
         p_intf = (intf_thread_t *)p_list->p_values[i].p_object;
-        if( p_intf->b_block && p_intf->pf_request_window ) break;
+        if( p_intf->pf_request_window ) break;
         p_intf = NULL;
     }
 
@@ -201,6 +202,8 @@ void vout_IntfInit( vout_thread_t *p_vout )
                 VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
     var_Create( p_vout, "snapshot-num", VLC_VAR_INTEGER );
     var_SetInteger( p_vout, "snapshot-num", 1 );
+    var_Create( p_vout, "snapshot-width", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
+    var_Create( p_vout, "snapshot-height", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
 
     var_Create( p_vout, "width", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
     var_Create( p_vout, "height", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
@@ -515,9 +518,10 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
         fmt_out.i_sar_num = fmt_out.i_sar_den = 1;
         /* FIXME: should not be hardcoded. We should be able to
         specify the snapshot size (snapshot-width and snapshot-height). */
-        fmt_out.i_width = 320;
-        fmt_out.i_height = 200;
+        fmt_out.i_width = var_GetInteger( p_vout, "snapshot-width" );
+        fmt_out.i_height = var_GetInteger( p_vout, "snapshot-height" );
         fmt_out.i_chroma = VLC_FOURCC( 'p','n','g',' ' );
+
         p_block = ( block_t* ) image_Write( p_image, p_pic, &fmt_in, &fmt_out );
         if( !p_block )
         {
@@ -570,12 +574,12 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
         return VLC_SUCCESS;
     }
 
-
 #if defined(__APPLE__) || defined(SYS_BEOS)
     if( !val.psz_string && p_vout->p_libvlc->psz_homedir )
     {
-        asprintf( &val.psz_string, "%s/Desktop",
-                  p_vout->p_libvlc->psz_homedir );
+        if( asprintf( &val.psz_string, "%s/Desktop",
+                      p_vout->p_libvlc->psz_homedir ) == -1 )
+            val.psz_string = NULL;
     }
 
 #elif defined(WIN32) && !defined(UNDER_CE)
@@ -617,21 +621,26 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
 
         if( p_mypicturesdir == NULL )
         {
-            asprintf( &val.psz_string, "%s\\" CONFIG_DIR,
-                      p_vout->p_libvlc->psz_homedir );
+            if( asprintf( &val.psz_string, "%s",
+                          p_vout->p_libvlc->psz_homedir ) == -1 )
+                val.psz_string = NULL;
         }
         else
         {
-            asprintf( &val.psz_string, p_mypicturesdir );
+            if( asprintf( &val.psz_string, p_mypicturesdir ) == -1 )
+                val.psz_string = NULL;
             free( p_mypicturesdir );
         }
     }
 
 #else
-    if( !val.psz_string && p_vout->p_libvlc->psz_homedir )
+    /* XXX: This saves in the data directory. Shouldn't we try saving
+     *      to psz_homedir/Desktop or something nicer ? */
+    if( !val.psz_string && p_vout->p_libvlc->psz_datadir )
     {
-        asprintf( &val.psz_string, "%s/" CONFIG_DIR,
-                  p_vout->p_libvlc->psz_homedir );
+        if( asprintf( &val.psz_string, "%s",
+                      p_vout->p_libvlc->psz_datadir ) == -1 )
+            val.psz_string = NULL;
     }
 #endif
 
@@ -651,11 +660,11 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
      * Did the user specify a directory? If not, path = NULL.
      */
     path = utf8_opendir ( (const char *)val.psz_string  );
-
     if ( path != NULL )
     {
-        char *psz_prefix = var_GetString( p_vout, "snapshot-prefix" );
-        if( !psz_prefix ) psz_prefix = strdup( "vlcsnap-" );
+        char *psz_prefix = var_GetNonEmptyString( p_vout, "snapshot-prefix" );
+        if( psz_prefix == NULL )
+            psz_prefix = strdup( "vlcsnap-" );
         else
         {
             char *psz_tmp = str_format( p_vout, psz_prefix );
@@ -888,19 +897,19 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width,
     {
         *pi_width = (int)( p_vout->fmt_in.i_visible_width * ll_zoom *
             p_vout->fmt_in.i_sar_num / p_vout->fmt_in.i_sar_den / FP_FACTOR );
-        *pi_height = (int)( p_vout->fmt_in.i_visible_height * ll_zoom 
+        *pi_height = (int)( p_vout->fmt_in.i_visible_height * ll_zoom
             / FP_FACTOR );
     }
     else
     {
-        *pi_width = (int)( p_vout->fmt_in.i_visible_width * ll_zoom 
+        *pi_width = (int)( p_vout->fmt_in.i_visible_width * ll_zoom
             / FP_FACTOR );
         *pi_height = (int)( p_vout->fmt_in.i_visible_height * ll_zoom *
             p_vout->fmt_in.i_sar_den / p_vout->fmt_in.i_sar_num / FP_FACTOR );
     }
 
 initwsize_end:
-    msg_Dbg( p_vout, "window size: %dx%d", p_vout->i_window_width, 
+    msg_Dbg( p_vout, "window size: %dx%d", p_vout->i_window_width,
              p_vout->i_window_height );
 
 #undef FP_FACTOR
@@ -1158,12 +1167,6 @@ static int FullscreenCallback( vlc_object_t *p_this, char const *psz_cmd,
     var_Set( p_playlist, "fullscreen", newval );
     pl_Release( p_playlist );
 
-    /* Disable "always on top" in fullscreen mode */
-    var_Get( p_vout, "video-on-top", &val );
-    if( val.b_bool )
-        vout_Control( p_vout, VOUT_SET_STAY_ON_TOP,
-                      (vlc_bool_t)!newval.b_bool );
-
     val.b_bool = VLC_TRUE;
     var_Set( p_vout, "intf-change", val );
     return VLC_SUCCESS;
@@ -1191,4 +1194,3 @@ static int TitleCallback( vlc_object_t *p_this, char const *psz_cmd,
         p_vout->i_title_position = newval.i_int;
     return VLC_SUCCESS;
 }
-