]> git.sesse.net Git - vlc/blobdiff - src/control/video.c
Remove msg_cb_data_t and simplify accordingly
[vlc] / src / control / video.c
index 29ae7318f3997f36ac64b8eaafb61752fc264c56..ff0697956c79c1c426de424b9e035ba5f55a8490 100644 (file)
@@ -47,7 +47,10 @@ static vout_thread_t **GetVouts( libvlc_media_player_t *p_mi, size_t *n )
 {
     input_thread_t *p_input = libvlc_get_input_thread( p_mi );
     if( !p_input )
+    {
+        *n = 0;
         return NULL;
+    }
 
     vout_thread_t **pp_vouts;
     if (input_Control( p_input, INPUT_GET_VOUTS, &pp_vouts, n))
@@ -150,7 +153,8 @@ libvlc_video_take_snapshot( libvlc_media_player_t *p_mi, unsigned num,
     var_SetInteger( p_vout, "snapshot-height", i_height );
     var_SetString( p_vout, "snapshot-path", psz_filepath );
     var_SetString( p_vout, "snapshot-format", "png" );
-    var_TriggerCallback (p_vout, "video-snapshot" );
+    var_TriggerCallback( p_vout, "video-snapshot" );
+    vlc_object_release( p_vout );
     return 0;
 }
 
@@ -223,7 +227,7 @@ void libvlc_video_set_scale( libvlc_media_player_t *p_mp, float f_scale )
 {
     if (f_scale != 0.)
         var_SetFloat (p_mp, "scale", f_scale);
-    var_SetBool (p_mp, "autoscale", f_scale != 0.);
+    var_SetBool (p_mp, "autoscale", f_scale == 0.);
 
     /* Apply to current video outputs (if any) */
     size_t n;
@@ -234,7 +238,7 @@ void libvlc_video_set_scale( libvlc_media_player_t *p_mp, float f_scale )
 
         if (f_scale != 0.)
             var_SetFloat (p_vout, "scale", f_scale);
-        var_SetBool (p_mp, "autoscale", f_scale != 0.);
+        var_SetBool (p_vout, "autoscale", f_scale == 0.);
         vlc_object_release (p_vout);
     }
     free (pp_vouts);
@@ -283,7 +287,7 @@ int libvlc_video_get_spu( libvlc_media_player_t *p_mi )
     if( i_ret < 0 )
     {
         vlc_object_release( p_input_thread );
-        libvlc_printerr( "Subtitle informations not found" );
+        libvlc_printerr( "Subtitle information not found" );
         return -1;
     }
 
@@ -395,7 +399,14 @@ void libvlc_video_set_crop_geometry( libvlc_media_player_t *p_mi,
     for (size_t i = 0; i < n; i++)
     {
         vout_thread_t *p_vout = pp_vouts[i];
-
+        vlc_value_t val;
+
+        /* Make sure the geometry is in the choice list */
+        /* Earlier choices are removed to not grow a long list over time. */
+        /* FIXME: not atomic - lock? */
+        val.psz_string = (char *)psz_geometry;
+        var_Change (p_vout, "crop", VLC_VAR_CLEARCHOICES, NULL, NULL);
+        var_Change (p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &val);
         var_SetString (p_vout, "crop", psz_geometry);
         vlc_object_release (p_vout);
     }
@@ -552,10 +563,11 @@ void libvlc_video_set_deinterlace( libvlc_media_player_t *p_mi,
     if (psz_mode == NULL)
         psz_mode = "";
     if (*psz_mode
-     && strcmp (psz_mode, "blend")   && strcmp (psz_mode, "bob")
-     && strcmp (psz_mode, "discard") && strcmp (psz_mode, "linear")
-     && strcmp (psz_mode, "mean")    && strcmp (psz_mode, "x")
-     && strcmp (psz_mode, "yadif")   && strcmp (psz_mode, "yadif2x"))
+     && strcmp (psz_mode, "blend")    && strcmp (psz_mode, "bob")
+     && strcmp (psz_mode, "discard")  && strcmp (psz_mode, "linear")
+     && strcmp (psz_mode, "mean")     && strcmp (psz_mode, "x")
+     && strcmp (psz_mode, "yadif")    && strcmp (psz_mode, "yadif2x")
+     && strcmp (psz_mode, "phosphor") && strcmp (psz_mode, "ivtc"))
         return;
 
     if (*psz_mode)
@@ -597,7 +609,7 @@ static vlc_object_t *get_object( libvlc_media_player_t * p_mi,
 
     if( vout )
     {
-        object = vlc_object_find_name( vout, name, FIND_CHILD );
+        object = vlc_object_find_name( vout, name );
         vlc_object_release(vout);
     }
     else