+ input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi, p_e );
+ vlc_value_t val_list;
+ vlc_value_t newval;
+ int i_ret = -1;
+
+ if( !p_input_thread ) return;
+
+ var_Change( p_input_thread, "spu-es", VLC_VAR_GETCHOICES, &val_list, NULL );
+
+ if( val_list.p_list->i_count == 0 )
+ {
+ libvlc_exception_raise( p_e, "Subtitle value out of range" );
+ vlc_object_release( p_input_thread );
+ return;
+ }
+
+ if( (i_spu < 0) && (i_spu > val_list.p_list->i_count) )
+ {
+ libvlc_exception_raise( p_e, "Subtitle value out of range" );
+ vlc_object_release( p_input_thread );
+ return;
+ }
+
+ newval = val_list.p_list->p_values[i_spu];
+ i_ret = var_Set( p_input_thread, "spu-es", newval );
+ if( i_ret < 0 )
+ {
+ libvlc_exception_raise( p_e, "Setting subtitle value failed" );
+ }
+ vlc_object_release( p_input_thread );
+}
+
+int libvlc_video_set_subtitle_file( libvlc_media_player_t *p_mi,
+ char *psz_subtitle,
+ libvlc_exception_t *p_e )
+{
+ input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
+ bool b_ret = false;
+
+ if( p_input_thread )
+ {
+ if( !input_AddSubtitle( p_input_thread, psz_subtitle, true ) )
+ b_ret = true;
+ vlc_object_release( p_input_thread );
+ }
+ return b_ret;
+}
+
+libvlc_track_description_t *
+ libvlc_video_get_title_description( libvlc_media_player_t *p_mi,
+ libvlc_exception_t * p_e )
+{
+ return libvlc_get_track_description( p_mi, "title", p_e);
+}
+
+libvlc_track_description_t *
+ libvlc_video_get_chapter_description( libvlc_media_player_t *p_mi,
+ int i_title,
+ libvlc_exception_t *p_e )
+{
+ char psz_title[12];
+ sprintf( psz_title, "title %2i", i_title );
+ return libvlc_get_track_description( p_mi, psz_title, p_e);
+}
+
+char *libvlc_video_get_crop_geometry( libvlc_media_player_t *p_mi,
+ libvlc_exception_t *p_e )
+{
+ char *psz_geometry = 0;
+ vout_thread_t *p_vout = GetVout( p_mi, p_e );
+
+ if( !p_vout ) return 0;
+
+ psz_geometry = var_GetNonEmptyString( p_vout, "crop" );