📄 media_player.c
字号:
libvlc_media_set_state( p_mi->p_md, libvlc_Ended, p_e ); /* Construct and send the event */ libvlc_event_t event; event.type = libvlc_MediaPlayerEndReached; libvlc_event_send( p_mi->p_event_manager, &event ); } if( p_mi->b_own_its_input_thread ) { vlc_mutex_lock( &p_mi->object_lock ); release_input_thread( p_mi ); /* This will stop the input thread */ vlc_mutex_unlock( &p_mi->object_lock ); } else { input_thread_t * p_input_thread = libvlc_get_input_thread( p_mi, p_e ); if( !p_input_thread ) return; input_StopThread( p_input_thread ); vlc_object_release( p_input_thread ); }}/************************************************************************** * Set Drawable **************************************************************************/void libvlc_media_player_set_drawable( libvlc_media_player_t *p_mi, libvlc_drawable_t drawable, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vout_thread_t *p_vout = NULL; p_mi->drawable = drawable; /* Allow on the fly drawable changing. This is tricky has this may * not be supported by every vout. We though can't disable it * because of some creepy drawable type that are not flexible enough * (Win32 HWND for instance) */ p_input_thread = libvlc_get_input_thread( p_mi, p_e ); if( !p_input_thread ) { /* No input, nothing more to do, we are fine */ libvlc_exception_clear( p_e ); return; } p_vout = vlc_object_find( p_input_thread, VLC_OBJECT_VOUT, FIND_CHILD ); if( p_vout ) { vout_Control( p_vout , VOUT_REPARENT, drawable); vlc_object_release( p_vout ); } vlc_object_release( p_input_thread );}/************************************************************************** * Get Drawable **************************************************************************/libvlc_drawable_tlibvlc_media_player_get_drawable ( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ VLC_UNUSED(p_e); return p_mi->drawable;}/************************************************************************** * Getters for stream information **************************************************************************/libvlc_time_t libvlc_media_player_get_length( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e); if( !p_input_thread ) return -1; var_Get( p_input_thread, "length", &val ); vlc_object_release( p_input_thread ); return (val.i_time+500LL)/1000LL;}libvlc_time_t libvlc_media_player_get_time( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e ); if( !p_input_thread ) return -1; var_Get( p_input_thread , "time", &val ); vlc_object_release( p_input_thread ); return (val.i_time+500LL)/1000LL;}void libvlc_media_player_set_time( libvlc_media_player_t *p_mi, libvlc_time_t time, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t value; p_input_thread = libvlc_get_input_thread ( p_mi, p_e ); if( !p_input_thread ) return; value.i_time = time*1000LL; var_Set( p_input_thread, "time", value ); vlc_object_release( p_input_thread );}void libvlc_media_player_set_position( libvlc_media_player_t *p_mi, float position, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; val.f_float = position; p_input_thread = libvlc_get_input_thread ( p_mi, p_e); if( !p_input_thread ) return; var_Set( p_input_thread, "position", val ); vlc_object_release( p_input_thread );}float libvlc_media_player_get_position( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e ); if( !p_input_thread ) return -1.0; var_Get( p_input_thread, "position", &val ); vlc_object_release( p_input_thread ); return val.f_float;}void libvlc_media_player_set_chapter( libvlc_media_player_t *p_mi, int chapter, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; val.i_int = chapter; p_input_thread = libvlc_get_input_thread ( p_mi, p_e); if( !p_input_thread ) return; var_Set( p_input_thread, "chapter", val ); vlc_object_release( p_input_thread );}int libvlc_media_player_get_chapter( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e ); if( !p_input_thread ) return -1.0; var_Get( p_input_thread, "chapter", &val ); vlc_object_release( p_input_thread ); return val.i_int;}int libvlc_media_player_get_chapter_count( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e ); if( !p_input_thread ) return -1.0; var_Change( p_input_thread, "chapter", VLC_VAR_CHOICESCOUNT, &val, NULL ); vlc_object_release( p_input_thread ); return val.i_int;}float libvlc_media_player_get_fps( 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 ); 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, libvlc_exception_t *p_e){ input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi, p_e); if ( !p_input_thread ) return false; if ( !p_input_thread->b_die && !p_input_thread->b_dead ) { vlc_object_release( p_input_thread ); return true; } vlc_object_release( p_input_thread ); return false;}void libvlc_media_player_set_rate( libvlc_media_player_t *p_mi, float rate, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; if( rate <= 0 ) RAISEVOID( "Rate value is invalid" ); val.i_int = 1000.0f/rate; p_input_thread = libvlc_get_input_thread ( p_mi, p_e); if ( !p_input_thread ) return; var_Set( p_input_thread, "rate", val ); vlc_object_release( p_input_thread );}float libvlc_media_player_get_rate( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e); if ( !p_input_thread ) return -1.0; var_Get( p_input_thread, "rate", &val ); vlc_object_release( p_input_thread ); return (float)1000.0f/val.i_int;}libvlc_state_t libvlc_media_player_get_state( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e ); if ( !p_input_thread ) { /* We do return the right value, no need to throw an exception */ if( libvlc_exception_raised( p_e ) ) libvlc_exception_clear( p_e ); return libvlc_Ended; } var_Get( p_input_thread, "state", &val ); vlc_object_release( p_input_thread ); return vlc_to_libvlc_state(val.i_int);}int libvlc_media_player_is_seekable( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e ); if ( !p_input_thread ) { /* We do return the right value, no need to throw an exception */ if( libvlc_exception_raised( p_e ) ) libvlc_exception_clear( p_e ); return false; } var_Get( p_input_thread, "seekable", &val ); vlc_object_release( p_input_thread ); return val.b_bool;}int libvlc_media_player_can_pause( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e ){ input_thread_t *p_input_thread; vlc_value_t val; p_input_thread = libvlc_get_input_thread ( p_mi, p_e ); if ( !p_input_thread ) { /* We do return the right value, no need to throw an exception */ if( libvlc_exception_raised( p_e ) ) libvlc_exception_clear( p_e ); return false; } var_Get( p_input_thread, "can-pause", &val ); vlc_object_release( p_input_thread ); return val.b_bool;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -