diff options
author | Monty <xiphmont@xiph.org> | 2003-03-29 03:07:21 +0000 |
---|---|---|
committer | Monty <xiphmont@xiph.org> | 2003-03-29 03:07:21 +0000 |
commit | 3c764af8013b5b153d3e97311d56a8741536f4cf (patch) | |
tree | b8201ccdd984c9b5b682641996a19cca15b6593c /synthesis.c | |
parent | a80cb134d84683d6c4961e2c33fddf3a24b378fa (diff) | |
download | tremor-3c764af8013b5b153d3e97311d56a8741536f4cf.tar.gz |
Roll all recent optimizations and fixes to mainline vorbisfile into Tremor
First mainline deployment of libogg 2 (embedded into Tremor)
git-svn-id: https://svn.xiph.org/trunk/Tremor@4565 0101bb08-14d6-0310-b084-bc0e0c8e3800
Diffstat (limited to 'synthesis.c')
-rw-r--r-- | synthesis.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/synthesis.c b/synthesis.c index 47cd8b1..3006eee 100644 --- a/synthesis.c +++ b/synthesis.c @@ -6,13 +6,13 @@ * 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 * + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2003 * * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * * * ******************************************************************** function: single-block PCM synthesis - last mod: $Id: synthesis.c,v 1.3 2002/10/16 07:39:56 xiphmont Exp $ + last mod: $Id: synthesis.c,v 1.4 2003/03/29 03:07:21 xiphmont Exp $ ********************************************************************/ @@ -24,7 +24,7 @@ #include "misc.h" #include "os.h" -int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){ +int vorbis_synthesis(vorbis_block *vb,ogg_packet *op,int decodep){ vorbis_dsp_state *vd=vb->vd; private_state *b=(private_state *)vd->backend_state; vorbis_info *vi=vd->vi; @@ -34,7 +34,7 @@ int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){ /* first things first. Make sure decode is ready */ _vorbis_block_ripcord(vb); - oggpack_readinit(opb,op->packet,op->bytes); + oggpack_readinit(opb,op->packet); /* Check the packet type */ if(oggpack_read(opb,1)!=0){ @@ -62,16 +62,24 @@ int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){ 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])); + if(decodep){ + /* 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])); + }else{ + /* no pcm */ + vb->pcmend=0; + vb->pcm=NULL; + + return(0); + } } long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){ @@ -79,7 +87,7 @@ long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){ oggpack_buffer opb; int mode; - oggpack_readinit(&opb,op->packet,op->bytes); + oggpack_readinit(&opb,op->packet); /* Check the packet type */ if(oggpack_read(&opb,1)!=0){ |