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

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

?? interface.c

?? 音頻編碼
?? C
字號:
/* $Id: interface.c,v 1.47 2004/04/14 22:15:44 robert Exp $ */#ifdef HAVE_CONFIG_H# include <config.h>#endif#include <stdlib.h>#include <stdio.h>#include "common.h"#include "interface.h"#include "tabinit.h"#include "layer3.h"#include "VbrTag.h"#include "decode_i386.h"#ifdef USE_LAYER_1	#include "layer1.h"#endif#ifdef USE_LAYER_2	#include "layer2.h"#endif#ifdef WITH_DMALLOC#include <dmalloc.h>#endifBOOL InitMP3( PMPSTR mp) {	memset(mp,0,sizeof(MPSTR));	mp->framesize = 0;        mp->num_frames = 0;        mp->enc_delay = -1;        mp->enc_padding = -1;        mp->vbr_header=0;	mp->header_parsed=0;	mp->side_parsed=0;	mp->data_parsed=0;	mp->free_format=0;	mp->old_free_format=0;	mp->ssize = 0;	mp->dsize=0;	mp->fsizeold = -1;	mp->bsize = 0;	mp->head = mp->tail = NULL;	mp->fr.single = -1;	mp->bsnum = 0;	mp->wordpointer = mp->bsspace[mp->bsnum] + 512;    mp->bitindex = 0;	mp->synth_bo = 1;	mp->sync_bitstream = 1;	make_decode_tables(32767);	init_layer3(SBLIMIT);#ifdef USE_LAYER_2	init_layer2();#endif	return !0;}void ExitMP3( PMPSTR mp){	struct buf *b,*bn;		b = mp->tail;	while(b) {		free(b->pnt);		bn = b->next;		free(b);		b = bn;	}}static struct buf *addbuf( PMPSTR mp, unsigned char *buf,int size){	struct buf *nbuf;	nbuf = (struct buf*) malloc( sizeof(struct buf) );	if(!nbuf) {		fprintf(stderr,"Out of memory!\n");		return NULL;	}	nbuf->pnt = (unsigned char*) malloc((size_t)size);	if(!nbuf->pnt) {		free(nbuf);		return NULL;	}	nbuf->size = size;	memcpy(nbuf->pnt,buf,(size_t)size);	nbuf->next = NULL;	nbuf->prev = mp->head;	nbuf->pos = 0;	if(!mp->tail) {		mp->tail = nbuf;	}	else {	  mp->head->next = nbuf;	}	mp->head = nbuf;	mp->bsize += size;	return nbuf;}void remove_buf(PMPSTR mp){  struct buf *buf = mp->tail;    mp->tail = buf->next;  if(mp->tail)    mp->tail->prev = NULL;  else {    mp->tail = mp->head = NULL;  }    free(buf->pnt);  free(buf);}static int read_buf_byte(PMPSTR mp){	unsigned int b;	int pos;		pos = mp->tail->pos;	while(pos >= mp->tail->size) {	        remove_buf(mp);		if(!mp->tail) {			fprintf(stderr,"Fatal error! tried to read past mp buffer\n");			exit(1);		}		pos = mp->tail->pos;	}	b = mp->tail->pnt[pos];	mp->bsize--;	mp->tail->pos++;		return b;}static void read_head(PMPSTR mp){	unsigned long head;	head = read_buf_byte(mp);	head <<= 8;	head |= read_buf_byte(mp);	head <<= 8;	head |= read_buf_byte(mp);	head <<= 8;	head |= read_buf_byte(mp);	mp->header = head;}static voidcopy_mp(PMPSTR mp,int size,unsigned char *ptr) {  int len = 0;  while(len < size && mp->tail) {    int nlen;    int blen = mp->tail->size - mp->tail->pos;    if( (size - len) <= blen) {      nlen = size-len;    }    else {      nlen = blen;    }    memcpy(ptr+len,mp->tail->pnt+mp->tail->pos,(size_t)nlen);    len += nlen;    mp->tail->pos += nlen;    mp->bsize -= nlen;    if(mp->tail->pos == mp->tail->size) {      remove_buf(mp);    }  }}/* number of bytes needed by GetVbrTag to parse header */#define XING_HEADER_SIZE 194/* traverse mp data structure without changing it *//* (just like sync_buffer) *//* pull out Xing bytes *//* call vbr header check code from LAME *//* if we find a header, parse it and also compute the VBR header size *//* if no header, do nothing. *//* *//* bytes = number of bytes before MPEG header.  skip this many bytes *//* before starting to read *//* return value: number of bytes in VBR header, including syncword */static intcheck_vbr_header(PMPSTR mp,int bytes){  int i,pos;  struct buf *buf=mp->tail;  unsigned char xing[XING_HEADER_SIZE];  VBRTAGDATA pTagData;  pos = buf->pos;  /* skip to valid header */  for (i=0; i<bytes; ++i) {    while(pos >= buf->size) {      buf  = buf->next;      pos = buf->pos;      if(!buf) 	return -1; /* fatal error */    }    ++pos;  }  /* now read header */  for (i=0; i<XING_HEADER_SIZE; ++i) {    while(pos >= buf->size) {      buf  = buf->next;      if(!buf) 	return -1; /* fatal error */      pos = buf->pos;    }    xing[i] = buf->pnt[pos];    ++pos;  }  /* check first bytes for Xing header */  mp->vbr_header = GetVbrTag(&pTagData,xing);  if (mp->vbr_header) {    mp->num_frames=pTagData.frames;    mp->enc_delay=pTagData.enc_delay;    mp->enc_padding=pTagData.enc_padding;    /*fprintf(stderr,"\rmpglib: delays: %i %i \n",mp->enc_delay,mp->enc_padding); */    /* fprintf(stderr,"\rmpglib: Xing VBR header dectected.  MP3 file has %i frames\n", pTagData.frames); */    if ( pTagData.headersize < 1 ) return 1;    return pTagData.headersize;  }  return 0;}static intsync_buffer(PMPSTR mp,int free_match) {  /* traverse mp structure without modifing pointers, looking   * for a frame valid header.   * if free_format, valid header must also have the same   * samplerate.      * return number of bytes in mp, before the header   * return -1 if header is not found   */  unsigned int b[4]={0,0,0,0};  int i,h,pos;  struct buf *buf=mp->tail;  if (!buf) return -1;  pos = buf->pos;  for (i=0; i<mp->bsize; i++) {    /* get 4 bytes */        b[0]=b[1]; b[1]=b[2]; b[2]=b[3];    while(pos >= buf->size) {      buf  = buf->next;      pos = buf->pos;      if(!buf) {	return -1;	/* not enough data to read 4 bytes */      }    }    b[3] = buf->pnt[pos];    ++pos;    if (i>=3) {        struct frame *fr = &mp->fr;	unsigned long head;	head = b[0];	head <<= 8;	head |= b[1];	head <<= 8;	head |= b[2];	head <<= 8;	head |= b[3];	h = head_check(head,fr->lay);	if (h && free_match) {	  /* just to be even more thorough, match the sample rate */	  int mode,stereo,sampling_frequency,mpeg25,lsf;	  if( head & (1<<20) ) {	    lsf = (head & (1<<19)) ? 0x0 : 0x1;	    mpeg25 = 0;	  }	  else {	    lsf = 1;	    mpeg25 = 1;	  }	  mode      = ((head>>6)&0x3);	  stereo    = (mode == MPG_MD_MONO) ? 1 : 2;	  if(mpeg25) 	    sampling_frequency = 6 + ((head>>10)&0x3);	  else	    sampling_frequency = ((head>>10)&0x3) + (lsf*3);	  h = ((stereo==fr->stereo) && (lsf==fr->lsf) && (mpeg25==fr->mpeg25) &&                  (sampling_frequency == fr->sampling_frequency));	}	if (h) {	  return i-3;	}    }  }  return -1;}static intdecodeMP3_clipchoice( PMPSTR mp,unsigned char *in,int isize,char *out,int *done,                                 int (*synth_1to1_mono_ptr)(PMPSTR,real *,unsigned char *,int *),                           int (*synth_1to1_ptr)(PMPSTR,real *,int,unsigned char *, int *) ){	int i,iret,bits,bytes;	if (in && isize && addbuf(mp,in,isize) == NULL)	    return MP3_ERR;	/* First decode header */	if(!mp->header_parsed) {	    if (mp->fsizeold==-1 || mp->sync_bitstream) {	        int vbrbytes;		mp->sync_bitstream=0;	        /* This is the very first call.   sync with anything */		/* bytes= number of bytes before header */	        bytes=sync_buffer(mp,0); 	        /* now look for Xing VBR header */		if (mp->bsize >= bytes+XING_HEADER_SIZE ) {		    /* vbrbytes = number of bytes in entire vbr header */		    vbrbytes=check_vbr_header(mp,bytes);		} else {		    /* not enough data to look for Xing header */		    return MP3_NEED_MORE;		}		if (mp->vbr_header) {		    /* do we have enough data to parse entire Xing header? */		    if (bytes+vbrbytes > mp->bsize) return MP3_NEED_MORE;		    		    /* read in Xing header.  Buffer data in case it		     * is used by a non zero main_data_begin for the next		     * frame, but otherwise dont decode Xing header *//*fprintf(stderr,"found xing header, skipping %i bytes\n",vbrbytes+bytes);*/		    for (i=0; i<vbrbytes+bytes; ++i) read_buf_byte(mp);		    /* now we need to find another syncword */		    /* just return and make user send in more data */		    return MP3_NEED_MORE;		}            }else{	        /* match channels, samplerate, etc, when syncing */                bytes=sync_buffer(mp,1);	    }	    if (bytes<0) return MP3_NEED_MORE;	    if (bytes>0) {		/* there were some extra bytes in front of header.		 * bitstream problem, but we are now resynced 		 * should try to buffer previous data in case new		 * frame has nonzero main_data_begin, but we need		 * to make sure we do not overflow buffer		 */		int size;		fprintf(stderr,"bitstream problem: resyncing...\n");		mp->old_free_format=0;                mp->sync_bitstream=1;				/* skip some bytes, buffer the rest */		size = (int) (mp->wordpointer - (mp->bsspace[mp->bsnum]+512));				if (size > MAXFRAMESIZE) {		    /* wordpointer buffer is trashed.  probably cant recover, but try anyway */		    fprintf(stderr,"mpglib: wordpointer trashed.  size=%i (%i)  bytes=%i \n",			    size,MAXFRAMESIZE,bytes);		  		    size=0;		    mp->wordpointer = mp->bsspace[mp->bsnum]+512;		}				/* buffer contains 'size' data right now 		   we want to add 'bytes' worth of data, but do not 		   exceed MAXFRAMESIZE, so we through away 'i' bytes */		i = (size+bytes)-MAXFRAMESIZE;		for (; i>0; --i) {		    --bytes;		    read_buf_byte(mp);		}				copy_mp(mp,bytes,mp->wordpointer);		mp->fsizeold += bytes;	    }	    	    read_head(mp);	    decode_header(&mp->fr,mp->header);	    mp->header_parsed=1;	    mp->framesize = mp->fr.framesize;	    mp->free_format = (mp->framesize==0);	    	    if(mp->fr.lsf)		mp->ssize = (mp->fr.stereo == 1) ? 9 : 17;	    else		mp->ssize = (mp->fr.stereo == 1) ? 17 : 32;	    if (mp->fr.error_protection) 		mp->ssize += 2;	    	    mp->bsnum = 1-mp->bsnum; /* toggle buffer */	    mp->wordpointer = mp->bsspace[mp->bsnum] + 512;	    mp->bitindex = 0;	    	    /* for very first header, never parse rest of data */	    if (mp->fsizeold==-1)		return MP3_NEED_MORE;	}		/* now decode side information */	if (!mp->side_parsed) {		/* Layer 3 only */		if (mp->fr.lay==3)		{                if (mp->bsize < mp->ssize) 		  return MP3_NEED_MORE;		copy_mp(mp,mp->ssize,mp->wordpointer);		if(mp->fr.error_protection)		  getbits(mp,16);		bits=do_layer3_sideinfo(mp);		/* bits = actual number of bits needed to parse this frame */		/* can be negative, if all bits needed are in the reservoir */		if (bits<0) bits=0;		/* read just as many bytes as necessary before decoding */		mp->dsize = (bits+7)/8;		/* this will force mpglib to read entire frame before decoding */		/* mp->dsize= mp->framesize - mp->ssize;*/		}		else		{			/* Layers 1 and 2 */			/* check if there is enough input data */			if(mp->fr.framesize > mp->bsize)				return MP3_NEED_MORE;			/* takes care that the right amount of data is copied into wordpointer */			mp->dsize=mp->fr.framesize;			mp->ssize=0;		}		mp->side_parsed=1;	}	/* now decode main data */	iret=MP3_NEED_MORE;	if (!mp->data_parsed ) {	        if(mp->dsize > mp->bsize) {				return MP3_NEED_MORE;		}		copy_mp(mp,mp->dsize,mp->wordpointer);		*done = 0;		/*do_layer3(&mp->fr,(unsigned char *) out,done); */		switch (mp->fr.lay)		{#ifdef USE_LAYER_1			case 1:				if(mp->fr.error_protection)					getbits(mp,16);				do_layer1(mp,(unsigned char *) out,done);			break;#endif#ifdef USE_LAYER_2			case 2:				if(mp->fr.error_protection)					getbits(mp,16);				do_layer2(mp,(unsigned char *) out,done);			break;#endif			case 3:				do_layer3(mp,(unsigned char *) out,done, synth_1to1_mono_ptr, synth_1to1_ptr);			break;			default:				fprintf(stderr,"invalid layer %d\n",mp->fr.lay);		}		mp->wordpointer = mp->bsspace[mp->bsnum] + 512 + mp->ssize + mp->dsize;		mp->data_parsed=1;		iret=MP3_OK;	}	/* remaining bits are ancillary data, or reservoir for next frame 	 * If free format, scan stream looking for next frame to determine	 * mp->framesize */	if (mp->free_format) {	  if (mp->old_free_format) {	    /* free format.  bitrate must not vary */	    mp->framesize=mp->fsizeold_nopadding + (mp->fr.padding);	  }else{	    bytes=sync_buffer(mp,1);	    if (bytes<0) return iret;	    mp->framesize = bytes + mp->ssize+mp->dsize;	    mp->fsizeold_nopadding= mp->framesize - mp->fr.padding;	    /*	    fprintf(stderr,"freeformat bitstream:  estimated bitrate=%ikbs  \n",	        8*(4+mp->framesize)*freqs[mp->fr.sampling_frequency]/		    (1000*576*(2-mp->fr.lsf)));	    */	  }	}	/* buffer the ancillary data and reservoir for next frame */	bytes = mp->framesize-(mp->ssize+mp->dsize);	if (bytes > mp->bsize) {	  return iret;	}	if (bytes>0) {	  int size;	  copy_mp(mp,bytes,mp->wordpointer);	  mp->wordpointer += bytes;	  size = (int) (mp->wordpointer - (mp->bsspace[mp->bsnum]+512));	  if (size > MAXFRAMESIZE) {	    fprintf(stderr,"fatal error.  MAXFRAMESIZE not large enough.\n");	  }	}	/* the above frame is completey parsed.  start looking for next frame */	mp->fsizeold = mp->framesize;	mp->old_free_format = mp->free_format;	mp->framesize =0;	mp->header_parsed=0;	mp->side_parsed=0;	mp->data_parsed=0;	return iret;}int decodeMP3( PMPSTR mp,unsigned char *in,int isize,char *out,		int osize,int *done){	if(osize < 4608) {		fprintf(stderr,"To less out space\n");		return MP3_ERR;	}	/* passing pointers to the functions which clip the samples */	return decodeMP3_clipchoice(mp, in, isize, out, done, synth_1to1_mono, synth_1to1);}	int decodeMP3_unclipped( PMPSTR mp,unsigned char *in,int isize,char *out,		          int osize,int *done){	/* we forbid input with more than 1152 samples per channel for output in unclipped mode */	if(osize < 1152 * 2 * sizeof(real) ) { 		fprintf(stderr,"To less out space\n");		return MP3_ERR;	}	/* passing pointers to the functions which don't clip the samples */	return decodeMP3_clipchoice(mp, in, isize, out, done, synth_1to1_mono_unclipped, synth_1to1_unclipped);}		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品免费观看| 久久综合国产精品| 日本高清不卡视频| 粉嫩av一区二区三区粉嫩| 午夜精品久久久久久不卡8050| 国产日产亚洲精品系列| 久久久www免费人成精品| 欧美精品一区二区三区一线天视频| 91精品免费在线观看| www精品美女久久久tv| 欧美高清在线精品一区| 亚洲美女免费视频| 蜜桃视频一区二区| 国产91丝袜在线播放0| 色综合久久99| 26uuu成人网一区二区三区| 亚洲三级在线看| 日本欧美一区二区| 一本一道久久a久久精品| 欧美一级片免费看| 国产精品麻豆99久久久久久| 亚洲国产精品一区二区久久 | 国产精品不卡一区| 18欧美亚洲精品| 午夜视频在线观看一区| 国产91精品精华液一区二区三区 | 久久精品无码一区二区三区| 亚洲一区二区av在线| 国产精品69毛片高清亚洲| 色婷婷综合久久久久中文| 日韩一级免费一区| 一区二区三区国产精品| 波多野结衣精品在线| 在线观看视频一区二区| 91精品免费在线观看| 亚洲精品一二三四区| 国产麻豆成人传媒免费观看| 欧美日韩不卡一区二区| 久久久精品黄色| 国产成人精品一区二区三区四区 | 欧美系列日韩一区| 亚洲欧美在线视频观看| 国产一区日韩二区欧美三区| 欧美丝袜丝交足nylons| 中文字幕二三区不卡| 亚洲成人午夜影院| a级高清视频欧美日韩| 久久久久久久久久久久电影| 成人免费视频一区二区| 亚洲欧美怡红院| 7777精品伊人久久久大香线蕉完整版 | 日韩午夜激情av| 蜜臀av性久久久久蜜臀aⅴ | 中文字幕成人网| 18欧美乱大交hd1984| 国产精品一区二区三区网站| 日韩一区国产二区欧美三区| 精品无人区卡一卡二卡三乱码免费卡| 欧美视频一区在线| 免费成人在线观看| 欧美电影免费观看高清完整版| 亚洲国产欧美在线| 精品欧美一区二区三区精品久久| 裸体健美xxxx欧美裸体表演| 国产视频亚洲色图| 欧美人妇做爰xxxⅹ性高电影| 国产激情精品久久久第一区二区| 亚洲视频免费在线观看| 精品乱码亚洲一区二区不卡| 91久久精品一区二区三| 国产福利一区二区| 午夜精品久久久久久久99水蜜桃| 亚洲国产激情av| 久久品道一品道久久精品| 日本福利一区二区| 国产成人精品免费视频网站| 国产精品视频免费看| 日韩午夜在线播放| 99久久久无码国产精品| 免费观看在线色综合| 一区二区三区四区五区视频在线观看| 日韩无一区二区| 在线综合+亚洲+欧美中文字幕| 成人小视频在线| 国产成人啪免费观看软件| 久久丁香综合五月国产三级网站| 日韩一区二区精品| 日韩一区二区三区免费观看| 欧美一三区三区四区免费在线看| 欧美午夜精品久久久| 欧美一级淫片007| www亚洲一区| 中文字幕一区二区三区蜜月| 久久久久综合网| 久久久久久久综合日本| 久久亚洲二区三区| 2021久久国产精品不只是精品| 99精品视频在线播放观看| 国产综合成人久久大片91| 日韩精品久久久久久| 免费视频最近日韩| 99re这里只有精品6| 欧美福利视频导航| 中文天堂在线一区| 亚欧色一区w666天堂| 老司机精品视频线观看86| 成人av电影免费观看| 4438x成人网最大色成网站| 亚洲精品在线免费播放| 国产精品污www在线观看| 人人超碰91尤物精品国产| 免费精品视频在线| 91丨九色porny丨蝌蚪| 日韩欧美国产午夜精品| 悠悠色在线精品| 成人午夜视频在线观看| 久久午夜电影网| 亚洲一线二线三线视频| 国产福利精品导航| 欧美不卡一二三| 亚洲成av人片一区二区| 99精品桃花视频在线观看| 国产午夜精品福利| 精品在线亚洲视频| 欧美日韩综合不卡| 国产精品乱码久久久久久| 日韩高清在线观看| 粉嫩一区二区三区在线看| 久久综合精品国产一区二区三区| 自拍偷拍亚洲综合| 国产精品一二三四五| 欧美成人猛片aaaaaaa| 日本不卡视频一二三区| 精品少妇一区二区三区免费观看| 日韩高清一区在线| 日韩欧美电影在线| 午夜成人免费视频| 亚洲精品一区在线观看| 国模少妇一区二区三区| 久久综合久久综合亚洲| 成人动漫一区二区| 亚洲午夜影视影院在线观看| 欧美视频日韩视频在线观看| 香蕉久久夜色精品国产使用方法| 93久久精品日日躁夜夜躁欧美| 国产精品久久久久久久久快鸭 | 国内久久婷婷综合| 国产日韩欧美精品综合| 成人亚洲一区二区一| 亚洲视频免费在线观看| 日韩欧美成人一区| 91色在线porny| 玖玖九九国产精品| 亚洲人成在线观看一区二区| 欧美顶级少妇做爰| 99国产欧美另类久久久精品| 日本三级亚洲精品| 国产精品久久国产精麻豆99网站| 欧美精品在线一区二区| 国产精品自拍毛片| 亚洲国产精品一区二区久久恐怖片 | 免费在线成人网| 午夜精品福利一区二区蜜股av| 26uuu久久综合| 日韩一本二本av| 欧美写真视频网站| www.亚洲色图.com| 狠狠色狠狠色综合系列| 日韩精品一级二级| 亚洲国产欧美另类丝袜| 一区二区中文字幕在线| 2020日本不卡一区二区视频| 在线播放日韩导航| 色综合 综合色| caoporm超碰国产精品| 乱中年女人伦av一区二区| 另类欧美日韩国产在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲午夜久久久久久久久电影网| 久久国产三级精品| 亚洲一区视频在线| 18成人在线视频| 国产精品高潮呻吟| 综合久久一区二区三区| 欧美国产综合一区二区| 国产亚洲婷婷免费| 亚洲欧洲制服丝袜| 婷婷久久综合九色国产成人 | 色婷婷av一区二区| 欧美综合一区二区三区| 91精品国产色综合久久ai换脸| 日韩一级大片在线| 中文字幕一区二区视频| 亚洲成人综合网站| 国产一区二区伦理片| 成人国产一区二区三区精品| 欧洲中文字幕精品| 欧美大片一区二区| 亚洲精品成a人| 国产麻豆视频一区|