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

📄 synthesis.c

📁 一个播放器 使用了evc 大家可以参考下 哦
💻 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: single-block PCM synthesis last mod: $Id: synthesis.c,v 1.2 2002/09/03 03:15:19 xiphmont Exp $ ********************************************************************/#include <stdio.h>#include "ogg.h"#include "ivorbiscodec.h"#include "codec_internal.h"#include "registry.h"#include "misc.h"#include "os.h"int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){  vorbis_dsp_state     *vd=vb->vd;  backend_lookup_state *b=(backend_lookup_state *)vd->backend_state;  vorbis_info          *vi=vd->vi;  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;  oggpack_buffer       *opb=&vb->opb;  int                   type,mode,i;   /* first things first.  Make sure decode is ready */  _vorbis_block_ripcord(vb);  oggpack_readinit(opb,op->packet,op->bytes);  /* Check the packet type */  if(oggpack_read(opb,1)!=0){    /* Oops.  This is not an audio data packet */    return(OV_ENOTAUDIO);  }  /* read our mode and pre/post windowsize */  mode=oggpack_read(opb,b->modebits);  if(mode==-1)return(OV_EBADPACKET);    vb->mode=mode;  vb->W=ci->mode_param[mode]->blockflag;  if(vb->W){    vb->lW=oggpack_read(opb,1);    vb->nW=oggpack_read(opb,1);    if(vb->nW==-1)   return(OV_EBADPACKET);  }else{    vb->lW=0;    vb->nW=0;  }    /* more setup */  vb->granulepos=op->granulepos;  vb->sequence=op->packetno-3; /* first block is third packet */  vb->eofflag=op->e_o_s;  /* alloc pcm passback storage */  vb->pcmend=ci->blocksizes[vb->W];  vb->pcm=(ogg_int32_t **)_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);  for(i=0;i<vi->channels;i++)    vb->pcm[i]=(ogg_int32_t *)_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));  /* unpack_header enforces range checking */  type=ci->map_type[ci->mode_param[mode]->mapping];  return(_mapping_P[type]->inverse(vb,b->mode[mode]));}long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){  codec_setup_info     *ci=(codec_setup_info *)vi->codec_setup;  oggpack_buffer       opb;  int                  mode;   oggpack_readinit(&opb,op->packet,op->bytes);  /* Check the packet type */  if(oggpack_read(&opb,1)!=0){    /* Oops.  This is not an audio data packet */    return(OV_ENOTAUDIO);  }  {    int modebits=0;    int v=ci->modes;    while(v>1){      modebits++;      v>>=1;    }    /* read our mode and pre/post windowsize */    mode=oggpack_read(&opb,modebits);  }  if(mode==-1)return(OV_EBADPACKET);  return(ci->blocksizes[ci->mode_param[mode]->blockflag]);}

⌨️ 快捷键说明

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