⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 media_player.c

📁 VLC Player Source Code
💻 C
📖 第 1 页 / 共 3 页
字号:
        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 + -