/***************************************************************************** * libvlc_audio_set_track : Set the current audio track *****************************************************************************/ void libvlc_audio_set_track( libvlc_media_player_t *p_mi, int i_track, libvlc_exception_t *p_e ) { 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, "audio-es", VLC_VAR_GETCHOICES, &val_list, NULL ); if( (i_track < 0) || (i_track > val_list.p_list->i_count) ) { libvlc_exception_raise( p_e ); libvlc_printerr( "Audio track out of range" ); goto end; } newval = val_list.p_list->p_values[i_track]; i_ret = var_Set( p_input_thread, "audio-es", newval ); if( i_ret < 0 ) { libvlc_exception_raise( p_e ); libvlc_printerr( "Audio track out of range" ); /* Race... */ } end: var_FreeList( &val_list, NULL ); vlc_object_release( p_input_thread ); }
int libvlc_video_get_spu( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ) { input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi, p_e ); vlc_value_t val_list; vlc_value_t val; int i_spu = -1; int i_ret = -1; int i; if( !p_input_thread ) return -1; i_ret = var_Get( p_input_thread, "spu-es", &val ); if( i_ret < 0 ) { libvlc_exception_raise( p_e, "Getting subtitle information failed" ); vlc_object_release( p_input_thread ); return i_ret; } var_Change( p_input_thread, "spu-es", VLC_VAR_GETCHOICES, &val_list, NULL ); for( i = 0; i < val_list.p_list->i_count; i++ ) { vlc_value_t spu_val = val_list.p_list->p_values[i]; if( val.i_int == spu_val.i_int ) { i_spu = i; break; } } vlc_object_release( p_input_thread ); return i_spu; }
void libvlc_video_set_spu( libvlc_media_player_t *p_mi, int i_spu, libvlc_exception_t *p_e ) { 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( (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 ); }
/***************************************************************************** * libvlc_audio_set_track : Set the current audio track *****************************************************************************/ int libvlc_audio_set_track( libvlc_media_player_t *p_mi, int i_track ) { input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi ); vlc_value_t val_list; int i_ret = -1; if( !p_input_thread ) return -1; var_Change( p_input_thread, "audio-es", VLC_VAR_GETCHOICES, &val_list, NULL ); for( int i = 0; i < val_list.p_list->i_count; i++ ) { if( i_track == val_list.p_list->p_values[i].i_int ) { if( var_SetInteger( p_input_thread, "audio-es", i_track ) < 0 ) break; i_ret = 0; goto end; } } libvlc_printerr( "Track identifier not found" ); end: var_FreeList( &val_list, NULL ); vlc_object_release( p_input_thread ); return i_ret; }
/***************************************************************************** * libvlc_audio_get_track : Get the current audio track *****************************************************************************/ int libvlc_audio_get_track( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ) { input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi, p_e ); vlc_value_t val_list; vlc_value_t val; int i_track = -1; int i_ret = -1; int i; if( !p_input_thread ) return -1; i_ret = var_Get( p_input_thread, "audio-es", &val ); if( i_ret < 0 ) { vlc_object_release( p_input_thread ); libvlc_exception_raise( p_e ); libvlc_printerr( "Audio track information not found" ); return i_ret; } var_Change( p_input_thread, "audio-es", VLC_VAR_GETCHOICES, &val_list, NULL ); for( 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 ); vlc_object_release( p_input_thread ); return i_track; }
void libvlc_toggle_teletext( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ) { input_thread_t *p_input_thread; vlc_object_t *p_vbi; int i_ret; p_input_thread = libvlc_get_input_thread(p_mi, p_e); if( !p_input_thread ) return; p_vbi = (vlc_object_t *) vlc_object_find_name( p_input_thread, "zvbi", FIND_ANYWHERE ); if( p_vbi ) { const int i_teletext_es = var_GetInteger( p_input_thread, "teletext-es" ); const int i_spu_es = var_GetInteger( p_input_thread, "spu-es" ); if( (i_teletext_es >= 0) && (i_teletext_es == i_spu_es) ) { int i_page = 100; i_page = var_GetInteger( p_vbi, "vbi-page" ); i_page = (i_teletext_es >= 0) ? i_page : 0; i_ret = var_SetInteger( p_vbi, "vbi-page", i_page ); if( i_ret ) libvlc_exception_raise( p_e, "Unexpected error while setting teletext page" ); } else if( i_teletext_es >= 0 ) { bool opaque = true; opaque = var_GetBool( p_vbi, "vbi-opaque" ); i_ret = var_SetBool( p_vbi, "vbi-opaque", !opaque ); if( i_ret ) libvlc_exception_raise( p_e, "Unexpected error while setting teletext transparency" ); } vlc_object_release( p_vbi ); } else { /* Teletext is not enabled yet, so enable it. * Only after it is enable it is possible to view teletext pages */ const int i_teletext_es = var_GetInteger( p_input_thread, "teletext-es" ); if( i_teletext_es >= 0 ) { const int i_spu_es = var_GetInteger( p_input_thread, "spu-es" ); if( i_teletext_es == i_spu_es ) var_SetInteger( p_input_thread, "spu-es", -1 ); else var_SetInteger( p_input_thread, "spu-es", i_teletext_es ); } } vlc_object_release( p_input_thread ); }
void libvlc_media_player_set_pause( libvlc_media_player_t *p_mi, int paused ) { input_thread_t * p_input_thread = libvlc_get_input_thread( p_mi ); if( !p_input_thread ) return; libvlc_state_t state = libvlc_media_player_get_state( p_mi ); if( state == libvlc_Playing || state == libvlc_Buffering ) { if( paused ) { if( libvlc_media_player_can_pause( p_mi ) ) input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S ); else input_Stop( p_input_thread, true ); } } else { if( !paused ) input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S ); } vlc_object_release( p_input_thread ); }
/* internal function, used by audio, video */ libvlc_track_description_t * libvlc_get_track_description( libvlc_media_player_t *p_mi, const char *psz_variable ) { input_thread_t *p_input = libvlc_get_input_thread( p_mi ); libvlc_track_description_t *p_track_description = NULL, *p_actual, *p_previous; if( !p_input ) return NULL; vlc_value_t val_list, text_list; int i_ret = var_Change( p_input, psz_variable, VLC_VAR_GETLIST, &val_list, &text_list ); if( i_ret != VLC_SUCCESS ) return NULL; /* no tracks */ if( val_list.p_list->i_count <= 0 ) goto end; p_track_description = ( libvlc_track_description_t * ) malloc( sizeof( libvlc_track_description_t ) ); if ( !p_track_description ) { libvlc_printerr( "Not enough memory" ); goto end; } p_actual = p_track_description; p_previous = NULL; for( int i = 0; i < val_list.p_list->i_count; i++ ) { if( !p_actual ) { p_actual = ( libvlc_track_description_t * ) malloc( sizeof( libvlc_track_description_t ) ); if ( !p_actual ) { libvlc_track_description_list_release( p_track_description ); libvlc_printerr( "Not enough memory" ); goto end; } } p_actual->i_id = val_list.p_list->p_values[i].i_int; p_actual->psz_name = strdup( text_list.p_list->p_values[i].psz_string ); p_actual->p_next = NULL; if( p_previous ) p_previous->p_next = p_actual; p_previous = p_actual; p_actual = NULL; } end: var_FreeList( &val_list, &text_list ); vlc_object_release( p_input ); return p_track_description; }
void libvlc_media_player_next_frame( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi ); if( p_input_thread != NULL ) { var_TriggerCallback( p_input_thread, "frame-next" ); vlc_object_release( p_input_thread ); } }
/***************************************************************************** * libvlc_audio_get_track : Get the current audio track *****************************************************************************/ int libvlc_audio_get_track( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi ); if( !p_input_thread ) return -1; int id = var_GetInteger( p_input_thread, "audio-es" ); vlc_object_release( p_input_thread ); return id; }
/***************************************************************************** * libvlc_audio_get_delay : Get the current audio delay *****************************************************************************/ int64_t libvlc_audio_get_delay( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi ); int64_t val = 0; if( p_input_thread != NULL ) { val = var_GetTime( p_input_thread, "audio-delay" ); vlc_object_release( p_input_thread ); } return val; }
int libvlc_media_player_set_rate( libvlc_media_player_t *p_mi, float rate ) { var_SetFloat (p_mi, "rate", rate); input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return 0; var_SetFloat( p_input_thread, "rate", rate ); vlc_object_release( p_input_thread ); return 0; }
void libvlc_media_player_set_position( libvlc_media_player_t *p_mi, float position ) { input_thread_t *p_input_thread; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return; var_SetFloat( p_input_thread, "position", position ); vlc_object_release( p_input_thread ); }
void libvlc_media_player_set_time( libvlc_media_player_t *p_mi, libvlc_time_t i_time ) { input_thread_t *p_input_thread; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return; var_SetTime( p_input_thread, "time", to_mtime(i_time) ); vlc_object_release( p_input_thread ); }
void libvlc_media_player_set_chapter( libvlc_media_player_t *p_mi, int chapter ) { input_thread_t *p_input_thread; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return; var_SetInteger( p_input_thread, "chapter", chapter ); vlc_object_release( p_input_thread ); }
int libvlc_media_player_can_pause( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; bool b_can_pause; p_input_thread = libvlc_get_input_thread ( p_mi ); if ( !p_input_thread ) return false; b_can_pause = var_GetBool( p_input_thread, "can-pause" ); vlc_object_release( p_input_thread ); return b_can_pause; }
int libvlc_media_player_program_scrambled( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; bool b_program_scrambled; p_input_thread = libvlc_get_input_thread ( p_mi ); if ( !p_input_thread ) return false; b_program_scrambled = var_GetBool( p_input_thread, "program-scrambled" ); vlc_object_release( p_input_thread ); return b_program_scrambled; }
/***************************************************************************** * libvlc_audio_get_track_count : Get the number of available audio tracks *****************************************************************************/ int libvlc_audio_get_track_count( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread = libvlc_get_input_thread( p_mi ); int i_track_count; if( !p_input_thread ) return -1; i_track_count = var_CountChoices( p_input_thread, "audio-es" ); vlc_object_release( p_input_thread ); return i_track_count; }
float libvlc_media_player_get_fps( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi ); double f_fps = 0.0; if( p_input_thread ) { if( input_Control( p_input_thread, INPUT_GET_VIDEO_FPS, &f_fps ) ) f_fps = 0.0; vlc_object_release( p_input_thread ); } return f_fps; }
int libvlc_media_player_will_play( libvlc_media_player_t *p_mi ) { bool b_will_play; input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi ); if ( !p_input_thread ) return false; b_will_play = !p_input_thread->b_dead; vlc_object_release( p_input_thread ); return b_will_play; }
libvlc_time_t libvlc_media_player_get_time( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; libvlc_time_t i_time; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return -1; i_time = from_mtime(var_GetTime( p_input_thread , "time" )); vlc_object_release( p_input_thread ); return i_time; }
float libvlc_media_player_get_position( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; float f_position; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return -1.0; f_position = var_GetFloat( p_input_thread, "position" ); vlc_object_release( p_input_thread ); return f_position; }
int libvlc_media_player_get_chapter_count( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return -1; var_Change( p_input_thread, "chapter", VLC_VAR_CHOICESCOUNT, &val, NULL ); vlc_object_release( p_input_thread ); return val.i_int; }
void libvlc_media_player_previous_chapter( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return; int i_type = var_Type( p_input_thread, "next-chapter" ); var_TriggerCallback( p_input_thread, (i_type & VLC_VAR_TYPE) != 0 ? "prev-chapter":"prev-title" ); vlc_object_release( p_input_thread ); }
int libvlc_media_player_get_title_count( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return -1; int i_ret = var_Change( p_input_thread, "title", VLC_VAR_CHOICESCOUNT, &val, NULL ); vlc_object_release( p_input_thread ); return i_ret == VLC_SUCCESS ? val.i_int : -1; }
int libvlc_media_player_get_title( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; int i_title; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return -1; i_title = var_GetInteger( p_input_thread, "title" ); vlc_object_release( p_input_thread ); return i_title; }
/* * Remember to release the returned aout_instance_t since it is locked at * the end of this function. */ static aout_instance_t *GetAOut( libvlc_media_player_t *mp ) { assert( mp != NULL ); input_thread_t *p_input = libvlc_get_input_thread( mp ); if( p_input == NULL ) return NULL; aout_instance_t * p_aout = input_GetAout( p_input ); vlc_object_release( p_input ); if( p_aout == NULL ) libvlc_printerr( "No active audio output" ); return p_aout; }
int libvlc_media_player_get_chapter( libvlc_media_player_t *p_mi ) { input_thread_t *p_input_thread; int i_chapter; p_input_thread = libvlc_get_input_thread ( p_mi ); if( !p_input_thread ) return -1; i_chapter = var_GetInteger( p_input_thread, "chapter" ); vlc_object_release( p_input_thread ); return i_chapter; }
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_AddSubtitles( p_input_thread, psz_subtitle, true ) ) b_ret = true; vlc_object_release( p_input_thread ); } return b_ret; }
/***************************************************************************** * libvlc_audio_set_delay : Set the current audio delay *****************************************************************************/ int libvlc_audio_set_delay( libvlc_media_player_t *p_mi, int64_t i_delay ) { input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi ); int ret = 0; if( p_input_thread != NULL ) { var_SetTime( p_input_thread, "audio-delay", i_delay ); vlc_object_release( p_input_thread ); } else { ret = -1; } return ret; }