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

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

?? block.c

?? windows mobile上很好用的音頻播放器希望大家會喜歡
?? C
字號:
/******************************************************************** *                                                                  * * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   * *                                                                  * * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       * *                                                                  * * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    * * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  * *                                                                  * ******************************************************************** function: PCM data vector blocking, windowing and dis/reassembly ********************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "ogg.h"#include "ivorbiscodec.h"#include "codec_internal.h"#include "window.h"#include "registry.h"#include "misc.h"static int ilog(unsigned int v){  int ret=0;  if(v)--v;  while(v){    ret++;    v>>=1;  }  return(ret);}/* pcm accumulator examples (not exhaustive): <-------------- lW ---------------->                   <--------------- W ---------------->:            .....|.....       _______________         |:        .'''     |     '''_---      |       |\        |:.....'''         |_____--- '''......|       | \_______|:.................|__________________|_______|__|______|                  |<------ Sl ------>|      > Sr <     |endW                  |beginSl           |endSl  |  |endSr                     |beginW            |endlW  |beginSr                      |< lW >|                          <--------------- W ---------------->                  |   |  ..  ______________            |                  |   | '  `/        |     ---_        |                  |___.'___/`.       |         ---_____|                   |_______|__|_______|_________________|                  |      >|Sl|<      |<------ Sr ----->|endW                  |       |  |endSl  |beginSr          |endSr                  |beginW |  |endlW                                       mult[0] |beginSl                     mult[n] <-------------- lW ----------------->                          |<--W-->|                               :            ..............  ___  |   |                    :        .'''             |`/   \ |   |                       :.....'''                 |/`....\|...|                    :.........................|___|___|___|                                            |Sl |Sr |endW                              |   |   |endSr                          |   |beginSr                          |   |endSl			  |beginSl			  |beginW*//* block abstraction setup *********************************************/#ifndef WORD_ALIGN#define WORD_ALIGN 8#endifint vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb){  memset(vb,0,sizeof(*vb));  vb->vd=v;  vb->localalloc=0;  vb->localstore=NULL;    return(0);}void *_vorbis_block_alloc(vorbis_block *vb,long bytes){  bytes=(bytes+(WORD_ALIGN-1)) & ~(WORD_ALIGN-1);  if(bytes+vb->localtop>vb->localalloc){    /* can't just _ogg_realloc... there are outstanding pointers */    if(vb->localstore){      struct alloc_chain *link=(struct alloc_chain *)_ogg_malloc(sizeof(*link));      vb->totaluse+=vb->localtop;      link->next=vb->reap;      link->ptr=vb->localstore;      vb->reap=link;    }    /* highly conservative */    vb->localalloc=bytes;    vb->localstore=_ogg_malloc(vb->localalloc);    vb->localtop=0;  }  {    void *ret=(void *)(((char *)vb->localstore)+vb->localtop);    vb->localtop+=bytes;    return ret;  }}/* reap the chain, pull the ripcord */void _vorbis_block_ripcord(vorbis_block *vb){  /* reap the chain */  struct alloc_chain *reap=vb->reap;  while(reap){    struct alloc_chain *next=reap->next;    _ogg_free(reap->ptr);    memset(reap,0,sizeof(*reap));    _ogg_free(reap);    reap=next;  }  /* consolidate storage */  if(vb->totaluse){    vb->localstore=_ogg_realloc(vb->localstore,vb->totaluse+vb->localalloc);    vb->localalloc+=vb->totaluse;    vb->totaluse=0;  }  /* pull the ripcord */  vb->localtop=0;  vb->reap=NULL;}int vorbis_block_clear(vorbis_block *vb){  _vorbis_block_ripcord(vb);  if(vb->localstore)_ogg_free(vb->localstore);  memset(vb,0,sizeof(*vb));  return(0);}int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi){  int i;  codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;  private_state *b=NULL;  memset(v,0,sizeof(*v));  b=(private_state *)(v->backend_state=_ogg_calloc(1,sizeof(*b)));  v->vi=vi;  b->modebits=ilog(ci->modes);  /* Vorbis I uses only window type 0 */  b->window[0]=_vorbis_window(0,ci->blocksizes[0]/2);  b->window[1]=_vorbis_window(0,ci->blocksizes[1]/2);  /* finish the codebooks */  if(!ci->fullbooks){    ci->fullbooks=(codebook *)_ogg_calloc(ci->books,sizeof(*ci->fullbooks));    for(i=0;i<ci->books;i++){      vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]);      /* decode codebooks are now standalone after init */      vorbis_staticbook_destroy(ci->book_param[i]);      ci->book_param[i]=NULL;    }  }  v->pcm_storage=ci->blocksizes[1];  v->pcm=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcm));  v->pcmret=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcmret));  for(i=0;i<vi->channels;i++)    v->pcm[i]=(ogg_int32_t *)_ogg_calloc(v->pcm_storage,sizeof(*v->pcm[i]));  /* all 1 (large block) or 0 (small block) */  /* explicitly set for the sake of clarity */  v->lW=0; /* previous window size */  v->W=0;  /* current window size */  /* all vector indexes */  v->centerW=ci->blocksizes[1]/2;  v->pcm_current=v->centerW;  /* initialize all the mapping/backend lookups */  b->mode=(vorbis_look_mapping **)_ogg_calloc(ci->modes,sizeof(*b->mode));  for(i=0;i<ci->modes;i++){    int mapnum=ci->mode_param[i]->mapping;    int maptype=ci->map_type[mapnum];    b->mode[i]=_mapping_P[maptype]->look(v,ci->mode_param[i],					 ci->map_param[mapnum]);  }  v->pcm_returned=-1;  v->granulepos=-1;  v->sequence=-1;  ((private_state *)(v->backend_state))->sample_count=-1;  return(0);}void vorbis_dsp_clear(vorbis_dsp_state *v){  int i;  if(v){    vorbis_info *vi=v->vi;    codec_setup_info *ci=(codec_setup_info *)(vi?vi->codec_setup:NULL);    private_state *b=(private_state *)v->backend_state;    if(v->pcm){      for(i=0;i<vi->channels;i++)	if(v->pcm[i])_ogg_free(v->pcm[i]);      _ogg_free(v->pcm);      if(v->pcmret)_ogg_free(v->pcmret);    }    /* free mode lookups; these are actually vorbis_look_mapping structs */    if(ci){      for(i=0;i<ci->modes;i++){	int mapnum=ci->mode_param[i]->mapping;	int maptype=ci->map_type[mapnum];	if(b && b->mode)_mapping_P[maptype]->free_look(b->mode[i]);      }    }    if(b){      if(b->mode)_ogg_free(b->mode);          _ogg_free(b);    }        memset(v,0,sizeof(*v));  }}/* Unlike in analysis, the window is only partially applied for each   block.  The time domain envelope is not yet handled at the point of   calling (as it relies on the previous block). */int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){  vorbis_info *vi=v->vi;  codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;  private_state *b=v->backend_state;  int i,j;  if(v->pcm_current>v->pcm_returned  && v->pcm_returned!=-1)return(OV_EINVAL);  v->lW=v->W;  v->W=vb->W;  v->nW=-1;  if((v->sequence==-1)||     (v->sequence+1 != vb->sequence)){    v->granulepos=-1; /* out of sequence; lose count */    b->sample_count=-1;  }  v->sequence=vb->sequence;    {    int n=ci->blocksizes[v->W]/2;    int n0=ci->blocksizes[0]/2;    int n1=ci->blocksizes[1]/2;        int thisCenter;    int prevCenter;        if(v->centerW){      thisCenter=n1;      prevCenter=0;    }else{      thisCenter=0;      prevCenter=n1;    }        /* v->pcm is now used like a two-stage double buffer.  We don't want       to have to constantly shift *or* adjust memory usage.  Don't       accept a new block until the old is shifted out */        /* overlap/add PCM */        for(j=0;j<vi->channels;j++){      /* the overlap/add section */      if(v->lW){	if(v->W){	  /* large/large */	  ogg_int32_t *pcm=v->pcm[j]+prevCenter;	  ogg_int32_t *p=vb->pcm[j];	  for(i=0;i<n1;i++)	    pcm[i]+=p[i];	}else{	  /* large/small */	  ogg_int32_t *pcm=v->pcm[j]+prevCenter+n1/2-n0/2;	  ogg_int32_t *p=vb->pcm[j];	  for(i=0;i<n0;i++)	    pcm[i]+=p[i];	}      }else{	if(v->W){	  /* small/large */	  ogg_int32_t *pcm=v->pcm[j]+prevCenter;	  ogg_int32_t *p=vb->pcm[j]+n1/2-n0/2;	  for(i=0;i<n0;i++)	    pcm[i]+=p[i];	  for(;i<n1/2+n0/2;i++)	    pcm[i]=p[i];	}else{	  /* small/small */	  ogg_int32_t *pcm=v->pcm[j]+prevCenter;	  ogg_int32_t *p=vb->pcm[j];	  for(i=0;i<n0;i++)	    pcm[i]+=p[i];	}      }            /* the copy section */      {	ogg_int32_t *pcm=v->pcm[j]+thisCenter;	ogg_int32_t *p=vb->pcm[j]+n;	for(i=0;i<n;i++)	  pcm[i]=p[i];      }    }        if(v->centerW)      v->centerW=0;    else      v->centerW=n1;        /* deal with initial packet state; we do this using the explicit       pcm_returned==-1 flag otherwise we're sensitive to first block       being short or long */    if(v->pcm_returned==-1){      v->pcm_returned=thisCenter;      v->pcm_current=thisCenter;    }else{      v->pcm_returned=prevCenter;      v->pcm_current=prevCenter+	ci->blocksizes[v->lW]/4+	ci->blocksizes[v->W]/4;    }        /* track the frame number... This is for convenience, but also       making sure our last packet doesn't end with added padding.  If       the last packet is partial, the number of samples we'll have to       return will be past the vb->granulepos.              This is not foolproof!  It will be confused if we begin       decoding at the last page after a seek or hole.  In that case,       we don't have a starting point to judge where the last frame       is.  For this reason, vorbisfile will always try to make sure       it reads the last two marked pages in proper sequence */        if(b->sample_count==-1){      b->sample_count=0;    }else{      b->sample_count+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;    }        if(v->granulepos==-1){      if(vb->granulepos!=-1){ /* only set if we have a position to set to */		v->granulepos=vb->granulepos;		/* is this a short page? */	if(b->sample_count>v->granulepos){	  /* corner case; if this is both the first and last audio page,	     then spec says the end is cut, not beginning */	  if(vb->eofflag){	    /* trim the end */	    /* no preceeding granulepos; assume we started at zero (we'd	       have to in a short single-page stream) */	    /* granulepos could be -1 due to a seek, but that would result	       in a long coun`t, not short count */	    	    v->pcm_current-=(b->sample_count-v->granulepos);	  }else{	    /* trim the beginning */	    v->pcm_returned+=(b->sample_count-v->granulepos);	    if(v->pcm_returned>v->pcm_current)	      v->pcm_returned=v->pcm_current;	  }	  	}	      }    }else{      v->granulepos+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;      if(vb->granulepos!=-1 && v->granulepos!=vb->granulepos){		if(v->granulepos>vb->granulepos){	  long extra=v->granulepos-vb->granulepos;	  	  if(extra)	    if(vb->eofflag){	      /* partial last frame.  Strip the extra samples off */	      v->pcm_current-=extra;	    } /* else {Shouldn't happen *unless* the bitstream is out of		 spec.  Either way, believe the bitstream } */	} /* else {Shouldn't happen *unless* the bitstream is out of	     spec.  Either way, believe the bitstream } */	v->granulepos=vb->granulepos;      }    }        /* Update, cleanup */        if(vb->eofflag)v->eofflag=1;  }    return(0);}/* pcm==NULL indicates we just want the pending samples, no more */int vorbis_synthesis_pcmout(vorbis_dsp_state *v,ogg_int32_t ***pcm){  vorbis_info *vi=v->vi;  if(v->pcm_returned>-1 && v->pcm_returned<v->pcm_current){    if(pcm){      int i;      for(i=0;i<vi->channels;i++)	v->pcmret[i]=v->pcm[i]+v->pcm_returned;      *pcm=v->pcmret;    }    return(v->pcm_current-v->pcm_returned);  }  return(0);}int vorbis_synthesis_read(vorbis_dsp_state *v,int bytes){  if(bytes && v->pcm_returned+bytes>v->pcm_current)return(OV_EINVAL);  v->pcm_returned+=bytes;  return(0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区在线看| 欧美视频在线播放| 久久精品国产成人一区二区三区| 日韩国产精品久久久| 午夜久久久久久久久| 亚洲国产美女搞黄色| 亚洲午夜久久久久久久久电影网| 亚洲国产三级在线| 日韩精品每日更新| 国内一区二区在线| 狠狠网亚洲精品| 国产69精品久久久久777| 成人精品鲁一区一区二区| 成人av网站免费观看| 91色.com| 欧美日韩国产经典色站一区二区三区| 精品婷婷伊人一区三区三| 欧美一区二区三区男人的天堂 | 国产精品色婷婷久久58| 亚洲欧洲日韩综合一区二区| 亚洲狠狠丁香婷婷综合久久久| 亚洲国产va精品久久久不卡综合| 日韩电影在线观看网站| 国产精品一区二区不卡| 91麻豆.com| 日韩欧美亚洲国产另类| 亚洲国产精品激情在线观看| 亚洲综合偷拍欧美一区色| 久久疯狂做爰流白浆xx| 91亚洲国产成人精品一区二区三| 欧美日韩精品二区第二页| 久久亚洲欧美国产精品乐播| 亚洲婷婷综合色高清在线| 青青草原综合久久大伊人精品优势| 精品一区二区三区久久久| 91丨porny丨蝌蚪视频| 欧美精品日韩一区| 国产精品青草久久| 免费美女久久99| 972aa.com艺术欧美| 欧美一区二区三区色| 亚洲欧美精品午睡沙发| 韩国一区二区在线观看| 91免费看视频| 国产喂奶挤奶一区二区三区| 亚洲无人区一区| 不卡免费追剧大全电视剧网站| 7777精品久久久大香线蕉| 亚洲欧美在线视频| 天堂一区二区在线免费观看| 成人av免费观看| 国产日韩欧美精品综合| 日本不卡在线视频| 91福利在线播放| 国产精品久久久久久久久久免费看| 精一区二区三区| 91精品国产免费| 亚洲成人1区2区| 在线免费精品视频| 日韩美女视频一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 91国产丝袜在线播放| 中文字幕视频一区二区三区久| 精品亚洲aⅴ乱码一区二区三区| 欧美精选在线播放| 亚洲成在线观看| 欧美色爱综合网| 亚洲午夜羞羞片| 欧美性一二三区| 一区二区三区在线影院| 日本福利一区二区| 自拍偷拍国产亚洲| 91浏览器在线视频| 一区二区高清视频在线观看| av在线不卡免费看| 亚洲国产精品国自产拍av| 国产激情精品久久久第一区二区| 日韩免费性生活视频播放| 久88久久88久久久| 久久综合av免费| 国产精品一区二区在线观看网站| 2023国产一二三区日本精品2022| 美女视频一区二区| 26uuu精品一区二区| 美女视频黄 久久| 欧美精品一区二区三区蜜桃| 国产剧情一区二区| 亚洲国产成人私人影院tom| 丁香激情综合国产| 一区二区三区中文字幕电影| 色偷偷久久人人79超碰人人澡| 国产精品超碰97尤物18| 欧美伊人久久大香线蕉综合69| 天天影视色香欲综合网老头| 日韩欧美中文字幕制服| 国产精品一二一区| 亚洲视频免费观看| 555夜色666亚洲国产免| 国产乱妇无码大片在线观看| 日韩一区日韩二区| 5月丁香婷婷综合| 国产成人精品影视| 午夜精品在线看| 欧美国产亚洲另类动漫| 欧美日韩免费不卡视频一区二区三区| 免费在线一区观看| 自拍偷拍国产亚洲| 欧美成人女星排名| av色综合久久天堂av综合| 亚洲va欧美va人人爽| 久久久久久久久久久99999| gogo大胆日本视频一区| 青青草精品视频| 成人免费在线播放视频| 日韩午夜精品视频| 91视频免费播放| 国产一区二区免费看| 亚洲bt欧美bt精品777| 国产色爱av资源综合区| 欧美视频在线观看一区| 国产成人综合在线| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲男人的天堂在线观看| 欧美精品一区二区精品网| 一本色道a无线码一区v| 国产九色精品成人porny| 亚洲成av人片一区二区梦乃| 国产精品欧美极品| xfplay精品久久| 欧美精品精品一区| 色婷婷亚洲一区二区三区| 国产69精品久久久久毛片| 黄页视频在线91| 麻豆精品国产传媒mv男同| 亚洲成人一区二区在线观看| 国产精品女人毛片| 国产色91在线| 国产亚洲欧美在线| 精品福利av导航| 亚洲精品一区在线观看| 欧美一区二区啪啪| 欧美丰满美乳xxx高潮www| 色乱码一区二区三区88 | 亚洲天堂精品在线观看| 久久精品一区四区| 日韩精品最新网址| 精品国产电影一区二区| ww久久中文字幕| 久久先锋影音av| 久久综合狠狠综合久久综合88 | 欧美日韩国产美| 欧美日韩在线一区二区| 欧美日韩一卡二卡三卡| 欧美三级电影一区| 91精品国产综合久久久蜜臀粉嫩| 3atv一区二区三区| 精品理论电影在线观看 | 91黄色在线观看| 欧美自拍偷拍一区| 欧美日韩一级二级| 欧美一级欧美一级在线播放| 日韩一区和二区| 久久夜色精品一区| 国产日韩欧美综合在线| 国产精品久久久久aaaa樱花| 亚洲日本乱码在线观看| 亚洲一级二级三级| 日韩高清不卡一区| 久久疯狂做爰流白浆xx| 成人精品视频网站| 欧美性一级生活| 欧美mv日韩mv| 国产精品久久久久精k8| 亚洲一区在线电影| 狠狠色狠狠色合久久伊人| 成人深夜在线观看| 欧美在线一区二区三区| 精品国产一区a| 国产精品久久99| 石原莉奈在线亚洲三区| 国产成人在线视频免费播放| 色94色欧美sute亚洲线路一ni| 欧美一个色资源| 国产精品久久综合| 日韩在线一二三区| 国产电影一区二区三区| 欧美在线视频你懂得| 精品久久五月天| 一片黄亚洲嫩模| 国产麻豆视频一区二区| 欧美日韩中文字幕一区二区| 久久久精品免费观看| 亚洲电影在线免费观看| 国产99精品国产| 欧美丰满美乳xxx高潮www| 国产精品天干天干在观线| 亚洲午夜激情网站| 成人一区二区视频| 欧美大片国产精品| 一区二区三区中文字幕在线观看|