X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=lib%2Fanalysis.c;h=0e11a167be8dec155075c672fba38be75d5995bb;hb=c78405727f8c5fcc9d1a8d23d57f16fc4c7dface;hp=a99d6621bc92f7f0c004fb14353a15d59c7c4ad4;hpb=a8e19c3cdc481b55bb9a69b61c13999b75456714;p=platform%2Fupstream%2Flibvorbis.git diff --git a/lib/analysis.c b/lib/analysis.c index a99d662..0e11a16 100644 --- a/lib/analysis.c +++ b/lib/analysis.c @@ -1,152 +1,119 @@ /******************************************************************** * * - * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY * - * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE. * - * PLEASE READ THESE TERMS DISTRIBUTING. * + * THIS FILE IS PART OF THE OggVorbis SOFTWARE 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 OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999 * - * by 1999 Monty and The XIPHOPHORUS Company * - * http://www.xiph.org/ * + * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * + * by the Xiph.Org Foundation http://www.xiph.org/ * * * ******************************************************************** - function: single-block PCM analysis - author: Monty - modifications by: Monty - last modification date: Aug 09 1999 + function: single-block PCM analysis mode dispatch ********************************************************************/ #include +#include #include -#include "lpc.h" -#include "codec.h" -#include "envelope.h" -#include "mdct.h" -#include "psy.h" - -int vorbis_analysis(vorbis_block *vb){ - int i; - double *window=vb->vd->window[vb->W][vb->lW][vb->nW]; - int n=vb->pcmend; - static int frameno=0; - - _ve_envelope_sparsify(vb); - _ve_envelope_apply(vb,0); - - for(i=0;ipcm_channels;i++) - mdct_forward(&vb->vd->vm[vb->W],vb->pcm[i],vb->pcm[i],window); - - /* handle vectors to be encoded one at a time. The PCM storage now - has twice the space we need in the MDCT domain, so mix down into - the second half of storage */ - - /* XXXX Mix down to C+D stereo now */ - { - double *C=vb->pcm[0]+n/2; - double *D=vb->pcm[1]+n/2; - double *L=vb->pcm[0]; - double *R=vb->pcm[1]; - for(i=0;i +#include "vorbis/codec.h" +#include "codec_internal.h" +#include "registry.h" +#include "scales.h" +#include "os.h" +#include "misc.h" + +/* decides between modes, dispatches to the appropriate mapping. */ +int vorbis_analysis(vorbis_block *vb, ogg_packet *op){ + int ret,i; + vorbis_block_internal *vbi=vb->internal; + + vb->glue_bits=0; + vb->time_bits=0; + vb->floor_bits=0; + vb->res_bits=0; + + /* first things first. Make sure encode is ready */ + for(i=0;ipacketblob[i]); + + /* we only have one mapping type (0), and we let the mapping code + itself figure out what soft mode to use. This allows easier + bitrate management */ + + if((ret=_mapping_P[0]->forward(vb))) + return(ret); + + if(op){ + if(vorbis_bitrate_managed(vb)) + /* The app is using a bitmanaged mode... but not using the + bitrate management interface. */ + return(OV_EINVAL); + + op->packet=oggpack_get_buffer(&vb->opb); + op->bytes=oggpack_bytes(&vb->opb); + op->b_o_s=0; + op->e_o_s=vb->eofflag; + op->granulepos=vb->granulepos; + op->packetno=vb->sequence; /* for sake of completeness */ + } + return(0); +} - /* extract the spectral envelope and residue */ - - { - double floor1[n/2]; - double floor2[n/2]; - double curve[n/2]; - double work[n/2]; - double lpc1[40]; - double lpc2[40]; - double amp1,amp2; - - memset(floor1,0,sizeof(floor1)); - memset(floor2,0,sizeof(floor2)); - memset(work,0,sizeof(work)); - - _vp_noise_floor(C,floor1,n/2); - /* _vp_noise_floor(D,floor1,n/2);*/ - _vp_mask_floor(C,floor1,n/2); - /* _vp_mask_floor(D,floor1,n/2);*/ - - _vp_psy_sparsify(C,floor1,n/2); - _vp_psy_sparsify(D,floor1,n/2); - - - memmove(floor1+n/4,floor1,(n/4)*sizeof(double)); - - amp2=sqrt(vorbis_curve_to_lpc(floor1,n/2,lpc2,20)); - vorbis_lpc_to_curve(work,n/2,lpc2,amp2,20); - - - /* amp2=sqrt(vorbis_curve_to_lpc(floor1,n/2/8,lpc2,12)); - vorbis_lpc_to_curve(work,n/2/8,lpc2,amp2,12); - amp2=sqrt(vorbis_curve_to_lpc(floor1+n/2/8,n/2/8,lpc2,10)); - vorbis_lpc_to_curve(work+n/2/8,n/2/8,lpc2,amp2,10); - amp2=sqrt(vorbis_curve_to_lpc(floor1+n/2/4,n/2/4,lpc2,6)); - vorbis_lpc_to_curve(work+n/2/4,n/2/4,lpc2,amp2,6); - amp2=sqrt(vorbis_curve_to_lpc(floor1+n/2/2,n/2/2,lpc2,6)); - vorbis_lpc_to_curve(work+n/2/2,n/2/2,lpc2,amp2,6);*/ - - _vp_psy_quantize(C,work,n/2); - _vp_psy_quantize(D,work,n/2); - - - { - FILE *out; - char buffer[80]; - - - sprintf(buffer,"mdctC%d.m",frameno); - out=fopen(buffer,"w+"); - for(i=0;i