]> git.sesse.net Git - vlc/blobdiff - lib/video.c
Add subdir-objects automake option where appropriate
[vlc] / lib / video.c
index 7e092bd0559a0772d86c7611aa08454044749a17..43471b9e21b5e0cda1d57d00a4fe8bae8393c27e 100644 (file)
@@ -147,11 +147,17 @@ libvlc_video_take_snapshot( libvlc_media_player_t *p_mi, unsigned num,
     if (p_vout == NULL)
         return -1;
 
-    /* FIXME: This is not atomic. Someone else could change the values,
-     * at least in theory. */
+    /* FIXME: This is not atomic. All parameters should be passed at once
+     * (obviously _not_ with var_*()). Also, the libvlc object should not be
+     * used for the callbacks: that breaks badly if there are concurrent
+     * media players in the instance. */
+    var_Create( p_vout, "snapshot-width", VLC_VAR_INTEGER );
     var_SetInteger( p_vout, "snapshot-width", i_width);
+    var_Create( p_vout, "snapshot-height", VLC_VAR_INTEGER );
     var_SetInteger( p_vout, "snapshot-height", i_height );
+    var_Create( p_vout, "snapshot-path", VLC_VAR_STRING );
     var_SetString( p_vout, "snapshot-path", psz_filepath );
+    var_Create( p_vout, "snapshot-format", VLC_VAR_STRING );
     var_SetString( p_vout, "snapshot-format", "png" );
     var_TriggerCallback( p_vout, "video-snapshot" );
     vlc_object_release( p_vout );
@@ -163,6 +169,8 @@ int libvlc_video_get_size( libvlc_media_player_t *p_mi, unsigned num,
 {
     libvlc_media_track_info_t *info;
     int ret = -1;
+    if (!p_mi->p_md)
+        return ret;
     int infos = libvlc_media_get_tracks_info(p_mi->p_md, &info);
     if (infos <= 0)
         return ret;
@@ -275,11 +283,6 @@ void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi,
 int libvlc_video_get_spu( libvlc_media_player_t *p_mi )
 {
     input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi );
-    vlc_value_t val_list;
-    vlc_value_t val;
-    int i_spu = -1;
-    int i_ret = -1;
-    int i;
 
     if( !p_input_thread )
     {
@@ -287,24 +290,7 @@ int libvlc_video_get_spu( libvlc_media_player_t *p_mi )
         return -1;
     }
 
-    i_ret = var_Get( p_input_thread, "spu-es", &val );
-    if( i_ret < 0 )
-    {
-        vlc_object_release( p_input_thread );
-        libvlc_printerr( "Subtitle information not found" );
-        return -1;
-    }
-
-    var_Change( p_input_thread, "spu-es", VLC_VAR_GETCHOICES, &val_list, NULL );
-    for( i = 0; i < val_list.p_list->i_count; i++ )
-    {
-        if( val.i_int == val_list.p_list->p_values[i].i_int )
-        {
-            i_spu = i;
-            break;
-        }
-    }
-    var_FreeList( &val_list, NULL );
+    int i_spu = var_GetInteger( p_input_thread, "spu-es" );
     vlc_object_release( p_input_thread );
     return i_spu;
 }
@@ -328,26 +314,27 @@ libvlc_track_description_t *
     return libvlc_get_track_description( p_mi, "spu-es" );
 }
 
-int libvlc_video_set_spu( libvlc_media_player_t *p_mi, unsigned i_spu )
+int libvlc_video_set_spu( libvlc_media_player_t *p_mi, int i_spu )
 {
     input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi );
     vlc_value_t list;
-    int i_ret = 0;
+    int i_ret = -1;
 
     if( !p_input_thread )
         return -1;
 
     var_Change (p_input_thread, "spu-es", VLC_VAR_GETCHOICES, &list, NULL);
-
-    if (i_spu > (unsigned)list.p_list->i_count)
+    for (int i = 0; i < list.p_list->i_count; i++)
     {
-        libvlc_printerr( "Subtitle number out of range (%u/%u)",
-                         i_spu, list.p_list->i_count );
-        i_ret = -1;
-        goto end;
+        if( i_spu == list.p_list->p_values[i].i_int )
+        {
+            if( var_SetInteger( p_input_thread, "spu-es", i_spu ) < 0 )
+                break;
+            i_ret = 0;
+            goto end;
+        }
     }
-    var_SetInteger (p_input_thread, "spu-es",
-                    list.p_list->p_values[i_spu].i_int);
+    libvlc_printerr( "Track identifier not found" );
 end:
     vlc_object_release (p_input_thread);
     var_FreeList (&list, NULL);
@@ -541,32 +528,13 @@ libvlc_track_description_t *
 int libvlc_video_get_track( libvlc_media_player_t *p_mi )
 {
     input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi );
-    vlc_value_t val_list;
-    vlc_value_t val;
-    int i_track = -1;
 
     if( !p_input_thread )
         return -1;
 
-    if( var_Get( p_input_thread, "video-es", &val ) < 0 )
-    {
-        libvlc_printerr( "Video track information not found" );
-        vlc_object_release( p_input_thread );
-        return -1;
-    }
-
-    var_Change( p_input_thread, "video-es", VLC_VAR_GETCHOICES, &val_list, NULL );
-    for( int i = 0; i < val_list.p_list->i_count; i++ )
-    {
-        if( val_list.p_list->p_values[i].i_int == val.i_int )
-        {
-            i_track = i;
-            break;
-        }
-    }
-    var_FreeList( &val_list, NULL );
+    int id = var_GetInteger( p_input_thread, "video-es" );
     vlc_object_release( p_input_thread );
-    return i_track;
+    return id;
 }
 
 int libvlc_video_set_track( libvlc_media_player_t *p_mi, int i_track )
@@ -589,7 +557,7 @@ int libvlc_video_set_track( libvlc_media_player_t *p_mi, int i_track )
             goto end;
         }
     }
-    libvlc_printerr( "Video track number out of range" );
+    libvlc_printerr( "Track identifier not found" );
 end:
     var_FreeList( &val_list, NULL );
     vlc_object_release( p_input_thread );