www.pudn.com > kceasy-0.19-rc1-src.rar > vout_scale.diff


Index: src/video_output/vout_intf.c 
=================================================================== 
--- src/video_output/vout_intf.c	(revision 9302) 
+++ src/video_output/vout_intf.c	(working copy) 
@@ -43,6 +43,8 @@ 
                           vlc_value_t, vlc_value_t, void * ); 
 static int FullscreenCallback( vlc_object_t *, char const *, 
                                vlc_value_t, vlc_value_t, void * ); 
+static int ScaleCallback( vlc_object_t *, char const *, 
+                          vlc_value_t, vlc_value_t, void * ); 
  
 /***************************************************************************** 
  * vout_RequestWindow: Create/Get a video window if possible. 
@@ -222,6 +224,18 @@ 
         p_vout->i_changes |= VOUT_FULLSCREEN_CHANGE; 
     } 
     var_AddCallback( p_vout, "fullscreen", FullscreenCallback, NULL ); 
+ 
+    /* Add a variable for scaling to window */ 
+    var_Create( p_vout, "scale", VLC_VAR_BOOL ); 
+    text.psz_string = _("Fit to window"); 
+    var_Change( p_vout, "scale", VLC_VAR_SETTEXT, &text, NULL ); 
+    /* Set default */ 
+    val.b_bool = p_vout->b_scale; 
+    var_Set( p_vout, "scale", val); 
+    /* Check for parent override */ 
+    var_Change( p_vout, "scale", VLC_VAR_INHERITVALUE, &val, NULL ); 
+    p_vout->b_scale = val.b_bool; 
+    var_AddCallback( p_vout, "scale", ScaleCallback, NULL ); 
  
     /* Mouse coordinates */ 
     var_Create( p_vout, "mouse-x", VLC_VAR_INTEGER ); 
@@ -325,3 +339,30 @@ 
     var_Set( p_vout, "intf-change", val ); 
     return VLC_SUCCESS; 
 } 
+ 
+static int ScaleCallback( vlc_object_t *p_this, char const *psz_cmd, 
+                        vlc_value_t oldval, vlc_value_t newval, void *p_data ) 
+{ 
+    vout_thread_t *p_vout = (vout_thread_t *)p_this; 
+    playlist_t *p_playlist; 
+    vlc_value_t val; 
+ 
+    p_vout->b_scale = newval.b_bool; 
+    p_vout->i_changes |= VOUT_SCALE_CHANGE | VOUT_SIZE_CHANGE; 
+ 
+    p_playlist = (playlist_t *)vlc_object_find( p_this, VLC_OBJECT_PLAYLIST, 
+                                                 FIND_PARENT ); 
+    if( p_playlist ) 
+    { 
+        /* Modify playlist as well because the vout might have to be restarted */ 
+        var_Create( p_playlist, "scale", VLC_VAR_BOOL ); 
+        var_Set( p_playlist, "scale", newval ); 
+ 
+        vlc_object_release( p_playlist ); 
+    } 
+ 
+    val.b_bool = VLC_TRUE; 
+    var_Set( p_vout, "intf-change", val ); 
+    return VLC_SUCCESS; 
+} 
+