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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sdl_esdaudio.c

?? Simple DirectMedia Layer - Simple DirectMedia Layer 是一個(gè)跨平臺(tái)的多媒體庫(kù)設(shè)計(jì)用來(lái)提供快速圖形framebuffer和音頻驅(qū)動(dòng)。應(yīng)用MPEG為軟件
?? C
字號(hào):
/*    SDL - Simple DirectMedia Layer    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library 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    Library General Public License for more details.    You should have received a copy of the GNU Library General Public    License along with this library; if not, write to the Free    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    Sam Lantinga    slouken@libsdl.org*/#ifdef SAVE_RCSIDstatic char rcsid = "@(#) $Id: SDL_esdaudio.c,v 1.5 2002/03/06 11:23:02 slouken Exp $";#endif/* Allow access to an ESD network stream mixing buffer */#ifdef ESD_SUPPORT#include <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <signal.h>#include <unistd.h>#include <esd.h>#include "SDL_audio.h"#include "SDL_error.h"#include "SDL_audiomem.h"#include "SDL_audio_c.h"#include "SDL_timer.h"#include "SDL_audiodev_c.h"#include "SDL_esdaudio.h"#ifdef ESD_DYNAMIC#include "SDL_name.h"#include "SDL_loadso.h"#else#define SDL_NAME(X)	X#endif/* The tag name used by ESD audio */#define ESD_DRIVER_NAME		"esd"/* Audio driver functions */static int ESD_OpenAudio(_THIS, SDL_AudioSpec *spec);static void ESD_WaitAudio(_THIS);static void ESD_PlayAudio(_THIS);static Uint8 *ESD_GetAudioBuf(_THIS);static void ESD_CloseAudio(_THIS);#ifdef ESD_DYNAMICstatic const char *esd_library = ESD_DYNAMIC;static void *esd_handle = NULL;static int esd_loaded = 0;static int (*SDL_NAME(esd_open_sound))( const char *host );static int (*SDL_NAME(esd_close))( int esd );static int (*SDL_NAME(esd_play_stream))( esd_format_t format, int rate,                                         const char *host, const char *name );static struct {	const char *name;	void **func;} esd_functions[] = {	{ "esd_open_sound",	(void **)&SDL_NAME(esd_open_sound)	},	{ "esd_close",		(void **)&SDL_NAME(esd_close)		},	{ "esd_play_stream",	(void **)&SDL_NAME(esd_play_stream)	},};static void UnloadESDLibrary(){	if ( esd_loaded ) {		SDL_UnloadObject(esd_handle);		esd_handle = NULL;		esd_loaded = 0;	}}static int LoadESDLibrary(void){	int i, retval = -1;	esd_handle = SDL_LoadObject(esd_library);	if ( esd_handle ) {		esd_loaded = 1;		retval = 0;		for ( i=0; i<SDL_TABLESIZE(esd_functions); ++i ) {			*esd_functions[i].func = SDL_LoadFunction(esd_handle, esd_functions[i].name);			if ( ! esd_functions[i].func ) {				retval = -1;				UnloadESDLibrary();				break;			}		}	}	return retval;}#elsestatic void UnloadESDLibrary(){	return;}static int LoadESDLibrary(void){	return 0;}#endif /* ESD_DYNAMIC *//* Audio driver bootstrap functions */static int Audio_Available(void){	int connection;	int available;	available = 0;	if ( LoadESDLibrary() < 0 ) {		return available;	}	connection = SDL_NAME(esd_open_sound)(NULL);	if ( connection >= 0 ) {		available = 1;		SDL_NAME(esd_close)(connection);	}	UnloadESDLibrary();	return(available);}static void Audio_DeleteDevice(SDL_AudioDevice *device){	free(device->hidden);	free(device);	UnloadESDLibrary();}static SDL_AudioDevice *Audio_CreateDevice(int devindex){	SDL_AudioDevice *this;	/* Initialize all variables that we clean on shutdown */	LoadESDLibrary();	this = (SDL_AudioDevice *)malloc(sizeof(SDL_AudioDevice));	if ( this ) {		memset(this, 0, (sizeof *this));		this->hidden = (struct SDL_PrivateAudioData *)				malloc((sizeof *this->hidden));	}	if ( (this == NULL) || (this->hidden == NULL) ) {		SDL_OutOfMemory();		if ( this ) {			free(this);		}		return(0);	}	memset(this->hidden, 0, (sizeof *this->hidden));	audio_fd = -1;	/* Set the function pointers */	this->OpenAudio = ESD_OpenAudio;	this->WaitAudio = ESD_WaitAudio;	this->PlayAudio = ESD_PlayAudio;	this->GetAudioBuf = ESD_GetAudioBuf;	this->CloseAudio = ESD_CloseAudio;	this->free = Audio_DeleteDevice;	return this;}AudioBootStrap ESD_bootstrap = {	ESD_DRIVER_NAME, "Enlightened Sound Daemon",	Audio_Available, Audio_CreateDevice};/* This function waits until it is possible to write a full sound buffer */static void ESD_WaitAudio(_THIS){	Sint32 ticks;	/* Check to see if the thread-parent process is still alive */	{ static int cnt = 0;		/* Note that this only works with thread implementations 		   that use a different process id for each thread.		*/		if (parent && (((++cnt)%10) == 0)) { /* Check every 10 loops */			if ( kill(parent, 0) < 0 ) {				this->enabled = 0;			}		}	}	/* Use timer for general audio synchronization */	ticks = ((Sint32)(next_frame - SDL_GetTicks()))-FUDGE_TICKS;	if ( ticks > 0 ) {		SDL_Delay(ticks);	}}static void ESD_PlayAudio(_THIS){	int written;	/* Write the audio data, checking for EAGAIN on broken audio drivers */	do {		written = write(audio_fd, mixbuf, mixlen);		if ( (written < 0) && ((errno == 0) || (errno == EAGAIN)) ) {			SDL_Delay(1);	/* Let a little CPU time go by */		}	} while ( (written < 0) && 	          ((errno == 0) || (errno == EAGAIN) || (errno == EINTR)) );	/* Set the next write frame */	next_frame += frame_ticks;	/* If we couldn't write, assume fatal error for now */	if ( written < 0 ) {		this->enabled = 0;	}}static Uint8 *ESD_GetAudioBuf(_THIS){	return(mixbuf);}static void ESD_CloseAudio(_THIS){	if ( mixbuf != NULL ) {		SDL_FreeAudioMem(mixbuf);		mixbuf = NULL;	}	if ( audio_fd >= 0 ) {		SDL_NAME(esd_close)(audio_fd);		audio_fd = -1;	}}/* Try to get the name of the program */static char *get_progname(void){	char *progname = NULL;#ifdef linux	FILE *fp;	static char temp[BUFSIZ];	sprintf(temp, "/proc/%d/cmdline", getpid());	fp = fopen(temp, "r");	if ( fp != NULL ) {		if ( fgets(temp, sizeof(temp)-1, fp) ) {			progname = strrchr(temp, '/');			if ( progname == NULL ) {				progname = temp;			} else {				progname = progname+1;			}		}		fclose(fp);	}#endif	return(progname);}static int ESD_OpenAudio(_THIS, SDL_AudioSpec *spec){	esd_format_t format;	/* Convert audio spec to the ESD audio format */	format = (ESD_STREAM | ESD_PLAY);	switch ( spec->format & 0xFF ) {		case 8:			format |= ESD_BITS8;			break;		case 16:			format |= ESD_BITS16;			break;		default:			SDL_SetError("Unsupported ESD audio format");			return(-1);	}	if ( spec->channels == 1 ) {		format |= ESD_MONO;	} else {		format |= ESD_STEREO;	}#if 0	spec->samples = ESD_BUF_SIZE;	/* Darn, no way to change this yet */#endif	/* Open a connection to the ESD audio server */	audio_fd = SDL_NAME(esd_play_stream)(format, spec->freq, NULL, get_progname());	if ( audio_fd < 0 ) {		SDL_SetError("Couldn't open ESD connection");		return(-1);	}	/* Calculate the final parameters for this audio specification */	SDL_CalculateAudioSpec(spec);	frame_ticks = (float)(spec->samples*1000)/spec->freq;	next_frame = SDL_GetTicks()+frame_ticks;	/* Allocate mixing buffer */	mixlen = spec->size;	mixbuf = (Uint8 *)SDL_AllocAudioMem(mixlen);	if ( mixbuf == NULL ) {		return(-1);	}	memset(mixbuf, spec->silence, spec->size);	/* Get the parent process id (we're the parent of the audio thread) */	parent = getpid();	/* We're ready to rock and roll. :-) */	return(0);}#endif /* ESD_SUPPORT */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久草在线在线精品观看| 国产精品午夜在线观看| 日本 国产 欧美色综合| 欧美天堂亚洲电影院在线播放| 国产精品国产三级国产a| bt欧美亚洲午夜电影天堂| 国产精品国产三级国产三级人妇| 不卡的看片网站| 亚洲一级二级三级在线免费观看| 欧美精品少妇一区二区三区| 久久99精品久久久久久久久久久久 | 91免费国产在线观看| 最新不卡av在线| 欧美日韩在线三级| 久久黄色级2电影| 欧美国产日产图区| 91国模大尺度私拍在线视频| 男女性色大片免费观看一区二区 | 国产亚洲精品7777| 91色porny蝌蚪| 免费观看日韩av| 国产精品久久久久一区二区三区| 欧美在线观看18| 国产在线播放一区| 一区二区三区四区在线播放| 精品播放一区二区| 色综合久久天天| 国产尤物一区二区在线| 伊人一区二区三区| 26uuu久久天堂性欧美| 色婷婷精品久久二区二区蜜臂av | 亚洲欧美视频在线观看| 日韩一区二区三区在线| 91在线精品一区二区| 青青草国产成人av片免费| 中文字幕中文字幕一区二区| 日韩午夜激情av| 欧美影视一区在线| www.激情成人| 精品午夜久久福利影院| 亚洲国产日产av| 亚洲天堂久久久久久久| 久久久久久9999| 欧美色图一区二区三区| 国产a区久久久| 极品少妇xxxx精品少妇| 夜夜嗨av一区二区三区中文字幕| 国产无遮挡一区二区三区毛片日本| 欧美日韩国产天堂| 色哟哟在线观看一区二区三区| 国产精品91xxx| 久色婷婷小香蕉久久| 亚洲国产视频直播| 一区在线观看免费| 国产欧美一区二区精品仙草咪| 欧美一卡二卡在线| 欧美乱熟臀69xxxxxx| 91极品视觉盛宴| 成人av网站在线观看免费| 久久99国产乱子伦精品免费| 午夜av一区二区三区| 亚洲免费观看高清完整版在线观看| 亚洲国产婷婷综合在线精品| 中文字幕一区二区三区四区不卡 | 国产视频一区在线播放| 7777女厕盗摄久久久| 欧美在线三级电影| 一本大道久久a久久综合婷婷| 成人黄色在线看| 成人av小说网| 99re6这里只有精品视频在线观看| 国产91在线|亚洲| 成人黄色小视频| 高清国产一区二区三区| 国产毛片精品视频| 国精产品一区一区三区mba桃花| 美腿丝袜在线亚洲一区| 久久 天天综合| 国产真实乱子伦精品视频| 久久国产精品免费| 裸体在线国模精品偷拍| 国产麻豆成人精品| 精品一区免费av| 国产一区二区不卡在线| 国产黄色91视频| 91美女在线看| 欧美日韩亚洲另类| 欧美成人午夜电影| 国产区在线观看成人精品| 国产精品色一区二区三区| 国产精品色一区二区三区| 樱花草国产18久久久久| 水蜜桃久久夜色精品一区的特点| 免费亚洲电影在线| 国产成人免费视| 在线视频一区二区三区| 91精品国产综合久久久久久| 欧美大肚乱孕交hd孕妇| 国产日韩欧美精品综合| 综合久久给合久久狠狠狠97色 | 国内成人精品2018免费看| 国产剧情在线观看一区二区| 99视频超级精品| 制服丝袜激情欧洲亚洲| 久久久久国产精品麻豆ai换脸 | 99视频精品在线| 777a∨成人精品桃花网| 国产欧美精品一区二区色综合| 亚洲女人****多毛耸耸8| 日韩电影免费在线| 成人中文字幕合集| 欧美写真视频网站| 国产视频视频一区| 午夜电影网一区| 国产成人午夜视频| 欧美最猛性xxxxx直播| 久久―日本道色综合久久| 亚洲精品一卡二卡| 精品无人码麻豆乱码1区2区| 日本精品免费观看高清观看| 欧美一区二区三区成人| 国产精品国产三级国产普通话蜜臀 | 91精品国产综合久久福利| 久久精品欧美一区二区三区不卡| 亚洲一区二区三区爽爽爽爽爽| 久久国产尿小便嘘嘘| 欧美亚一区二区| 国产精品嫩草影院com| 另类综合日韩欧美亚洲| 91精彩视频在线观看| 国产女人aaa级久久久级| 日本欧美一区二区| 一本色道a无线码一区v| 欧美成人性福生活免费看| 亚洲一二三四在线观看| 不卡一二三区首页| 久久综合色婷婷| 日韩av一二三| 欧美三级中文字幕在线观看| 国产精品久久久久久久午夜片| 蜜臀久久久久久久| 91福利资源站| 亚洲欧美国产77777| 成人美女视频在线看| 久久久久久日产精品| 日韩av电影一区| 91麻豆精品国产| 亚洲国产一区二区在线播放| 91视频观看免费| 国产精品美女久久久久久久| 国产精品自拍av| 26uuu国产日韩综合| 毛片av一区二区| 日韩欧美一级精品久久| 日韩av中文在线观看| 欧美日韩成人高清| 午夜精品福利一区二区三区av | 国产精品毛片a∨一区二区三区| 国产在线精品不卡| 2021中文字幕一区亚洲| 日韩电影在线免费| 91精品国产免费| 日韩在线一区二区三区| 欧美喷水一区二区| 视频在线观看国产精品| 欧美一区二区国产| 久久精品国产一区二区| 日韩精品一区二区三区视频播放| 麻豆成人久久精品二区三区小说| 欧美电影一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 欧美一区二区三区啪啪| 麻豆久久一区二区| 久久免费的精品国产v∧| 国产sm精品调教视频网站| 国产精品污网站| 色综合久久久久综合体| 亚洲国产精品久久人人爱蜜臀| 欧美日韩国产美| 精品一区中文字幕| 国产精品国产三级国产有无不卡| 91亚洲男人天堂| 午夜精品久久久久久久久| 日韩视频一区二区三区| 国产一区二区三区黄视频 | 日精品一区二区| 欧美大片在线观看一区二区| 国内欧美视频一区二区| 国产日韩欧美精品一区| 99久久国产综合精品色伊| 一区二区三区在线免费播放| 欧美日韩成人综合在线一区二区| 日本成人在线视频网站| 精品国产一二三| 成人免费视频视频在线观看免费| 亚洲欧美日韩一区二区| 欧美一区二区日韩一区二区| 国产一区二区三区免费| 亚洲免费在线播放| 欧美xxxx在线观看|