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

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

?? audio.c

?? 會議模擬過程中的混音處理部分,總共包括n+1個聲源
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * FILE:     audio.c
 * PROGRAM:  RAT
 * AUTHOR:   Orion Hodson 
 *
 * Based on necessity and earlier code by Isidor Kouvelas, Colin
 * Perkins, and Orion Hodson.  The existence of this code is pretty
 * offensive, but it's here for historical reasons.
 *
 * Copyright (c) 1995-2001 University College London
 * All rights reserved.
 */
 
#ifndef HIDE_SOURCE_STRINGS
static const char cvsid[] = 
	"$Id: audio.c,v 1.121 2002/03/15 17:57:16 ucacoxh Exp $";
#endif /* HIDE_SOURCE_STRINGS */

#include "config_unix.h"
#include "config_win32.h"
#include "memory.h"
#include "debug.h"
#include "audio_types.h"
#include "codec_types.h"
#include "codec.h"
#include "channel_types.h"
#include "channel.h"
#include "audio.h"
#include "audio_fmt.h"
#include "audio_util.h"
#include "session.h"
#include "transcoder.h"
#include "pdb.h"
#include "transmit.h"
#include "mix.h"
#include "cushion.h"
#include "source.h"
#include "sndfile.h"
#include "tonegen.h"
#include "voxlet.h"

/* Zero buf used for writing zero chunks during cushion adaption */
static sample* zero_buf;

/*****************************************************************************/

/* audio_device_release releases open the device.
 * If it succeeds it returns TRUE, otherwise returns FALSE.
 */

int
audio_device_release(session_t *sp, audio_desc_t the_dev)
{
        if (sp->audio_device == 0) {
                debug_msg("Audio device already released from session\n");
                return FALSE;
        }

        if (sp->audio_device != the_dev) {
                debug_msg("Releasing wrong device!\n");
                return FALSE;
        }

	/* Mix is going to be destroyed - tone_generator and
	 * voxlet have pointers to mixer in their state that
	 * is about to expire.  Could pass mixer as argument
	 * to their process functions...
	 */
	if (sp->tone_generator) {
		tonegen_destroy(&sp->tone_generator);
	}

	if (sp->local_file_player) {
		voxlet_destroy(&sp->local_file_player);
	}

        cushion_destroy(&sp->cushion);
        mix_destroy(&sp->ms);

        tx_stop(sp->tb);
        tx_destroy(&sp->tb);

        source_list_clear(sp->active_sources);

        audio_close(sp->audio_device);
        sp->audio_device = 0;

        xfree(zero_buf);
        zero_buf = NULL;

        return FALSE;
}

/* Reconfiguration code ******************************************************/

typedef struct s_audio_config {
        audio_desc_t device;
        codec_id_t   primary;
        int          render_3d;
} audio_config;

static int 
ac_create(audio_config **ppac)
{
        audio_config *pac = (audio_config*)xmalloc(sizeof(audio_config));
        if (pac) {
                /* assign invalid values so easy to see what's change
                 * in reconfigure. */
                pac->device    = 0;
                pac->primary   = 0 ;
                pac->render_3d = -1;
                *ppac = pac;
                return TRUE;
        }
        return FALSE;
}

static void
ac_destroy(audio_config **ac)
{
        assert(ac);
        assert(*ac);
        xfree(*ac);
        *ac = NULL;
}

void
audio_device_register_change_device(struct s_session *sp,
                                    audio_desc_t        new_dev)
{
        if (sp->new_config == NULL) {
                ac_create(&sp->new_config);
        }
        assert(sp->new_config);
        sp->new_config->device = new_dev;
}

void
audio_device_register_change_primary(struct s_session *sp,
                                     codec_id_t          primary)
{
        if (sp->new_config == NULL) {
                ac_create(&sp->new_config);
        }
        assert(sp->new_config);
        sp->new_config->primary = primary;
}

void
audio_device_register_change_render_3d(struct s_session *sp,
                                      int enabled)
{
        if (sp->new_config == NULL) {
                ac_create(&sp->new_config);
        }
        assert(sp->new_config);
        sp->new_config->render_3d = enabled;
}

static int
audio_device_attempt_config(session_t *sp, audio_config *config)
{
        audio_format *inf, *ouf;
        const codec_format_t *incf;
        int success;

        incf = codec_get_format(config->primary);
        assert(incf);
        
        inf = audio_format_dup(&incf->format);
        ouf = audio_format_dup(&incf->format);

        if (inf->channels != 2 && config->render_3d) {
                /* If 3d rendering is enabled we need stereo output
                 * format. 
                 */
                ouf->channels = 2;
        }

        success = audio_open(config->device, inf, ouf);
        if (success) {
                mixer_info_t  mi;
                uint16_t unit_len;
                assert(sp->ms           == NULL);
                assert(sp->tb           == NULL);
                assert(sp->cushion      == NULL);

                audio_non_block(config->device);

                /* Initialize read and write components */
                sp->meter_period = inf->sample_rate / 15;
                unit_len         = inf->bytes_per_block * 8 / (inf->bits_per_sample*inf->channels); 
                tx_create(&sp->tb, sp, (uint32_t)inf->sample_rate, (uint16_t)inf->channels, (uint16_t)unit_len);
                cushion_create(&sp->cushion, (uint32_t)inf->sample_rate);
		sp->cur_ts = ts_convert(inf->sample_rate, sp->cur_ts);
                mi.sample_rate   = ouf->sample_rate;
                mi.channels      = ouf->channels;
                mi.buffer_length = 32640;
                mix_create(&sp->ms, &mi, sp->cur_ts);

                if (zero_buf == NULL) {
                        zero_buf = (sample*)xmalloc(unit_len * sizeof(sample));
                        audio_zero(zero_buf, unit_len, DEV_S16);
                }
        }

        audio_format_free(&inf);
        audio_format_free(&ouf);

        return success;
}

/* audio_device_reconfigure returns TRUE if device reconfigured,
 * FALSE otherwise
 */

int
audio_device_reconfigure(session_t *sp)
{
        audio_config prev_config, *curr_config, *new_config;
        audio_port_t iport = 0, oport = 0;
        int change_req;

        assert(sp->new_config != NULL);

        new_config = sp->new_config;

        change_req = FALSE;
        if (new_config->device == 0) {
                /* No request to change audio device */
                new_config->device = sp->audio_device;
        } else if (new_config->device != sp->audio_device) {
                /* Request to change device */
                change_req = TRUE;
                debug_msg("Change device requested.\n");
        }

        if (sp->audio_device) {
                iport = audio_get_iport(sp->audio_device);
                oport = audio_get_oport(sp->audio_device);
        }

        if (new_config->primary == 0) {
                /* No request to change primary encoding */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产片一区二区| 国产激情一区二区三区桃花岛亚洲| 国产精品日产欧美久久久久| 精品久久久久久久一区二区蜜臀| 777色狠狠一区二区三区| 在线观看欧美日本| 日本精品一级二级| 91福利资源站| 欧美日韩国产高清一区二区三区| 欧美三级欧美一级| 欧美日韩亚洲不卡| 欧美一区二区三区日韩视频| 91精品在线免费| 日韩精品中文字幕一区二区三区 | 国产欧美一区二区精品婷婷| 久久蜜桃av一区精品变态类天堂 | 99这里只有久久精品视频| 国产成人免费视频| 91网站在线播放| 91国偷自产一区二区开放时间| 99久久国产综合精品色伊| 91精品办公室少妇高潮对白| 在线免费观看日韩欧美| 9191精品国产综合久久久久久| 欧美乱熟臀69xxxxxx| 欧美一级黄色片| 久久天天做天天爱综合色| 国产色一区二区| 中文字幕在线观看一区| 亚洲资源中文字幕| 日韩成人伦理电影在线观看| 国产精品一级在线| 91亚洲精品一区二区乱码| 欧美亚日韩国产aⅴ精品中极品| 在线不卡欧美精品一区二区三区| 精品日韩av一区二区| 久久精品一区二区| 伊人开心综合网| 麻豆免费精品视频| 岛国av在线一区| 欧美午夜片在线观看| 日韩免费视频一区| 欧美高清在线精品一区| 亚洲自拍欧美精品| 国产综合色视频| 一本一道久久a久久精品| 欧美一区二区三区在线视频 | 麻豆成人久久精品二区三区小说| 国产精品99久久久| 欧洲精品在线观看| 久久女同精品一区二区| 一区二区三区四区亚洲| 精品影视av免费| 色综合久久久久综合体| 精品福利视频一区二区三区| 亚洲三级免费观看| 蜜桃av一区二区三区电影| 99视频精品在线| 日韩欧美国产综合一区| 亚洲精品国产一区二区三区四区在线 | 久久在线观看免费| 亚洲午夜激情av| 国产精品538一区二区在线| 欧美日韩高清影院| 中文字幕高清不卡| 精品一区二区三区日韩| 欧美日韩极品在线观看一区| 国产精品久99| 看国产成人h片视频| 在线日韩av片| 国产精品国产自产拍在线| 极品美女销魂一区二区三区免费| 色综合久久中文字幕综合网| 国产日韩欧美在线一区| 秋霞午夜鲁丝一区二区老狼| 91首页免费视频| 久久精品人人做人人综合| 日韩高清不卡一区二区| 在线免费av一区| 中文字幕字幕中文在线中不卡视频| 精品一区二区免费| 欧美一区二区三区在线观看视频| 一区二区三区在线免费| 成人精品电影在线观看| 欧美v国产在线一区二区三区| 亚洲动漫第一页| 色婷婷亚洲综合| 亚洲人精品午夜| 不卡一区在线观看| 久久综合色婷婷| 久久99精品国产麻豆婷婷洗澡| 欧美日韩电影一区| 亚洲一区二区欧美| 色婷婷综合五月| 樱桃视频在线观看一区| 色中色一区二区| 亚洲免费观看在线视频| 91蝌蚪porny成人天涯| 国产精品欧美综合在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美日韩久久一区二区| 一区二区在线观看免费| 色天天综合久久久久综合片| 亚洲免费毛片网站| 在线观看日韩精品| 亚洲国产成人av网| 欧美人妇做爰xxxⅹ性高电影| 亚洲一区二区欧美| 7777精品伊人久久久大香线蕉经典版下载| 亚洲国产精品久久一线不卡| 欧美精品成人一区二区三区四区| 亚洲成av人片一区二区三区| 欧美在线观看视频在线| 天天操天天干天天综合网| 欧美一区二区女人| 精品一二三四区| 欧美激情一区二区三区不卡| 99在线视频精品| 亚洲国产精品麻豆| 日韩精品一区二区三区蜜臀| 国精产品一区一区三区mba桃花| 国产视频一区不卡| 色综合天天综合狠狠| 亚洲福利视频三区| 精品日韩欧美在线| 成人免费电影视频| 亚洲午夜国产一区99re久久| 日韩一区二区中文字幕| 国产91色综合久久免费分享| 亚洲人精品午夜| 69堂国产成人免费视频| 国产精品亚洲综合一区在线观看| 国产精品伦一区| 欧美视频在线观看一区| 美国三级日本三级久久99| 欧美韩日一区二区三区四区| 在线观看免费亚洲| 国产在线国偷精品免费看| 最新国产の精品合集bt伙计| 884aa四虎影成人精品一区| 国产精品99久久久久久似苏梦涵| 亚洲欧美一区二区不卡| 欧美一级高清大全免费观看| 成人精品免费网站| 亚洲国产精品久久人人爱蜜臀| 欧美精品一区二区精品网| 不卡大黄网站免费看| 日韩影院在线观看| 欧美激情在线一区二区| 91精品国产综合久久蜜臀| 成人黄色在线看| 日韩精品免费专区| 中文字幕综合网| 欧美一级高清片| 色哟哟一区二区在线观看| 国产一区二区网址| 亚洲午夜久久久久| 国产精品视频免费| 日韩亚洲欧美中文三级| 色噜噜狠狠成人网p站| 韩国毛片一区二区三区| 亚洲综合色自拍一区| 久久精品人人做人人爽人人| 717成人午夜免费福利电影| 91小视频在线免费看| 黑人巨大精品欧美一区| 亚洲图片有声小说| 国产精品全国免费观看高清| 日韩免费观看高清完整版在线观看| 色综合久久九月婷婷色综合| 国产在线播放一区二区三区| 午夜激情久久久| 亚洲人亚洲人成电影网站色| 2024国产精品| 欧美精品一二三区| 91蝌蚪国产九色| 成人精品视频一区二区三区尤物| 久久丁香综合五月国产三级网站| 一区二区三区四区不卡在线| 亚洲国产精品ⅴa在线观看| 26uuu亚洲综合色欧美| 日韩一区二区电影在线| 欧美日本一区二区| 欧洲精品视频在线观看| 91老师片黄在线观看| 不卡一二三区首页| 国产精品一二三四| 国产一区二区调教| 久国产精品韩国三级视频| 日韩电影免费在线看| 丝袜美腿一区二区三区| 亚洲国产一区二区三区青草影视| 亚洲私人黄色宅男| 国产精品盗摄一区二区三区| 国产日韩精品一区二区三区| 久久婷婷色综合| 国产喂奶挤奶一区二区三区| 精品日韩一区二区| 26uuu成人网一区二区三区| 日韩精品一区二区三区在线|