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

📄 mint.c

📁 mips上编译过的mpg 运行正常 环境:AU12
💻 C
字号:
/*	mint: audio output for MINT	copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1	see COPYING and AUTHORS files in distribution or http://mpg123.org	initially written by Petr Stehlik*//* derived from LINUX, VOXWARE and SUN for MiNT Audio Device by Petr Stehlik */#include <fcntl.h>#include "mpg123app.h"#include <ioctl.h>#include <audios.h>#include "debug.h"/* Globals */extern int outburst;int real_rate_printed = 0;static int rate_best_match(audio_output_t *ao){	int ret,dsp_rate;		if(!ai || ao->fn < 0 || ao->rate < 0)		return -1;		dsp_rate = ao->rate;	ret = ioctl(ao->fn,AIOCSSPEED, (void *)dsp_rate);	ret = ioctl(ao->fn,AIOCGSPEED,&dsp_rate);	if(ret < 0) return ret;	ao->rate = dsp_rate;	return 0;}static int set_rate(audio_output_t *ao){	int dsp_rate = ao->rate;		if(ao->rate >= 0) {		int ret, real_rate;		ret = ioctl(ao->fn, AIOCSSPEED, (void *)dsp_rate);		if (ret >= 0 && !real_rate_printed) {			ioctl(ao->fn,AIOCGSPEED,&real_rate);			if (real_rate != dsp_rate) {				fprintf(stderr, "Replay rate: %d Hz\n", real_rate);				real_rate_printed = 1;			}		}		return ret;	}		return 0;}static int set_channels(audio_output_t *ao){	int chan = ao->channels;		if(ao->channels < 1) return 0;		return ioctl(ao->fn, AIOCSCHAN, (void *)chan);}static int set_format(audio_output_t *ao){	int fmts;		if(ao->format == -1)		return 0;		switch(ao->format) {		case MPG123_ENC_SIGNED_16:		default:			fmts = AFMT_S16;		break;		case MPG123_ENC_UNSIGNED_8:			fmts = AFMT_U8;		break;		case MPG123_ENC_SIGNED_8:			fmts = AFMT_S8;		break;		case MPG123_ENC_ULAW_8:			fmts = AFMT_ULAW;		break;	}		return ioctl(ao->fn, AIOCSFMT, (void *)fmts);}static int reset_parameters(audio_output_t *ao){	int ret;	ret = ioctl(ao->fn,AIOCRESET,NULL);	if(ret >= 0) ret = set_format(ai);	if(ret >= 0) ret = set_channels(ai);	if(ret >= 0) ret = set_rate(ai);	return ret;}static int open_mint(audio_output_t *ao){	if(!ai) return -1;	if(!ao->device)		ao->device = "/dev/audio";		ao->fn = open(ao->device,O_WRONLY);  		if(ao->fn < 0)	{		error1("Can't open %s!",ao->device);		return -1;	}	ioctl(ao->fn, AIOCGBLKSIZE, &outburst);	if(outburst > MAXOUTBURST)		outburst = MAXOUTBURST;	if(audio_reset_parameters(ai) < 0) {		close(ao->fn);		return -1;	}		return ao->fn;}static int get_formats_mint(audio_output_t *ao){	int ret = 0;	int fmts;		if(ioctl(ao->fn,AIOCGFMTS,&fmts) < 0)		return -1;		if(fmts & AFMT_ULAW)		ret |= MPG123_ENC_ULAW_8;	if(fmts & AFMT_S16)		ret |= MPG123_ENC_SIGNED_16;	if(fmts & AFMT_U8)		ret |= MPG123_ENC_UNSIGNED_8;	if(fmts & AFMT_S8)		ret |= MPG123_ENC_SIGNED_8;		return ret;}static int write_mint(audio_output_t *ao,unsigned char *buf,int len){	return write(ao->fn,buf,len);}static int close_mint(audio_output_t *ao){	close (ao->fn);	return 0;}static void flush_mint(audio_output_t *ao){}static int init_mint(audio_output_t* ao){	if (ao==NULL) return -1;	/* Set callbacks */	ao->open = open_mint;	ao->flush = flush_mint;	ao->write = write_mint;	ao->get_formats = get_formats_mint;	ao->close = close_mint;	/* Success */	return 0;}/* 	Module information data structure*/mpg123_module_t mpg123_output_module_info = {	/* api_version */	MPG123_MODULE_API_VERSION,	/* name */			"mint",							/* description */	"Audio output for MINT.",	/* revision */		"$Rev:$",							/* handle */		NULL,		/* init_output */	init_mint,						};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -