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

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

?? pulse.c

?? VLC Player Source Code
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************** * pulse.c : Pulseaudio output plugin for vlc ***************************************************************************** * Copyright (C) 2008 the VideoLAN team * * Authors: Martin Hamrle <hamrle @ post . cz> * * 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. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#ifdef HAVE_CONFIG_H# include "config.h"#endif#include <vlc_common.h>#include <vlc_plugin.h>#include <vlc_aout.h>#include <pulse/pulseaudio.h>#include <assert.h>/***************************************************************************** * aout_sys_t: Pulseaudio output method descriptor ***************************************************************************** * This structure is part of the audio output thread descriptor. * It describes the specific properties of an audio device. *****************************************************************************/struct aout_sys_t{    /** PulseAudio playback stream object */    struct pa_stream *stream;    /** PulseAudio connection context */    struct pa_context *context;    /** Main event loop object */    struct pa_threaded_mainloop *mainloop;    int started;    size_t buffer_size;    mtime_t start_date;};#define    PULSE_CLIENT_NAME N_("VLC media player")#if 0#define PULSE_DEBUG( ...) \    msg_Dbg( p_aout, __VA_ARGS__ )#else#define PULSE_DEBUG( ...) \    (void) 0#endif#define CHECK_DEAD_GOTO(label) do { \if (!p_sys->context || pa_context_get_state(p_sys->context) != PA_CONTEXT_READY || \    !p_sys->stream || pa_stream_get_state(p_sys->stream) != PA_STREAM_READY) { \        msg_Err(p_aout, "Connection died: %s", p_sys->context ? pa_strerror(pa_context_errno(p_sys->context)) : "NULL"); \        goto label; \    }  \} while(0);/***************************************************************************** * Local prototypes *****************************************************************************/static int  Open        ( vlc_object_t * );static void Close       ( vlc_object_t * );static void Play        ( aout_instance_t * );static void context_state_cb(pa_context *c, void *userdata);static void stream_state_cb(pa_stream *s, void * userdata);static void stream_request_cb(pa_stream *s, size_t length, void *userdata);static void stream_latency_update_cb(pa_stream *s, void *userdata);static void success_cb(pa_stream *s, int sucess, void *userdata);static void uninit(aout_instance_t *p_aout);/***************************************************************************** * Module descriptor *****************************************************************************/vlc_module_begin();    set_shortname( "Pulse Audio" );    set_description( N_("Pulseaudio audio output") );    set_capability( "audio output", 40 );    set_category( CAT_AUDIO );    set_subcategory( SUBCAT_AUDIO_AOUT );    add_shortcut( "pulseaudio" );    add_shortcut( "pa" );    set_callbacks( Open, Close );vlc_module_end();/***************************************************************************** * Open: open the audio device *****************************************************************************/static int Open ( vlc_object_t *p_this ){    aout_instance_t *p_aout = (aout_instance_t *)p_this;    struct aout_sys_t * p_sys;    struct pa_sample_spec ss;    const struct pa_buffer_attr *buffer_attr;    struct pa_buffer_attr a;    struct pa_channel_map map;    /* Allocate structures */    p_aout->output.p_sys = p_sys = malloc( sizeof( aout_sys_t ) );    if( p_sys == NULL )        return VLC_ENOMEM;    memset( p_sys, 0, sizeof( aout_sys_t ) );    PULSE_DEBUG( "Pulse start initialization");    ss.rate = p_aout->output.output.i_rate;    ss.channels = 2;    ss.format = PA_SAMPLE_S16LE;    p_aout->output.output.i_physical_channels =            AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;    p_aout->output.output.i_format = AOUT_FMT_S16_NE;    if (!pa_sample_spec_valid(&ss)) {        msg_Err(p_aout,"Invalid sample spec");        goto fail;    }        a.maxlength = pa_bytes_per_second(&ss)/4/pa_frame_size(&ss);    a.tlength = a.maxlength*9/10;    a.prebuf = a.tlength/2;    a.minreq = a.tlength/10;    a.maxlength *= pa_frame_size(&ss);    a.tlength *= pa_frame_size(&ss);    a.prebuf *= pa_frame_size(&ss);    a.minreq *= pa_frame_size(&ss);    p_sys->buffer_size = a.minreq;    pa_channel_map_init_stereo(&map);    if (!(p_sys->mainloop = pa_threaded_mainloop_new())) {        msg_Err(p_aout, "Failed to allocate main loop");        goto fail;    }    if (!(p_sys->context = pa_context_new(pa_threaded_mainloop_get_api(p_sys->mainloop), _( PULSE_CLIENT_NAME )))) {        msg_Err(p_aout, "Failed to allocate context");        goto fail;    }    pa_context_set_state_callback(p_sys->context, context_state_cb, p_aout);    PULSE_DEBUG( "Pulse before context connect");    if (pa_context_connect(p_sys->context, NULL, 0, NULL) < 0) {        msg_Err(p_aout, "Failed to connect to server: %s", pa_strerror(pa_context_errno(p_sys->context)));        goto fail;    }    PULSE_DEBUG( "Pulse after context connect");    pa_threaded_mainloop_lock(p_sys->mainloop);        if (pa_threaded_mainloop_start(p_sys->mainloop) < 0) {        msg_Err(p_aout, "Failed to start main loop");        goto unlock_and_fail;    }    msg_Dbg(p_aout, "Pulse mainloop started");    /* Wait until the context is ready */    pa_threaded_mainloop_wait(p_sys->mainloop);    if (pa_context_get_state(p_sys->context) != PA_CONTEXT_READY) {        msg_Err(p_aout, "Failed to connect to server: %s", pa_strerror(pa_context_errno(p_sys->context)));        goto unlock_and_fail;    }    if (!(p_sys->stream = pa_stream_new(p_sys->context, "audio stream", &ss, &map))) {        msg_Err(p_aout, "Failed to create stream: %s", pa_strerror(pa_context_errno(p_sys->context)));        goto unlock_and_fail;    }    PULSE_DEBUG( "Pulse after new stream");    pa_stream_set_state_callback(p_sys->stream, stream_state_cb, p_aout);    pa_stream_set_write_callback(p_sys->stream, stream_request_cb, p_aout);    pa_stream_set_latency_update_callback(p_sys->stream, stream_latency_update_cb, p_aout);    if (pa_stream_connect_playback(p_sys->stream, NULL, &a, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_AUTO_TIMING_UPDATE, NULL, NULL) < 0) {        msg_Err(p_aout, "Failed to connect stream: %s", pa_strerror(pa_context_errno(p_sys->context)));        goto unlock_and_fail;    }     PULSE_DEBUG("Pulse stream connect");    /* Wait until the stream is ready */    pa_threaded_mainloop_wait(p_sys->mainloop);    msg_Dbg(p_aout,"Pulse stream connected");    if (pa_stream_get_state(p_sys->stream) != PA_STREAM_READY) {        msg_Err(p_aout, "Failed to connect to server: %s", pa_strerror(pa_context_errno(p_sys->context)));        goto unlock_and_fail;    }    PULSE_DEBUG("Pulse after stream get status");    pa_threaded_mainloop_unlock(p_sys->mainloop);    buffer_attr = pa_stream_get_buffer_attr(p_sys->stream);    p_aout->output.i_nb_samples = buffer_attr->minreq / pa_frame_size(&ss);    p_aout->output.pf_play = Play;    aout_VolumeSoftInit(p_aout);    msg_Dbg(p_aout, "Pulse initialized successfully");    {        char cmt[PA_CHANNEL_MAP_SNPRINT_MAX], sst[PA_SAMPLE_SPEC_SNPRINT_MAX];        msg_Dbg(p_aout, "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u", buffer_attr->maxlength, buffer_attr->tlength, buffer_attr->prebuf, buffer_attr->minreq);        msg_Dbg(p_aout, "Using sample spec '%s', channel map '%s'.",                pa_sample_spec_snprint(sst, sizeof(sst), pa_stream_get_sample_spec(p_sys->stream)),

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
偷窥少妇高潮呻吟av久久免费| 亚洲国产精品成人综合色在线婷婷| 亚洲电影一级片| 欧美日韩专区在线| 亚洲成人在线网站| 日韩欧美一级片| 国产一区二区不卡| 国产精品久久久久四虎| 在线视频国内自拍亚洲视频| 午夜av区久久| 精品国精品自拍自在线| 成人黄动漫网站免费app| 中文字幕一区二区三区av| 色综合av在线| 奇米亚洲午夜久久精品| 久久久久青草大香线综合精品| av成人老司机| 男人的天堂亚洲一区| 久久久久免费观看| 在线观看日韩av先锋影音电影院| 日韩电影免费在线| 国产精品丝袜在线| 欧美日韩mp4| 岛国精品在线播放| 日韩和欧美一区二区三区| 久久久不卡影院| 欧洲亚洲国产日韩| 激情久久久久久久久久久久久久久久| 18成人在线视频| 日韩一区二区三区在线观看| 成人综合在线观看| 三级久久三级久久久| 中文字幕欧美国产| 欧美一卡二卡在线| 99re这里都是精品| 久久av中文字幕片| 亚洲国产另类精品专区| 亚洲国产精品精华液2区45| 欧美日韩在线电影| 春色校园综合激情亚洲| 奇米888四色在线精品| 中文字幕中文字幕中文字幕亚洲无线 | 91免费小视频| 六月丁香综合在线视频| 樱花影视一区二区| 久久久亚洲精华液精华液精华液| 欧美色老头old∨ideo| 豆国产96在线|亚洲| 日韩电影网1区2区| 亚洲国产视频直播| 亚洲女同一区二区| 国产婷婷色一区二区三区| 欧美一级在线视频| 在线亚洲免费视频| www.亚洲在线| 成人免费观看视频| 国产精品白丝jk黑袜喷水| 美女视频黄久久| 亚洲妇熟xx妇色黄| 亚洲精品视频一区| 中文字幕第一页久久| 精品国产一区二区精华| 制服视频三区第一页精品| 色呦呦国产精品| 91在线porny国产在线看| 懂色av一区二区三区蜜臀| 蜜桃精品视频在线| 日本不卡1234视频| 日本视频一区二区| 午夜精品123| 亚洲v中文字幕| 亚瑟在线精品视频| 五月天一区二区三区| 亚洲精品国产精华液| 成人免费视频在线观看| 中文字幕亚洲一区二区va在线| 欧美激情在线看| 亚洲欧洲在线观看av| 国产精品美女一区二区在线观看| 亚洲国产精品v| 日韩一区在线播放| 一区在线观看视频| 亚洲黄色录像片| 亚洲国产精品一区二区久久 | 国产免费成人在线视频| 日本一区二区三级电影在线观看 | 亚洲男人都懂的| 一区二区三区**美女毛片| 亚洲一区二区三区三| 午夜精品久久一牛影视| 免费成人在线影院| 国产精品亚洲成人| 99视频超级精品| 欧美无砖砖区免费| 欧美va亚洲va在线观看蝴蝶网| 久久综合狠狠综合| 亚洲国产岛国毛片在线| 亚洲人成网站影音先锋播放| 亚洲尤物在线视频观看| 日韩va亚洲va欧美va久久| 极品少妇一区二区| caoporn国产精品| 欧美亚洲综合另类| 欧美一区二区三区喷汁尤物| 欧美精品一区二区三区在线| 国产精品毛片a∨一区二区三区 | 中文字幕欧美日本乱码一线二线| 中文字幕亚洲区| 日韩精品亚洲专区| 国产成人免费视频| 欧美探花视频资源| 精品奇米国产一区二区三区| 国产精品美女久久福利网站| 亚洲午夜日本在线观看| 久草这里只有精品视频| 99精品视频在线观看免费| 欧美日韩精品一区二区天天拍小说| 2024国产精品视频| 一区二区三区国产精品| 久久福利视频一区二区| 91一区二区在线观看| 日韩精品一区二区三区四区视频 | 久久久久久久久久久电影| 亚洲另类一区二区| 国产在线精品一区在线观看麻豆| 一本大道久久精品懂色aⅴ| 精品久久人人做人人爽| 一区二区三区成人| 国产成人啪午夜精品网站男同| 欧美三级韩国三级日本三斤 | 在线观看日韩精品| 国产婷婷色一区二区三区四区| 亚洲一级片在线观看| 成人免费黄色在线| 欧美不卡在线视频| 亚洲高清视频中文字幕| 97精品视频在线观看自产线路二| 日韩一区二区电影| 樱花影视一区二区| 成人不卡免费av| 久久综合九色综合欧美98| 天天综合网天天综合色| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 日本不卡在线视频| 色综合天天性综合| 欧美激情综合在线| 精品系列免费在线观看| 欧美日韩精品欧美日韩精品一综合| 国产精品色婷婷久久58| 国产永久精品大片wwwapp | 激情文学综合插| 91精品久久久久久蜜臀| 亚洲国产人成综合网站| 日本电影欧美片| 中文字幕亚洲综合久久菠萝蜜| 国产福利一区二区三区在线视频| 欧美大胆人体bbbb| 老司机午夜精品| 日韩一区二区免费电影| 日韩黄色小视频| 欧美日韩国产在线观看| 亚洲精品菠萝久久久久久久| av电影天堂一区二区在线| 欧美国产一区二区在线观看| 国内精品不卡在线| 精品精品国产高清a毛片牛牛 | 日韩精品亚洲一区| 在线播放日韩导航| 男人操女人的视频在线观看欧美| 51午夜精品国产| 蜜臀av性久久久久蜜臀av麻豆| 欧美精品亚洲一区二区在线播放| 亚洲成人在线网站| 91精品国产91综合久久蜜臀| 免费成人在线观看视频| 日韩三级视频中文字幕| 久久精品国产免费| 久久综合给合久久狠狠狠97色69| 国产精品一区专区| 中文字幕国产一区二区| 色综合色狠狠综合色| 亚洲精品伦理在线| 欧美日韩性生活| 秋霞午夜av一区二区三区| 精品国产一区二区亚洲人成毛片| 国产精品小仙女| 亚洲欧洲成人自拍| 欧美三区在线观看| 美腿丝袜亚洲综合| 久久精品一区蜜桃臀影院| www.欧美.com| 一区二区三区在线不卡| 51午夜精品国产| 国产不卡免费视频| 亚洲综合免费观看高清完整版在线| 欧美私模裸体表演在线观看| 日韩高清电影一区| 国产无一区二区| 欧美亚洲动漫另类| 国产在线精品免费|