X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=lib%2Fvideo.c;h=43471b9e21b5e0cda1d57d00a4fe8bae8393c27e;hb=d3bd87aaf39384e888c4e06f7ecdf46e4efc41c1;hp=7e092bd0559a0772d86c7611aa08454044749a17;hpb=0e3b72f6a8bf2758c9c4559b60c6a0a776c6643f;p=vlc diff --git a/lib/video.c b/lib/video.c index 7e092bd055..43471b9e21 100644 --- a/lib/video.c +++ b/lib/video.c @@ -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 );