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

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

?? mp3play.c

?? mp3解碼源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/****************************************************************************//* *	mp3play.c -- Play MP3 data files * *	(C) Copyright 1999-2002, Greg Ungerer (gerg@snapgear.com) *      (C) Copyright 1997-1997, St閜hane TAVENARD *          All Rights Reserved * *	This code is a derivitive of Stephane Tavenard's mpegdev_demo.c. * * *	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., 675 Mass Ave, Cambridge, MA 02139, USA. *//****************************************************************************/#include "defs.h"#include "mpegdec.h"#include "genre.h"#include <sys/types.h>#include <sys/stat.h>#include <sys/time.h>#include <sys/uio.h>#include <sys/file.h>#include <unistd.h>#include <fcntl.h>#include <errno.h>#include <getopt.h>#include <signal.h>#include <endian.h>#include <linux/soundcard.h>#include <sys/resource.h>#include <linux/config.h>#ifdef CONFIG_KEY#include <linux/key.h>#endif/****************************************************************************/int	verbose;int	quiet;int	http_streaming;int	lcd_line, lcd_time;int	prebuflimit;int	lcdfd = -1;int	gotsigusr1;char	key[128];/* *	Keep track of start and end times. */struct timeval	tvstart, tvend;/* *	Global settings per decode stream. Used to control the final *	PCM to raw driver data conversion. */static int	stereo;static int	bits;static int	testtone;static int	quality;/****************************************************************************//* *	Master MP3 decoder settings. */static MPEGDEC_STREAM	*mps = NULL;static MPEGDEC_CTRL	mpa_ctrl;static MPEGDEC_CTRL	mpa_defctrl = {	NULL,    // Bitstream access is default file I/O	// Layers I & II settings (#3)	{ FALSE, { 1, 2, 48000 }, { 1, 2, 48000 } },	// Layer III settings (#3)	{ FALSE, { 1, 2, 48000 }, { 1, 2, 48000 } },	0,		// #2: Don't check mpeg validity at start			// (needed for mux stream)	2048		// #2: Stream Buffer size};static char *modes[] = { "stereo", "j-stereo", "dual", "mono" };/****************************************************************************//* *	MP3 data stream support (could be file or http stream). */#define MP3_BUF_SIZE	(4*1024)static char	*mp3_filename;static int	mp3_fd;static INT8	*mp3_buffer;static UINT32	mp3_buffer_size;static UINT32	mp3_buffer_offset;static UINT32	mp3_buffer_next_block;static UINT32	mp3_stream_size;static char	*rawbuf;static char	*prebuffer;int		prebufsize;int		prebufcnt;int		prebufnow;/****************************************************************************//* *	MP3 file TAG info. Output when in verbose mode. This structure is *	designed to match the in-file structure, don't change it! *	Nice printable strings are generated in the other vars below. */struct mp3tag {	char		tag[3];	char		title[30];	char		artist[30];	char		album[30];	char		year[4];	char		comments[30];	unsigned char	genre;};static struct mp3tag	mp3_tag;static int		mp3_gottag;static char		mp3_title[32];static char		mp3_artist[32];static char		mp3_year[8];static char		mp3_album[32];static char		mp3_comments[32];static char		*mp3_genre;/****************************************************************************//* *	Trivial signal handler, processing is done from the main loop. */void sigusr1handler(int signr){	gotsigusr1 = 1;}/****************************************************************************//* *	Get stream size (just file size). */static int getstreamsize(void){	struct stat	st;	if (stat(mp3_filename, &st) < 0)		return(0);	return(st.st_size);}/****************************************************************************//* *	Get another chunk of data into RAM. */static UINT32 getnextbuffer(){	int	rc;	lseek(mp3_fd, mp3_buffer_next_block, SEEK_SET);	rc = read(mp3_fd, mp3_buffer, MP3_BUF_SIZE);	mp3_buffer_size = (rc < 0) ? 0 : rc;	mp3_buffer_next_block += mp3_buffer_size;	return(mp3_buffer_size);}/****************************************************************************//* *	Start our own bitstream access routines. */INT32 bs_open(char *stream_name, INT32 buffer_size, INT32 *stream_size){#if 0	printf("bs_open: '%s'\n", stream_name);#endif	if (!mp3_buffer)		return(0);	mp3_buffer_offset = 0;	/* We know total size, we can set it */	*stream_size = mp3_stream_size;	/* Just return a dummy handle (not NULL) */	return(1);}/****************************************************************************/void bs_close(INT32 handle){#if 0	printf("bs_close\n");#endif	/* Don't need to do anything... */}/****************************************************************************/INT32 bs_read(INT32 handle, void *buffer, INT32 num_bytes){	INT32 read_size;	if (!handle )		return(-1);tryagain:	read_size = mp3_buffer_size - mp3_buffer_offset;	if (read_size > num_bytes)		read_size = num_bytes;	if (read_size > 0) {		if(!buffer)			return(-1);		memcpy(buffer, &mp3_buffer[mp3_buffer_offset], read_size);		mp3_buffer_offset += read_size;	} else {		if (getnextbuffer() > 0) {			mp3_buffer_offset = 0;			goto tryagain;		}		read_size = -1; /* End of stream */	}	return(read_size);}/****************************************************************************/int bs_seek(INT32 handle, INT32 abs_byte_seek_pos){	if (!handle)		return(-1);	if (abs_byte_seek_pos <= 0)		mp3_buffer_offset = 0;	else if (abs_byte_seek_pos >= mp3_buffer_size)		return(-1);	else		mp3_buffer_offset = abs_byte_seek_pos;	return(0);}/****************************************************************************/MPEGDEC_ACCESS bs_access = { bs_open, bs_close, bs_read, bs_seek };/****************************************************************************/void mkstring(char *str, char *buf, int size){    int i, j = 0;	char save;	for (i = size - 1; i >= 0; i--) {		if (buf[i] != ' ') {			while (buf[j] == ' ')				j++;			strncpy(str, &buf[j], i - j + 1);			str[i-j+1] = '\0';			return;		}	}}/****************************************************************************//* *	Get TAG info from mp3 file, if it is present. No point doing a *	fatal exit on errors, just assume no tag info is present. */void getmp3taginfo(void){	long	pos;	int	size;	mp3_gottag = 0;	size = sizeof(mp3_tag);	pos = mp3_stream_size - size;	if (pos < 0)		return;	if (lseek(mp3_fd, pos, SEEK_SET) < 0)		return;	if (read(mp3_fd, &mp3_tag, size) != size)		return;	if (strncmp(&mp3_tag.tag[0], "TAG", 3) != 0)		return;	/* Return file pointer to start of file */	lseek(mp3_fd, 0, SEEK_SET);	/* Construct fill NULL terminated strings */	mkstring(&mp3_title[0], &mp3_tag.title[0], sizeof(mp3_tag.title));	mkstring(&mp3_artist[0], &mp3_tag.artist[0], sizeof(mp3_tag.artist));	mkstring(&mp3_album[0], &mp3_tag.album[0], sizeof(mp3_tag.album));	mkstring(&mp3_year[0], &mp3_tag.year[0], sizeof(mp3_tag.year));	mkstring(&mp3_comments[0], &mp3_tag.comments[0], sizeof(mp3_tag.comments));	mp3_genre = (mp3_tag.genre >= genre_count) ? "Unknown" :		genre_table[mp3_tag.genre];	mp3_gottag = 1;}/****************************************************************************//* *	Print out everything we know about the MP3 stream. */void printmp3info(void){	if (quiet)		return;	if (verbose == 0) {		printf("%s: MPEG%d-%s (%ld ms)\n", mp3_filename, mps->norm,			(mps->layer == 1)?"I":(mps->layer == 2)?"II":"III",			mps->ms_duration);		return;	}	/* This is the verbose output */	printf("%s:\n", mp3_filename);	printf("    MPEG%d-%s %s %dkbps %dHz (%ld ms)\n", mps->norm,		(mps->layer == 1) ? "I" : (mps->layer == 2) ? "II" : "III",		modes[mps->mode], mps->bitrate, mps->frequency,		mps->ms_duration );	printf("    Decoding: Channels=%d Quality=%d Frequency=%dHz\n",		mps->dec_channels, mps->dec_quality, mps->dec_frequency ); 	if (mp3_gottag) {		printf("    Title:    %s\n", mp3_title);		printf("    Artist:   %s\n", mp3_artist);		printf("    Album:    %s\n", mp3_album );		printf("    Year:     %s\n", mp3_year);		printf("    Comments: %s\n", mp3_comments);		printf("    Genre:    %s\n", mp3_genre);	}}/****************************************************************************//* *	Print out the name on a display device if present. */void lcdtitle(void){	struct iovec	iv[4];	char		prebuf[10];	char		ctrl, postbuf, *name, *p;	int		ivp, namelen;	/* Install a signal handler to allow updates to be forced */	signal(SIGUSR1, sigusr1handler);	/*	 * Determine the name to display.  We use the tag if it is	 * present and the basename of the file if not.	 */	if (mp3_gottag) {		name = mp3_title;		namelen = strlen(name);	} else {		name = strrchr(mp3_filename, '/');		if (name == NULL)			name = mp3_filename;		else			name++;		p = strchr(name, '.');		if (p == NULL)			namelen = strlen(name);		else			namelen = p - name;	}	if (lcd_line) {		/* Lock the file so we can access it... */		if (flock(lcdfd, LOCK_SH | LOCK_NB) == -1)			return;		if (lcd_line == 0) {			prebuf[0] = '\f';			prebuf[1] = '\0';		} else if (lcd_line == 1) {			strcpy(prebuf, "\003\005");		} else if (lcd_line == 2) {			strcpy(prebuf, "\003\v\005");		}		/*		 * Now we'll write the title out.  We'll do this atomically		 * just in case two players decide to coexecute...		 */		ivp = 0;		iv[ivp].iov_len = strlen(prebuf) * sizeof(char);		iv[ivp++].iov_base = prebuf;				iv[ivp].iov_len = namelen * sizeof(char);		iv[ivp++].iov_base = name;				//postbuf = '\n';		//iv[ivp].iov_len = sizeof(char);		//iv[ivp++].iov_base = &postbuf;		writev(lcdfd, iv, ivp);		/* Finally, unlock it since we've finished. */		flock(lcdfd, LOCK_UN);	}}/****************************************************************************//* *	Output time info to display device. */void lcdtime(time_t sttime){	static time_t	lasttime;	time_t		t;	char		buf[15], *p;	int		m, s;	t = time(NULL) - sttime;	if (t != lasttime && flock(lcdfd, LOCK_SH | LOCK_NB) == 0) {		p = buf;		*p++ = '\003';		if (lcd_time == 2)			*p++ = '\v';		*p++ = '\005';		m = t / 60;		s = t % 60;		if (s < 0)			s += 60;		sprintf(p, "%02d:%02d", m, s);		write(lcdfd, buf, strlen(buf));		flock(lcdfd, LOCK_UN);	}	lasttime = t;}/****************************************************************************//* *	Configure DSP engine settings for playing this track. */ void setdsp(int fd, int playstereo, int playbits){	if (ioctl(fd, SNDCTL_DSP_SPEED, &mps->dec_frequency) < 0) {		fprintf(stderr, "ERROR: Unable to set frequency to %d, "

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美综合色免费| 欧美三级在线看| 亚洲国产欧美日韩另类综合 | 久久成人18免费观看| 国产精品大尺度| 精品国产乱码91久久久久久网站| 99久久亚洲一区二区三区青草| 狂野欧美性猛交blacked| 亚洲黄色小视频| 国产精品电影院| 久久久亚洲精华液精华液精华液 | 国产高清成人在线| 午夜视频在线观看一区| 中文字幕在线观看一区| 久久久久久久免费视频了| 欧美精品1区2区| 色哟哟亚洲精品| 成人丝袜高跟foot| 国产专区欧美精品| 精品一区二区三区在线播放视频| 亚洲444eee在线观看| 亚洲麻豆国产自偷在线| 久久久99精品久久| 精品国产髙清在线看国产毛片| 欧美日韩国产小视频| 91精彩视频在线观看| av一区二区三区黑人| 国产成人99久久亚洲综合精品| 狠狠色狠狠色综合系列| 久久99久久久欧美国产| 秋霞影院一区二区| 亚洲sss视频在线视频| 亚洲国产中文字幕| 亚洲成av人在线观看| 亚洲第一主播视频| 亚洲国产精品久久人人爱| 亚洲精品综合在线| 亚洲日本在线天堂| 亚洲综合在线视频| 一区二区在线观看不卡| 亚洲免费在线观看| 一区二区三区在线看| 亚洲综合色丁香婷婷六月图片| 亚洲精品免费视频| 一区二区三区欧美视频| 亚洲国产中文字幕在线视频综合| 亚洲电影中文字幕在线观看| 亚洲国产日韩精品| 秋霞午夜av一区二区三区| 老司机精品视频线观看86| 国精产品一区一区三区mba视频| 国产在线精品一区二区| 高清beeg欧美| 色呦呦网站一区| 欧美日韩国产一级片| 日韩免费视频线观看| 2021国产精品久久精品| 欧美激情在线一区二区| 亚洲精品第1页| 日本亚洲视频在线| 韩国一区二区视频| 波多野结衣中文字幕一区| 色综合久久中文字幕综合网| 欧美在线啊v一区| 欧美一卡二卡在线观看| 久久精品夜色噜噜亚洲aⅴ| 国产精品剧情在线亚洲| 亚洲五码中文字幕| 国产一区二区三区视频在线播放| k8久久久一区二区三区| 一本一道久久a久久精品| 91.成人天堂一区| 国产亚洲欧美激情| 伊人夜夜躁av伊人久久| 蜜桃一区二区三区在线| 粉嫩欧美一区二区三区高清影视| 在线精品视频免费观看| 日韩精品一区二区三区中文不卡 | 亚洲一区二区三区美女| 蜜桃视频免费观看一区| 成人av手机在线观看| 欧美色视频一区| 精品91自产拍在线观看一区| 国产精品福利在线播放| 日韩国产欧美在线视频| 国产成人自拍网| 欧美乱妇20p| 中文字幕不卡在线播放| 日韩和的一区二区| a美女胸又www黄视频久久| 欧美日韩一区二区电影| 国产欧美精品一区| 日韩二区在线观看| 91啪在线观看| wwwwww.欧美系列| 一区二区三区波多野结衣在线观看 | 成人av网站在线观看| 日韩一区二区三区电影在线观看 | 亚洲欧美乱综合| 久久99国产精品久久99| 91毛片在线观看| 国产拍揄自揄精品视频麻豆| 亚洲国产成人91porn| 成人理论电影网| 精品黑人一区二区三区久久| 亚洲黄色小说网站| 成人黄色片在线观看| 精品成人在线观看| 日韩不卡手机在线v区| 色8久久人人97超碰香蕉987| 欧美精品一区二区三区蜜桃视频 | 日本精品一级二级| 久久久久久一二三区| 日本aⅴ精品一区二区三区| 在线观看国产91| 中文字幕在线不卡一区| 国产一区二区三区在线观看免费| 欧美日本一区二区| 亚洲免费观看高清| 成人av免费在线观看| 国产欧美视频一区二区| 精品一区二区三区免费| 51精品秘密在线观看| 亚洲综合色视频| 一本色道**综合亚洲精品蜜桃冫| 国产精品久久久久影院亚瑟| 国产suv精品一区二区三区| 久久综合九色综合欧美98| 麻豆成人av在线| 欧美成人伊人久久综合网| 美女尤物国产一区| 日韩一区二区电影网| 日本不卡一二三区黄网| 555www色欧美视频| 蜜桃一区二区三区在线| 欧美成人一区二区三区| 激情综合色丁香一区二区| 精品国产凹凸成av人导航| 久久电影国产免费久久电影| 日韩一区二区在线看| 麻豆精品视频在线观看| 精品成人一区二区三区四区| 国产毛片精品一区| 国产日韩一级二级三级| 成人av在线一区二区三区| 自拍偷拍亚洲综合| 欧美在线你懂得| 午夜国产精品一区| 日韩一级黄色片| 国产综合成人久久大片91| 中文字幕免费一区| 91精品91久久久中77777| 亚洲午夜免费福利视频| 在线综合亚洲欧美在线视频| 激情久久五月天| 欧美激情在线看| 色www精品视频在线观看| 亚洲国产欧美日韩另类综合 | 国产精品私人自拍| 成人精品高清在线| 一区二区三区免费观看| 欧美精品电影在线播放| 国产乱淫av一区二区三区 | 亚洲高清在线精品| 日韩精品一区二| av一区二区三区四区| 五月天激情小说综合| 久久婷婷久久一区二区三区| 白白色亚洲国产精品| 香蕉久久一区二区不卡无毒影院 | 欧美国产成人精品| 在线看国产一区二区| 蜜臀av亚洲一区中文字幕| 中文成人av在线| 欧美丝袜丝nylons| 国产精品88888| 亚洲五月六月丁香激情| 久久久精品免费免费| 在线观看欧美精品| 国产美女精品人人做人人爽| 亚洲天堂免费看| 日韩欧美一级精品久久| 91丨porny丨首页| 久久国产乱子精品免费女| 国产精品不卡一区二区三区| 在线91免费看| voyeur盗摄精品| 久久成人久久鬼色| 亚洲影院久久精品| 中文字幕电影一区| 日韩欧美自拍偷拍| 色婷婷综合在线| 国产精品亚洲综合一区在线观看| 亚洲一区二区三区四区的| 亚洲国产成人私人影院tom | 欧美韩日一区二区三区四区| 欧美另类高清zo欧美| 99vv1com这只有精品| 国精品**一区二区三区在线蜜桃| 亚洲电影你懂得|