Mercurial > mplayer.hg
changeset 17151:9a6b48d19e12
Remove MPlayer native 14_4 and 28_8 codecs (they are in lavc)
author | rtognimp |
---|---|
date | Fri, 09 Dec 2005 16:52:44 +0000 |
parents | bd2b7a17b416 |
children | 3486af55e68b |
files | etc/codecs.conf libmpcodecs/Makefile libmpcodecs/ad.c libmpcodecs/ad_ra1428.c libmpcodecs/native/common1428.h libmpcodecs/native/decode144.c libmpcodecs/native/decode144.h libmpcodecs/native/decode288.c libmpcodecs/native/decode288.h |
diffstat | 9 files changed, 1 insertions(+), 939 deletions(-) [+] |
line wrap: on
line diff
--- a/etc/codecs.conf Fri Dec 09 16:36:50 2005 +0000 +++ b/etc/codecs.conf Fri Dec 09 16:52:44 2005 +0000 @@ -2121,13 +2121,6 @@ driver ffmpeg dll "cook" -audiocodec mpra1428 - info "RealAudio 1.0 / 2.0 native decoder" - status working - format 0x345F3431 ; "14_4" -; format 0x385F3832 ; "28_8" ; broken after demuxer changes - driver ra1428 - audiocodec ra144 info "RealAudio 1.0" status working
--- a/libmpcodecs/Makefile Fri Dec 09 16:36:50 2005 +0000 +++ b/libmpcodecs/Makefile Fri Dec 09 16:52:44 2005 +0000 @@ -15,7 +15,6 @@ ad_msadpcm.c \ ad_msgsm.c \ ad_pcm.c \ - ad_ra1428.c \ AUDIO_SRCS_OPT=ad_acm.c \ ad_dmo.c \ @@ -157,9 +156,7 @@ ve_xvid4.c \ ve_xvid.c \ -NATIVE_SRCS=native/decode144.c \ - native/decode288.c \ - native/minilzo.c \ +NATIVE_SRCS=native/minilzo.c \ native/nuppelvideo.c \ native/RTjpegN.c \ native/xa_gsm.c \
--- a/libmpcodecs/ad.c Fri Dec 09 16:36:50 2005 +0000 +++ b/libmpcodecs/ad.c Fri Dec 09 16:52:44 2005 +0000 @@ -38,7 +38,6 @@ extern ad_functions_t mpcodecs_ad_realaud; extern ad_functions_t mpcodecs_ad_libdv; extern ad_functions_t mpcodecs_ad_qtaudio; -extern ad_functions_t mpcodecs_ad_ra1428; extern ad_functions_t mpcodecs_ad_twin; extern ad_functions_t mpcodecs_ad_libmusepack; @@ -91,7 +90,6 @@ #ifdef HAVE_LIBDV095 &mpcodecs_ad_libdv, #endif - &mpcodecs_ad_ra1428, #ifdef HAVE_MUSEPACK &mpcodecs_ad_libmusepack, #endif
--- a/libmpcodecs/ad_ra1428.c Fri Dec 09 16:36:50 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -// SAMPLE audio decoder - you can use this file as template when creating new codec! - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - -#include "config.h" -#include "ad_internal.h" - -static ad_info_t info = { - "RealAudio 1.0 and 2.0 native decoder", - "ra1428", - "Roberto Togni", - "http://www.honeypot.net/audio", - "Decoders taken from a public domain Amiga player" -}; - -LIBAD_EXTERN(ra1428) - -#include "native/common1428.h" - - - -static int preinit(sh_audio_t *sh) { - sh->samplerate=sh->wf->nSamplesPerSec; - sh->samplesize=sh->wf->wBitsPerSample/8; - sh->channels=sh->wf->nChannels; - sh->sample_format=AF_FORMAT_S16_LE; - - switch (sh->format) { - case mmioFOURCC('1','4','_','4'): - mp_msg(MSGT_DECAUDIO,MSGL_INFO,"[ra1428] RealAudio 1.0 (14_4)\n"); - sh->i_bps=1800; - break; - case mmioFOURCC('2','8','_','8'): - mp_msg(MSGT_DECAUDIO,MSGL_INFO,"[ra1428] RealAudio 2.0 (28_8)\n"); - sh->i_bps=1200; - break; - default: - mp_msg(MSGT_DECAUDIO,MSGL_ERR,"[ra1428] Unhandled format in preinit: %x\n", sh->format); - return 0; - } - - sh->audio_out_minsize=128000; // no idea how to get... :( - sh->audio_in_minsize=((short*)(sh->wf+1))[1]*sh->wf->nBlockAlign; - - return 1; // return values: 1=OK 0=ERROR -} - - - -static int init(sh_audio_t *sh) { - switch (sh->format) { - case mmioFOURCC('1','4','_','4'): - sh->context = init_144(); - break; - case mmioFOURCC('2','8','_','8'): - sh->context = init_288(); - break; - default: - mp_msg(MSGT_DECAUDIO,MSGL_ERR,"[ra1428] Unhandled format in init: %x\n", sh->format); - return 0; - } - - return 1; // return values: 1=OK 0=ERROR -} - - - -static void uninit(sh_audio_t *sh) { - switch (sh->format) { - case mmioFOURCC('1','4','_','4'): - free_144((Real_144*)sh->context); - break; - case mmioFOURCC('2','8','_','8'): - free_288((Real_288*)sh->context); - break; - default: - mp_msg(MSGT_DECAUDIO,MSGL_ERR,"[ra1428] Unhandled format in uninit: %x\n", sh->format); - return; - } -} - - - -static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen) { - int w=sh->wf->nBlockAlign; - int h=((short*)(sh->wf+1))[1]; - int cfs=((short*)(sh->wf+1))[3]; - int i,j; - - if(sh->a_in_buffer_len<=0){ - switch (sh->format) { - case mmioFOURCC('1','4','_','4'): - demux_read_data(sh->ds, sh->a_in_buffer, sh->wf->nBlockAlign); - sh->a_in_buffer_size= - sh->a_in_buffer_len=sh->wf->nBlockAlign; - break; - case mmioFOURCC('2','8','_','8'): - for (j = 0; j < h; j++) - for (i = 0; i < h/2; i++) - demux_read_data(sh->ds, sh->a_in_buffer+i*2*w+j*cfs, cfs); - sh->a_in_buffer_size= - sh->a_in_buffer_len=sh->wf->nBlockAlign*h; - break; - default: - mp_msg(MSGT_DECAUDIO,MSGL_ERR,"[ra1428] Unhandled format in decode_audio: %x\n", sh->format); - return 0; - } - } - - switch (sh->format) { - case mmioFOURCC('1','4','_','4'): - decode_144((Real_144*)sh->context,sh->a_in_buffer+sh->a_in_buffer_size-sh->a_in_buffer_len,(signed short*)buf); - break; - case mmioFOURCC('2','8','_','8'): - decode_288((Real_288*)sh->context,sh->a_in_buffer+sh->a_in_buffer_size-sh->a_in_buffer_len,(signed short*)buf); - break; - default: - mp_msg(MSGT_DECAUDIO,MSGL_ERR,"[ra1428] Unhandled format in init: %x\n", sh->format); - return 0; - } - - sh->a_in_buffer_len-=cfs; - - return AUDIOBLOCK*2; // return value: number of _bytes_ written to output buffer, - // or -1 for EOF (or uncorrectable error) -} - -static int control(sh_audio_t *sh,int cmd,void* arg, ...){ - // various optional functions you MAY implement: - switch(cmd){ - case ADCTRL_RESYNC_STREAM: - // it is called once after seeking, to resync. - // Note: sh_audio->a_in_buffer_len=0; is done _before_ this call! -// ... - return CONTROL_TRUE; - case ADCTRL_SKIP_FRAME: - // it is called to skip (jump over) small amount (1/10 sec or 1 frame) - // of audio data - used to sync audio to video after seeking - // if you don't return CONTROL_TRUE, it will defaults to: - // ds_fill_buffer(sh_audio->ds); // skip 1 demux packet -// ... - return CONTROL_TRUE; - } - return CONTROL_UNKNOWN; -}
--- a/libmpcodecs/native/common1428.h Fri Dec 09 16:36:50 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -#ifndef COMMON_H -#define COMMON_H - -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <math.h> - -#define DATABLOCK1 20 /* size of 14.4 input block in bytes */ -#define DATABLOCK2 38 /* size of 28.8 input block in bytes */ -#define DATACHUNK1 1440 /* size of 14.4 input chunk in bytes */ -#define DATACHUNK2 2736 /* size of 28.8 input chunk in bytes */ -#define AUDIOBLOCK 160 /* size of output block in 16-bit words (320 bytes) */ -//#define AUDIOBUFFER 11520 /* size of output buffer in 16-bit words (23040 bytes) */ -#define AUDIOBUFFER 12288 /* size of output buffer in 16-bit words (24576 bytes) */ - -typedef void Real_144; -typedef void Real_288; -typedef void Real_dnet; - -/* common prototypes */ -Real_144 *init_144 (void); -Real_288 *init_288 (void); -Real_dnet *init_dnet (void); -void free_144 (Real_144 *global); -void free_288 (Real_288 *global); -void free_dnet (Real_dnet *global); -void deinterleave (unsigned char *in, unsigned char *out, unsigned int size); -void swapbytes (unsigned char *in, unsigned char *out, unsigned int len); -void decode_144 (Real_144 *global, unsigned char *source, signed short *target); -void decode_288 (Real_288 *global, unsigned char *in, signed short *out); -int decode_dnet (Real_dnet *global, unsigned char *in, signed short *out, int *freq, int chans); - -#endif /* !COMMON_H */
--- a/libmpcodecs/native/decode144.c Fri Dec 09 16:36:50 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,437 +0,0 @@ -#include "common1428.h" -#include "decode144.h" -#include "tables144.h" - -/* Initialize internal variable structure */ -Real_144 *init_144(void) -{ - Real_internal *glob; - - if ((glob=malloc(sizeof(Real_internal)))) - memset(glob,0,sizeof(Real_internal)); - - glob->resetflag=1; - glob->swapbuf1=glob->swapb1a; - glob->swapbuf2=glob->swapb2a; - glob->swapbuf1alt=glob->swapb1b; - glob->swapbuf2alt=glob->swapb2b; - - memcpy(glob->wavtable1,wavtable1,sizeof(wavtable1)); - memcpy(glob->wavtable2,wavtable2,sizeof(wavtable2)); - - return (Real_144 *)glob; -} - -/* Free internal variable structure */ -void free_144(Real_144 *global) -{ - if (!global) return; - free(global); -} - -/* Uncompress one block (20 bytes -> 160*2 bytes) */ -void decode_144(Real_144 *global, unsigned char *source, signed short *target) -{ - unsigned int a,b,c; - long s; - signed short *shptr; - unsigned int *lptr,*temp; - const short **dptr; - Real_internal *glob; - - if (!global) return; - glob = (Real_internal *)global; - - unpack_input(source,glob->unpacked); - - glob->iptr=glob->unpacked; - glob->val=decodetable[0][(*(glob->iptr++))<<1]; - - dptr=decodetable+1; - lptr=glob->swapbuf1; - while (lptr<glob->swapbuf1+10) - *(lptr++)=(*(dptr++))[(*(glob->iptr++))<<1]; - - do_voice(glob->swapbuf1,glob->swapbuf2); - - a=t_sqrt(glob->val*glob->oldval)>>12; - - for (c=0;c<NBLOCKS;c++) { - if (c==(NBLOCKS-1)) { - dec1(glob,glob->swapbuf1,glob->swapbuf2,3,glob->val); - } else { - if (c*2==(NBLOCKS-2)) { - if (glob->oldval<glob->val) { - dec2(glob,glob->swapbuf1,glob->swapbuf2,3,a,glob->swapbuf2alt,c); - } else { - dec2(glob,glob->swapbuf1alt,glob->swapbuf2alt,3,a,glob->swapbuf2,c); - } - } else { - if (c*2<(NBLOCKS-2)) { - dec2(glob,glob->swapbuf1alt,glob->swapbuf2alt,3,glob->oldval,glob->swapbuf2,c); - } else { - dec2(glob,glob->swapbuf1,glob->swapbuf2,3,glob->val,glob->swapbuf2alt,c); - } - } - } - } - - /* do output */ - for (b=0,c=0;c<4;c++) { - glob->gval=glob->gbuf1[c*2]; - glob->gsp=glob->gbuf2+b; - do_output_subblock(glob,glob->resetflag); - glob->resetflag=0; - - shptr=glob->output_buffer; - while (shptr<glob->output_buffer+BLOCKSIZE) { - s=*(shptr++)<<2; - *target=s; - if (s>32767) *target=32767; - if (s<-32767) *target=-32768; - target++; - } - b+=30; - } - - glob->oldval=glob->val; - temp=glob->swapbuf1alt; - glob->swapbuf1alt=glob->swapbuf1; - glob->swapbuf1=temp; - temp=glob->swapbuf2alt; - glob->swapbuf2alt=glob->swapbuf2; - glob->swapbuf2=temp; -} - -/* lookup square roots in table */ -static int t_sqrt(unsigned int x) -{ - int s=0; - while (x>0xfff) { s++; x=x>>2; } - return (sqrt_table[x]<<s)<<2; -} - -/* do 'voice' */ -static void do_voice(int *a1, int *a2) -{ - int buffer[10]; - int *b1,*b2; - int x,y; - int *ptr,*tmp; - - b1=buffer; - b2=a2; - - for (x=0;x<10;x++) { - b1[x]=(*a1)<<4; - - if(x>0) { - ptr=b2+x; - for (y=0;y<=x-1;y++) - b1[y]=(((*a1)*(*(--ptr)))>>12)+b2[y]; - } - tmp=b1; - b1=b2; - b2=tmp; - a1++; - } - ptr=a2+10; - while (ptr>a2) (*a2++)>>=4; -} - - -/* do quarter-block output */ -static void do_output_subblock(Real_internal *glob, int x) -{ - int a,b,c,d,e,f,g; - - if (x==1) memset(glob->buffer,0,20); - if ((*glob->iptr)==0) a=0; - else a=(*glob->iptr)+HALFBLOCK-1; - glob->iptr++; - b=*(glob->iptr++); - c=*(glob->iptr++); - d=*(glob->iptr++); - if (a) rotate_block(glob->buffer_2,glob->buffer_a,a); - memcpy(glob->buffer_b,etable1+b*BLOCKSIZE,BLOCKSIZE*2); - e=((ftable1[b]>>4)*glob->gval)>>8; - memcpy(glob->buffer_c,etable2+c*BLOCKSIZE,BLOCKSIZE*2); - f=((ftable2[c]>>4)*glob->gval)>>8; - if (a) g=irms(glob->buffer_a,glob->gval)>>12; - else g=0; - add_wav(glob,d,a,g,e,f,glob->buffer_a,glob->buffer_b,glob->buffer_c,glob->buffer_d); - memmove(glob->buffer_2,glob->buffer_2+BLOCKSIZE,(BUFFERSIZE-BLOCKSIZE)*2); - memcpy(glob->buffer_2+BUFFERSIZE-BLOCKSIZE,glob->buffer_d,BLOCKSIZE*2); - final(glob,glob->gsp,glob->buffer_d,glob->output_buffer,glob->buffer,BLOCKSIZE); -} - -/* rotate block */ -static void rotate_block(short *source, short *target, int offset) -{ - short *end; - short *ptr1; - short *ptr2; - short *ptr3; - ptr2=source+BUFFERSIZE; - ptr3=ptr1=ptr2-offset; - end=target+BLOCKSIZE; - while (target<end) { - *(target++)=*(ptr3++); - if (ptr3==ptr2) ptr3=ptr1; - } -} - -/* inverse root mean square */ -static int irms(short *data, int factor) -{ - short *p1,*p2; - unsigned int sum; - p2=(p1=data)+BLOCKSIZE; - for (sum=0;p2>p1;p1++) sum+=(*p1)*(*p1); - if (sum==0) return 0; /* OOPS - division by zero */ - return (0x20000000/(t_sqrt(sum)>>8))*factor; -} - -/* multiply/add wavetable */ -static void add_wav(Real_internal *glob, int n, int f, int m1, int m2, int m3, short *s1, short *s2, short *s3, short *dest) -{ - int a,b,c; - int x; - short *ptr,*ptr2; - - ptr=glob->wavtable1+n*9; - ptr2=glob->wavtable2+n*9; - if (f!=0) { - a=((*ptr)*m1)>>((*ptr2)+1); - } else { - a=0; - } - ptr++;ptr2++; - b=((*ptr)*m2)>>((*ptr2)+1); - ptr++;ptr2++; - c=((*ptr)*m3)>>((*ptr2)+1); - ptr2=(ptr=dest)+BLOCKSIZE; - if (f!=0) - while (ptr<ptr2) - *(ptr++)=((*(s1++))*a+(*(s2++))*b+(*(s3++))*c)>>12; - else - while (ptr<ptr2) - *(ptr++)=((*(s2++))*b+(*(s3++))*c)>>12; -} - - -static void final(Real_internal *glob, short *i1, short *i2, void *out, int *statbuf, int len) -{ - int x,sum; - int buffer[10]; - short *ptr; - short *ptr2; - - memcpy(glob->work,statbuf,20); - memcpy(glob->work+10,i2,len*2); - - buffer[9]=i1[0]; - buffer[8]=i1[1]; - buffer[7]=i1[2]; - buffer[6]=i1[3]; - buffer[5]=i1[4]; - buffer[4]=i1[5]; - buffer[3]=i1[6]; - buffer[2]=i1[7]; - buffer[1]=i1[8]; - buffer[0]=i1[9]; - - ptr2=(ptr=glob->work)+len; - while (ptr<ptr2) { - for(sum=0,x=0;x<=9;x++) - sum+=buffer[x]*(ptr[x]); - sum=sum>>12; - x=ptr[10]-sum; - if (x<-32768 || x>32767) - { - memset(out,0,len*2); - memset(statbuf,0,20); - return; - } - ptr[10]=x; - ptr++; - } - memcpy(out,ptr+10-len,len*2); - memcpy(statbuf,ptr,20); -} - -/* Decode 20-byte input */ -static void unpack_input(unsigned char *input, unsigned int *output) -{ - unsigned int outbuffer[28]; - unsigned short inbuffer[10]; - unsigned int x; - unsigned int *ptr; - - /* fix endianness */ - for (x=0;x<20;x+=2) - inbuffer[x/2]=(input[x]<<8)+input[x+1]; - - /* unpack */ - ptr=outbuffer; - *(ptr++)=27; - *(ptr++)=(inbuffer[0]>>10)&0x3f; - *(ptr++)=(inbuffer[0]>>5)&0x1f; - *(ptr++)=inbuffer[0]&0x1f; - *(ptr++)=(inbuffer[1]>>12)&0xf; - *(ptr++)=(inbuffer[1]>>8)&0xf; - *(ptr++)=(inbuffer[1]>>5)&7; - *(ptr++)=(inbuffer[1]>>2)&7; - *(ptr++)=((inbuffer[1]<<1)&6)|((inbuffer[2]>>15)&1); - *(ptr++)=(inbuffer[2]>>12)&7; - *(ptr++)=(inbuffer[2]>>10)&3; - *(ptr++)=(inbuffer[2]>>5)&0x1f; - *(ptr++)=((inbuffer[2]<<2)&0x7c)|((inbuffer[3]>>14)&3); - *(ptr++)=(inbuffer[3]>>6)&0xff; - *(ptr++)=((inbuffer[3]<<1)&0x7e)|((inbuffer[4]>>15)&1); - *(ptr++)=(inbuffer[4]>>8)&0x7f; - *(ptr++)=(inbuffer[4]>>1)&0x7f; - *(ptr++)=((inbuffer[4]<<7)&0x80)|((inbuffer[5]>>9)&0x7f); - *(ptr++)=(inbuffer[5]>>2)&0x7f; - *(ptr++)=((inbuffer[5]<<5)&0x60)|((inbuffer[6]>>11)&0x1f); - *(ptr++)=(inbuffer[6]>>4)&0x7f; - *(ptr++)=((inbuffer[6]<<4)&0xf0)|((inbuffer[7]>>12)&0xf); - *(ptr++)=(inbuffer[7]>>5)&0x7f; - *(ptr++)=((inbuffer[7]<<2)&0x7c)|((inbuffer[8]>>14)&3); - *(ptr++)=(inbuffer[8]>>7)&0x7f; - *(ptr++)=((inbuffer[8]<<1)&0xfe)|((inbuffer[9]>>15)&1); - *(ptr++)=(inbuffer[9]>>8)&0x7f; - *(ptr++)=(inbuffer[9]>>1)&0x7f; - - *(output++)=outbuffer[11]; - for (x=1;x<11;*(output++)=outbuffer[x++]); - ptr=outbuffer+12; - for (x=0;x<16;x+=4) - { - *(output++)=ptr[x]; - *(output++)=ptr[x+2]; - *(output++)=ptr[x+3]; - *(output++)=ptr[x+1]; - } -} - -static unsigned int rms(int *data, int f) -{ - int *c; - int x; - int d; - unsigned int res; - int b; - - c=data; - b=0; - res=0x10000; - for (x=0;x<10;x++) - { - res=(((0x1000000-(*c)*(*c))>>12)*res)>>12; - if (res==0) return 0; - if (res<=0x3fff) - { - while (res<=0x3fff) - { - b++; - res<<=2; - } - } else { - if (res>0x10000) - return 0; /* We're screwed, might as well go out with a bang. :P */ - } - c++; - } - if (res>0) res=t_sqrt(res); - - res>>=(b+10); - res=(res*f)>>10; - return res; -} - -static void dec1(Real_internal *glob, int *data, int *inp, int n, int f) -{ - short *ptr,*end; - - *(glob->decptr++)=rms(data,f); - glob->decptr++; - end=(ptr=glob->decsp)+(n*10); - while (ptr<end) *(ptr++)=*(inp++); -} - -static void dec2(Real_internal *glob, int *data, int *inp, int n, int f, int *inp2, int l) -{ - unsigned int *ptr1,*ptr2; - int work[10]; - int a,b; - int x; - int result; - - if(l+1<NBLOCKS/2) a=NBLOCKS-(l+1); - else a=l+1; - b=NBLOCKS-a; - if (l==0) - { - glob->decsp=glob->sptr=glob->gbuf2; - glob->decptr=glob->gbuf1; - } - ptr1=inp; - ptr2=inp2; - for (x=0;x<10*n;x++) - *(glob->sptr++)=(a*(*ptr1++)+b*(*ptr2++))>>2; - result=eq(glob,glob->decsp,work); - if (result==1) - { - dec1(glob,data,inp,n,f); - } else { - *(glob->decptr++)=rms(work,f); - glob->decptr++; - } - glob->decsp+=n*10; -} - - -static int eq(Real_internal *glob, short *in, int *target) -{ - int retval; - int a; - int b; - int c; - unsigned int u; - short *sptr; - int *ptr1,*ptr2,*ptr3; - int *bp1,*bp2,*temp; - - retval=0; - bp1=glob->buffer1; - bp2=glob->buffer2; - ptr2=(ptr3=glob->buffer2)+9; - sptr=in; - while (ptr2>=ptr3) - *(ptr3++)=*(sptr++); - - target+=9; - a=bp2[9]; - *target=a; - if (a+0x1000>0x1fff) - return 0; /* We're screwed, might as well go out with a bang. :P */ - c=8;u=a; - while (c>=0) - { - if (u==0x1000) u++; - if (u==0xfffff000) u--; - b=0x1000-((u*u)>>12); - if (b==0) b++; - ptr2=bp1; - ptr1=(ptr3=bp2)+c; - for (u=0;u<=c;u++) - *(ptr2++)=((*(ptr3++)-(((*target)*(*(ptr1--)))>>12))*(0x1000000/b))>>12; - *(--target)=u=bp1[(c--)]; - if ((u+0x1000)>0x1fff) retval=1; - temp=bp2; - bp2=bp1; - bp1=temp; - } - return retval; -}
--- a/libmpcodecs/native/decode144.h Fri Dec 09 16:36:50 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -#ifndef DECODE144_H -#define DECODE144_H - -/* internal globals */ -typedef struct { - unsigned int resetflag, val, oldval; - unsigned int unpacked[28]; /* buffer for unpacked input */ - unsigned int *iptr; /* pointer to current input (from unpacked) */ - unsigned int gval; - unsigned short *gsp; - unsigned int gbuf1[8]; - unsigned short gbuf2[120]; - signed short output_buffer[40]; - unsigned int *decptr; /* decoder ptr */ - signed short *decsp; - - /* the swapped buffers */ - unsigned int swapb1a[10]; - unsigned int swapb2a[10]; - unsigned int swapb1b[10]; - unsigned int swapb2b[10]; - unsigned int *swapbuf1; - unsigned int *swapbuf2; - unsigned int *swapbuf1alt; - unsigned int *swapbuf2alt; - - unsigned int buffer[5]; - unsigned short int buffer_2[148]; - unsigned short int buffer_a[40]; - unsigned short int buffer_b[40]; - unsigned short int buffer_c[40]; - unsigned short int buffer_d[40]; - - unsigned short int work[50]; - unsigned short *sptr; - - int buffer1[10]; - int buffer2[10]; - - signed short wavtable1[2304]; - unsigned short wavtable2[2304]; -} Real_internal; - -/* consts */ -#define NBLOCKS 4 /* number of segments within a block */ -#define BLOCKSIZE 40 /* (quarter) block size in 16-bit words (80 bytes) */ -#define HALFBLOCK 20 /* BLOCKSIZE/2 */ -#define BUFFERSIZE 146 /* for do_output */ - -/* prototypes */ -static int t_sqrt (unsigned int x); -static void do_voice (int *a1, int *a2); -static void do_output_subblock (Real_internal *glob, int x); -static void rotate_block (short *source, short *target, int offset); -static int irms (short *data, int factor); -static void add_wav (Real_internal *glob, int n, int f, int m1, int m2, int m3, short *s1, short *s2, short *s3, short *dest); -static void final (Real_internal *glob, short *i1, short *i2, void *out, int *statbuf, int len); -static void unpack_input (unsigned char *input, unsigned int *output); -static unsigned int rms (int *data, int f); -static void dec1 (Real_internal *glob, int *data, int *inp, int n, int f); -static void dec2 (Real_internal *glob, int *data, int *inp, int n, int f, int *inp2, int l); -static int eq (Real_internal *glob, short *in, int *target); - -#endif /* !DECODE144_H */
--- a/libmpcodecs/native/decode288.c Fri Dec 09 16:36:50 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +0,0 @@ -#include "common1428.h" -#include "decode288.h" -#include "tables288.h" - -/* Initialize internal variable structure */ -Real_288 *init_288(void) -{ - Real_internal *glob; - - if ((glob=malloc(sizeof(Real_internal)))) - memset(glob,0,sizeof(Real_internal)); - - return (Real_288 *)glob; -} - -/* Free internal variable structure */ -void free_288(Real_288 *global) -{ - if (!global) return; - free(global); -} - -/* Unlike the 14.4 format, 28.8 blocks are interleaved */ -/* to dilute the effects of transmission errors */ -void deinterleave(unsigned char *in, unsigned char *out, unsigned int size) -{ - unsigned int x=0,y=0,z=0; - if (size>=38) z=size-38; - else return; - - while (x<=z) - { - memcpy(out+y,in+x,38); - x+=38;y+=456; - if (y>z) y-=z; - } -} - -/* Decode a block (celp) */ -void decode_288(Real_288 *global, unsigned char *in, signed short int *out) -{ - int x,y; - unsigned short int buffer[32]; - Real_internal *glob; - - if (!global) return; - glob = (Real_internal *)global; - - unpack(buffer,in,32); - for (x=0;x<32;x++) - { - glob->phasep=(glob->phase=x&7)*5; - decode(glob,buffer[x]); - for (y=0;y<5;*(out++)=8*glob->output[glob->phasep+(y++)]); - if (glob->phase==3) update(glob); - } -} - -/* initial decode */ -static void unpack(unsigned short *tgt, unsigned char *src, int len) -{ - int x,y,z; - int n,temp; - int buffer[38]; - - for (x=0;x<len;tgt[x++]=0) - buffer[x]=9+(x&1); - - for (x=y=z=0;x<38;x++) { - n=buffer[y]-z; - temp=src[x]; - if (n<8) temp&=255>>(8-n); - tgt[y]+=temp<<z; - if (n<=8) { - tgt[++y]+=src[x]>>n; - z=8-n; - } else z+=8; - } -} - -static void update(Real_internal *glob) -{ - int x,y; - float buffer1[40],temp1[37]; - float buffer2[8],temp2[11]; - - for (x=0,y=glob->phasep+5;x<40;buffer1[x++]=glob->output[(y++)%40]); - co(36,40,35,buffer1,temp1,glob->st1a,glob->st1b,table1); - if (pred(temp1,glob->st1,36)) - colmult(glob->pr1,glob->st1,table1a,36); - - for (x=0,y=glob->phase+1;x<8;buffer2[x++]=glob->history[(y++)%8]); - co(10,8,20,buffer2,temp2,glob->st2a,glob->st2b,table2); - if (pred(temp2,glob->st2,10)) - colmult(glob->pr2,glob->st2,table2a,10); -} - -/* Decode and produce output */ -static void decode(Real_internal *glob, unsigned int input) -{ - unsigned int x,y; - float f; - double sum,sumsum; - float *p1,*p2; - float buffer[5]; - const float *table; - - for (x=36;x--;glob->sb[x+5]=glob->sb[x]); - for (x=5;x--;) { - p1=glob->sb+x;p2=glob->pr1; - for (sum=0,y=36;y--;sum-=(*(++p1))*(*(p2++))); - glob->sb[x]=sum; - } - - f=amptable[input&7]; - table=codetable+(input>>3)*5; - - /* convert log and do rms */ - for (sum=32,x=10;x--;sum-=glob->pr2[x]*glob->lhist[x]); - if (sum<0) sum=0; else if (sum>60) sum=60; - - sumsum=exp(sum*0.1151292546497)*f; /* pow(10.0,sum/20)*f */ - for (sum=0,x=5;x--;) { buffer[x]=table[x]*sumsum; sum+=buffer[x]*buffer[x]; } - if ((sum/=5)<1) sum=1; - - /* shift and store */ - for (x=10;--x;glob->lhist[x]=glob->lhist[x-1]); - *glob->lhist=glob->history[glob->phase]=10*log10(sum)-32; - - for (x=1;x<5;x++) for (y=x;y--;buffer[x]-=glob->pr1[x-y-1]*buffer[y]); - - /* output */ - for (x=0;x<5;x++) { - f=glob->sb[4-x]+buffer[x]; - if (f>4095) f=4095; else if (f<-4095) f=-4095; - glob->output[glob->phasep+x]=glob->sb[4-x]=f; - } -} - -/* column multiply */ -static void colmult(float *tgt, float *m1, const float *m2, int n) -{ - while (n--) - *(tgt++)=(*(m1++))*(*(m2++)); -} - -static int pred(float *in, float *tgt, int n) -{ - int x,y; - float *p1,*p2; - double f0,f1,f2; - float temp; - - if (in[n]==0) return 0; - if ((f0=*in)<=0) return 0; - - for (x=1;;x++) { - if (n<x) return 1; - - p1=in+x; - p2=tgt; - f1=*(p1--); - for (y=x;--y;f1+=(*(p1--))*(*(p2++))); - - p1=tgt+x-1; - p2=tgt; - *(p1--)=f2=-f1/f0; - for (y=x>>1;y--;) { - temp=*p2+*p1*f2; - *(p1--)+=*p2*f2; - *(p2++)=temp; - } - if ((f0+=f1*f2)<0) return 0; - } -} - -static void co(int n, int i, int j, float *in, float *out, float *st1, float *st2, const float *table) -{ - int a,b,c; - unsigned int x; - float *fp,*fp2; - float buffer1[37]; - float buffer2[37]; - float work[111]; - - /* rotate and multiply */ - c=(b=(a=n+i)+j)-i; - fp=st1+i; - for (x=0;x<b;x++) { - if (x==c) fp=in; - work[x]=*(table++)*(*(st1++)=*(fp++)); - } - - prodsum(buffer1,work+n,i,n); - prodsum(buffer2,work+a,j,n); - - for (x=0;x<=n;x++) { - *st2=*st2*(0.5625)+buffer1[x]; - out[x]=*(st2++)+buffer2[x]; - } - *out*=1.00390625; /* to prevent clipping */ -} - -/* product sum (lsf) */ -static void prodsum(float *tgt, float *src, int len, int n) -{ - unsigned int x; - float *p1,*p2; - double sum; - - while (n>=0) - { - p1=(p2=src)-n; - for (sum=0,x=len;x--;sum+=(*p1++)*(*p2++)); - tgt[n--]=sum; - } -}
--- a/libmpcodecs/native/decode288.h Fri Dec 09 16:36:50 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -#ifndef DECODE288_H -#define DECODE288_H - -/* internal globals */ -typedef struct { - float history[8]; - float output[40]; - float pr1[36]; - float pr2[10]; - int phase, phasep; - - float st1a[111],st1b[37],st1[37]; - float st2a[38],st2b[11],st2[11]; - float sb[41]; - float lhist[10]; -} Real_internal; - -/* prototypes */ -static void unpack (unsigned short *tgt, unsigned char *src, int len); -static void decode (Real_internal *internal, unsigned int input); -static void update (Real_internal *internal); -static void colmult (float *tgt, float *m1, const float *m2, int n); -static int pred (float *in, float *tgt, int n); -static void co (int n, int i, int j, float *in, float *out, float *st1, float *st2, const float *table); -static void prodsum (float *tgt, float *src, int len, int n); - -#endif /* !DECODE288_H */