亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? media_player.c

?? VLC Player Source Code
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***************************************************************************** * media_player.c: Libvlc API Media Instance management functions ***************************************************************************** * Copyright (C) 2005 the VideoLAN team * $Id$ * * Authors: Clément Stenac <zorglub@videolan.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#include "libvlc_internal.h"#include <vlc/libvlc.h>#include <vlc_demux.h>#include <vlc_input.h>#include <vlc_vout.h>#include "libvlc.h"static voidinput_state_changed( const vlc_event_t * event, void * p_userdata );static intinput_seekable_changed( vlc_object_t * p_this, char const * psz_cmd,                        vlc_value_t oldval, vlc_value_t newval,                        void * p_userdata );static intinput_pausable_changed( vlc_object_t * p_this, char const * psz_cmd,                        vlc_value_t oldval, vlc_value_t newval,                        void * p_userdata );static intinput_position_changed( vlc_object_t * p_this, char const * psz_cmd,                     vlc_value_t oldval, vlc_value_t newval,                     void * p_userdata );static intinput_time_changed( vlc_object_t * p_this, char const * psz_cmd,                     vlc_value_t oldval, vlc_value_t newval,                     void * p_userdata );static const libvlc_state_t vlc_to_libvlc_state_array[] ={    [INIT_S]        = libvlc_NothingSpecial,    [OPENING_S]     = libvlc_Opening,    [BUFFERING_S]   = libvlc_Buffering,    [PLAYING_S]     = libvlc_Playing,    [PAUSE_S]       = libvlc_Paused,    [STOP_S]        = libvlc_Stopped,    [FORWARD_S]     = libvlc_Forward,    [BACKWARD_S]    = libvlc_Backward,    [END_S]         = libvlc_Ended,    [ERROR_S]       = libvlc_Error,};static inline libvlc_state_t vlc_to_libvlc_state( int vlc_state ){    if( vlc_state < 0 || vlc_state > 6 )        return libvlc_Ended;    return vlc_to_libvlc_state_array[vlc_state];}/* * Release the associated input thread * * Object lock is NOT held. */static void release_input_thread( libvlc_media_player_t *p_mi ){    input_thread_t * p_input_thread;    if( !p_mi || !p_mi->p_input_thread )        return;    p_input_thread = p_mi->p_input_thread;    /* No one is tracking this input_thread appart us. Destroy it */    if( p_mi->b_own_its_input_thread )    {        vlc_event_manager_t * p_em = input_get_event_manager( p_input_thread );        vlc_event_detach( p_em, vlc_InputStateChanged, input_state_changed, p_mi );        var_DelCallback( p_input_thread, "seekable", input_seekable_changed, p_mi );        var_DelCallback( p_input_thread, "pausable", input_pausable_changed, p_mi );        var_DelCallback( p_input_thread, "intf-change", input_position_changed, p_mi );        var_DelCallback( p_input_thread, "intf-change", input_time_changed, p_mi );        /* We owned this one */        input_StopThread( p_input_thread );        vlc_thread_join( p_input_thread );        var_Destroy( p_input_thread, "drawable" );    }    vlc_object_release( p_input_thread );    p_mi->p_input_thread = NULL;}/* * Retrieve the input thread. Be sure to release the object * once you are done with it. (libvlc Internal) * * Object lock is held. */input_thread_t *libvlc_get_input_thread( libvlc_media_player_t *p_mi,                                         libvlc_exception_t *p_e ){    input_thread_t *p_input_thread;    if( !p_mi ) RAISENULL( "Media Instance is NULL" );    vlc_mutex_lock( &p_mi->object_lock );    if( !p_mi->p_input_thread )    {        vlc_mutex_unlock( &p_mi->object_lock );        RAISENULL( "Input is NULL" );    }    p_input_thread = p_mi->p_input_thread;    vlc_object_yield( p_input_thread );    vlc_mutex_unlock( &p_mi->object_lock );    return p_input_thread;}/* * input_state_changed (Private) (vlc_InputStateChanged callback) */static voidinput_state_changed( const vlc_event_t * event, void * p_userdata ){    libvlc_media_player_t * p_mi = p_userdata;    libvlc_event_t forwarded_event;    libvlc_event_type_t type = event->u.input_state_changed.new_state;    switch ( type )    {        case INIT_S:            libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL);            forwarded_event.type = libvlc_MediaPlayerNothingSpecial;            break;        case OPENING_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Opening, NULL);            forwarded_event.type = libvlc_MediaPlayerOpening;            break;        case BUFFERING_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Buffering, NULL);            forwarded_event.type = libvlc_MediaPlayerBuffering;            break;        case PLAYING_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Playing, NULL);            forwarded_event.type = libvlc_MediaPlayerPlaying;            break;        case PAUSE_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Paused, NULL);            forwarded_event.type = libvlc_MediaPlayerPaused;            break;        case STOP_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Stopped, NULL);            forwarded_event.type = libvlc_MediaPlayerStopped;            break;        case FORWARD_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Forward, NULL);            forwarded_event.type = libvlc_MediaPlayerForward;            break;        case BACKWARD_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Backward, NULL);            forwarded_event.type = libvlc_MediaPlayerBackward;            break;        case END_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Ended, NULL);            forwarded_event.type = libvlc_MediaPlayerEndReached;            break;        case ERROR_S:            libvlc_media_set_state( p_mi->p_md, libvlc_Error, NULL);            forwarded_event.type = libvlc_MediaPlayerEncounteredError;            break;        default:            return;    }    libvlc_event_send( p_mi->p_event_manager, &forwarded_event );    return;}static intinput_seekable_changed( vlc_object_t * p_this, char const * psz_cmd,                        vlc_value_t oldval, vlc_value_t newval,                        void * p_userdata ){    VLC_UNUSED(oldval);    VLC_UNUSED(p_this);    VLC_UNUSED(psz_cmd);    libvlc_media_player_t * p_mi = p_userdata;    libvlc_event_t event;    libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL);    event.type = libvlc_MediaPlayerSeekableChanged;    event.u.media_player_seekable_changed.new_seekable = newval.b_bool;    libvlc_event_send( p_mi->p_event_manager, &event );    return VLC_SUCCESS;}static intinput_pausable_changed( vlc_object_t * p_this, char const * psz_cmd,                        vlc_value_t oldval, vlc_value_t newval,                        void * p_userdata ){    VLC_UNUSED(oldval);    VLC_UNUSED(p_this);    VLC_UNUSED(psz_cmd);    libvlc_media_player_t * p_mi = p_userdata;    libvlc_event_t event;    libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL);    event.type = libvlc_MediaPlayerPausableChanged;    event.u.media_player_pausable_changed.new_pausable = newval.b_bool;    libvlc_event_send( p_mi->p_event_manager, &event );    return VLC_SUCCESS;}/* * input_position_changed (Private) (input var "intf-change" Callback) */static intinput_position_changed( vlc_object_t * p_this, char const * psz_cmd,                     vlc_value_t oldval, vlc_value_t newval,                     void * p_userdata ){    VLC_UNUSED(oldval);    libvlc_media_player_t * p_mi = p_userdata;    vlc_value_t val;    if (!strncmp(psz_cmd, "intf", 4 /* "-change" no need to go further */))    {        input_thread_t * p_input = (input_thread_t *)p_this;        var_Get( p_input, "state", &val );        if( val.i_int != PLAYING_S )            return VLC_SUCCESS; /* Don't send the position while stopped */        var_Get( p_input, "position", &val );    }    else        val.i_time = newval.i_time;    libvlc_event_t event;    event.type = libvlc_MediaPlayerPositionChanged;    event.u.media_player_position_changed.new_position = val.f_float;    libvlc_event_send( p_mi->p_event_manager, &event );    return VLC_SUCCESS;}/* * input_time_changed (Private) (input var "intf-change" Callback) */static intinput_time_changed( vlc_object_t * p_this, char const * psz_cmd,                     vlc_value_t oldval, vlc_value_t newval,                     void * p_userdata ){    VLC_UNUSED(oldval);    libvlc_media_player_t * p_mi = p_userdata;    vlc_value_t val;    if (!strncmp(psz_cmd, "intf", 4 /* "-change" no need to go further */))    {        input_thread_t * p_input = (input_thread_t *)p_this;        var_Get( p_input, "state", &val );        if( val.i_int != PLAYING_S )            return VLC_SUCCESS; /* Don't send the position while stopped */        var_Get( p_input, "time", &val );    }    else        val.i_time = newval.i_time;    libvlc_event_t event;    event.type = libvlc_MediaPlayerTimeChanged;    event.u.media_player_time_changed.new_time = val.i_time;    libvlc_event_send( p_mi->p_event_manager, &event );    return VLC_SUCCESS;}/************************************************************************** * Create a Media Instance object **************************************************************************/libvlc_media_player_t *libvlc_media_player_new( libvlc_instance_t * p_libvlc_instance,                           libvlc_exception_t * p_e ){    libvlc_media_player_t * p_mi;    if( !p_libvlc_instance )    {        libvlc_exception_raise( p_e, "invalid libvlc instance" );        return NULL;    }    p_mi = malloc( sizeof(libvlc_media_player_t) );    if( !p_mi )    {        libvlc_exception_raise( p_e, "Not enough memory" );        return NULL;    }    p_mi->p_md = NULL;    p_mi->drawable = 0;    p_mi->p_libvlc_instance = p_libvlc_instance;    p_mi->p_input_thread = NULL;    /* refcount strategy:     * - All items created by _new start with a refcount set to 1     * - Accessor _release decrease the refcount by 1, if after that     *   operation the refcount is 0, the object is destroyed.     * - Accessor _retain increase the refcount by 1 (XXX: to implement) */    p_mi->i_refcount = 1;    p_mi->b_own_its_input_thread = true;    /* object_lock strategy:     * - No lock held in constructor     * - Lock when accessing all variable this lock is held     * - Lock when attempting to destroy the object the lock is also held */    vlc_mutex_init( &p_mi->object_lock );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区精品性色| 国产精品午夜春色av| 国产精品乱码一区二区三区软件| 美女视频免费一区| 日韩一级片在线观看| 天天综合色天天综合| 蜜臀av一区二区在线观看| 欧美精品色综合| 午夜精品福利一区二区三区av| 日韩激情视频网站| 免费久久99精品国产| 国产精品1区2区3区在线观看| 91蜜桃在线免费视频| 国产欧美视频一区二区三区| 欧美极品美女视频| 日韩免费成人网| 日本不卡免费在线视频| 欧美午夜不卡在线观看免费| 岛国一区二区三区| 麻豆成人免费电影| 男人的天堂久久精品| 一区二区三区在线视频观看58 | 久久久久久久久一| 日韩欧美精品在线| 欧美日韩一区二区三区免费看 | 欧美唯美清纯偷拍| 不卡欧美aaaaa| 国产.欧美.日韩| 国产精品一区二区x88av| 久久狠狠亚洲综合| 蜜桃视频在线一区| 久久精品免费看| 日韩不卡一区二区三区| 午夜精品福利在线| 石原莉奈一区二区三区在线观看| 亚洲黄色免费电影| 亚洲夂夂婷婷色拍ww47| 一区二区三区电影在线播| 亚洲乱码日产精品bd| 综合久久一区二区三区| 亚洲欧洲成人av每日更新| 国产精品久久久久影院色老大| 国产日韩欧美激情| 国产精品人人做人人爽人人添| 久久久一区二区三区| 精品国产免费人成电影在线观看四季 | 免费在线视频一区| 免费久久99精品国产| 精品一区二区三区久久| 韩国欧美国产1区| 国产sm精品调教视频网站| 国产成人免费在线视频| 成人黄页在线观看| 在线免费观看视频一区| 欧美日韩精品一区二区三区蜜桃| 欧美老年两性高潮| 26uuuu精品一区二区| 国产日韩影视精品| 亚洲黄网站在线观看| 午夜精品福利在线| 韩国精品免费视频| 成人av综合一区| 欧美在线视频日韩| 日韩欧美视频一区| 国产精品色婷婷久久58| 亚洲桃色在线一区| 一本一道久久a久久精品综合蜜臀| 一本色道**综合亚洲精品蜜桃冫 | 欧美日韩在线免费视频| 欧美肥妇bbw| 久久伊人中文字幕| 自拍偷自拍亚洲精品播放| 亚洲二区视频在线| 国模冰冰炮一区二区| 色综合久久天天| 欧美一级免费观看| 中文字幕一区二区三区视频| 亚洲h在线观看| 国产成人亚洲精品青草天美 | 国产色产综合产在线视频 | 久久成人免费网| a在线播放不卡| 日韩欧美在线1卡| 中文字幕中文字幕一区二区| 五月天中文字幕一区二区| 黑人巨大精品欧美一区| 91国产福利在线| 久久久久久久久伊人| 亚洲午夜免费电影| 国产成人av一区二区| 欧美午夜精品一区二区三区| 欧美精品一区在线观看| 一区二区三区国产精华| 狠狠色狠狠色综合系列| 欧美性色综合网| 国产欧美一区二区三区鸳鸯浴| 亚洲精选一二三| 国产成人亚洲精品狼色在线| 欧美色电影在线| 国产精品网站一区| 黄色日韩网站视频| 欧美精品黑人性xxxx| 一色屋精品亚洲香蕉网站| 看片的网站亚洲| 欧美亚洲丝袜传媒另类| 国产精品久久久久久户外露出 | 国产黄色精品网站| 4438成人网| 亚洲一区二区三区国产| 成人在线综合网站| 久久久久久久久伊人| 久久精品免费看| 一区二区三区不卡视频| 99久久精品国产网站| 日韩你懂的在线播放| 日韩国产欧美三级| 欧美三级蜜桃2在线观看| 亚洲视频免费观看| 成人激情视频网站| 久久久久99精品国产片| 裸体歌舞表演一区二区| 日韩一级片在线播放| 天堂成人免费av电影一区| 欧美日韩一二区| 亚洲国产日韩av| 欧美视频一区二区三区四区| 亚洲精品日韩综合观看成人91| 丁香网亚洲国际| 国产精品色婷婷久久58| 不卡一区二区在线| 中文字幕一区在线| 99视频热这里只有精品免费| 中文字幕在线一区二区三区| 成人综合婷婷国产精品久久免费| 精品国产乱码久久久久久图片 | 午夜影院久久久| 欧美蜜桃一区二区三区| 婷婷综合五月天| 9191成人精品久久| 蜜臀久久久久久久| 精品国产欧美一区二区| 国产精品一区2区| 日本一区二区三区视频视频| 国产精品综合在线视频| 国产欧美日韩综合精品一区二区| 成人综合婷婷国产精品久久 | 26uuu亚洲| 国产成人免费视频一区| 国产精品狼人久久影院观看方式| 成+人+亚洲+综合天堂| 99精品视频一区| 亚洲午夜免费电影| 日韩三级在线观看| 国产成人午夜精品影院观看视频| 国产精品美女久久久久久久网站| 91香蕉视频污在线| 亚洲成人av福利| 欧美大片一区二区三区| 国产精品99久久久久| 亚洲视频每日更新| 欧美一区永久视频免费观看| 韩国三级电影一区二区| 国产精品初高中害羞小美女文| 9191久久久久久久久久久| 欧美日韩二区三区| 欧美日韩综合不卡| 欧美成人伊人久久综合网| 一区二区三区在线不卡| 欧美视频三区在线播放| 蜜桃久久av一区| 中文字幕一区三区| 欧美日韩国产综合一区二区三区| 蜜臀国产一区二区三区在线播放 | 日韩西西人体444www| 国产综合色视频| 亚洲视频在线一区观看| 91精品国产综合久久香蕉的特点 | 国产原创一区二区三区| 国产精品女同互慰在线看| 欧美羞羞免费网站| 国产乱码精品一区二区三区忘忧草| 亚洲色图在线看| 欧美成人一区二区三区片免费| 成人av网址在线| 美日韩一级片在线观看| 亚洲欧美综合色| 欧美一区二区久久久| av电影天堂一区二区在线| 日日摸夜夜添夜夜添精品视频| 久久久电影一区二区三区| 欧美色综合网站| 成人精品一区二区三区中文字幕| 亚洲一二三四在线| 国产精品网友自拍| 日韩欧美国产精品| 欧美日韩三级在线| 91色婷婷久久久久合中文| 狠狠狠色丁香婷婷综合激情| 99久久精品免费精品国产| 久久99国产精品免费网站|