Browse Source

remove mpg123

David Rose 23 years ago
parent
commit
bbe5517c6b

+ 0 - 1
panda/src/mpg123/README

@@ -1 +0,0 @@
-This is ripped directly out of the mpg123 sources.  See http://mpg123.org/

+ 0 - 15
panda/src/mpg123/Sources.pp

@@ -1,15 +0,0 @@
-//#define DIRECTORY_IF_MPG123 yes
-//
-//#begin static_lib_target
-//  #define TARGET mpg123
-//  #define SOURCES \
-//    audio.c dct64.c decode.c decode_2to1.c decode_4to1.c decode_ntom.c \
-//    layer1.c layer2.c layer3.c tabinit.c vbrhead.c xfermem.c common.c \
-//    getbits.c mpgbuffer.c equalizer.c httpget.c readers.c
-//  #define CFLAGS -DGENERIC -DNOXFERMEM
-//
-//  #define INSTALL_HEADERS \
-//    mpg123.h xfermem.h mpgaudio.h
-//
-//#end static_lib_target
-//

+ 0 - 270
panda/src/mpg123/audio.c

@@ -1,270 +0,0 @@
-
-#include "mpg123.h"
-#ifdef WIN32
-#include <io.h>
-#endif
-#include <stdlib.h>
-
-void audio_info_struct_init(struct audio_info_struct *ai)
-{
-#ifdef AUDIO_USES_FD
-  ai->fn = -1;
-#endif
-#ifdef SGI
-#if 0
-  ALconfig config;
-  ALport port;
-#endif
-#endif
-  ai->rate = -1;
-  ai->gain = -1;
-  ai->output = -1;
-#ifdef ALSA
-  ai->handle = NULL;
-  ai->alsa_format.format = -1;
-  ai->alsa_format.rate = -1;
-  ai->alsa_format.channels = -1;
-#endif
-  ai->device = NULL;
-  ai->channels = -1;
-  ai->format = -1;
-}
-
-#define NUM_CHANNELS 2
-#define NUM_ENCODINGS 6
-#define NUM_RATES 10
-
-struct audio_name audio_val2name[NUM_ENCODINGS+1] = {
- { AUDIO_FORMAT_SIGNED_16  , "signed 16 bit" , "s16 " } ,
- { AUDIO_FORMAT_UNSIGNED_16, "unsigned 16 bit" , "u16 " } ,  
- { AUDIO_FORMAT_UNSIGNED_8 , "unsigned 8 bit" , "u8  " } ,
- { AUDIO_FORMAT_SIGNED_8   , "signed 8 bit" , "s8  " } ,
- { AUDIO_FORMAT_ULAW_8     , "mu-law (8 bit)" , "ulaw " } ,
- { AUDIO_FORMAT_ALAW_8     , "a-law (8 bit)" , "alaw " } ,
- { -1 , NULL }
-};
-
-#if 0
-static char *channel_name[NUM_CHANNELS] = 
- { "mono" , "stereo" };
-#endif
-
-static int channels[NUM_CHANNELS] = { 1 , 2 };
-static int rates[NUM_RATES] = { 
-     8000, 11025, 12000, 
-    16000, 22050, 24000,
-    32000, 44100, 48000,
-    8000    /* 8000 = dummy for user forced */
-
-};
-static int encodings[NUM_ENCODINGS] = {
- AUDIO_FORMAT_SIGNED_16, 
- AUDIO_FORMAT_UNSIGNED_16,
- AUDIO_FORMAT_UNSIGNED_8,
- AUDIO_FORMAT_SIGNED_8,
- AUDIO_FORMAT_ULAW_8,
- AUDIO_FORMAT_ALAW_8
-};
-
-static char capabilities[NUM_CHANNELS][NUM_ENCODINGS][NUM_RATES];
-
-void audio_capabilities(struct audio_info_struct *ai)
-{
-    int fmts;
-    int i,j,k,k1=NUM_RATES-1;
-    struct audio_info_struct ai1 = *ai;
-
-        if (param.outmode != DECODE_AUDIO) {
-        memset(capabilities,1,sizeof(capabilities));
-        return;
-    }
-
-    memset(capabilities,0,sizeof(capabilities));
-    if(param.force_rate) {
-        rates[NUM_RATES-1] = param.force_rate;
-        k1 = NUM_RATES;
-    }
-
-    if(audio_open(&ai1) < 0) {
-        perror("audio");
-        exit(1);
-    }
-
-    for(i=0;i<NUM_CHANNELS;i++) {
-        for(j=0;j<NUM_RATES;j++) {
-            ai1.channels = channels[i];
-            ai1.rate = rates[j];
-            fmts = audio_get_formats(&ai1);
-            if(fmts < 0)
-                continue;
-            for(k=0;k<NUM_ENCODINGS;k++) {
-                if((fmts & encodings[k]) == encodings[k])
-                    capabilities[i][k][j] = 1;
-            }
-        }
-    }
-
-    audio_close(&ai1);
-
-    if(param.verbose > 1) {
-        fprintf(stderr,"\nAudio capabilities:\n        |");
-        for(j=0;j<NUM_ENCODINGS;j++) {
-            fprintf(stderr," %5s |",audio_val2name[j].sname);
-        }
-        fprintf(stderr,"\n --------------------------------------------------------\n");
-        for(k=0;k<k1;k++) {
-            fprintf(stderr," %5d  |",rates[k]);
-            for(j=0;j<NUM_ENCODINGS;j++) {
-                if(capabilities[0][j][k]) {
-                    if(capabilities[1][j][k])
-                        fprintf(stderr,"  M/S  |");
-                    else
-                        fprintf(stderr,"   M   |");
-                }
-                else if(capabilities[1][j][k])
-                    fprintf(stderr,"   S   |");
-                else
-                    fprintf(stderr,"       |");
-            }
-            fprintf(stderr,"\n");
-        }
-        fprintf(stderr,"\n");
-    }
-}
-
-static int rate2num(int r)
-{
-    int i;
-    for(i=0;i<NUM_RATES;i++) 
-        if(rates[i] == r)
-            return i;
-    return -1;
-}
-
-
-static int audio_fit_cap_helper(struct audio_info_struct *ai,int rn,int f0,int f2,int c)
-{
-    int i;
-
-        if(rn >= 0) {
-                for(i=f0;i<f2;i++) {
-                        if(capabilities[c][i][rn]) {
-                                ai->rate = rates[rn];
-                                ai->format = encodings[i];
-                                ai->channels = channels[c];
-                return 1;
-                        }
-                }
-        }
-    return 0;
-
-}
-
-/*
- * c=num of channels of stream
- * r=rate of stream
- */
-void audio_fit_capabilities(struct audio_info_struct *ai,int c,int r)
-{
-    int rn;
-    int f0=0;
-
-    if(param.force_8bit) {
-        f0 = 2;
-    }
-
-    c--; /* stereo=1 ,mono=0 */
-
-    if(param.force_mono >= 0)
-        c = 0;
-    if(param.force_stereo)
-        c = 1;
-
-    if(param.force_rate) {
-        rn = rate2num(param.force_rate);
-        if(audio_fit_cap_helper(ai,rn,f0,2,c))
-            return;
-        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
-            return;
-
-        if(c == 1 && !param.force_stereo)
-            c = 0;
-        else if(c == 0 && !param.force_mono)
-            c = 1;
-
-        if(audio_fit_cap_helper(ai,rn,f0,2,c))
-            return;
-        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
-            return;
-
-        fprintf(stderr,"No supported rate found!\n");
-        exit(1);
-    }
-
-    rn = rate2num(r>>0);
-    if(audio_fit_cap_helper(ai,rn,f0,2,c))
-        return;
-    rn = rate2num(r>>1);
-    if(audio_fit_cap_helper(ai,rn,f0,2,c))
-        return;
-    rn = rate2num(r>>2);
-    if(audio_fit_cap_helper(ai,rn,f0,2,c))
-        return;
-
-    rn = rate2num(r>>0);
-    if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
-        return;
-    rn = rate2num(r>>1);
-    if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
-        return;
-    rn = rate2num(r>>2);
-    if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
-        return;
-
-
-        if(c == 1 && !param.force_stereo)
-        c = 0;
-        else if(c == 0 && !param.force_mono)
-                c = 1;
-
-        rn = rate2num(r>>0);
-        if(audio_fit_cap_helper(ai,rn,f0,2,c))
-                return;
-        rn = rate2num(r>>1);
-        if(audio_fit_cap_helper(ai,rn,f0,2,c))
-                return;
-        rn = rate2num(r>>2);
-        if(audio_fit_cap_helper(ai,rn,f0,2,c))
-                return;
-
-        rn = rate2num(r>>0);
-        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
-                return;
-        rn = rate2num(r>>1);
-        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
-                return;
-        rn = rate2num(r>>2);
-        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
-                return;
-
-    fprintf(stderr,"No supported rate found!\n");
-    exit(1);
-}
-
-char *audio_encoding_name(int format)
-{
-    int i;
-
-    for(i=0;i<NUM_ENCODINGS;i++) {
-        if(audio_val2name[i].val == format)
-            return audio_val2name[i].name;
-    }
-    return "Unknown";
-}
-
-#if !defined(SOLARIS) && !defined(__NetBSD__) || defined(NAS)
-void audio_queueflush(struct audio_info_struct *ai)
-{
-}
-#endif
-

+ 0 - 727
panda/src/mpg123/common.c

@@ -1,727 +0,0 @@
-/* GPL clean */
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <signal.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifndef WIN32
-#include <sys/time.h>
-#endif /* WIN32 */
-
-#ifdef WIN32
-#include <io.h>
-#endif
-
-#include <fcntl.h>
-
-#ifdef READ_MMAP
-#include <sys/mman.h>
-#ifndef MAP_FAILED
-#define MAP_FAILED ( (void *) -1 )
-#endif
-#endif
-
-#include "mpg123.h"
-#include "genre.h"
-#include "common.h"
-
-int tabsel_123[2][3][16] = {
-   { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
-     {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
-     {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} },
-
-   { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
-     {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
-     {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} }
-};
-
-long freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 };
-
-struct bitstream_info bsi;
-
-static int fsizeold=0,ssize;
-static unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */
-static unsigned char *bsbuf=bsspace[1],*bsbufold;
-static int bsnum=0;
-
-static unsigned long oldhead = 0;
-unsigned long firsthead=0;
-
-unsigned char *pcm_sample;
-int pcm_point = 0;
-int audiobufsize = AUDIOBUFSIZE;
-
-static int decode_header(struct frame *fr,unsigned long newhead);
-
-void audio_flush(int outmode, struct audio_info_struct *ai)
-{
-    if (pcm_point) {
-    switch (outmode) {
-    case DECODE_FILE:
-        write (OutputDescriptor, pcm_sample, pcm_point);
-        break;
-    case DECODE_AUDIO:
-        audio_play_samples (ai, pcm_sample, pcm_point);
-        break;
-    case DECODE_BUFFER:
-        write (buffer_fd[1], pcm_sample, pcm_point);
-        break;
-    case DECODE_WAV:
-    case DECODE_CDR:
-    case DECODE_AU:
-        wav_write(pcm_sample, pcm_point);
-        break;
-    }
-    pcm_point = 0;
-    }
-}
-
-#if !defined(WIN32) && !defined(GENERIC)
-void (*catchsignal(int signum, void(*handler)()))()
-{
-    struct sigaction new_sa;
-    struct sigaction old_sa;
-
-#ifdef DONT_CATCH_SIGNALS
-    printf ("Not catching any signals.\n");
-    return ((void (*)()) -1);
-#endif
-
-    new_sa.sa_handler = handler;
-    sigemptyset(&new_sa.sa_mask);
-    new_sa.sa_flags = 0;
-    if (sigaction(signum, &new_sa, &old_sa) == -1)
-    return ((void (*)()) -1);
-    return (old_sa.sa_handler);
-}
-#endif
-
-void read_frame_init (void)
-{
-    oldhead = 0;
-    firsthead = 0;
-}
-
-int head_check(unsigned long head)
-{
-/* fprintf(stderr,"HC"); */
-    if( (head & 0xffe00000) != 0xffe00000)
-    return FALSE;
-    if(!((head>>17)&3))
-    return FALSE;
-    if( ((head>>12)&0xf) == 0xf)
-    return FALSE;
-    if( ((head>>10)&0x3) == 0x3 )
-    return FALSE;
-#if 0
-    /* this would match on MPEG1/Layer1 streams with CRC = off */
-    if ((head & 0xffff0000) == 0xffff0000)
-    return FALSE;
-#endif
-
-    return TRUE;
-}
-
-
-
-/*****************************************************************
- * read next frame
- */
-int read_frame(struct frame *fr)
-{
-    unsigned long newhead;
-    static unsigned char ssave[34];
-
-    fsizeold=fr->framesize;       /* for Layer3 */
-
-    if (param.halfspeed) {
-    static int halfphase = 0;
-    if (halfphase--) {
-        bsi.bitindex = 0;
-        bsi.wordpointer = (unsigned char *) bsbuf;
-        if (fr->lay == 3)
-        memcpy (bsbuf, ssave, ssize);
-        return 1;
-    }
-    else
-        halfphase = param.halfspeed - 1;
-    }
-
- read_again:
-    if(!rd->head_read(rd,&newhead))
-    return FALSE;
-
-    if(1 || oldhead != newhead || !oldhead) {
-
-    init_resync:
-
-    fr->header_change = 2;
-    if(oldhead) {
-        if((oldhead & 0xc00) == (newhead & 0xc00)) {
-        if( (oldhead & 0xc0) == 0 && (newhead & 0xc0) == 0)
-            fr->header_change = 1; 
-        else if( (oldhead & 0xc0) > 0 && (newhead & 0xc0) > 0)
-            fr->header_change = 1;
-        }
-    }
-
-
-#ifdef SKIP_JUNK
-    if(!firsthead && !head_check(newhead) ) {
-        int i;
-
-        fprintf(stderr,"Junk at the beginning %08lx\n",newhead);
-
-        /* I even saw RIFF headers at the beginning of MPEG streams ;( */
-        if(newhead == ('R'<<24)+('I'<<16)+('F'<<8)+'F') {
-        if(!rd->head_read(rd,&newhead))
-            return 0;
-        while(newhead != ('d'<<24)+('a'<<16)+('t'<<8)+'a') {
-            if(!rd->head_shift(rd,&newhead))
-            return 0;
-        }
-        if(!rd->head_read(rd,&newhead))
-            return 0;
-        /* fprintf(stderr,"Skipped RIFF header!\n"); */
-        goto read_again;
-        }
-        {
-        /* step in byte steps through next 64K */
-        for(i=0;i<65536;i++) {
-            if(!rd->head_shift(rd,&newhead))
-            return 0;
-            if(head_check(newhead))
-            break;
-        }
-        if(i == 65536) {
-            fprintf(stderr,"Giving up searching valid MPEG header\n");
-            return 0;
-        }
-        }
-        /* 
-         * should we additionaly check, whether a new frame starts at
-         * the next expected position? (some kind of read ahead)
-         * We could implement this easily, at least for files.
-         */
-    }
-#endif
-
-    if( (newhead & 0xffe00000) != 0xffe00000) {
-        if (!param.quiet)
-        fprintf(stderr,"Illegal Audio-MPEG-Header 0x%08lx at offset 0x%lx.\n",
-            newhead,rd->tell(rd)-4);
-        /* and those ugly ID3 tags */
-        if((newhead & 0xffffff00) == ('T'<<24)+('A'<<16)+('G'<<8)) {
-        rd->skip_bytes(rd,124);
-        fprintf(stderr,"Skipped ID3 Tag!\n");
-        goto read_again;
-        }
-        if (param.tryresync) {
-        int try = 0;
-        /* Read more bytes until we find something that looks
-           reasonably like a valid header.  This is not a
-           perfect strategy, but it should get us back on the
-           track within a short time (and hopefully without
-           too much distortion in the audio output).  */
-        do {
-            try++;
-            if(!rd->head_shift(rd,&newhead))
-            return 0;
-            if (!oldhead)
-            goto init_resync;       /* "considered harmful", eh? */
-
-        } while ((newhead & HDRCMPMASK) != (oldhead & HDRCMPMASK)
-             && (newhead & HDRCMPMASK) != (firsthead & HDRCMPMASK));
-        if (!param.quiet)
-            fprintf (stderr, "Skipped %d bytes in input.\n", try);
-        }
-        else
-        return (0);
-    }
-
-/* fprintf(stderr,"+"); */
-
-    if (!firsthead) {
-        if(!decode_header(fr,newhead)) {
-/* fprintf(stderr,"A"); */
-        goto read_again;
-        }
-        firsthead = newhead;
-
-    }
-    else if(!decode_header(fr,newhead)) {
-/* fprintf(stderr,"B: %08lx\n",newhead); */
-        return 0;
-        }
-
-/* fprintf(stderr,"-"); */
-    }
-    else
-    fr->header_change = 0;
-
-/* fprintf(stderr,"FS: %d\n",fr->framesize); */
-
-    /* flip/init buffer for Layer 3 */
-    bsbufold = bsbuf;
-    bsbuf = bsspace[bsnum]+512;
-    bsnum = (bsnum + 1) & 1;
-
-    /* read main data into memory */
-    if(!rd->read_frame_body(rd,bsbuf,fr->framesize))
-    return 0;
-
-    { 
-      /* Test */
-      static struct vbrHeader head;
-      static int vbr = 0;
-      if(!vbr) {
-        getVBRHeader(&head,bsbuf,fr);
-        vbr = 1;
-      }
-    }
-
-/* fprintf(stderr,"Got it\n"); */
-
-    bsi.bitindex = 0;
-    bsi.wordpointer = (unsigned char *) bsbuf;
-
-    if (param.halfspeed && fr->lay == 3)
-    memcpy (ssave, bsbuf, ssize);
-
-    return 1;
-}
-
-/****************************************
- * HACK,HACK,HACK: step back <num> frames
- * can only work if the 'stream' isn't a real stream but a file
- */
-int back_frame(struct reader *rds,struct frame *fr,int num)
-{
-    long bytes;
-    unsigned long newhead;
-  
-    if(!firsthead)
-    return 0;
-  
-    bytes = (fr->framesize+8)*(num+2);
-  
-    if(rds->back_bytes(rds,bytes) < 0)
-    return -1;
-    if(!rds->head_read(rds,&newhead))
-    return -1;
-  
-    while( (newhead & HDRCMPMASK) != (firsthead & HDRCMPMASK) ) {
-    if(!rds->head_shift(rds,&newhead))
-        return -1;
-    }
-  
-    if(rds->back_bytes(rds,4) <0)
-    return -1;
-
-    read_frame(fr);
-    read_frame(fr);
-  
-    if(fr->lay == 3) {
-    set_pointer(512);
-    }
-  
-    return 0;
-}
-
-
-/*
- * decode a header and write the information
- * into the frame structure
- */
-static int decode_header(struct frame *fr,unsigned long newhead)
-{
-    if(!head_check(newhead)) {
-        fprintf(stderr,"Oopps header is wrong\n");
-    return 0;
-    }
-
-    if( newhead & (1<<20) ) {
-    fr->lsf = (newhead & (1<<19)) ? 0x0 : 0x1;
-    fr->mpeg25 = 0;
-    }
-    else {
-    fr->lsf = 1;
-    fr->mpeg25 = 1;
-    }
-    
-    if (!param.tryresync || !oldhead) {
-    /* If "tryresync" is true, assume that certain
-       parameters do not change within the stream! */
-    fr->lay = 4-((newhead>>17)&3);
-    if( ((newhead>>10)&0x3) == 0x3) {
-        fprintf(stderr,"Stream error\n");
-        exit(1);
-    }
-    if(fr->mpeg25) {
-        fr->sampling_frequency = 6 + ((newhead>>10)&0x3);
-    }
-    else
-        fr->sampling_frequency = ((newhead>>10)&0x3) + (fr->lsf*3);
-    fr->error_protection = ((newhead>>16)&0x1)^0x1;
-    }
-
-    fr->bitrate_index = ((newhead>>12)&0xf);
-    fr->padding   = ((newhead>>9)&0x1);
-    fr->extension = ((newhead>>8)&0x1);
-    fr->mode      = ((newhead>>6)&0x3);
-    fr->mode_ext  = ((newhead>>4)&0x3);
-    fr->copyright = ((newhead>>3)&0x1);
-    fr->original  = ((newhead>>2)&0x1);
-    fr->emphasis  = newhead & 0x3;
-
-    fr->stereo    = (fr->mode == MPG_MD_MONO) ? 1 : 2;
-
-    oldhead = newhead;
-
-    if(!fr->bitrate_index) {
-    fprintf(stderr,"Free format not supported: (head %08lx)\n",newhead);
-    return (0);
-    }
-
-    switch(fr->lay) {
-    case 1:
-        fr->framesize  = (long) tabsel_123[fr->lsf][0][fr->bitrate_index] * 12000;
-        fr->framesize /= freqs[fr->sampling_frequency];
-        fr->framesize  = ((fr->framesize+fr->padding)<<2)-4;
-        break;
-    case 2:
-        fr->framesize = (long) tabsel_123[fr->lsf][1][fr->bitrate_index] * 144000;
-        fr->framesize /= freqs[fr->sampling_frequency];
-        fr->framesize += fr->padding - 4;
-        break;
-    case 3:
-        if(fr->lsf)
-        ssize = (fr->stereo == 1) ? 9 : 17;
-        else
-        ssize = (fr->stereo == 1) ? 17 : 32;
-        if(fr->error_protection)
-        ssize += 2;
-        fr->framesize  = (long) tabsel_123[fr->lsf][2][fr->bitrate_index] * 144000;
-        fr->framesize /= freqs[fr->sampling_frequency]<<(fr->lsf);
-        fr->framesize = fr->framesize + fr->padding - 4;
-        break; 
-    default:
-        fprintf(stderr,"Sorry, unknown layer type.\n"); 
-        return (0);
-    }
-    return 1;
-}
-
-#ifdef MPG123_REMOTE
-void print_rheader(struct frame *fr)
-{
-    static char *modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" };
-    static char *layers[4] = { "Unknown" , "I", "II", "III" };
-    static char *mpeg_type[2] = { "1.0" , "2.0" };
-
-    /* version, layer, freq, mode, channels, bitrate, BPF */
-    fprintf(stderr,"@I %s %s %ld %s %d %d %d\n",
-        mpeg_type[fr->lsf],layers[fr->lay],freqs[fr->sampling_frequency],
-        modes[fr->mode],fr->stereo,
-        tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index],
-        fr->framesize+4);
-}
-#endif
-
-void print_header(struct frame *fr)
-{
-    static char *modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" };
-    static char *layers[4] = { "Unknown" , "I", "II", "III" };
-
-    fprintf(stderr,"MPEG %s, Layer: %s, Freq: %ld, mode: %s, modext: %d, BPF : %d\n", 
-        fr->mpeg25 ? "2.5" : (fr->lsf ? "2.0" : "1.0"),
-        layers[fr->lay],freqs[fr->sampling_frequency],
-        modes[fr->mode],fr->mode_ext,fr->framesize+4);
-    fprintf(stderr,"Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d.\n",
-        fr->stereo,fr->copyright?"Yes":"No",
-        fr->original?"Yes":"No",fr->error_protection?"Yes":"No",
-        fr->emphasis);
-    fprintf(stderr,"Bitrate: %d Kbits/s, Extension value: %d\n",
-        tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index],fr->extension);
-}
-
-void print_header_compact(struct frame *fr)
-{
-    static char *modes[4] = { "stereo", "joint-stereo", "dual-channel", "mono" };
-    static char *layers[4] = { "Unknown" , "I", "II", "III" };
- 
-    fprintf(stderr,"MPEG %s layer %s, %d kbit/s, %ld Hz %s\n",
-        fr->mpeg25 ? "2.5" : (fr->lsf ? "2.0" : "1.0"),
-        layers[fr->lay],
-        tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index],
-        freqs[fr->sampling_frequency], modes[fr->mode]);
-}
-
-void print_id3_tag(unsigned char *buf)
-{
-    struct id3tag {
-    char tag[3];
-    char title[30];
-    char artist[30];
-    char album[30];
-    char year[4];
-    char comment[30];
-    unsigned char genre;
-    };
-    struct id3tag *tag = (struct id3tag *) buf;
-    char title[31]={0,};
-    char artist[31]={0,};
-    char album[31]={0,};
-    char year[5]={0,};
-    char comment[31]={0,};
-    char genre[31]={0,};
-
-    if(param.quiet)
-    return;
-
-    strncpy(title,tag->title,30);
-    strncpy(artist,tag->artist,30);
-    strncpy(album,tag->album,30);
-    strncpy(year,tag->year,4);
-    strncpy(comment,tag->comment,30);
-
-    if ( tag->genre < sizeof(genre_table)/sizeof(*genre_table) ) {
-    strncpy(genre, genre_table[tag->genre], 30);
-    } else {
-    strncpy(genre,"Unknown",30);
-    }
-
-    fprintf(stderr,"Title  : %-30s  Artist: %s\n",title,artist);
-    fprintf(stderr,"Album  : %-30s  Year  : %4s\n",album,year);
-    fprintf(stderr,"Comment: %-30s  Genre : %s\n",comment,genre);
-}
-
-#if 0
-/* removed the strndup for better portability */
-/*
- *   Allocate space for a new string containing the first
- *   "num" characters of "src".  The resulting string is
- *   always zero-terminated.  Returns NULL if malloc fails.
- */
-char *strndup (const char *src, int num)
-{
-    char *dst;
-
-    if (!(dst = (char *) malloc(num+1)))
-    return (NULL);
-    dst[num] = '\0';
-    return (strncpy(dst, src, num));
-}
-#endif
-
-/*
- *   Split "path" into directory and filename components.
- *
- *   Return value is 0 if no directory was specified (i.e.
- *   "path" does not contain a '/'), OR if the directory
- *   is the same as on the previous call to this function.
- *
- *   Return value is 1 if a directory was specified AND it
- *   is different from the previous one (if any).
- */
-
-int split_dir_file (const char *path, char **dname, char **fname)
-{
-    static char *lastdir = NULL;
-    char *slashpos;
-
-    if ((slashpos = strrchr(path, '/'))) {
-    *fname = slashpos + 1;
-    *dname = strdup(path); /* , 1 + slashpos - path); */
-    if(!(*dname)) {
-        perror("memory");
-        exit(1);
-    }
-    (*dname)[1 + slashpos - path] = 0;
-    if (lastdir && !strcmp(lastdir, *dname)) {
-        /***   same as previous directory   ***/
-        free (*dname);
-        *dname = lastdir;
-        return 0;
-    }
-    else {
-        /***   different directory   ***/
-        if (lastdir)
-        free (lastdir);
-        lastdir = *dname;
-        return 1;
-    }
-    }
-    else {
-    /***   no directory specified   ***/
-    if (lastdir) {
-        free (lastdir);
-        lastdir = NULL;
-    };
-    *dname = NULL;
-    *fname = (char *)path;
-    return 0;
-    }
-}
-
-void set_pointer(long backstep)
-{
-    bsi.wordpointer = bsbuf + ssize - backstep;
-    if (backstep)
-    memcpy(bsi.wordpointer,bsbufold+fsizeold-backstep,backstep);
-    bsi.bitindex = 0; 
-}
-
-/********************************/
-
-double compute_bpf(struct frame *fr)
-{
-    double bpf;
-
-    switch(fr->lay) {
-    case 1:
-    bpf = tabsel_123[fr->lsf][0][fr->bitrate_index];
-    bpf *= 12000.0 * 4.0;
-    bpf /= freqs[fr->sampling_frequency] <<(fr->lsf);
-    break;
-    case 2:
-    case 3:
-    bpf = tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index];
-        bpf *= 144000;
-    bpf /= freqs[fr->sampling_frequency] << (fr->lsf);
-    break;
-    default:
-    bpf = 1.0;
-    }
-
-    return bpf;
-}
-
-double compute_tpf(struct frame *fr)
-{
-    static int bs[4] = { 0,384,1152,1152 };
-    double tpf;
-
-    tpf = (double) bs[fr->lay];
-    tpf /= freqs[fr->sampling_frequency] << (fr->lsf);
-    return tpf;
-}
-
-/*
- * Returns number of frames queued up in output buffer, i.e. 
- * offset between currently played and currently decoded frame.
- */
-
-long compute_buffer_offset(struct frame *fr)
-{
-    long bufsize;
-
-    /*
-     * buffermem->buf[0] holds output sampling rate,
-     * buffermem->buf[1] holds number of channels,
-     * buffermem->buf[2] holds audio format of output.
-     */
-
-    if(!param.usebuffer || !(bufsize=xfermem_get_usedspace(buffermem))
-       || !buffermem->buf[0] || !buffermem->buf[1])
-    return 0;
-
-    bufsize = (long)((double) bufsize / buffermem->buf[0] / 
-             buffermem->buf[1] / compute_tpf(fr));
-
-    if((buffermem->buf[2] & AUDIO_FORMAT_MASK) == AUDIO_FORMAT_16)
-    return bufsize/2;
-    else
-    return bufsize;
-}
-
-void print_stat(struct frame *fr,int no,long buffsize,struct audio_info_struct *ai)
-{
-    double bpf,tpf,tim1,tim2;
-    double dt = 0.0;
-    int sno,rno;
-    char outbuf[256];
-
-    if(!rd || !fr) 
-    return;
-
-    outbuf[0] = 0;
-
-#ifndef GENERIC
-    {
-    struct timeval t;
-    fd_set serr;
-    int n,errfd = fileno(stderr);
-
-    t.tv_sec=t.tv_usec=0;
-
-    FD_ZERO(&serr);
-    FD_SET(errfd,&serr);
-    n = select(errfd+1,NULL,&serr,NULL,&t);
-    if(n <= 0)
-        return;
-    }
-#endif
-
-    bpf = compute_bpf(fr);
-    tpf = compute_tpf(fr);
-
-    if(buffsize > 0 && ai && ai->rate > 0 && ai->channels > 0) {
-    dt = (double) buffsize / ai->rate / ai->channels;
-    if( (ai->format & AUDIO_FORMAT_MASK) == AUDIO_FORMAT_16)
-        dt *= 0.5;
-    }
-
-    rno = 0;
-    sno = no;
-    if(rd->filelen >= 0) {
-    long t = rd->tell(rd);
-    rno = (int)((double)(rd->filelen-t)/bpf);
-    sno = (int)((double)t/bpf);
-    }
-
-    sprintf(outbuf+strlen(outbuf),"\rFrame# %5d [%5d], ",sno,rno);
-
-    tim1 = sno*tpf-dt;
-    tim2 = rno*tpf+dt;
-#if 0
-    tim1 = tim1 < 0 ? 0.0 : tim1;
-#endif
-    tim2 = tim2 < 0 ? 0.0 : tim2;
-
-    sprintf(outbuf+strlen(outbuf),"Time: %02u:%02u.%02u [%02u:%02u.%02u], ",
-        (unsigned int)tim1/60,
-        (unsigned int)tim1%60,
-        (unsigned int)(tim1*100)%100,
-        (unsigned int)tim2/60,
-        (unsigned int)tim2%60,
-        (unsigned int)(tim2*100)%100);
-
-    if(param.usebuffer)
-    sprintf(outbuf+strlen(outbuf),"[%8ld] ",(long)buffsize);
-    write(fileno(stderr),outbuf,strlen(outbuf));
-#if 0
-    fflush(out); /* hmm not really nec. */
-#endif
-}
-
-int get_songlen(struct frame *fr,int no)
-{
-    double tpf;
-
-    if(!fr)
-    return 0;
-
-    if(no < 0) {
-    if(!rd || rd->filelen < 0)
-        return 0;
-    no = (double) rd->filelen / compute_bpf(fr);
-    }
-
-    tpf = compute_tpf(fr);
-    return no*tpf;
-}
-
-

+ 0 - 19
panda/src/mpg123/common.h

@@ -1,19 +0,0 @@
-/*
- * common.h
- */
-
-extern void print_id3_tag(unsigned char *buf);
-extern unsigned long firsthead;
-extern int tabsel_123[2][3][16];
-extern double compute_tpf(struct frame *fr);
-extern double compute_bpf(struct frame *fr);
-extern long compute_buffer_offset(struct frame *fr);
-
-/*
-struct bitstream_info {
-  int bitindex;
-  unsigned char *wordpointer;
-};
-*/
-
-

+ 0 - 168
panda/src/mpg123/dct64.c

@@ -1,168 +0,0 @@
-
-/*
- * Discrete Cosine Tansform (DCT) for subband synthesis
- *
- * -funroll-loops (for gcc) will remove the loops for better performance
- * using loops in the source-code enhances readabillity
- */
-
-/*
- * TODO: write an optimized version for the down-sampling modes
- *       (in these modes the bands 16-31 (2:1) or 8-31 (4:1) are zero 
- */
-
-#include "mpg123.h"
-
-void dct64(real *out0,real *out1,real *samples)
-{
-  real bufs[64];
-
- {
-  register int i,j;
-  register real *b1,*b2,*bs,*costab;
-
-  b1 = samples;
-  bs = bufs;
-  costab = pnts[0]+16;
-  b2 = b1 + 32;
-
-  for(i=15;i>=0;i--)
-    *bs++ = (*b1++ + *--b2); 
-  for(i=15;i>=0;i--)
-    *bs++ = (*--b2 - *b1++) * *--costab;
-
-  b1 = bufs;
-  costab = pnts[1]+8;
-  b2 = b1 + 16;
-
-  {
-    for(i=7;i>=0;i--)
-      *bs++ = (*b1++ + *--b2); 
-    for(i=7;i>=0;i--)
-      *bs++ = (*--b2 - *b1++) * *--costab; 
-    b2 += 32;
-    costab += 8;
-    for(i=7;i>=0;i--)
-      *bs++ = (*b1++ + *--b2); 
-    for(i=7;i>=0;i--)
-      *bs++ = (*b1++ - *--b2) * *--costab; 
-    b2 += 32;
-  }
-
-  bs = bufs;
-  costab = pnts[2];
-  b2 = b1 + 8;
-
-  for(j=2;j;j--)
-  {
-    for(i=3;i>=0;i--)
-      *bs++ = (*b1++ + *--b2); 
-    for(i=3;i>=0;i--)
-      *bs++ = (*--b2 - *b1++) * costab[i]; 
-    b2 += 16;
-    for(i=3;i>=0;i--)
-      *bs++ = (*b1++ + *--b2); 
-    for(i=3;i>=0;i--)
-      *bs++ = (*b1++ - *--b2) * costab[i]; 
-    b2 += 16;
-  }
-
-  b1 = bufs;
-  costab = pnts[3];
-  b2 = b1 + 4;
-
-  for(j=4;j;j--)
-  {
-    *bs++ = (*b1++ + *--b2); 
-    *bs++ = (*b1++ + *--b2);
-    *bs++ = (*--b2 - *b1++) * costab[1]; 
-    *bs++ = (*--b2 - *b1++) * costab[0];
-    b2 += 8;
-    *bs++ = (*b1++ + *--b2); 
-    *bs++ = (*b1++ + *--b2);
-    *bs++ = (*b1++ - *--b2) * costab[1]; 
-    *bs++ = (*b1++ - *--b2) * costab[0];
-    b2 += 8;
-  }
-  bs = bufs;
-  costab = pnts[4];
-
-  for(j=8;j;j--)
-  {
-    real v0,v1;
-    v0=*b1++; v1 = *b1++;
-    *bs++ = (v0 + v1);
-    *bs++ = (v0 - v1) * (*costab);
-    v0=*b1++; v1 = *b1++;
-    *bs++ = (v0 + v1);
-    *bs++ = (v1 - v0) * (*costab);
-  }
-
- }
-
-
- {
-  register real *b1;
-  register int i;
-
-  for(b1=bufs,i=8;i;i--,b1+=4)
-    b1[2] += b1[3];
-
-  for(b1=bufs,i=4;i;i--,b1+=8)
-  {
-    b1[4] += b1[6];
-    b1[6] += b1[5];
-    b1[5] += b1[7];
-  }
-
-  for(b1=bufs,i=2;i;i--,b1+=16)
-  {
-    b1[8]  += b1[12];
-    b1[12] += b1[10];
-    b1[10] += b1[14];
-    b1[14] += b1[9];
-    b1[9]  += b1[13];
-    b1[13] += b1[11];
-    b1[11] += b1[15];
-  }
- }
-
-
-  out0[0x10*16] = bufs[0];
-  out0[0x10*15] = bufs[16+0]  + bufs[16+8];
-  out0[0x10*14] = bufs[8];
-  out0[0x10*13] = bufs[16+8]  + bufs[16+4];
-  out0[0x10*12] = bufs[4];
-  out0[0x10*11] = bufs[16+4]  + bufs[16+12];
-  out0[0x10*10] = bufs[12];
-  out0[0x10* 9] = bufs[16+12] + bufs[16+2];
-  out0[0x10* 8] = bufs[2];
-  out0[0x10* 7] = bufs[16+2]  + bufs[16+10];
-  out0[0x10* 6] = bufs[10];
-  out0[0x10* 5] = bufs[16+10] + bufs[16+6];
-  out0[0x10* 4] = bufs[6];
-  out0[0x10* 3] = bufs[16+6]  + bufs[16+14];
-  out0[0x10* 2] = bufs[14];
-  out0[0x10* 1] = bufs[16+14] + bufs[16+1];
-  out0[0x10* 0] = bufs[1];
-
-  out1[0x10* 0] = bufs[1];
-  out1[0x10* 1] = bufs[16+1]  + bufs[16+9];
-  out1[0x10* 2] = bufs[9];
-  out1[0x10* 3] = bufs[16+9]  + bufs[16+5];
-  out1[0x10* 4] = bufs[5];
-  out1[0x10* 5] = bufs[16+5]  + bufs[16+13];
-  out1[0x10* 6] = bufs[13];
-  out1[0x10* 7] = bufs[16+13] + bufs[16+3];
-  out1[0x10* 8] = bufs[3];
-  out1[0x10* 9] = bufs[16+3]  + bufs[16+11];
-  out1[0x10*10] = bufs[11];
-  out1[0x10*11] = bufs[16+11] + bufs[16+7];
-  out1[0x10*12] = bufs[7];
-  out1[0x10*13] = bufs[16+7]  + bufs[16+15];
-  out1[0x10*14] = bufs[15];
-  out1[0x10*15] = bufs[16+15];
-
-}
-
-

+ 0 - 223
panda/src/mpg123/decode.c

@@ -1,223 +0,0 @@
-/* 
- * Mpeg Layer-1,2,3 audio decoder 
- * ------------------------------
- * copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved.
- * See also 'README'
- *
- */
-
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-
-#include "mpg123.h"
-
-#define WRITE_SAMPLE(samples,sum,clip) \
-  if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
-  else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
-  else { *(samples) = sum; }
-
-int synth_1to1_8bit(real *bandPtr,int channel,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[64];
-  short *tmp1 = samples_tmp + channel;
-  int i,ret;
-  int pnt1=0;
-
-  ret = synth_1to1(bandPtr,channel,(unsigned char *) samples_tmp,&pnt1);
-  samples += channel + *pnt;
-
-  for(i=0;i<32;i++) {
-    *samples = conv16to8[*tmp1>>AUSHIFT];
-    samples += 2;
-    tmp1 += 2;
-  }
-  *pnt += 64;
-
-  return ret;
-}
-
-int synth_1to1_8bit_mono(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[64];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_1to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<32;i++) {
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    tmp1 += 2;
-  }
-  *pnt += 32;
-  
-  return ret;
-}
-
-int synth_1to1_8bit_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[64];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_1to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<32;i++) {
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    tmp1 += 2;
-  }
-  *pnt += 64;
-
-  return ret;
-}
-
-int synth_1to1_mono(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[64];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_1to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<32;i++) {
-    *( (short *)samples) = *tmp1;
-    samples += 2;
-    tmp1 += 2;
-  }
-  *pnt += 64;
-
-  return ret;
-}
-
-
-int synth_1to1_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  int i,ret;
-
-  ret = synth_1to1(bandPtr,0,samples,pnt);
-  samples = samples + *pnt - 128;
-
-  for(i=0;i<32;i++) {
-    ((short *)samples)[1] = ((short *)samples)[0];
-    samples+=4;
-  }
-
-  return ret;
-}
-
-
-int synth_1to1(real *bandPtr,int channel,unsigned char *out,int *pnt)
-{
-  static real buffs[2][2][0x110];
-  static const int step = 2;
-  static int bo = 1;
-  short *samples = (short *) (out+*pnt);
-
-  real *b0,(*buf)[0x110];
-  int clip = 0; 
-  int bo1;
-
-  if(param.enable_equalizer)
-    do_equalizer(bandPtr,channel);
-
-  if(!channel) {
-    bo--;
-    bo &= 0xf;
-    buf = buffs[0];
-  }
-  else {
-    samples++;
-    buf = buffs[1];
-  }
-
-  if(bo & 0x1) {
-    b0 = buf[0];
-    bo1 = bo;
-    dct64(buf[1]+((bo+1)&0xf),buf[0]+bo,bandPtr);
-  }
-  else {
-    b0 = buf[1];
-    bo1 = bo+1;
-    dct64(buf[0]+bo,buf[1]+bo+1,bandPtr);
-  }
-
-
-  {
-    register int j;
-    real *window = decwin + 16 - bo1;
- 
-    for (j=16;j;j--,window+=0x10,samples+=step)
-    {
-      real sum;
-      sum  = *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-
-      WRITE_SAMPLE(samples,sum,clip);
-    }
-
-    {
-      real sum;
-      sum  = window[0x0] * b0[0x0];
-      sum += window[0x2] * b0[0x2];
-      sum += window[0x4] * b0[0x4];
-      sum += window[0x6] * b0[0x6];
-      sum += window[0x8] * b0[0x8];
-      sum += window[0xA] * b0[0xA];
-      sum += window[0xC] * b0[0xC];
-      sum += window[0xE] * b0[0xE];
-      WRITE_SAMPLE(samples,sum,clip);
-      b0-=0x10,window-=0x20,samples+=step;
-    }
-    window += bo1<<1;
-
-    for (j=15;j;j--,b0-=0x20,window-=0x10,samples+=step)
-    {
-      real sum;
-      sum = -*(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-
-      WRITE_SAMPLE(samples,sum,clip);
-    }
-  }
-
-  *pnt += 128;
-
-  return clip;
-}
-
-

+ 0 - 231
panda/src/mpg123/decode_2to1.c

@@ -1,231 +0,0 @@
-/*
- * Mpeg Layer-1,2,3 audio decoder
- * ------------------------------
- * copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README'
- * version for slower machines .. decodes only every second sample
- * sounds like 24000,22050 or 16000 kHz .. (depending on original sample freq.)
- *
- */
-
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-
-#include "mpg123.h"
-
-#define WRITE_SAMPLE(samples,sum,clip) \
-  if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
-  else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
-  else { *(samples) = sum; }
-
-int synth_2to1_8bit(real *bandPtr,int channel,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[32];
-  short *tmp1 = samples_tmp + channel;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_2to1(bandPtr,channel,(unsigned char *) samples_tmp,&pnt1);
-  samples += channel + *pnt;
-
-  for(i=0;i<16;i++) {
-    *samples = conv16to8[*tmp1>>AUSHIFT];
-    samples += 2;
-    tmp1 += 2;
-  }
-  *pnt += 32;
-
-  return ret;
-}
-
-int synth_2to1_8bit_mono(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[32];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_2to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<16;i++) {
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    tmp1 += 2;
-  }
-  *pnt += 16;
-
-  return ret;
-}
-
-
-int synth_2to1_8bit_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[32];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_2to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<16;i++) {
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    tmp1 += 2;
-  }
-  *pnt += 32;
-
-  return ret;
-}
-
-int synth_2to1_mono(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[32];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1=0;
-
-  ret = synth_2to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<16;i++) {
-    *( (short *) samples) = *tmp1;
-    samples += 2;
-    tmp1 += 2;
-  }
-  *pnt += 32;
-
-  return ret;
-}
-
-int synth_2to1_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  int i,ret;
-
-  ret = synth_2to1(bandPtr,0,samples,pnt);
-  samples = samples + *pnt - 64;
-
-  for(i=0;i<16;i++) {
-    ((short *)samples)[1] = ((short *)samples)[0];
-    samples+=4;
-  }
-  
-  return ret;
-}
-
-int synth_2to1(real *bandPtr,int channel,unsigned char *out,int *pnt)
-{
-  static real buffs[2][2][0x110];
-  static const int step = 2;
-  static int bo = 1;
-  short *samples = (short *) (out + *pnt);
-
-  real *b0,(*buf)[0x110];
-  int clip = 0; 
-  int bo1;
-
-  if(param.enable_equalizer)
-    do_equalizer(bandPtr,channel);
-
-  if(!channel) {
-    bo--;
-    bo &= 0xf;
-    buf = buffs[0];
-  }
-  else {
-    samples++;
-    buf = buffs[1];
-  }
-
-  if(bo & 0x1) {
-    b0 = buf[0];
-    bo1 = bo;
-    dct64(buf[1]+((bo+1)&0xf),buf[0]+bo,bandPtr);
-  }
-  else {
-    b0 = buf[1];
-    bo1 = bo+1;
-    dct64(buf[0]+bo,buf[1]+bo+1,bandPtr);
-  }
-
-  {
-    register int j;
-    real *window = decwin + 16 - bo1;
-
-    for (j=8;j;j--,b0+=0x10,window+=0x30)
-    {
-      real sum;
-      sum  = *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#if 0
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#endif
-    }
-
-    {
-      real sum;
-      sum  = window[0x0] * b0[0x0];
-      sum += window[0x2] * b0[0x2];
-      sum += window[0x4] * b0[0x4];
-      sum += window[0x6] * b0[0x6];
-      sum += window[0x8] * b0[0x8];
-      sum += window[0xA] * b0[0xA];
-      sum += window[0xC] * b0[0xC];
-      sum += window[0xE] * b0[0xE];
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#if 0
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#endif
-      b0-=0x20,window-=0x40;
-    }
-    window += bo1<<1;
-
-    for (j=7;j;j--,b0-=0x30,window-=0x30)
-    {
-      real sum;
-      sum = -*(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#if 0
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#endif
-    }
-  }
-
-  *pnt += 64;
-
-  return clip;
-}
-
-

+ 0 - 238
panda/src/mpg123/decode_4to1.c

@@ -1,238 +0,0 @@
-/*
- * Mpeg Layer-1,2,3 audio decoder
- * ------------------------------
- * copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved.
- * See also 'README'
- * version for slower machines .. decodes only every fourth sample
- * dunno why it sounds THIS annoying (maybe we should adapt the window?)
- * absolutely not optimized for this operation
- */
-
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-
-#include "mpg123.h"
-
-#define WRITE_SAMPLE(samples,sum,clip) \
-  if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
-  else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
-  else { *(samples) = sum; }
-
-int synth_4to1_8bit(real *bandPtr,int channel,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[16];
-  short *tmp1 = samples_tmp + channel;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_4to1(bandPtr,channel,(unsigned char *) samples_tmp,&pnt1);
-  samples += channel + *pnt;
-
-  for(i=0;i<8;i++) {
-    *samples = conv16to8[*tmp1>>AUSHIFT];
-    samples += 2;
-    tmp1 += 2;
-  }
-  *pnt += 16;
-
-  return ret;
-}
-
-int synth_4to1_8bit_mono(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[16];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_4to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<8;i++) {
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    tmp1 += 2;
-  }
-  *pnt += 8;
-
-  return ret;
-}
-
-
-int synth_4to1_8bit_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[16];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_4to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<8;i++) {
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    tmp1 += 2;
-  }
-  *pnt += 16;
-
-  return ret;
-}
-
-int synth_4to1_mono(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[16];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_4to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<8;i++) {
-    *( (short *)samples) = *tmp1;
-    samples += 2;
-    tmp1 += 2;
-  }
-  *pnt += 16;
-
-  return ret;
-}
-
-int synth_4to1_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  int i,ret;
-
-  ret = synth_4to1(bandPtr,0,samples,pnt);
-  samples = samples + *pnt - 32;
-
-  for(i=0;i<8;i++) {
-    ((short *)samples)[1] = ((short *)samples)[0];
-    samples+=4;
-  }
-
-  return ret;
-}
-
-int synth_4to1(real *bandPtr,int channel,unsigned char *out,int *pnt)
-{
-  static real buffs[2][2][0x110];
-  static const int step = 2;
-  static int bo = 1;
-  short *samples = (short *) (out + *pnt);
-
-  real *b0,(*buf)[0x110];
-  int clip = 0; 
-  int bo1;
-
-  if(param.enable_equalizer)
-    do_equalizer(bandPtr,channel);
-
-  if(!channel) {
-    bo--;
-    bo &= 0xf;
-    buf = buffs[0];
-  }
-  else {
-    samples++;
-    buf = buffs[1];
-  }
-
-  if(bo & 0x1) {
-    b0 = buf[0];
-    bo1 = bo;
-    dct64(buf[1]+((bo+1)&0xf),buf[0]+bo,bandPtr);
-  }
-  else {
-    b0 = buf[1];
-    bo1 = bo+1;
-    dct64(buf[0]+bo,buf[1]+bo+1,bandPtr);
-  }
-
-  {
-    register int j;
-    real *window = decwin + 16 - bo1;
-
-    for (j=4;j;j--,b0+=0x30,window+=0x70)
-    {
-      real sum;
-      sum  = *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#if 0
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#endif
-    }
-
-    {
-      real sum;
-      sum  = window[0x0] * b0[0x0];
-      sum += window[0x2] * b0[0x2];
-      sum += window[0x4] * b0[0x4];
-      sum += window[0x6] * b0[0x6];
-      sum += window[0x8] * b0[0x8];
-      sum += window[0xA] * b0[0xA];
-      sum += window[0xC] * b0[0xC];
-      sum += window[0xE] * b0[0xE];
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#if 0
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#endif
-      b0-=0x40,window-=0x80;
-    }
-    window += bo1<<1;
-
-    for (j=3;j;j--,b0-=0x50,window-=0x70)
-    {
-      real sum;
-      sum = -*(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#if 0
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-      WRITE_SAMPLE(samples,sum,clip); samples += step;
-#endif
-    }
-  }
-  
-  *pnt += 32;
-
-  return clip;
-}
-
-

+ 0 - 288
panda/src/mpg123/decode_ntom.c

@@ -1,288 +0,0 @@
-/* 
- * Mpeg Layer-1,2,3 audio decoder 
- * ------------------------------
- * copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved.
- * See also 'README'
- *
- * N->M down/up sampling. Not optimized for speed.
- */
-
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-
-#include "mpg123.h"
-
-#define WRITE_SAMPLE(samples,sum,clip) \
-  if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
-  else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
-  else { *(samples) = sum; }
-
-#define NTOM_MUL (32768)
-static unsigned long ntom_val[2] = { NTOM_MUL>>1,NTOM_MUL>>1 };
-static unsigned long ntom_step = NTOM_MUL;
-
-
-void synth_ntom_set_step(long m,long n)
-{
-    if(param.verbose > 1)
-        fprintf(stderr,"Init rate converter: %ld->%ld\n",m,n);
-
-    if(n >= 96000 || m >= 96000 || m == 0 || n == 0) {
-        fprintf(stderr,"NtoM converter: illegal rates\n");
-        exit(1);
-    }
-
-    n *= NTOM_MUL;
-    ntom_step = n / m;
-
-    if(ntom_step > 8*NTOM_MUL) {
-        fprintf(stderr,"max. 1:8 conversion allowed!\n");
-        exit(1);
-    }
-
-    ntom_val[0] = ntom_val[1] = NTOM_MUL>>1;
-}
-
-int synth_ntom_8bit(real *bandPtr,int channel,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[8*64];
-  short *tmp1 = samples_tmp + channel;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_ntom(bandPtr,channel,(unsigned char *) samples_tmp,&pnt1);
-  samples += channel + *pnt;
-
-  for(i=0;i<(pnt1>>2);i++) {
-    *samples = conv16to8[*tmp1>>AUSHIFT];
-    samples += 2;
-    tmp1 += 2;
-  }
-  *pnt += pnt1>>1;
-
-  return ret;
-}
-
-int synth_ntom_8bit_mono(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[8*64];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_ntom(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<(pnt1>>2);i++) {
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    tmp1 += 2;
-  }
-  *pnt += pnt1 >> 2;
-  
-  return ret;
-}
-
-int synth_ntom_8bit_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[8*64];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_ntom(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<(pnt1>>2);i++) {
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    *samples++ = conv16to8[*tmp1>>AUSHIFT];
-    tmp1 += 2;
-  }
-  *pnt += pnt1 >> 1;
-
-  return ret;
-}
-
-int synth_ntom_mono(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  short samples_tmp[8*64];
-  short *tmp1 = samples_tmp;
-  int i,ret;
-  int pnt1 = 0;
-
-  ret = synth_ntom(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
-  samples += *pnt;
-
-  for(i=0;i<(pnt1>>2);i++) {
-    *( (short *)samples) = *tmp1;
-    samples += 2;
-    tmp1 += 2;
-  }
-  *pnt += pnt1 >> 1;
-
-  return ret;
-}
-
-
-int synth_ntom_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
-{
-  int i,ret;
-  int pnt1 = *pnt;
-
-  ret = synth_ntom(bandPtr,0,samples,pnt);
-  samples += pnt1;
-  
-  for(i=0;i<((*pnt-pnt1)>>2);i++) {
-    ((short *)samples)[1] = ((short *)samples)[0];
-    samples+=4;
-  }
-
-  return ret;
-}
-
-
-int synth_ntom(real *bandPtr,int channel,unsigned char *out,int *pnt)
-{
-  static real buffs[2][2][0x110];
-  static const int step = 2;
-  static int bo = 1;
-  short *samples = (short *) (out + *pnt);
-
-  real *b0,(*buf)[0x110];
-  int clip = 0; 
-  int bo1;
-  int ntom;
-
-  if(param.enable_equalizer)
-    do_equalizer(bandPtr,channel);
-
-  if(!channel) {
-    bo--;
-    bo &= 0xf;
-    buf = buffs[0];
-    ntom = ntom_val[1] = ntom_val[0];
-  }
-  else {
-    samples++;
-    out += 2; /* to compute the right *pnt value */
-    buf = buffs[1];
-    ntom = ntom_val[1];
-  }
-
-  if(bo & 0x1) {
-    b0 = buf[0];
-    bo1 = bo;
-    dct64(buf[1]+((bo+1)&0xf),buf[0]+bo,bandPtr);
-  }
-  else {
-    b0 = buf[1];
-    bo1 = bo+1;
-    dct64(buf[0]+bo,buf[1]+bo+1,bandPtr);
-  }
-
-
-  {
-    register int j;
-    real *window = decwin + 16 - bo1;
- 
-    for (j=16;j;j--,window+=0x10)
-    {
-      real sum;
-
-      ntom += ntom_step;
-      if(ntom < NTOM_MUL) {
-        window += 16;
-        b0 += 16;
-        continue;
-      }
-
-      sum  = *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-      sum += *window++ * *b0++;
-      sum -= *window++ * *b0++;
-
-      while(ntom >= NTOM_MUL) {
-        WRITE_SAMPLE(samples,sum,clip);
-        samples += step;
-        ntom -= NTOM_MUL;
-      }
-    }
-
-    ntom += ntom_step;
-    if(ntom >= NTOM_MUL)
-    {
-      real sum;
-      sum  = window[0x0] * b0[0x0];
-      sum += window[0x2] * b0[0x2];
-      sum += window[0x4] * b0[0x4];
-      sum += window[0x6] * b0[0x6];
-      sum += window[0x8] * b0[0x8];
-      sum += window[0xA] * b0[0xA];
-      sum += window[0xC] * b0[0xC];
-      sum += window[0xE] * b0[0xE];
-
-      while(ntom >= NTOM_MUL) {
-        WRITE_SAMPLE(samples,sum,clip);
-        samples += step;
-        ntom -= NTOM_MUL;
-      }
-    }
-
-    b0-=0x10,window-=0x20;
-    window += bo1<<1;
-
-    for (j=15;j;j--,b0-=0x20,window-=0x10)
-    {
-      real sum;
-
-      ntom += ntom_step;
-      if(ntom < NTOM_MUL) {
-        window -= 16;
-        b0 += 16;
-        continue;
-      }
-
-      sum = -*(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-      sum -= *(--window) * *b0++;
-
-      while(ntom >= NTOM_MUL) {
-        WRITE_SAMPLE(samples,sum,clip);
-        samples += step;
-        ntom -= NTOM_MUL;
-      }
-    }
-  }
-
-  ntom_val[channel] = ntom;
-  *pnt = ((unsigned char *) samples - out);
-
-  return clip;
-}
-
-

+ 0 - 34
panda/src/mpg123/equalizer.c

@@ -1,34 +0,0 @@
-
-#include "mpg123.h"
-
-real equalizer[2][32];
-real equalizer_sum[2][32];
-int equalizer_cnt;
-
-real equalizerband[2][SBLIMIT*SSLIMIT];
-
-void do_equalizer(real *bandPtr,int channel) 
-{
-    int i;
-
-    if(param.enable_equalizer) {
-        for(i=0;i<32;i++)
-            bandPtr[i] *= equalizer[channel][i];
-    }
-
-/*  if(param.equalizer & 0x2) {
-
-        for(i=0;i<32;i++)
-            equalizer_sum[channel][i] += bandPtr[i];
-    }
-*/
-}
-
-void do_equalizerband(real *bandPtr,int channel)
-{
-  int i;
-  for(i=0;i<576;i++) {
-    bandPtr[i] *= equalizerband[channel][i];
-  }
-}
-

+ 0 - 263
panda/src/mpg123/genre.h

@@ -1,263 +0,0 @@
-char *genre_table[] =
-{
-    "Blues",
-    "Classic Rock",
-    "Country",
-    "Dance",
-    "Disco",
-    "Funk",
-    "Grunge",
-    "Hip-Hop",
-    "Jazz",
-    "Metal",
-    "New Age",
-    "Oldies",
-    "Other",
-    "Pop",
-    "R&B",
-    "Rap",
-    "Reggae",
-    "Rock",
-    "Techno",
-    "Industrial",
-    "Alternative",
-    "Ska",
-    "Death Metal",
-    "Pranks",
-    "Soundtrack",
-    "Euro-Techno",
-    "Ambient",
-    "Trip-Hop",
-    "Vocal",
-    "Jazz+Funk",
-    "Fusion",
-    "Trance",
-    "Classical",
-    "Instrumental",
-    "Acid",
-    "House",
-    "Game",
-    "Sound Clip",
-    "Gospel",
-    "Noise",
-    "AlternRock",
-    "Bass",
-    "Soul",
-    "Punk",
-    "Space",
-    "Meditative",
-    "Instrumental Pop",
-    "Instrumental Rock",
-    "Ethnic",
-    "Gothic",
-    "Darkwave",
-    "Techno-Industrial",
-    "Electronic",
-    "Pop-Folk",
-    "Eurodance",
-    "Dream",
-    "Southern Rock",
-    "Comedy",
-    "Cult",
-    "Gangsta",
-    "Top 40",
-    "Christian Rap",
-    "Pop/Funk",
-    "Jungle",
-    "Native American",
-    "Cabaret",
-    "New Wave",
-    "Psychadelic",
-    "Rave",
-    "Showtunes",
-    "Trailer",
-    "Lo-Fi",
-    "Tribal",
-    "Acid Punk",
-    "Acid Jazz",
-    "Polka",
-    "Retro",
-    "Musical",
-    "Rock & Roll",
-    "Hard Rock",
-    "Folk",
-    "Folk/Rock",
-    "National folk",
-    "Swing",
-    "Fast-fusion",
-    "Bebob",
-    "Latin",
-    "Revival",
-    "Celtic",
-    "Bluegrass",
-    "Avantgarde",
-    "Gothic Rock",
-    "Progressive Rock",
-    "Psychedelic Rock",
-    "Symphonic Rock",
-    "Slow Rock",
-    "Big Band",
-    "Chorus",
-    "Easy Listening",
-    "Acoustic",
-    "Humour",
-    "Speech",
-    "Chanson",
-    "Opera",
-    "Chamber Music",
-    "Sonata",
-    "Symphony",
-    "Booty Bass",
-    "Primus",
-    "Porn Groove",
-    "Satire",
-    "Slow Jam",
-    "Club",
-    "Tango",
-    "Samba",
-    "Folklore",
-    "Ballad",
-    "Powder Ballad",
-    "Rhythmic Soul",
-    "Freestyle",
-    "Duet",
-    "Punk Rock",
-    "Drum Solo",
-    "A Capella",
-    "Euro-House",
-    "Dance Hall",
-    "Goa",
-    "Drum & Bass",
-    "Club House",
-    "Hardcore",
-    "Terror",
-    "Indie",
-    "BritPop",
-    "NegerPunk",
-    "Polsk Punk",
-    "Beat",
-    "Christian Gangsta",
-    "Heavy Metal",
-    "Black Metal",
-    "Crossover",
-    "Contemporary C",
-    "Christian Rock",
-    "Merengue",
-    "Salsa",
-    "Thrash Metal",
-    "Anime",
-    "JPop",
-    "SynthPop"
-/*  ,
-    "Unknown",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    "",
-    ""
-*/
-};
-
-const int genre_count = ((int)(sizeof(genre_table)/sizeof(char*))-1);

+ 0 - 127
panda/src/mpg123/getbits.c

@@ -1,127 +0,0 @@
-#include "mpg123.h"
-#include "common.h"
-
-#if 0
-static void check_buffer_range(int size)
-{
-    int pos = (bsi->wordpointer-bsbuf) + (size>>3);
-
-    if( pos >= fsizeold) {
-        fprintf(stderr,"Pointer out of range (%d,%d)!\n",pos,fsizeold);
-    }
-}
-#endif
-
-void backbits(struct bitstream_info *bsi,int number_of_bits)
-{
-  bsi->bitindex    -= number_of_bits;
-  bsi->wordpointer += (bsi->bitindex>>3);
-  bsi->bitindex    &= 0x7;
-}
-
-int getbitoffset(struct bitstream_info *bsi) 
-{
-  return (-bsi->bitindex)&0x7;
-}
-
-int getbyte(struct bitstream_info *bsi)
-{
-#ifdef DEBUG_GETBITS
-  if(bsi->bitindex) 
-    fprintf(stderr,"getbyte called unsynched!\n");
-#endif
-  return *bsi->wordpointer++;
-}
-
-unsigned int getbits(struct bitstream_info *bsi,int number_of_bits)
-{
-  unsigned long rval;
-
-#ifdef DEBUG_GETBITS
-fprintf(stderr,"g%d",number_of_bits);
-#endif
-
-  if(!number_of_bits)
-    return 0;
-
-#if 0
-   check_buffer_range(number_of_bits+bsi->bitindex);
-#endif
-
-  {
-    rval = bsi->wordpointer[0];
-    rval <<= 8;
-    rval |= bsi->wordpointer[1];
-    rval <<= 8;
-    rval |= bsi->wordpointer[2];
-
-    rval <<= bsi->bitindex;
-    rval &= 0xffffff;
-
-    bsi->bitindex += number_of_bits;
-
-    rval >>= (24-number_of_bits);
-
-    bsi->wordpointer += (bsi->bitindex>>3);
-    bsi->bitindex &= 7;
-  }
-
-#ifdef DEBUG_GETBITS
-fprintf(stderr,":%x ",rval);
-#endif
-
-  return rval;
-}
-
-unsigned int getbits_fast(struct bitstream_info *bsi,int number_of_bits)
-{
-  unsigned int rval;
-#ifdef DEBUG_GETBITS
-fprintf(stderr,"g%d",number_of_bits);
-#endif
-
-#if 0
-   check_buffer_range(number_of_bits+bsi->bitindex);
-#endif
-
-  rval =  (unsigned char) (bsi->wordpointer[0] << bsi->bitindex);
-  rval |= ((unsigned int) bsi->wordpointer[1]<<bsi->bitindex)>>8;
-  rval <<= number_of_bits;
-  rval >>= 8;
-
-  bsi->bitindex += number_of_bits;
-
-  bsi->wordpointer += (bsi->bitindex>>3);
-  bsi->bitindex &= 7;
-
-#ifdef DEBUG_GETBITS
-fprintf(stderr,":%x ",rval);
-#endif
-  return rval;
-}
-
-unsigned int get1bit(struct bitstream_info *bsi)
-{
-  unsigned char rval;
-
-#ifdef DEBUG_GETBITS
-fprintf(stderr,"g%d",1);
-#endif
-
-#if 0
-   check_buffer_range(1+bsi->bitindex);
-#endif
-
-  rval = *(bsi->wordpointer) << bsi->bitindex;
-
-  bsi->bitindex++;
-  bsi->wordpointer += (bsi->bitindex>>3);
-  bsi->bitindex &= 7;
-
-#ifdef DEBUG_GETBITS
-fprintf(stderr,":%d ",rval>>7);
-#endif
-
-  return rval>>7;
-}
-

+ 0 - 33
panda/src/mpg123/getbits.h

@@ -1,33 +0,0 @@
-
-/* that's the same file as getits.c but with defines to
-  force inlining */
-
-static unsigned long rval;
-static unsigned char rval_uc;
-
-#define backbits(nob) ((void)( \
-  bsi.bitindex    -= (nob), \
-  bsi.wordpointer += (bsi.bitindex>>3), \
-  bsi.bitindex    &= 0x7 ))
-
-#define getbitoffset() ((-bsi.bitindex)&0x7)
-#define getbyte()      (*bsi.wordpointer++)
-
-#define getbits(nob) ( \
-  rval = bsi.wordpointer[0], rval <<= 8, rval |= bsi.wordpointer[1], \
-  rval <<= 8, rval |= bsi.wordpointer[2], rval <<= bsi.bitindex, \
-  rval &= 0xffffff, bsi.bitindex += (nob), \
-  rval >>= (24-(nob)), bsi.wordpointer += (bsi.bitindex>>3), \
-  bsi.bitindex &= 7,rval)
-
-#define getbits_fast(nob) ( \
-  rval = (unsigned char) (bsi.wordpointer[0] << bsi.bitindex), \
-  rval |= ((unsigned long) bsi.wordpointer[1]<<bsi.bitindex)>>8, \
-  rval <<= (nob), rval >>= 8, \
-  bsi.bitindex += (nob), bsi.wordpointer += (bsi.bitindex>>3), \
-  bsi.bitindex &= 7, rval )
-
-#define get1bit() ( \
-  rval_uc = *bsi.wordpointer << bsi.bitindex, bsi.bitindex++, \
-  bsi.wordpointer += (bsi.bitindex>>3), bsi.bitindex &= 7, rval_uc>>7 )
-

+ 0 - 440
panda/src/mpg123/httpget.c

@@ -1,440 +0,0 @@
-/*
- *   httpget.c
- *
- *   Oliver Fromme  <[email protected]>
- *   Wed Apr  9 20:57:47 MET DST 1997
- */
-
-#undef ALSA
-
-#if !defined(WIN32) && !defined(GENERIC)
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <netdb.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <sys/errno.h>
-#include <ctype.h>
-
-extern int errno;
-
-#include "mpg123.h"
-
-#ifndef INADDR_NONE
-#define INADDR_NONE 0xffffffff
-#endif
-
-void writestring (int fd, char *string)
-{
-    int result, bytes = strlen(string);
-
-    while (bytes) {
-        if ((result = write(fd, string, bytes)) < 0 && errno != EINTR) {
-            perror ("write");
-            exit (1);
-        }
-        else if (result == 0) {
-            fprintf (stderr, "write: %s\n",
-                "socket closed unexpectedly");
-            exit (1);
-        }
-        string += result;
-        bytes -= result;
-    }
-}
-
-void readstring (char *string, int maxlen, FILE *f)
-{
-#if 0
-    char *result;
-#endif
-    int pos = 0;
-
-    while(1) {
-        if( read(fileno(f),string+pos,1) == 1) {
-            pos++;
-            if(string[pos-1] == '\n') {
-                string[pos] = 0;
-                break;
-            }
-        }
-        else if(errno != EINTR) {
-            fprintf (stderr, "Error reading from socket or unexpected EOF.\n");
-            exit(1);
-        }
-    }
-#if 0
-    do {
-        result = fgets(string, maxlen, f);
-    } while (!result  && errno == EINTR);
-    if (!result) {
-        fprintf (stderr, "Error reading from socket or unexpected EOF.\n");
-        exit (1);
-    }
-#endif
-
-}
-
-void encode64 (char *source,char *destination)
-{
-  static char *Base64Digits =
-    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-  int n = 0;
-  int ssiz=strlen(source);
-  int i;
-
-  for (i = 0 ; i < ssiz ; i += 3) {
-    unsigned int buf;
-    buf = ((unsigned char *)source)[i] << 16;
-    if (i+1 < ssiz)
-      buf |= ((unsigned char *)source)[i+1] << 8;
-    if (i+2 < ssiz)
-      buf |= ((unsigned char *)source)[i+2];
-
-    destination[n++] = Base64Digits[(buf >> 18) % 64];
-    destination[n++] = Base64Digits[(buf >> 12) % 64];
-    if (i+1 < ssiz)
-      destination[n++] = Base64Digits[(buf >> 6) % 64];
-    else
-      destination[n++] = '=';
-    if (i+2 < ssiz)
-      destination[n++] = Base64Digits[buf % 64];
-    else
-      destination[n++] = '=';
-  }
-  destination[n++] = 0;
-}
-
-/* VERY  simple auth-from-URL grabber */
-int getauthfromURL(char *url,char *auth)
-{
-  char *pos;
-
-  *auth = 0;
-
-  if (!(strncmp(url, "http://", 7)))
-    url += 7;
-
-  if( (pos = strchr(url,'@')) ) {
-    int i;
-    for(i=0;i<pos-url;i++) {
-      if( url[i] == '/' )
-         return 0;
-    }
-    strncpy(auth,url,pos-url);
-    auth[pos-url] = 0;
-    strcpy(url,pos+1);
-    return 1;
-  }
-  return 0;
-}
-
-static char *defaultportstr = "80";
-
-char *url2hostport (char *url, char **hname, unsigned long *hip, unsigned char **port)
-{
-    char *h, *p;
-    char *hostptr;
-    char *r_hostptr;
-    char *pathptr;
-    char *portptr;
-    char *p0;
-    size_t stringlength;
-
-    p = url;
-    if (strncmp(p, "http://", 7) == 0)
-        p += 7;
-    hostptr = p;
-    while (*p && *p != '/')
-        p++;
-    pathptr = p;
-
-    r_hostptr = --p;
-    while (*p && hostptr < p && *p != ':' && *p != ']')
-        p--;
-
-    if (!*p || p < hostptr || *p != ':') {
-        portptr = NULL;
-    }
-    else{
-        portptr = p + 1;
-        r_hostptr = p - 1;
-    }
-    if (*hostptr == '[' && *r_hostptr == ']') {
-        hostptr++;
-        r_hostptr--;
-    }
-
-    stringlength = r_hostptr - hostptr + 1;
-    h = malloc(stringlength + 1); /* removed the strndup for better portability */
-    if (h == NULL) {
-        *hname = NULL;
-        *port = NULL;
-        return NULL;
-    }
-    strncpy(h, hostptr, stringlength);
-    *(h+stringlength) = '\0';
-    *hname = h;
-
-    if (portptr) {
-        stringlength = (pathptr - portptr);
-        if(!stringlength) portptr = NULL;
-    }
-    if (portptr == NULL) {
-        portptr = defaultportstr;
-        stringlength = strlen(defaultportstr);
-    }
-    p0 = malloc(stringlength + 1);
-    if (p0 == NULL) {
-        free(h);
-        *hname = NULL;
-        *port = NULL;
-        return NULL;
-    }
-    strncpy(p0, portptr, stringlength);
-    *(p0 + stringlength) = '\0';
-
-    for (p = p0; *p && isdigit((unsigned char) *p); p++) ;
-
-    *p = '\0';
-    *port = (unsigned char *) p0;
-
-    return pathptr;
-}
-
-char *proxyurl = NULL;
-unsigned long proxyip = 0;
-unsigned char *proxyport;
-
-#define ACCEPT_HEAD "Accept: audio/mpeg, audio/x-mpegurl, */*\r\n"
-
-char *httpauth = NULL;
-char httpauth1[256];
-
-int http_open (char *url)
-{
-    char *purl, *host, *request, *sptr;
-    int linelength;
-    unsigned long myip;
-    unsigned char *myport;
-    int sock;
-    int relocate, numrelocs = 0;
-    FILE *myfile;
-#ifdef INET6
-    struct addrinfo hints, *res, *res0;
-    int error;
-#else
-    struct hostent *hp;
-    struct sockaddr_in sin;
-#endif
-
-    host = NULL;
-    proxyport = NULL;
-    myport = NULL;
-    if (!proxyip) {
-        if (!proxyurl)
-            if (!(proxyurl = getenv("MP3_HTTP_PROXY")))
-                if (!(proxyurl = getenv("http_proxy")))
-                    proxyurl = getenv("HTTP_PROXY");
-        if (proxyurl && proxyurl[0] && strcmp(proxyurl, "none")) {
-            if (!(url2hostport(proxyurl, &host, &proxyip, &proxyport))) {
-                fprintf (stderr, "Unknown proxy host \"%s\".\n",
-                    host ? host : "");
-                exit (1);
-            }
-#if 0
-            if (host)
-                free (host);
-#endif
-        }
-        else
-            proxyip = INADDR_NONE;
-    }
-
-    if ((linelength = strlen(url)+200) < 1024)
-        linelength = 1024;
-    if (!(request = malloc(linelength)) || !(purl = malloc(1024))) {
-        fprintf (stderr, "malloc() failed, out of memory.\n");
-        exit (1);
-    }
-    strncpy (purl, url, 1023);
-    purl[1023] = '\0';
-
-        getauthfromURL(purl,httpauth1);
-
-    do {
-        strcpy (request, "GET ");
-        if (proxyip != INADDR_NONE) {
-            if (strncmp(url, "http://", 7))
-                strcat (request, "http://");
-            strcat (request, purl);
-            myport = proxyport;
-            myip = proxyip;
-        }
-        else {
-            if (host) {
-                free(host);
-                host=NULL;
-            }
-            if (proxyport) {
-                free(proxyport);
-                proxyport=NULL;
-            }
-            if (!(sptr = url2hostport(purl, &host, &myip, &myport))) {
-                fprintf (stderr, "Unknown host \"%s\".\n",
-                    host ? host : "");
-                exit (1);
-            }
-            strcat (request, sptr);
-        }
-        sprintf (request + strlen(request),
-            " HTTP/1.0\r\nUser-Agent: %s/%s\r\n",
-            prgName, prgVersion);
-        if (host) {
-            sprintf(request + strlen(request),
-                "Host: %s:%s\r\n", host, myport);
-#if 0
-            free (host);
-#endif
-        }
-        strcat (request, ACCEPT_HEAD);
-
-#ifdef INET6
-        memset(&hints, 0, sizeof(hints));
-        hints.ai_socktype = SOCK_STREAM;
-        error = getaddrinfo(host, (char *)myport, &hints, &res0);
-        if (error) {
-            fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(error));
-            exit(1);
-        }
-
-        sock = -1;
-        for (res = res0; res; res = res->ai_next) {
-            if ((sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) < 0) {
-                continue;
-            }
-            if (connect(sock, res->ai_addr, res->ai_addrlen)) {
-                close(sock);
-                sock = -1;
-                continue;
-            }
-            break;
-        }
-
-        freeaddrinfo(res0);
-#else
-        sock = -1;
-        hp = gethostbyname(host);
-        if (!hp)
-            goto fail;
-        if (hp->h_length != sizeof(sin.sin_addr))
-            goto fail;
-        sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-        if (sock < 0)
-            goto fail;
-        memset(&sin, 0, sizeof(sin));
-        sin.sin_family = AF_INET;
-        /* sin.sin_len = sizeof(struct sockaddr_in); */
-        memcpy(&sin.sin_addr, hp->h_addr, hp->h_length);
-        if (connect(sock, (struct sockaddr *)&sin, sizeof(struct sockaddr_in) ) < 0) {
-            close(sock);
-            sock = -1;
-        }
-fail:
-#endif
-
-        if (sock < 0) {
-            perror("socket");
-            exit(1);
-        }
-
-        if (strlen(httpauth1) || httpauth) {
-            char buf[1023];
-            strcat (request,"Authorization: Basic ");
-                        if(strlen(httpauth1))
-                          encode64(httpauth1,buf);
-                        else
-              encode64(httpauth,buf);
-            strcat (request,buf);
-            strcat (request,"\r\n");
-        }
-        strcat (request, "\r\n");
-
-        writestring (sock, request);
-        if (!(myfile = fdopen(sock, "rb"))) {
-            perror ("fdopen");
-            exit (1);
-        };
-        relocate = FALSE;
-        purl[0] = '\0';
-        readstring (request, linelength-1, myfile);
-        if ((sptr = strchr(request, ' '))) {
-            switch (sptr[1]) {
-                case '3':
-                    relocate = TRUE;
-                case '2':
-                    break;
-                default:
-                    fprintf (stderr, "HTTP request failed: %s",
-                        sptr+1); /* '\n' is included */
-                    exit (1);
-            }
-        }
-        do {
-            readstring (request, linelength-1, myfile);
-            if (!strncmp(request, "Location:", 9))
-                strncpy (purl, request+10, 1023);
-        } while (request[0] != '\r' && request[0] != '\n');
-    } while (relocate && purl[0] && numrelocs++ < 5);
-    if (relocate) {
-        fprintf (stderr, "Too many HTTP relocations.\n");
-        exit (1);
-    }
-    free (purl);
-    free (request);
-    free(host);
-    free(proxyport);
-    free(myport);
-
-    return sock;
-}
-
-#else
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-extern int errno;
-
-#include "mpg123.h"
-
-void writestring (int fd, char *string)
-{
-}
-
-void readstring (char *string, int maxlen, FILE *f)
-{
-}
-
-char *url2hostport (char *url, char **hname, unsigned long *hip, unsigned int *port)
-{
-}
-
-char *proxyurl = NULL;
-unsigned long proxyip = 0;
-unsigned int proxyport;
-
-#define ACCEPT_HEAD "Accept: audio/mpeg, audio/x-mpegurl, */*\r\n"
-
-int http_open (char *url)
-{
-}
-#endif
-
-/* EOF */
-

+ 0 - 332
panda/src/mpg123/huffman.h

@@ -1,332 +0,0 @@
-/*
- * huffman tables ... recalcualted to work with my optimzed
- * decoder scheme (MH)
- * 
- * probably we could save a few bytes of memory, because the 
- * smaller tables are often the part of a bigger table
- */
-
-struct newhuff 
-{
-  unsigned int linbits;
-  short *table;
-};
-
-static short tab0[] = 
-{ 
-   0
-};
-
-static short tab1[] =
-{
-  -5,  -3,  -1,  17,   1,  16,   0
-};
-
-static short tab2[] =
-{
- -15, -11,  -9,  -5,  -3,  -1,  34,   2,  18,  -1,  33,  32,  17,  -1,   1,
-  16,   0
-};
-
-static short tab3[] =
-{
- -13, -11,  -9,  -5,  -3,  -1,  34,   2,  18,  -1,  33,  32,  16,  17,  -1,
-   1,   0
-};
-
-static short tab5[] =
-{
- -29, -25, -23, -15,  -7,  -5,  -3,  -1,  51,  35,  50,  49,  -3,  -1,  19,
-   3,  -1,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  17,  -1,   1,  16,
-   0
-};
-
-static short tab6[] =
-{
- -25, -19, -13,  -9,  -5,  -3,  -1,  51,   3,  35,  -1,  50,  48,  -1,  19,
-  49,  -3,  -1,  34,   2,  18,  -3,  -1,  33,  32,   1,  -1,  17,  -1,  16,
-   0
-};
-
-static short tab7[] =
-{
- -69, -65, -57, -39, -29, -17, -11,  -7,  -3,  -1,  85,  69,  -1,  84,  83,
-  -1,  53,  68,  -3,  -1,  37,  82,  21,  -5,  -1,  81,  -1,   5,  52,  -1,
-  80,  -1,  67,  51,  -5,  -3,  -1,  36,  66,  20,  -1,  65,  64, -11,  -7,
-  -3,  -1,   4,  35,  -1,  50,   3,  -1,  19,  49,  -3,  -1,  48,  34,  18,
-  -5,  -1,  33,  -1,   2,  32,  17,  -1,   1,  16,   0
-};
-
-static short tab8[] =
-{
- -65, -63, -59, -45, -31, -19, -13,  -7,  -5,  -3,  -1,  85,  84,  69,  83,
-  -3,  -1,  53,  68,  37,  -3,  -1,  82,   5,  21,  -5,  -1,  81,  -1,  52,
-  67,  -3,  -1,  80,  51,  36,  -5,  -3,  -1,  66,  20,  65,  -3,  -1,   4,
-  64,  -1,  35,  50,  -9,  -7,  -3,  -1,  19,  49,  -1,   3,  48,  34,  -1,
-   2,  32,  -1,  18,  33,  17,  -3,  -1,   1,  16,   0
-};
-
-static short tab9[] =
-{
- -63, -53, -41, -29, -19, -11,  -5,  -3,  -1,  85,  69,  53,  -1,  83,  -1,
-  84,   5,  -3,  -1,  68,  37,  -1,  82,  21,  -3,  -1,  81,  52,  -1,  67,
-  -1,  80,   4,  -7,  -3,  -1,  36,  66,  -1,  51,  64,  -1,  20,  65,  -5,
-  -3,  -1,  35,  50,  19,  -1,  49,  -1,   3,  48,  -5,  -3,  -1,  34,   2,
-  18,  -1,  33,  32,  -3,  -1,  17,   1,  -1,  16,   0
-};
-
-static short tab10[] =
-{
--125,-121,-111, -83, -55, -35, -21, -13,  -7,  -3,  -1, 119, 103,  -1, 118,
-  87,  -3,  -1, 117, 102,  71,  -3,  -1, 116,  86,  -1, 101,  55,  -9,  -3,
-  -1, 115,  70,  -3,  -1,  85,  84,  99,  -1,  39, 114, -11,  -5,  -3,  -1,
- 100,   7, 112,  -1,  98,  -1,  69,  53,  -5,  -1,   6,  -1,  83,  68,  23,
- -17,  -5,  -1, 113,  -1,  54,  38,  -5,  -3,  -1,  37,  82,  21,  -1,  81,
-  -1,  52,  67,  -3,  -1,  22,  97,  -1,  96,  -1,   5,  80, -19, -11,  -7,
-  -3,  -1,  36,  66,  -1,  51,   4,  -1,  20,  65,  -3,  -1,  64,  35,  -1,
-  50,   3,  -3,  -1,  19,  49,  -1,  48,  34,  -7,  -3,  -1,  18,  33,  -1,
-   2,  32,  17,  -1,   1,  16,   0
-};
-
-static short tab11[] =
-{
--121,-113, -89, -59, -43, -27, -17,  -7,  -3,  -1, 119, 103,  -1, 118, 117,
-  -3,  -1, 102,  71,  -1, 116,  -1,  87,  85,  -5,  -3,  -1,  86, 101,  55,
-  -1, 115,  70,  -9,  -7,  -3,  -1,  69,  84,  -1,  53,  83,  39,  -1, 114,
-  -1, 100,   7,  -5,  -1, 113,  -1,  23, 112,  -3,  -1,  54,  99,  -1,  96,
-  -1,  68,  37, -13,  -7,  -5,  -3,  -1,  82,   5,  21,  98,  -3,  -1,  38,
-   6,  22,  -5,  -1,  97,  -1,  81,  52,  -5,  -1,  80,  -1,  67,  51,  -1,
-  36,  66, -15, -11,  -7,  -3,  -1,  20,  65,  -1,   4,  64,  -1,  35,  50,
-  -1,  19,  49,  -5,  -3,  -1,   3,  48,  34,  33,  -5,  -1,  18,  -1,   2,
-  32,  17,  -3,  -1,   1,  16,   0
-};
-
-static short tab12[] =
-{
--115, -99, -73, -45, -27, -17,  -9,  -5,  -3,  -1, 119, 103, 118,  -1,  87,
- 117,  -3,  -1, 102,  71,  -1, 116, 101,  -3,  -1,  86,  55,  -3,  -1, 115,
-  85,  39,  -7,  -3,  -1, 114,  70,  -1, 100,  23,  -5,  -1, 113,  -1,   7,
- 112,  -1,  54,  99, -13,  -9,  -3,  -1,  69,  84,  -1,  68,  -1,   6,   5,
-  -1,  38,  98,  -5,  -1,  97,  -1,  22,  96,  -3,  -1,  53,  83,  -1,  37,
-  82, -17,  -7,  -3,  -1,  21,  81,  -1,  52,  67,  -5,  -3,  -1,  80,   4,
-  36,  -1,  66,  20,  -3,  -1,  51,  65,  -1,  35,  50, -11,  -7,  -5,  -3,
-  -1,  64,   3,  48,  19,  -1,  49,  34,  -1,  18,  33,  -7,  -5,  -3,  -1,
-   2,  32,   0,  17,  -1,   1,  16
-};
-
-static short tab13[] =
-{
--509,-503,-475,-405,-333,-265,-205,-153,-115, -83, -53, -35, -21, -13,  -9,
-  -7,  -5,  -3,  -1, 254, 252, 253, 237, 255,  -1, 239, 223,  -3,  -1, 238,
- 207,  -1, 222, 191,  -9,  -3,  -1, 251, 206,  -1, 220,  -1, 175, 233,  -1,
- 236, 221,  -9,  -5,  -3,  -1, 250, 205, 190,  -1, 235, 159,  -3,  -1, 249,
- 234,  -1, 189, 219, -17,  -9,  -3,  -1, 143, 248,  -1, 204,  -1, 174, 158,
-  -5,  -1, 142,  -1, 127, 126, 247,  -5,  -1, 218,  -1, 173, 188,  -3,  -1,
- 203, 246, 111, -15,  -7,  -3,  -1, 232,  95,  -1, 157, 217,  -3,  -1, 245,
- 231,  -1, 172, 187,  -9,  -3,  -1,  79, 244,  -3,  -1, 202, 230, 243,  -1,
-  63,  -1, 141, 216, -21,  -9,  -3,  -1,  47, 242,  -3,  -1, 110, 156,  15,
-  -5,  -3,  -1, 201,  94, 171,  -3,  -1, 125, 215,  78, -11,  -5,  -3,  -1,
- 200, 214,  62,  -1, 185,  -1, 155, 170,  -1,  31, 241, -23, -13,  -5,  -1,
- 240,  -1, 186, 229,  -3,  -1, 228, 140,  -1, 109, 227,  -5,  -1, 226,  -1,
-  46,  14,  -1,  30, 225, -15,  -7,  -3,  -1, 224,  93,  -1, 213, 124,  -3,
-  -1, 199,  77,  -1, 139, 184,  -7,  -3,  -1, 212, 154,  -1, 169, 108,  -1,
- 198,  61, -37, -21,  -9,  -5,  -3,  -1, 211, 123,  45,  -1, 210,  29,  -5,
-  -1, 183,  -1,  92, 197,  -3,  -1, 153, 122, 195,  -7,  -5,  -3,  -1, 167,
- 151,  75, 209,  -3,  -1,  13, 208,  -1, 138, 168, -11,  -7,  -3,  -1,  76,
- 196,  -1, 107, 182,  -1,  60,  44,  -3,  -1, 194,  91,  -3,  -1, 181, 137,
-  28, -43, -23, -11,  -5,  -1, 193,  -1, 152,  12,  -1, 192,  -1, 180, 106,
-  -5,  -3,  -1, 166, 121,  59,  -1, 179,  -1, 136,  90, -11,  -5,  -1,  43,
-  -1, 165, 105,  -1, 164,  -1, 120, 135,  -5,  -1, 148,  -1, 119, 118, 178,
- -11,  -3,  -1,  27, 177,  -3,  -1,  11, 176,  -1, 150,  74,  -7,  -3,  -1,
-  58, 163,  -1,  89, 149,  -1,  42, 162, -47, -23,  -9,  -3,  -1,  26, 161,
-  -3,  -1,  10, 104, 160,  -5,  -3,  -1, 134,  73, 147,  -3,  -1,  57,  88,
-  -1, 133, 103,  -9,  -3,  -1,  41, 146,  -3,  -1,  87, 117,  56,  -5,  -1,
- 131,  -1, 102,  71,  -3,  -1, 116,  86,  -1, 101, 115, -11,  -3,  -1,  25,
- 145,  -3,  -1,   9, 144,  -1,  72, 132,  -7,  -5,  -1, 114,  -1,  70, 100,
-  40,  -1, 130,  24, -41, -27, -11,  -5,  -3,  -1,  55,  39,  23,  -1, 113,
-  -1,  85,   7,  -7,  -3,  -1, 112,  54,  -1,  99,  69,  -3,  -1,  84,  38,
-  -1,  98,  53,  -5,  -1, 129,  -1,   8, 128,  -3,  -1,  22,  97,  -1,   6,
-  96, -13,  -9,  -5,  -3,  -1,  83,  68,  37,  -1,  82,   5,  -1,  21,  81,
-  -7,  -3,  -1,  52,  67,  -1,  80,  36,  -3,  -1,  66,  51,  20, -19, -11,
-  -5,  -1,  65,  -1,   4,  64,  -3,  -1,  35,  50,  19,  -3,  -1,  49,   3,
-  -1,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  -3,  -1,  17,   1,  16,
-   0
-};
-
-static short tab15[] =
-{
--495,-445,-355,-263,-183,-115, -77, -43, -27, -13,  -7,  -3,  -1, 255, 239,
-  -1, 254, 223,  -1, 238,  -1, 253, 207,  -7,  -3,  -1, 252, 222,  -1, 237,
- 191,  -1, 251,  -1, 206, 236,  -7,  -3,  -1, 221, 175,  -1, 250, 190,  -3,
-  -1, 235, 205,  -1, 220, 159, -15,  -7,  -3,  -1, 249, 234,  -1, 189, 219,
-  -3,  -1, 143, 248,  -1, 204, 158,  -7,  -3,  -1, 233, 127,  -1, 247, 173,
-  -3,  -1, 218, 188,  -1, 111,  -1, 174,  15, -19, -11,  -3,  -1, 203, 246,
-  -3,  -1, 142, 232,  -1,  95, 157,  -3,  -1, 245, 126,  -1, 231, 172,  -9,
-  -3,  -1, 202, 187,  -3,  -1, 217, 141,  79,  -3,  -1, 244,  63,  -1, 243,
- 216, -33, -17,  -9,  -3,  -1, 230,  47,  -1, 242,  -1, 110, 240,  -3,  -1,
-  31, 241,  -1, 156, 201,  -7,  -3,  -1,  94, 171,  -1, 186, 229,  -3,  -1,
- 125, 215,  -1,  78, 228, -15,  -7,  -3,  -1, 140, 200,  -1,  62, 109,  -3,
-  -1, 214, 227,  -1, 155, 185,  -7,  -3,  -1,  46, 170,  -1, 226,  30,  -5,
-  -1, 225,  -1,  14, 224,  -1,  93, 213, -45, -25, -13,  -7,  -3,  -1, 124,
- 199,  -1,  77, 139,  -1, 212,  -1, 184, 154,  -7,  -3,  -1, 169, 108,  -1,
- 198,  61,  -1, 211, 210,  -9,  -5,  -3,  -1,  45,  13,  29,  -1, 123, 183,
-  -5,  -1, 209,  -1,  92, 208,  -1, 197, 138, -17,  -7,  -3,  -1, 168,  76,
-  -1, 196, 107,  -5,  -1, 182,  -1, 153,  12,  -1,  60, 195,  -9,  -3,  -1,
- 122, 167,  -1, 166,  -1, 192,  11,  -1, 194,  -1,  44,  91, -55, -29, -15,
-  -7,  -3,  -1, 181,  28,  -1, 137, 152,  -3,  -1, 193,  75,  -1, 180, 106,
-  -5,  -3,  -1,  59, 121, 179,  -3,  -1, 151, 136,  -1,  43,  90, -11,  -5,
-  -1, 178,  -1, 165,  27,  -1, 177,  -1, 176, 105,  -7,  -3,  -1, 150,  74,
-  -1, 164, 120,  -3,  -1, 135,  58, 163, -17,  -7,  -3,  -1,  89, 149,  -1,
-  42, 162,  -3,  -1,  26, 161,  -3,  -1,  10, 160, 104,  -7,  -3,  -1, 134,
-  73,  -1, 148,  57,  -5,  -1, 147,  -1, 119,   9,  -1,  88, 133, -53, -29,
- -13,  -7,  -3,  -1,  41, 103,  -1, 118, 146,  -1, 145,  -1,  25, 144,  -7,
-  -3,  -1,  72, 132,  -1,  87, 117,  -3,  -1,  56, 131,  -1, 102,  71,  -7,
-  -3,  -1,  40, 130,  -1,  24, 129,  -7,  -3,  -1, 116,   8,  -1, 128,  86,
-  -3,  -1, 101,  55,  -1, 115,  70, -17,  -7,  -3,  -1,  39, 114,  -1, 100,
-  23,  -3,  -1,  85, 113,  -3,  -1,   7, 112,  54,  -7,  -3,  -1,  99,  69,
-  -1,  84,  38,  -3,  -1,  98,  22,  -3,  -1,   6,  96,  53, -33, -19,  -9,
-  -5,  -1,  97,  -1,  83,  68,  -1,  37,  82,  -3,  -1,  21,  81,  -3,  -1,
-   5,  80,  52,  -7,  -3,  -1,  67,  36,  -1,  66,  51,  -1,  65,  -1,  20,
-   4,  -9,  -3,  -1,  35,  50,  -3,  -1,  64,   3,  19,  -3,  -1,  49,  48,
-  34,  -9,  -7,  -3,  -1,  18,  33,  -1,   2,  32,  17,  -3,  -1,   1,  16,
-   0
-};
-
-static short tab16[] =
-{
--509,-503,-461,-323,-103, -37, -27, -15,  -7,  -3,  -1, 239, 254,  -1, 223,
- 253,  -3,  -1, 207, 252,  -1, 191, 251,  -5,  -1, 175,  -1, 250, 159,  -3,
-  -1, 249, 248, 143,  -7,  -3,  -1, 127, 247,  -1, 111, 246, 255,  -9,  -5,
-  -3,  -1,  95, 245,  79,  -1, 244, 243, -53,  -1, 240,  -1,  63, -29, -19,
- -13,  -7,  -5,  -1, 206,  -1, 236, 221, 222,  -1, 233,  -1, 234, 217,  -1,
- 238,  -1, 237, 235,  -3,  -1, 190, 205,  -3,  -1, 220, 219, 174, -11,  -5,
-  -1, 204,  -1, 173, 218,  -3,  -1, 126, 172, 202,  -5,  -3,  -1, 201, 125,
-  94, 189, 242, -93,  -5,  -3,  -1,  47,  15,  31,  -1, 241, -49, -25, -13,
-  -5,  -1, 158,  -1, 188, 203,  -3,  -1, 142, 232,  -1, 157, 231,  -7,  -3,
-  -1, 187, 141,  -1, 216, 110,  -1, 230, 156, -13,  -7,  -3,  -1, 171, 186,
-  -1, 229, 215,  -1,  78,  -1, 228, 140,  -3,  -1, 200,  62,  -1, 109,  -1,
- 214, 155, -19, -11,  -5,  -3,  -1, 185, 170, 225,  -1, 212,  -1, 184, 169,
-  -5,  -1, 123,  -1, 183, 208, 227,  -7,  -3,  -1,  14, 224,  -1,  93, 213,
-  -3,  -1, 124, 199,  -1,  77, 139, -75, -45, -27, -13,  -7,  -3,  -1, 154,
- 108,  -1, 198,  61,  -3,  -1,  92, 197,  13,  -7,  -3,  -1, 138, 168,  -1,
- 153,  76,  -3,  -1, 182, 122,  60, -11,  -5,  -3,  -1,  91, 137,  28,  -1,
- 192,  -1, 152, 121,  -1, 226,  -1,  46,  30, -15,  -7,  -3,  -1, 211,  45,
-  -1, 210, 209,  -5,  -1,  59,  -1, 151, 136,  29,  -7,  -3,  -1, 196, 107,
-  -1, 195, 167,  -1,  44,  -1, 194, 181, -23, -13,  -7,  -3,  -1, 193,  12,
-  -1,  75, 180,  -3,  -1, 106, 166, 179,  -5,  -3,  -1,  90, 165,  43,  -1,
- 178,  27, -13,  -5,  -1, 177,  -1,  11, 176,  -3,  -1, 105, 150,  -1,  74,
- 164,  -5,  -3,  -1, 120, 135, 163,  -3,  -1,  58,  89,  42, -97, -57, -33,
- -19, -11,  -5,  -3,  -1, 149, 104, 161,  -3,  -1, 134, 119, 148,  -5,  -3,
-  -1,  73,  87, 103, 162,  -5,  -1,  26,  -1,  10, 160,  -3,  -1,  57, 147,
-  -1,  88, 133,  -9,  -3,  -1,  41, 146,  -3,  -1, 118,   9,  25,  -5,  -1,
- 145,  -1, 144,  72,  -3,  -1, 132, 117,  -1,  56, 131, -21, -11,  -5,  -3,
-  -1, 102,  40, 130,  -3,  -1,  71, 116,  24,  -3,  -1, 129, 128,  -3,  -1,
-   8,  86,  55,  -9,  -5,  -1, 115,  -1, 101,  70,  -1,  39, 114,  -5,  -3,
-  -1, 100,  85,   7,  23, -23, -13,  -5,  -1, 113,  -1, 112,  54,  -3,  -1,
-  99,  69,  -1,  84,  38,  -3,  -1,  98,  22,  -1,  97,  -1,   6,  96,  -9,
-  -5,  -1,  83,  -1,  53,  68,  -1,  37,  82,  -1,  81,  -1,  21,   5, -33,
- -23, -13,  -7,  -3,  -1,  52,  67,  -1,  80,  36,  -3,  -1,  66,  51,  20,
-  -5,  -1,  65,  -1,   4,  64,  -1,  35,  50,  -3,  -1,  19,  49,  -3,  -1,
-   3,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  -3,  -1,  17,   1,  16,
-   0
-};
-
-static short tab24[] =
-{
--451,-117, -43, -25, -15,  -7,  -3,  -1, 239, 254,  -1, 223, 253,  -3,  -1,
- 207, 252,  -1, 191, 251,  -5,  -1, 250,  -1, 175, 159,  -1, 249, 248,  -9,
-  -5,  -3,  -1, 143, 127, 247,  -1, 111, 246,  -3,  -1,  95, 245,  -1,  79,
- 244, -71,  -7,  -3,  -1,  63, 243,  -1,  47, 242,  -5,  -1, 241,  -1,  31,
- 240, -25,  -9,  -1,  15,  -3,  -1, 238, 222,  -1, 237, 206,  -7,  -3,  -1,
- 236, 221,  -1, 190, 235,  -3,  -1, 205, 220,  -1, 174, 234, -15,  -7,  -3,
-  -1, 189, 219,  -1, 204, 158,  -3,  -1, 233, 173,  -1, 218, 188,  -7,  -3,
-  -1, 203, 142,  -1, 232, 157,  -3,  -1, 217, 126,  -1, 231, 172, 255,-235,
--143, -77, -45, -25, -15,  -7,  -3,  -1, 202, 187,  -1, 141, 216,  -5,  -3,
-  -1,  14, 224,  13, 230,  -5,  -3,  -1, 110, 156, 201,  -1,  94, 186,  -9,
-  -5,  -1, 229,  -1, 171, 125,  -1, 215, 228,  -3,  -1, 140, 200,  -3,  -1,
-  78,  46,  62, -15,  -7,  -3,  -1, 109, 214,  -1, 227, 155,  -3,  -1, 185,
- 170,  -1, 226,  30,  -7,  -3,  -1, 225,  93,  -1, 213, 124,  -3,  -1, 199,
-  77,  -1, 139, 184, -31, -15,  -7,  -3,  -1, 212, 154,  -1, 169, 108,  -3,
-  -1, 198,  61,  -1, 211,  45,  -7,  -3,  -1, 210,  29,  -1, 123, 183,  -3,
-  -1, 209,  92,  -1, 197, 138, -17,  -7,  -3,  -1, 168, 153,  -1,  76, 196,
-  -3,  -1, 107, 182,  -3,  -1, 208,  12,  60,  -7,  -3,  -1, 195, 122,  -1,
- 167,  44,  -3,  -1, 194,  91,  -1, 181,  28, -57, -35, -19,  -7,  -3,  -1,
- 137, 152,  -1, 193,  75,  -5,  -3,  -1, 192,  11,  59,  -3,  -1, 176,  10,
-  26,  -5,  -1, 180,  -1, 106, 166,  -3,  -1, 121, 151,  -3,  -1, 160,   9,
- 144,  -9,  -3,  -1, 179, 136,  -3,  -1,  43,  90, 178,  -7,  -3,  -1, 165,
-  27,  -1, 177, 105,  -1, 150, 164, -17,  -9,  -5,  -3,  -1,  74, 120, 135,
-  -1,  58, 163,  -3,  -1,  89, 149,  -1,  42, 162,  -7,  -3,  -1, 161, 104,
-  -1, 134, 119,  -3,  -1,  73, 148,  -1,  57, 147, -63, -31, -15,  -7,  -3,
-  -1,  88, 133,  -1,  41, 103,  -3,  -1, 118, 146,  -1,  25, 145,  -7,  -3,
-  -1,  72, 132,  -1,  87, 117,  -3,  -1,  56, 131,  -1, 102,  40, -17,  -7,
-  -3,  -1, 130,  24,  -1,  71, 116,  -5,  -1, 129,  -1,   8, 128,  -1,  86,
- 101,  -7,  -5,  -1,  23,  -1,   7, 112, 115,  -3,  -1,  55,  39, 114, -15,
-  -7,  -3,  -1,  70, 100,  -1,  85, 113,  -3,  -1,  54,  99,  -1,  69,  84,
-  -7,  -3,  -1,  38,  98,  -1,  22,  97,  -5,  -3,  -1,   6,  96,  53,  -1,
-  83,  68, -51, -37, -23, -15,  -9,  -3,  -1,  37,  82,  -1,  21,  -1,   5,
-  80,  -1,  81,  -1,  52,  67,  -3,  -1,  36,  66,  -1,  51,  20,  -9,  -5,
-  -1,  65,  -1,   4,  64,  -1,  35,  50,  -1,  19,  49,  -7,  -5,  -3,  -1,
-   3,  48,  34,  18,  -1,  33,  -1,   2,  32,  -3,  -1,  17,   1,  -1,  16,
-   0
-};
-
-static short tab_c0[] =
-{
- -29, -21, -13,  -7,  -3,  -1,  11,  15,  -1,  13,  14,  -3,  -1,   7,   5,
-   9,  -3,  -1,   6,   3,  -1,  10,  12,  -3,  -1,   2,   1,  -1,   4,   8,
-   0
-};
-
-static short tab_c1[] =
-{
- -15,  -7,  -3,  -1,  15,  14,  -1,  13,  12,  -3,  -1,  11,  10,  -1,   9,
-   8,  -7,  -3,  -1,   7,   6,  -1,   5,   4,  -3,  -1,   3,   2,  -1,   1,
-   0
-};
-
-
-
-static struct newhuff ht[] = 
-{
- { /* 0 */ 0 , tab0  } ,
- { /* 2 */ 0 , tab1  } ,
- { /* 3 */ 0 , tab2  } ,
- { /* 3 */ 0 , tab3  } ,
- { /* 0 */ 0 , tab0  } ,
- { /* 4 */ 0 , tab5  } ,
- { /* 4 */ 0 , tab6  } ,
- { /* 6 */ 0 , tab7  } ,
- { /* 6 */ 0 , tab8  } ,
- { /* 6 */ 0 , tab9  } ,
- { /* 8 */ 0 , tab10 } ,
- { /* 8 */ 0 , tab11 } ,
- { /* 8 */ 0 , tab12 } ,
- { /* 16 */ 0 , tab13 } ,
- { /* 0  */ 0 , tab0  } ,
- { /* 16 */ 0 , tab15 } ,
-
- { /* 16 */ 1 , tab16 } ,
- { /* 16 */ 2 , tab16 } ,
- { /* 16 */ 3 , tab16 } ,
- { /* 16 */ 4 , tab16 } ,
- { /* 16 */ 6 , tab16 } ,
- { /* 16 */ 8 , tab16 } ,
- { /* 16 */ 10, tab16 } ,
- { /* 16 */ 13, tab16 } ,
- { /* 16 */ 4 , tab24 } ,
- { /* 16 */ 5 , tab24 } ,
- { /* 16 */ 6 , tab24 } ,
- { /* 16 */ 7 , tab24 } ,
- { /* 16 */ 8 , tab24 } ,
- { /* 16 */ 9 , tab24 } ,
- { /* 16 */ 11, tab24 } ,
- { /* 16 */ 13, tab24 }
-};
-
-static struct newhuff htc[] = 
-{
- { /* 1 , 1 , */ 0 , tab_c0 } ,
- { /* 1 , 1 , */ 0 , tab_c1 }
-};
-
-

+ 0 - 154
panda/src/mpg123/l2tables.h

@@ -1,154 +0,0 @@
-/*
- * Layer 2 Alloc tables .. 
- * most other tables are calculated on program start (which is (of course)
- * not ISO-conform) .. 
- * Layer-3 huffman table is in huffman.h
- */
-
-struct al_table alloc_0[] = {
-    {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
-    {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
-    {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
-    {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
-    {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
-    {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767} };
-
-struct al_table alloc_1[] = {
-    {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
-    {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
-    {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
-    {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
-    {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
-    {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-    {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767},
-    {2,0},{5,3},{7,5},{16,-32767} };
-
-struct al_table alloc_2[] = {
-    {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
-    {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
-    {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
-    {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
-
-struct al_table alloc_3[] = {
-    {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
-    {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
-    {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
-    {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
-
-struct al_table alloc_4[] = {
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-        {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-        {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-        {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
-    {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
-        {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9},
-    {2,0},{5,3},{7,5},{10,9}  };
-

+ 0 - 157
panda/src/mpg123/layer1.c

@@ -1,157 +0,0 @@
-/* 
- * Mpeg Layer-1 audio decoder 
- * --------------------------
- * copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README'
- * near unoptimzed ...
- *
- * may have a few bugs after last optimization ... 
- *
- */
-
-#include "mpg123.h"
-
-#include "getbits.h"
-
-void I_step_one(unsigned int balloc[], unsigned int scale_index[2][SBLIMIT],struct frame *fr)
-{
-  unsigned int *ba=balloc;
-  unsigned int *sca = (unsigned int *) scale_index;
-
-  if(fr->stereo) {
-    int i;
-    int jsbound = fr->jsbound;
-    for (i=0;i<jsbound;i++) { 
-      *ba++ = getbits(4);
-      *ba++ = getbits(4);
-    }
-    for (i=jsbound;i<SBLIMIT;i++)
-      *ba++ = getbits(4);
-
-    ba = balloc;
-
-    for (i=0;i<jsbound;i++) {
-      if ((*ba++))
-        *sca++ = getbits(6);
-      if ((*ba++))
-        *sca++ = getbits(6);
-    }
-    for (i=jsbound;i<SBLIMIT;i++)
-      if ((*ba++)) {
-        *sca++ =  getbits(6);
-        *sca++ =  getbits(6);
-      }
-  }
-  else {
-    int i;
-    for (i=0;i<SBLIMIT;i++)
-      *ba++ = getbits(4);
-    ba = balloc;
-    for (i=0;i<SBLIMIT;i++)
-      if ((*ba++))
-        *sca++ = getbits(6);
-  }
-}
-
-void I_step_two(real fraction[2][SBLIMIT],unsigned int balloc[2*SBLIMIT],
-    unsigned int scale_index[2][SBLIMIT],struct frame *fr)
-{
-  int i,n;
-  int smpb[2*SBLIMIT]; /* values: 0-65535 */
-  int *sample;
-  register unsigned int *ba;
-  register unsigned int *sca = (unsigned int *) scale_index;
-
-  if(fr->stereo) {
-    int jsbound = fr->jsbound;
-    register real *f0 = fraction[0];
-    register real *f1 = fraction[1];
-    ba = balloc;
-    for (sample=smpb,i=0;i<jsbound;i++)  {
-      if ((n = *ba++))
-        *sample++ = getbits(n+1);
-      if ((n = *ba++))
-        *sample++ = getbits(n+1);
-    }
-    for (i=jsbound;i<SBLIMIT;i++) 
-      if ((n = *ba++))
-        *sample++ = getbits(n+1);
-
-    ba = balloc;
-    for (sample=smpb,i=0;i<jsbound;i++) {
-      if((n=*ba++))
-        *f0++ = (real) ( ((-1)<<n) + (*sample++) + 1) * muls[n+1][*sca++];
-      else
-        *f0++ = 0.0;
-      if((n=*ba++))
-        *f1++ = (real) ( ((-1)<<n) + (*sample++) + 1) * muls[n+1][*sca++];
-      else
-        *f1++ = 0.0;
-    }
-    for (i=jsbound;i<SBLIMIT;i++) {
-      if ((n=*ba++)) {
-        real samp = ( ((-1)<<n) + (*sample++) + 1);
-        *f0++ = samp * muls[n+1][*sca++];
-        *f1++ = samp * muls[n+1][*sca++];
-      }
-      else
-        *f0++ = *f1++ = 0.0;
-    }
-    for(i=fr->down_sample_sblimit;i<32;i++)
-      fraction[0][i] = fraction[1][i] = 0.0;
-  }
-  else {
-    register real *f0 = fraction[0];
-    ba = balloc;
-    for (sample=smpb,i=0;i<SBLIMIT;i++)
-      if ((n = *ba++))
-        *sample++ = getbits(n+1);
-    ba = balloc;
-    for (sample=smpb,i=0;i<SBLIMIT;i++) {
-      if((n=*ba++))
-        *f0++ = (real) ( ((-1)<<n) + (*sample++) + 1) * muls[n+1][*sca++];
-      else
-        *f0++ = 0.0;
-    }
-    for(i=fr->down_sample_sblimit;i<32;i++)
-      fraction[0][i] = 0.0;
-  }
-}
-
-int do_layer1(struct mpstr *mp,struct frame *fr,int outmode,struct audio_info_struct *ai)
-{
-  int clip=0;
-  int i,stereo = fr->stereo;
-  unsigned int balloc[2*SBLIMIT];
-  unsigned int scale_index[2][SBLIMIT];
-  real fraction[2][SBLIMIT];
-  int single = fr->single;
-
-  fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext<<2)+4 : 32;
-
-  if(stereo == 1 || single == 3)
-    single = 0;
-
-  I_step_one(balloc,scale_index,fr);
-
-  for (i=0;i<SCALE_BLOCK;i++)
-  {
-    I_step_two(fraction,balloc,scale_index,fr);
-
-    if(single >= 0)
-    {
-      clip += (fr->synth_mono)( (real *) fraction[single],pcm_sample,&pcm_point);
-    }
-    else {
-        int p1 = pcm_point;
-        clip += (fr->synth)( (real *) fraction[0],0,pcm_sample,&p1);
-        clip += (fr->synth)( (real *) fraction[1],1,pcm_sample,&pcm_point);
-    }
-
-    if(pcm_point >= audiobufsize)
-      audio_flush(outmode,ai);
-  }
-
-  return clip;
-}
-
-

+ 0 - 304
panda/src/mpg123/layer2.c

@@ -1,304 +0,0 @@
-/* 
- * Mpeg Layer-2 audio decoder 
- * --------------------------
- * copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README'
- *
- */
-
-#include "mpg123.h"
-#include "l2tables.h"
-
-#include "getbits.h"
-
-static int grp_3tab[32 * 3] = { 0, };   /* used: 27 */
-static int grp_5tab[128 * 3] = { 0, };  /* used: 125 */
-static int grp_9tab[1024 * 3] = { 0, }; /* used: 729 */
-
-real muls[27][64];  /* also used by layer 1 */
-
-void init_layer2(void)
-{
-  static double mulmul[27] = {
-    0.0 , -2.0/3.0 , 2.0/3.0 ,
-    2.0/7.0 , 2.0/15.0 , 2.0/31.0, 2.0/63.0 , 2.0/127.0 , 2.0/255.0 ,
-    2.0/511.0 , 2.0/1023.0 , 2.0/2047.0 , 2.0/4095.0 , 2.0/8191.0 ,
-    2.0/16383.0 , 2.0/32767.0 , 2.0/65535.0 ,
-    -4.0/5.0 , -2.0/5.0 , 2.0/5.0, 4.0/5.0 ,
-    -8.0/9.0 , -4.0/9.0 , -2.0/9.0 , 2.0/9.0 , 4.0/9.0 , 8.0/9.0 };
-  static int base[3][9] = {
-     { 1 , 0, 2 , } ,
-     { 17, 18, 0 , 19, 20 , } ,
-     { 21, 1, 22, 23, 0, 24, 25, 2, 26 } };
-  int i,j,k,l,len;
-  real *table;
-  static int tablen[3] = { 3 , 5 , 9 };
-  static int *itable,*tables[3] = { grp_3tab , grp_5tab , grp_9tab };
-
-  for(i=0;i<3;i++)
-  {
-    itable = tables[i];
-    len = tablen[i];
-    for(j=0;j<len;j++)
-      for(k=0;k<len;k++)
-        for(l=0;l<len;l++)
-        {
-          *itable++ = base[i][l];
-          *itable++ = base[i][k];
-          *itable++ = base[i][j];
-        }
-  }
-
-  for(k=0;k<27;k++)
-  {
-    double m=mulmul[k];
-    table = muls[k];
-#ifdef USE_MMX
-    if(!param.down_sample) 
-        for(j=3,i=0;i<63;i++,j--)
-      *table++ = 16384 * m * pow(2.0,(double) j / 3.0);
-    else
-#endif
-    for(j=3,i=0;i<63;i++,j--)
-      *table++ = m * pow(2.0,(double) j / 3.0);
-    *table++ = 0.0;
-  }
-}
-
-
-void II_step_one(unsigned int *bit_alloc,int *scale,struct frame *fr)
-{
-    int stereo = fr->stereo-1;
-    int sblimit = fr->II_sblimit;
-    int jsbound = fr->jsbound;
-    int sblimit2 = fr->II_sblimit<<stereo;
-    struct al_table *alloc1 = fr->alloc;
-    int i;
-    static unsigned int scfsi_buf[64];
-    unsigned int *scfsi,*bita;
-    int sc,step;
-
-    bita = bit_alloc;
-    if(stereo)
-    {
-      for (i=jsbound;i;i--,alloc1+=(1<<step))
-      {
-        *bita++ = (char) getbits(step=alloc1->bits);
-        *bita++ = (char) getbits(step);
-      }
-      for (i=sblimit-jsbound;i;i--,alloc1+=(1<<step))
-      {
-        bita[0] = (char) getbits(step=alloc1->bits);
-        bita[1] = bita[0];
-        bita+=2;
-      }
-      bita = bit_alloc;
-      scfsi=scfsi_buf;
-      for (i=sblimit2;i;i--)
-        if (*bita++)
-          *scfsi++ = (char) getbits_fast(2);
-    }
-    else /* mono */
-    {
-      for (i=sblimit;i;i--,alloc1+=(1<<step))
-        *bita++ = (char) getbits(step=alloc1->bits);
-      bita = bit_alloc;
-      scfsi=scfsi_buf;
-      for (i=sblimit;i;i--)
-        if (*bita++)
-          *scfsi++ = (char) getbits_fast(2);
-    }
-
-    bita = bit_alloc;
-    scfsi=scfsi_buf;
-    for (i=sblimit2;i;i--) 
-      if (*bita++)
-        switch (*scfsi++) 
-        {
-          case 0: 
-                *scale++ = getbits_fast(6);
-                *scale++ = getbits_fast(6);
-                *scale++ = getbits_fast(6);
-                break;
-          case 1 : 
-                *scale++ = sc = getbits_fast(6);
-                *scale++ = sc;
-                *scale++ = getbits_fast(6);
-                break;
-          case 2: 
-                *scale++ = sc = getbits_fast(6);
-                *scale++ = sc;
-                *scale++ = sc;
-                break;
-          default:              /* case 3 */
-                *scale++ = getbits_fast(6);
-                *scale++ = sc = getbits_fast(6);
-                *scale++ = sc;
-                break;
-        }
-
-}
-
-void II_step_two(unsigned int *bit_alloc,real fraction[2][4][SBLIMIT],int *scale,struct frame *fr,int x1)
-{
-    int i,j,k,ba;
-    int stereo = fr->stereo;
-    int sblimit = fr->II_sblimit;
-    int jsbound = fr->jsbound;
-    struct al_table *alloc2,*alloc1 = fr->alloc;
-    unsigned int *bita=bit_alloc;
-    int d1,step;
-
-    for (i=0;i<jsbound;i++,alloc1+=(1<<step))
-    {
-      step = alloc1->bits;
-      for (j=0;j<stereo;j++)
-      {
-        if ( (ba=*bita++) ) 
-        {
-          k=(alloc2 = alloc1+ba)->bits;
-          if( (d1=alloc2->d) < 0) 
-          {
-            real cm=muls[k][scale[x1]];
-            fraction[j][0][i] = ((real) ((int)getbits(k) + d1)) * cm;
-            fraction[j][1][i] = ((real) ((int)getbits(k) + d1)) * cm;
-            fraction[j][2][i] = ((real) ((int)getbits(k) + d1)) * cm;
-          }        
-          else 
-          {
-            static int *table[] = { 0,0,0,grp_3tab,0,grp_5tab,0,0,0,grp_9tab };
-            unsigned int idx,*tab,m=scale[x1];
-            idx = (unsigned int) getbits(k);
-            tab = (unsigned int *) (table[d1] + idx + idx + idx);
-            fraction[j][0][i] = muls[*tab++][m];
-            fraction[j][1][i] = muls[*tab++][m];
-            fraction[j][2][i] = muls[*tab][m];  
-          }
-          scale+=3;
-        }
-        else
-          fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0;
-      }
-    }
-
-    for (i=jsbound;i<sblimit;i++,alloc1+=(1<<step))
-    {
-      step = alloc1->bits;
-      bita++;   /* channel 1 and channel 2 bitalloc are the same */
-      if ( (ba=*bita++) )
-      {
-        k=(alloc2 = alloc1+ba)->bits;
-        if( (d1=alloc2->d) < 0)
-        {
-          real cm;
-          cm=muls[k][scale[x1+3]];
-          fraction[1][0][i] = (fraction[0][0][i] = (real) ((int)getbits(k) + d1) ) * cm;
-          fraction[1][1][i] = (fraction[0][1][i] = (real) ((int)getbits(k) + d1) ) * cm;
-          fraction[1][2][i] = (fraction[0][2][i] = (real) ((int)getbits(k) + d1) ) * cm;
-          cm=muls[k][scale[x1]];
-          fraction[0][0][i] *= cm; fraction[0][1][i] *= cm; fraction[0][2][i] *= cm;
-        }
-        else
-        {
-          static int *table[] = { 0,0,0,grp_3tab,0,grp_5tab,0,0,0,grp_9tab };
-          unsigned int idx,*tab,m1,m2;
-          m1 = scale[x1]; m2 = scale[x1+3];
-          idx = (unsigned int) getbits(k);
-          tab = (unsigned int *) (table[d1] + idx + idx + idx);
-          fraction[0][0][i] = muls[*tab][m1]; fraction[1][0][i] = muls[*tab++][m2];
-          fraction[0][1][i] = muls[*tab][m1]; fraction[1][1][i] = muls[*tab++][m2];
-          fraction[0][2][i] = muls[*tab][m1]; fraction[1][2][i] = muls[*tab][m2];
-        }
-        scale+=6;
-      }
-      else {
-        fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] =
-        fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = 0.0;
-      }
-/* 
-   should we use individual scalefac for channel 2 or
-   is the current way the right one , where we just copy channel 1 to
-   channel 2 ?? 
-   The current 'strange' thing is, that we throw away the scalefac
-   values for the second channel ...!!
--> changed .. now we use the scalefac values of channel one !! 
-*/
-    }
-
-    if(sblimit > (fr->down_sample_sblimit) )
-      sblimit = fr->down_sample_sblimit;
-
-    for(i=sblimit;i<SBLIMIT;i++)
-      for (j=0;j<stereo;j++)
-        fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0;
-
-}
-
-static void II_select_table(struct frame *fr)
-{
-  static int translate[3][2][16] =
-   { { { 0,2,2,2,2,2,2,0,0,0,1,1,1,1,1,0 } ,
-       { 0,2,2,0,0,0,1,1,1,1,1,1,1,1,1,0 } } ,
-     { { 0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0 } ,
-       { 0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0 } } ,
-     { { 0,3,3,3,3,3,3,0,0,0,1,1,1,1,1,0 } ,
-       { 0,3,3,0,0,0,1,1,1,1,1,1,1,1,1,0 } } };
-
-  int table,sblim;
-  static struct al_table *tables[5] =
-       { alloc_0, alloc_1, alloc_2, alloc_3 , alloc_4 };
-  static int sblims[5] = { 27 , 30 , 8, 12 , 30 };
-
-  if(fr->lsf)
-    table = 4;
-  else
-    table = translate[fr->sampling_frequency][2-fr->stereo][fr->bitrate_index];
-  sblim = sblims[table];
-
-  fr->alloc      = tables[table];
-  fr->II_sblimit = sblim;
-}
-
-
-int do_layer2(struct mpstr *mp,struct frame *fr,int outmode,struct audio_info_struct *ai)
-{
-  int clip=0;
-  int i,j;
-  int stereo = fr->stereo;
-  real fraction[2][4][SBLIMIT]; /* pick_table clears unused subbands */
-  unsigned int bit_alloc[64];
-  int scale[192];
-  int single = fr->single;
-
-  II_select_table(fr);
-  fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ?
-     (fr->mode_ext<<2)+4 : fr->II_sblimit;
-
-  if(stereo == 1 || single == 3)
-    single = 0;
-
-  II_step_one(bit_alloc, scale, fr);
-
-  for (i=0;i<SCALE_BLOCK;i++) 
-  {
-    II_step_two(bit_alloc,fraction,scale,fr,i>>2);
-    for (j=0;j<3;j++) 
-    {
-      if(single >= 0)
-      {
-        clip += (fr->synth_mono) (fraction[single][j],pcm_sample,&pcm_point);
-      }
-      else {
-          int p1 = pcm_point;
-          clip += (fr->synth) (fraction[0][j],0,pcm_sample,&p1);
-          clip += (fr->synth) (fraction[1][j],1,pcm_sample,&pcm_point);
-      }
-
-      if(pcm_point >= audiobufsize)
-        audio_flush(outmode,ai);
-    }
-  }
-
-  return clip;
-}
-
-

+ 0 - 1815
panda/src/mpg123/layer3.c

@@ -1,1815 +0,0 @@
-/* 
- * Mpeg Layer-3 audio decoder 
- * --------------------------
- * copyright (c) 1995-1999 by Michael Hipp.
- * All rights reserved. See also 'README'
- *
- * Optimize-TODO: put short bands into the band-field without the stride 
- *                of 3 reals
- * Length-optimze: unify long and short band code where it is possible
- */ 
-
-#include <stdlib.h>
-#include "mpg123.h"
-#include "huffman.h"
-
-#include "common.h"
-
-#include "getbits.h"
-
-static real ispow[8207];
-static real aa_ca[8],aa_cs[8];
-static real COS1[12][6];
-static real win[4][36];
-static real win1[4][36];
-static real gainpow2[256+118+4];
-
-/* non static for external 3dnow functions */
-real   COS9[9];
-static real COS6_1,COS6_2;
-real   tfcos36[9];
-
-static real tfcos12[3];
-#define NEW_DCT9
-#ifdef NEW_DCT9
-static real cos9[3],cos18[3];
-#endif
-
-struct bandInfoStruct {
-  int longIdx[23];
-  int longDiff[22];
-  int shortIdx[14];
-  int shortDiff[13];
-};
-
-int longLimit[9][23];
-int shortLimit[9][14];
-
-struct bandInfoStruct bandInfo[9] = { 
-
-/* MPEG 1.0 */
- { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
-   {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
-   {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3},
-   {4,4,4,4,6,8,10,12,14,18,22,30,56} } ,
-
- { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
-   {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
-   {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3},
-   {4,4,4,4,6,6,10,12,14,16,20,26,66} } ,
-
- { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} ,
-   {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} ,
-   {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} ,
-   {4,4,4,4,6,8,12,16,20,26,34,42,12} }  ,
-
-/* MPEG 2.0 */
- { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
-   {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
-   {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} ,
-   {4,4,4,6,6,8,10,14,18,26,32,42,18 } } ,
-/*
- { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
-   {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } ,
-*/
-/* changed 19th value fropm 330 to 332 */
- { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576},
-   {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,54,62,70,76,36 } ,
-   {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} ,
-   {4,4,4,6,8,10,12,14,18,24,32,44,12 } } ,
-
- { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
-   {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
-   {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3},
-   {4,4,4,6,8,10,12,14,18,24,30,40,18 } } ,
-/* MPEG 2.5 */
- { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
-   {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
-   {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
-   {4,4,4,6,8,10,12,14,18,24,30,40,18} },
- { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
-   {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
-   {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
-   {4,4,4,6,8,10,12,14,18,24,30,40,18} },
- { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
-   {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
-   {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
-   {8,8,8,12,16,20,24,28,36,2,2,2,26} } ,
-};
-
-static int mapbuf0[9][152];
-static int mapbuf1[9][156];
-static int mapbuf2[9][44];
-static int *map[9][3];
-static int *mapend[9][3];
-
-static unsigned int n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
-static unsigned int i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
-
-static real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16];
-static real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16];
-
-/* 
- * init tables for layer-3 
- */
-void init_layer3(int down_sample_sblimit)
-{
-  int i,j,k,l;
-
-  for(i=-256;i<118+4;i++)
-#ifdef USE_MMX
-    if(!param.down_sample)
-      gainpow2[i+256] = 16384.0 * pow((double)2.0,-0.25 * (double) (i+210) );
-    else
-#endif
-    gainpow2[i+256] = pow((double)2.0,-0.25 * (double) (i+210) );
-
-  for(i=0;i<8207;i++)
-    ispow[i] = pow((double)i,(double)4.0/3.0);
-
-  for (i=0;i<8;i++) {
-    static double Ci[8]={-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
-    double sq=sqrt(1.0+Ci[i]*Ci[i]);
-    aa_cs[i] = 1.0/sq;
-    aa_ca[i] = Ci[i]/sq;
-  }
-
-  for(i=0;i<18;i++) {
-    win[0][i]    = win[1][i]    = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+0) +1) ) / cos ( M_PI * (double) (2*(i+0) +19) / 72.0 );
-    win[0][i+18] = win[3][i+18] = 0.5 * sin( M_PI / 72.0 * (double) (2*(i+18)+1) ) / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
-  }
-  for(i=0;i<6;i++) {
-    win[1][i+18] = 0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
-    win[3][i+12] = 0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 );
-    win[1][i+24] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+13) ) / cos ( M_PI * (double) (2*(i+24)+19) / 72.0 );
-    win[1][i+30] = win[3][i] = 0.0;
-    win[3][i+6 ] = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) )  / cos ( M_PI * (double) (2*(i+6 )+19) / 72.0 );
-  }
-
-  for(i=0;i<9;i++)
-    COS9[i] = cos( M_PI / 18.0 * (double) i);
-
-  for(i=0;i<9;i++)
-    tfcos36[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 36.0 );
-  for(i=0;i<3;i++)
-    tfcos12[i] = 0.5 / cos ( M_PI * (double) (i*2+1) / 12.0 );
-
-  COS6_1 = cos( M_PI / 6.0 * (double) 1);
-  COS6_2 = cos( M_PI / 6.0 * (double) 2);
-
-#ifdef NEW_DCT9
-  cos9[0]  = cos(1.0*M_PI/9.0);
-  cos9[1]  = cos(5.0*M_PI/9.0);
-  cos9[2]  = cos(7.0*M_PI/9.0);
-  cos18[0] = cos(1.0*M_PI/18.0);
-  cos18[1] = cos(11.0*M_PI/18.0);
-  cos18[2] = cos(13.0*M_PI/18.0);
-#endif
-
-  for(i=0;i<12;i++) {
-    win[2][i]  = 0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*i+7) / 24.0 );
-    for(j=0;j<6;j++)
-      COS1[i][j] = cos( M_PI / 24.0 * (double) ((2*i+7)*(2*j+1)) );
-  }
-
-  for(j=0;j<4;j++) {
-    static int len[4] = { 36,36,12,36 };
-    for(i=0;i<len[j];i+=2)
-      win1[j][i] = + win[j][i];
-    for(i=1;i<len[j];i+=2)
-      win1[j][i] = - win[j][i];
-  }
-
-  for(i=0;i<16;i++) {
-    double t = tan( (double) i * M_PI / 12.0 );
-    tan1_1[i] = t / (1.0+t);
-    tan2_1[i] = 1.0 / (1.0 + t);
-    tan1_2[i] = M_SQRT2 * t / (1.0+t);
-    tan2_2[i] = M_SQRT2 / (1.0 + t);
-
-    for(j=0;j<2;j++) {
-      double base = pow(2.0,-0.25*(j+1.0));
-      double p1=1.0,p2=1.0;
-      if(i > 0) {
-        if( i & 1 )
-          p1 = pow(base,(i+1.0)*0.5);
-        else
-          p2 = pow(base,i*0.5);
-      }
-      pow1_1[j][i] = p1;
-      pow2_1[j][i] = p2;
-      pow1_2[j][i] = M_SQRT2 * p1;
-      pow2_2[j][i] = M_SQRT2 * p2;
-    }
-  }
-
-  for(j=0;j<9;j++) {
-   struct bandInfoStruct *bi = &bandInfo[j];
-   int *mp;
-   int cb,lwin;
-   int *bdf;
-
-   mp = map[j][0] = mapbuf0[j];
-   bdf = bi->longDiff;
-   for(i=0,cb = 0; cb < 8 ; cb++,i+=*bdf++) {
-     *mp++ = (*bdf) >> 1;
-     *mp++ = i;
-     *mp++ = 3;
-     *mp++ = cb;
-   }
-   bdf = bi->shortDiff+3;
-   for(cb=3;cb<13;cb++) {
-     int l = (*bdf++) >> 1;
-     for(lwin=0;lwin<3;lwin++) {
-       *mp++ = l;
-       *mp++ = i + lwin;
-       *mp++ = lwin;
-       *mp++ = cb;
-     }
-     i += 6*l;
-   }
-   mapend[j][0] = mp;
-
-   mp = map[j][1] = mapbuf1[j];
-   bdf = bi->shortDiff+0;
-   for(i=0,cb=0;cb<13;cb++) {
-     int l = (*bdf++) >> 1;
-     for(lwin=0;lwin<3;lwin++) {
-       *mp++ = l;
-       *mp++ = i + lwin;
-       *mp++ = lwin;
-       *mp++ = cb;
-     }
-     i += 6*l;
-   }
-   mapend[j][1] = mp;
-
-   mp = map[j][2] = mapbuf2[j];
-   bdf = bi->longDiff;
-   for(cb = 0; cb < 22 ; cb++) {
-     *mp++ = (*bdf++) >> 1;
-     *mp++ = cb;
-   }
-   mapend[j][2] = mp;
-
-  }
-
-  for(j=0;j<9;j++) {
-    for(i=0;i<23;i++) {
-      longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
-      if(longLimit[j][i] > (down_sample_sblimit) )
-        longLimit[j][i] = down_sample_sblimit;
-    }
-    for(i=0;i<14;i++) {
-      shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1;
-      if(shortLimit[j][i] > (down_sample_sblimit) )
-        shortLimit[j][i] = down_sample_sblimit;
-    }
-  }
-
-  for(i=0;i<5;i++) {
-    for(j=0;j<6;j++) {
-      for(k=0;k<6;k++) {
-        int n = k + j * 6 + i * 36;
-        i_slen2[n] = i|(j<<3)|(k<<6)|(3<<12);
-      }
-    }
-  }
-  for(i=0;i<4;i++) {
-    for(j=0;j<4;j++) {
-      for(k=0;k<4;k++) {
-        int n = k + j * 4 + i * 16;
-        i_slen2[n+180] = i|(j<<3)|(k<<6)|(4<<12);
-      }
-    }
-  }
-  for(i=0;i<4;i++) {
-    for(j=0;j<3;j++) {
-      int n = j + i * 3;
-      i_slen2[n+244] = i|(j<<3) | (5<<12);
-      n_slen2[n+500] = i|(j<<3) | (2<<12) | (1<<15);
-    }
-  }
-
-  for(i=0;i<5;i++) {
-    for(j=0;j<5;j++) {
-      for(k=0;k<4;k++) {
-        for(l=0;l<4;l++) {
-          int n = l + k * 4 + j * 16 + i * 80;
-          n_slen2[n] = i|(j<<3)|(k<<6)|(l<<9)|(0<<12);
-        }
-      }
-    }
-  }
-  for(i=0;i<5;i++) {
-    for(j=0;j<5;j++) {
-      for(k=0;k<4;k++) {
-        int n = k + j * 4 + i * 20;
-        n_slen2[n+400] = i|(j<<3)|(k<<6)|(1<<12);
-      }
-    }
-  }
-}
-
-/*
- * read additional side information (for MPEG 1 and MPEG 2)
- */
-static int III_get_side_info(struct III_sideinfo *si,int stereo,
- int ms_stereo,long sfreq,int single,int lsf)
-{
-   int ch, gr;
-   int powdiff = (single == 3) ? 4 : 0;
-
-   static const int tabs[2][5] = { { 2,9,5,3,4 } , { 1,8,1,2,9 } };
-   const int *tab = tabs[lsf];
-   
-   si->main_data_begin = getbits(tab[1]);
-   if (stereo == 1)
-     si->private_bits = getbits_fast(tab[2]);
-   else 
-     si->private_bits = getbits_fast(tab[3]);
-
-   if(!lsf) {
-     for (ch=0; ch<stereo; ch++) {
-         si->ch[ch].gr[0].scfsi = -1;
-         si->ch[ch].gr[1].scfsi = getbits_fast(4);
-     }
-   }
-
-   for (gr=0; gr<tab[0]; gr++) {
-     for (ch=0; ch<stereo; ch++) {
-       register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
-
-       gr_info->part2_3_length = getbits(12);
-       gr_info->big_values = getbits(9);
-       if(gr_info->big_values > 288) {
-          fprintf(stderr,"big_values too large!\n");
-          gr_info->big_values = 288;
-       }
-       gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff;
-       if(ms_stereo)
-         gr_info->pow2gain += 2;
-       gr_info->scalefac_compress = getbits(tab[4]);
-
-       if(get1bit()) { /* window switch flag  */
-         int i;
-         gr_info->block_type       = getbits_fast(2);
-         gr_info->mixed_block_flag = get1bit();
-         gr_info->table_select[0]  = getbits_fast(5);
-         gr_info->table_select[1]  = getbits_fast(5);
-         /*
-          * table_select[2] not needed, because there is no region2,
-          * but to satisfy some verifications tools we set it either.
-          */
-         gr_info->table_select[2] = 0;
-         for(i=0;i<3;i++)
-           gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(3)<<3);
-
-         if(gr_info->block_type == 0) {
-           fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n");
-           return 0;
-         }
-      
-         /* region_count/start parameters are implicit in this case. */       
-         if(!lsf || gr_info->block_type == 2)
-           gr_info->region1start = 36>>1;
-         else {
-/* check this again for 2.5 and sfreq=8 */
-           if(sfreq == 8)
-             gr_info->region1start = 108>>1;
-           else
-             gr_info->region1start = 54>>1;
-         }
-         gr_info->region2start = 576>>1;
-       }
-       else {
-         int i,r0c,r1c;
-         for (i=0; i<3; i++)
-           gr_info->table_select[i] = getbits_fast(5);
-         r0c = getbits_fast(4);
-         r1c = getbits_fast(3);
-         gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
-         if(r0c + r1c + 2 > 22)
-           gr_info->region2start = 576>>1;
-         else
-           gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
-         gr_info->block_type = 0;
-         gr_info->mixed_block_flag = 0;
-       }
-       if(!lsf)
-         gr_info->preflag = get1bit();
-       gr_info->scalefac_scale = get1bit();
-       gr_info->count1table_select = get1bit();
-     }
-   }
-
-   return !0;
-}
-
-/*
- * read scalefactors
- */
-static int III_get_scale_factors_1(int *scf,struct gr_info_s *gr_info)
-{
-   static const unsigned char slen[2][16] = {
-     {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
-     {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}
-   };
-   int numbits;
-   int num0 = slen[0][gr_info->scalefac_compress];
-   int num1 = slen[1][gr_info->scalefac_compress];
-
-    if (gr_info->block_type == 2) {
-      int i=18;
-      numbits = (num0 + num1) * 18;
-
-      if (gr_info->mixed_block_flag) {
-         for (i=8;i;i--)
-           *scf++ = getbits_fast(num0);
-         i = 9;
-         numbits -= num0; /* num0 * 17 + num1 * 18 */
-      }
-
-      for (;i;i--)
-        *scf++ = getbits_fast(num0);
-      for (i = 18; i; i--)
-        *scf++ = getbits_fast(num1);
-      *scf++ = 0; *scf++ = 0; *scf++ = 0; /* short[13][0..2] = 0 */
-    }
-    else {
-      int i;
-      int scfsi = gr_info->scfsi;
-
-      if(scfsi < 0) { /* scfsi < 0 => granule == 0 */
-         for(i=11;i;i--)
-           *scf++ = getbits_fast(num0);
-         for(i=10;i;i--)
-           *scf++ = getbits_fast(num1);
-         numbits = (num0 + num1) * 10 + num0;
-         *scf++ = 0;
-      }
-      else {
-        numbits = 0;
-        if(!(scfsi & 0x8)) {
-          for (i=0;i<6;i++)
-            *scf++ = getbits_fast(num0);
-          numbits += num0 * 6;
-        }
-        else {
-          scf += 6; 
-        }
-
-        if(!(scfsi & 0x4)) {
-          for (i=0;i<5;i++)
-            *scf++ = getbits_fast(num0);
-          numbits += num0 * 5;
-        }
-        else {
-          scf += 5;
-        }
-
-        if(!(scfsi & 0x2)) {
-          for(i=0;i<5;i++)
-            *scf++ = getbits_fast(num1);
-          numbits += num1 * 5;
-        }
-        else {
-          scf += 5; 
-        }
-
-        if(!(scfsi & 0x1)) {
-          for (i=0;i<5;i++)
-            *scf++ = getbits_fast(num1);
-          numbits += num1 * 5;
-        }
-        else {
-           scf += 5;
-        }
-        *scf++ = 0;  /* no l[21] in original sources */
-      }
-    }
-    return numbits;
-}
-
-static int III_get_scale_factors_2(int *scf,struct gr_info_s *gr_info,int i_stereo)
-{
-  unsigned char *pnt;
-  int i,j,n=0,numbits=0;
-  unsigned int slen;
-
-  static unsigned char stab[3][6][4] = {
-   { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} ,
-     { 7, 7, 7,0 } , { 6, 6, 6,3 } , {  8, 8,5,0} } ,
-   { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} ,
-     {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } ,
-   { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} ,
-     { 6,15,12,0 } , { 6,12, 9,6 } , {  6,18,9,0} } }; 
-
-  if(i_stereo) /* i_stereo AND second channel -> do_layer3() checks this */
-    slen = i_slen2[gr_info->scalefac_compress>>1];
-  else
-    slen = n_slen2[gr_info->scalefac_compress];
-
-  gr_info->preflag = (slen>>15) & 0x1;
-
-  n = 0;  
-  if( gr_info->block_type == 2 ) {
-    n++;
-    if(gr_info->mixed_block_flag)
-      n++;
-  }
-
-  pnt = stab[n][(slen>>12)&0x7];
-
-  for(i=0;i<4;i++) {
-    int num = slen & 0x7;
-    slen >>= 3;
-    if(num) {
-      for(j=0;j<(int)(pnt[i]);j++)
-        *scf++ = getbits_fast(num);
-      numbits += pnt[i] * num;
-    }
-    else {
-      for(j=0;j<(int)(pnt[i]);j++)
-        *scf++ = 0;
-    }
-  }
-  
-  n = (n << 1) + 1;
-  for(i=0;i<n;i++)
-    *scf++ = 0;
-
-  return numbits;
-}
-
-static int pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
-static int pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-
-/*
- * Dequantize samples (includes huffman decoding)
- */
-/* 24 is enough because tab13 has max. a 19 bit huffvector */
-#define BITSHIFT ((sizeof(long)-1)*8)
-#define REFRESH_MASK \
-  while(num < BITSHIFT) { \
-    mask |= ((unsigned long)getbyte())<<(BITSHIFT-num); \
-    num += 8; \
-    part2remain -= 8; }
-
-static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,
-   struct gr_info_s *gr_info,int sfreq,int part2bits)
-{
-  int shift = 1 + gr_info->scalefac_scale;
-  real *xrpnt = (real *) xr;
-  int l[3],l3;
-  int part2remain = gr_info->part2_3_length - part2bits;
-  int *me;
-
-  int num=getbitoffset();
-  long mask;
-  /* we must split this, because for num==0 the shift is undefined if you do it in one step */
-  mask  = ((unsigned long) getbits(num))<<BITSHIFT;
-  mask <<= 8-num;
-  part2remain -= num;
-
-  {
-    int bv       = gr_info->big_values;
-    int region1  = gr_info->region1start;
-    int region2  = gr_info->region2start;
-
-    l3 = ((576>>1)-bv)>>1;   
-/*
- * we may lose the 'odd' bit here !! 
- * check this later again 
- */
-    if(bv <= region1) {
-      l[0] = bv; l[1] = l[2] = 0;
-    }
-    else {
-      l[0] = region1;
-      if(bv <= region2) {
-        l[1] = bv - l[0];  l[2] = 0;
-      }
-      else {
-        l[1] = region2 - l[0]; l[2] = bv - region2;
-      }
-    }
-  }
- 
-  if(gr_info->block_type == 2) {
-    /*
-     * decoding with short or mixed mode BandIndex table 
-     */
-    int i,max[4];
-    int step=0,lwin=3,cb=0;
-    register real v = 0.0;
-    register int *m,mc;
-
-    if(gr_info->mixed_block_flag) {
-      max[3] = -1;
-      max[0] = max[1] = max[2] = 2;
-      m = map[sfreq][0];
-      me = mapend[sfreq][0];
-    }
-    else {
-      max[0] = max[1] = max[2] = max[3] = -1;
-      /* max[3] not really needed in this case */
-      m = map[sfreq][1];
-      me = mapend[sfreq][1];
-    }
-
-    mc = 0;
-    for(i=0;i<2;i++) {
-      int lp = l[i];
-      struct newhuff *h = ht+gr_info->table_select[i];
-      for(;lp;lp--,mc--) {
-        register int x,y;
-        if( (!mc) ) {
-          mc    = *m++;
-          xrpnt = ((real *) xr) + (*m++);
-          lwin  = *m++;
-          cb    = *m++;
-          if(lwin == 3) {
-            v = gr_info->pow2gain[(*scf++) << shift];
-            step = 1;
-          }
-          else {
-            v = gr_info->full_gain[lwin][(*scf++) << shift];
-            step = 3;
-          }
-        }
-        {
-          register short *val = h->table;
-          REFRESH_MASK;
-          while((y=*val++)<0) {
-            if (mask < 0)
-              val -= y;
-            num--;
-            mask <<= 1;
-          }
-          x = y >> 4;
-          y &= 0xf;
-        }
-        if(x == 15 && h->linbits) {
-          max[lwin] = cb;
-          REFRESH_MASK;
-          x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
-          num -= h->linbits+1;
-          mask <<= h->linbits;
-          if(mask < 0)
-            *xrpnt = -ispow[x] * v;
-          else
-            *xrpnt =  ispow[x] * v;
-          mask <<= 1;
-        }
-        else if(x) {
-          max[lwin] = cb;
-          if(mask < 0)
-            *xrpnt = -ispow[x] * v;
-          else
-            *xrpnt =  ispow[x] * v;
-          num--;
-          mask <<= 1;
-        }
-        else
-          *xrpnt = 0.0;
-        xrpnt += step;
-        if(y == 15 && h->linbits) {
-          max[lwin] = cb;
-          REFRESH_MASK;
-          y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
-          num -= h->linbits+1;
-          mask <<= h->linbits;
-          if(mask < 0)
-            *xrpnt = -ispow[y] * v;
-          else
-            *xrpnt =  ispow[y] * v;
-          mask <<= 1;
-        }
-        else if(y) {
-          max[lwin] = cb;
-          if(mask < 0)
-            *xrpnt = -ispow[y] * v;
-          else
-            *xrpnt =  ispow[y] * v;
-          num--;
-          mask <<= 1;
-        }
-        else
-          *xrpnt = 0.0;
-        xrpnt += step;
-      }
-    }
-
-    for(;l3 && (part2remain+num > 0);l3--) {
-      struct newhuff *h = htc+gr_info->count1table_select;
-      register short *val = h->table,a;
-
-      REFRESH_MASK;
-      while((a=*val++)<0) {
-        if (mask < 0)
-          val -= a;
-        num--;
-        mask <<= 1;
-      }
-      if(part2remain+num <= 0) {
-    num -= part2remain+num;
-    break;
-      }
-
-      for(i=0;i<4;i++) {
-        if(!(i & 1)) {
-          if(!mc) {
-            mc = *m++;
-            xrpnt = ((real *) xr) + (*m++);
-            lwin = *m++;
-            cb = *m++;
-            if(lwin == 3) {
-              v = gr_info->pow2gain[(*scf++) << shift];
-              step = 1;
-            }
-            else {
-              v = gr_info->full_gain[lwin][(*scf++) << shift];
-              step = 3;
-            }
-          }
-          mc--;
-        }
-        if( (a & (0x8>>i)) ) {
-          max[lwin] = cb;
-          if(part2remain+num <= 0) {
-            break;
-          }
-          if(mask < 0) 
-            *xrpnt = -v;
-          else
-            *xrpnt = v;
-          num--;
-          mask <<= 1;
-        }
-        else
-          *xrpnt = 0.0;
-        xrpnt += step;
-      }
-    }
-
-    if(lwin < 3) { /* short band? */
-      while(1) {
-        for(;mc > 0;mc--) {
-          *xrpnt = 0.0; xrpnt += 3; /* short band -> step=3 */
-          *xrpnt = 0.0; xrpnt += 3;
-        }
-        if(m >= me)
-          break;
-        mc    = *m++;
-        xrpnt = ((real *) xr) + *m++;
-        if(*m++ == 0)
-          break; /* optimize: field will be set to zero at the end of the function */
-        m++; /* cb */
-      }
-    }
-
-    gr_info->maxband[0] = max[0]+1;
-    gr_info->maxband[1] = max[1]+1;
-    gr_info->maxband[2] = max[2]+1;
-    gr_info->maxbandl = max[3]+1;
-
-    {
-      int rmax = max[0] > max[1] ? max[0] : max[1];
-      rmax = (rmax > max[2] ? rmax : max[2]) + 1;
-      gr_info->maxb = rmax ? shortLimit[sfreq][rmax] : longLimit[sfreq][max[3]+1];
-    }
-
-  }
-  else {
-    /*
-     * decoding with 'long' BandIndex table (block_type != 2)
-     */
-    int *pretab = gr_info->preflag ? pretab1 : pretab2;
-    int i,max = -1;
-    int cb = 0;
-    int *m = map[sfreq][2];
-    register real v = 0.0;
-    int mc = 0;
-
-    /*
-     * long hash table values
-     */
-    for(i=0;i<3;i++) {
-      int lp = l[i];
-      struct newhuff *h = ht+gr_info->table_select[i];
-
-      for(;lp;lp--,mc--) {
-        int x,y;
-
-        if(!mc) {
-          mc = *m++;
-          cb = *m++;
-          if(cb == 21)
-            v = 0.0;
-          else
-            v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
-
-        }
-        {
-          register short *val = h->table;
-          REFRESH_MASK;
-          while((y=*val++)<0) {
-            if (mask < 0)
-              val -= y;
-            num--;
-            mask <<= 1;
-          }
-          x = y >> 4;
-          y &= 0xf;
-        }
-
-        if (x == 15 && h->linbits) {
-          max = cb;
-      REFRESH_MASK;
-          x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
-          num -= h->linbits+1;
-          mask <<= h->linbits;
-          if(mask < 0)
-            *xrpnt++ = -ispow[x] * v;
-          else
-            *xrpnt++ =  ispow[x] * v;
-          mask <<= 1;
-        }
-        else if(x) {
-          max = cb;
-          if(mask < 0)
-            *xrpnt++ = -ispow[x] * v;
-          else
-            *xrpnt++ =  ispow[x] * v;
-          num--;
-          mask <<= 1;
-        }
-        else
-          *xrpnt++ = 0.0;
-
-        if (y == 15 && h->linbits) {
-          max = cb;
-      REFRESH_MASK;
-          y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
-          num -= h->linbits+1;
-          mask <<= h->linbits;
-          if(mask < 0)
-            *xrpnt++ = -ispow[y] * v;
-          else
-            *xrpnt++ =  ispow[y] * v;
-          mask <<= 1;
-        }
-        else if(y) {
-          max = cb;
-          if(mask < 0)
-            *xrpnt++ = -ispow[y] * v;
-          else
-            *xrpnt++ =  ispow[y] * v;
-          num--;
-          mask <<= 1;
-        }
-        else
-          *xrpnt++ = 0.0;
-      }
-    }
-
-    /*
-     * short (count1table) values
-     */
-    for(;l3 && (part2remain+num > 0);l3--) {
-      struct newhuff *h = htc+gr_info->count1table_select;
-      register short *val = h->table,a;
-
-      REFRESH_MASK;
-      while((a=*val++)<0) {
-        if (mask < 0)
-          val -= a;
-        num--;
-        mask <<= 1;
-      }
-      if(part2remain+num <= 0) {
-    num -= part2remain+num;
-        break;
-      }
-
-      for(i=0;i<4;i++) {
-        if(!(i & 1)) {
-          if(!mc) {
-            mc = *m++;
-            cb = *m++;
-            if(cb == 21)
-              v = 0.0;
-            else
-              v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
-          }
-          mc--;
-        }
-        if ( (a & (0x8>>i)) ) {
-          max = cb;
-          if(part2remain+num <= 0) {
-            break;
-          }
-          if(mask < 0)
-            *xrpnt++ = -v;
-          else
-            *xrpnt++ = v;
-          num--;
-          mask <<= 1;
-        }
-        else
-          *xrpnt++ = 0.0;
-      }
-    }
-
-    gr_info->maxbandl = max+1;
-    gr_info->maxb = longLimit[sfreq][gr_info->maxbandl];
-  }
-
-  part2remain += num;
-  backbits(num);
-  num = 0;
-
-  while(xrpnt < &xr[SBLIMIT][0]) 
-    *xrpnt++ = 0.0;
-
-  while( part2remain > 16 ) {
-    getbits(16); /* Dismiss stuffing Bits */
-    part2remain -= 16;
-  }
-  if(part2remain > 0)
-    getbits(part2remain);
-  else if(part2remain < 0) {
-    /*
-    fprintf(stderr,"mpg123: Can't rewind stream by %d bits!\n",-part2remain);
-    */
-    return 1; /* -> error */
-  }
-  return 0;
-}
-
-/* 
- * III_stereo: calculate real channel values for Joint-I-Stereo-mode
- */
-static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac,
-   struct gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf)
-{
-      real (*xr)[SBLIMIT*SSLIMIT] = (real (*)[SBLIMIT*SSLIMIT] ) xr_buf;
-      struct bandInfoStruct *bi = &bandInfo[sfreq];
-
-      const real *tab1,*tab2;
-
-      int tab;
-      static const real *tabs[3][2][2] = { 
-         { { tan1_1,tan2_1 }     , { tan1_2,tan2_2 } },
-         { { pow1_1[0],pow2_1[0] } , { pow1_2[0],pow2_2[0] } } ,
-         { { pow1_1[1],pow2_1[1] } , { pow1_2[1],pow2_2[1] } } 
-      };
-
-      tab = lsf + (gr_info->scalefac_compress & lsf);
-      tab1 = tabs[tab][ms_stereo][0];
-      tab2 = tabs[tab][ms_stereo][1];
-#if 0
-      if(lsf) {
-        int p = gr_info->scalefac_compress & 0x1;
-    if(ms_stereo) {
-          tab1 = pow1_2[p]; tab2 = pow2_2[p];
-        }
-        else {
-          tab1 = pow1_1[p]; tab2 = pow2_1[p];
-        }
-      }
-      else {
-        if(ms_stereo) {
-          tab1 = tan1_2; tab2 = tan2_2;
-        }
-        else {
-          tab1 = tan1_1; tab2 = tan2_1;
-        }
-      }
-#endif
-
-      if (gr_info->block_type == 2) {
-         int lwin,do_l = 0;
-         if( gr_info->mixed_block_flag )
-           do_l = 1;
-
-         for (lwin=0;lwin<3;lwin++) { /* process each window */
-             /* get first band with zero values */
-           int is_p,sb,idx,sfb = gr_info->maxband[lwin];  /* sfb is minimal 3 for mixed mode */
-           if(sfb > 3)
-             do_l = 0;
-
-           for(;sfb<12;sfb++) {
-             is_p = scalefac[sfb*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */ 
-             if(is_p != 7) {
-               real t1,t2;
-               sb  = bi->shortDiff[sfb];
-               idx = bi->shortIdx[sfb] + lwin;
-               t1  = tab1[is_p]; t2 = tab2[is_p];
-               for (; sb > 0; sb--,idx+=3) {
-                 real v = xr[0][idx];
-                 xr[0][idx] = v * t1;
-                 xr[1][idx] = v * t2;
-               }
-             }
-           }
-
-#if 1
-/* in the original: copy 10 to 11 , here: copy 11 to 12 
-maybe still wrong??? (copy 12 to 13?) */
-           is_p = scalefac[11*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
-           sb   = bi->shortDiff[12];
-           idx  = bi->shortIdx[12] + lwin;
-#else
-           is_p = scalefac[10*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
-           sb   = bi->shortDiff[11];
-           idx  = bi->shortIdx[11] + lwin;
-#endif
-           if(is_p != 7) {
-             real t1,t2;
-             t1 = tab1[is_p]; t2 = tab2[is_p];
-             for ( ; sb > 0; sb--,idx+=3 ) {  
-               real v = xr[0][idx];
-               xr[0][idx] = v * t1;
-               xr[1][idx] = v * t2;
-             }
-           }
-         } /* end for(lwin; .. ; . ) */
-
-/* also check l-part, if ALL bands in the three windows are 'empty'
- * and mode = mixed_mode 
- */
-         if (do_l) {
-           int sfb = gr_info->maxbandl;
-           int idx = bi->longIdx[sfb];
-
-           for ( ; sfb<8; sfb++ ) {
-             int sb = bi->longDiff[sfb];
-             int is_p = scalefac[sfb]; /* scale: 0-15 */
-             if(is_p != 7) {
-               real t1,t2;
-               t1 = tab1[is_p]; t2 = tab2[is_p];
-               for ( ; sb > 0; sb--,idx++) {
-                 real v = xr[0][idx];
-                 xr[0][idx] = v * t1;
-                 xr[1][idx] = v * t2;
-               }
-             }
-             else 
-               idx += sb;
-           }
-         }     
-      } 
-      else { /* ((gr_info->block_type != 2)) */
-       int sfb = gr_info->maxbandl;
-       int is_p,idx = bi->longIdx[sfb];
-
-/* hmm ... maybe the maxbandl stuff for i-stereo is buggy? */
-       if(sfb <= 21) { 
-        for ( ; sfb<21; sfb++) {
-          int sb = bi->longDiff[sfb];
-          is_p = scalefac[sfb]; /* scale: 0-15 */
-          if(is_p != 7) {
-            real t1,t2;
-            t1 = tab1[is_p]; t2 = tab2[is_p];
-            for ( ; sb > 0; sb--,idx++) {
-               real v = xr[0][idx];
-               xr[0][idx] = v * t1;
-               xr[1][idx] = v * t2;
-            }
-          }
-          else
-            idx += sb;
-        }
-
-        is_p = scalefac[20];
-        if(is_p != 7) {  /* copy l-band 20 to l-band 21 */
-          int sb;
-          real t1 = tab1[is_p],t2 = tab2[is_p]; 
-
-          for ( sb = bi->longDiff[21]; sb > 0; sb--,idx++ ) {
-            real v = xr[0][idx];
-            xr[0][idx] = v * t1;
-            xr[1][idx] = v * t2;
-          }
-        }
-       }        /* end: if(sfb <= 21) */
-      } /* ... */
-}
-
-static void III_antialias(real xr[SBLIMIT][SSLIMIT],struct gr_info_s *gr_info) {
-   int sblim;
-
-   if(gr_info->block_type == 2) {
-      if(!gr_info->mixed_block_flag) 
-        return;
-      sblim = 1; 
-   }
-   else {
-     sblim = gr_info->maxb-1;
-   }
-
-   /* 31 alias-reduction operations between each pair of sub-bands */
-   /* with 8 butterflies between each pair                         */
-
-   {
-     int sb;
-     real *xr1=(real *) xr[1];
-
-     for(sb=sblim;sb;sb--,xr1+=10) {
-       int ss;
-       real *cs=aa_cs,*ca=aa_ca;
-       real *xr2 = xr1;
-
-       for(ss=7;ss>=0;ss--)
-       {       /* upper and lower butterfly inputs */
-         register real bu = *--xr2,bd = *xr1;
-         *xr2   = (bu * (*cs)   ) - (bd * (*ca)   );
-         *xr1++ = (bd * (*cs++) ) + (bu * (*ca++) );
-       }
-     }
-  }
-}
-
-/* 
- This is an optimized DCT from Jeff Tsay's maplay 1.2+ package.
- Saved one multiplication by doing the 'twiddle factor' stuff
- together with the window mul. (MH)
-
- This uses Byeong Gi Lee's Fast Cosine Transform algorithm, but the
- 9 point IDCT needs to be reduced further. Unfortunately, I don't
- know how to do that, because 9 is not an even number. - Jeff.
-
- ****************************************************************
-
- 9 Point Inverse Discrete Cosine Transform
-
- This piece of code is Copyright 1997 Mikko Tommila and is freely usable
- by anybody. The algorithm itself is of course in the public domain.
-
- Again derived heuristically from the 9-point WFTA.
-
- The algorithm is optimized (?) for speed, not for small rounding errors or
- good readability.
-
- 36 additions, 11 multiplications
-
- Again this is very likely sub-optimal.
-
- The code is optimized to use a minimum number of temporary variables,
- so it should compile quite well even on 8-register Intel x86 processors.
- This makes the code quite obfuscated and very difficult to understand.
-
- References:
- [1] S. Winograd: "On Computing the Discrete Fourier Transform",
-     Mathematics of Computation, Volume 32, Number 141, January 1978,
-     Pages 175-199
-*/
-
-/*------------------------------------------------------------------*/
-/*                                                                  */
-/*    Function: Calculation of the inverse MDCT                     */
-/*                                                                  */
-/*------------------------------------------------------------------*/
-
-void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf)
-{
-#ifdef NEW_DCT9
-  real tmp[18];
-#endif
-
-  {
-    register real *in = inbuf;
-
-    in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
-    in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
-    in[11]+=in[10]; in[10]+=in[9];  in[9] +=in[8];
-    in[8] +=in[7];  in[7] +=in[6];  in[6] +=in[5];
-    in[5] +=in[4];  in[4] +=in[3];  in[3] +=in[2];
-    in[2] +=in[1];  in[1] +=in[0];
-
-    in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
-    in[9] +=in[7];  in[7] +=in[5];  in[5] +=in[3];  in[3] +=in[1];
-
-
-#ifdef NEW_DCT9
-#if 1
-    {
-     real t3;
-     { 
-      real t0, t1, t2;
-
-      t0 = COS6_2 * (in[8] + in[16] - in[4]);
-      t1 = COS6_2 * in[12];
-
-      t3 = in[0];
-      t2 = t3 - t1 - t1;
-      tmp[1] = tmp[7] = t2 - t0;
-      tmp[4]          = t2 + t0 + t0;
-      t3 += t1;
-
-      t2 = COS6_1 * (in[10] + in[14] - in[2]);
-      tmp[1] -= t2;
-      tmp[7] += t2;
-     }
-     {
-      real t0, t1, t2;
-
-      t0 = cos9[0] * (in[4] + in[8] );
-      t1 = cos9[1] * (in[8] - in[16]);
-      t2 = cos9[2] * (in[4] + in[16]);
-
-      tmp[2] = tmp[6] = t3 - t0      - t2;
-      tmp[0] = tmp[8] = t3 + t0 + t1;
-      tmp[3] = tmp[5] = t3      - t1 + t2;
-     }
-    }
-    {
-      real t1, t2, t3;
-
-      t1 = cos18[0] * (in[2]  + in[10]);
-      t2 = cos18[1] * (in[10] - in[14]);
-      t3 = COS6_1   * in[6];
-
-      {
-        real t0 = t1 + t2 + t3;
-        tmp[0] += t0;
-        tmp[8] -= t0;
-      }
-
-      t2 -= t3;
-      t1 -= t3;
-
-      t3 = cos18[2] * (in[2] + in[14]);
-
-      t1 += t3;
-      tmp[3] += t1;
-      tmp[5] -= t1;
-
-      t2 -= t3;
-      tmp[2] += t2;
-      tmp[6] -= t2;
-    }
-
-#else
-    {
-      real t0, t1, t2, t3, t4, t5, t6, t7;
-
-      t1 = COS6_2 * in[12];
-      t2 = COS6_2 * (in[8] + in[16] - in[4]);
-
-      t3 = in[0] + t1;
-      t4 = in[0] - t1 - t1;
-      t5     = t4 - t2;
-      tmp[4] = t4 + t2 + t2;
-
-      t0 = cos9[0] * (in[4] + in[8]);
-      t1 = cos9[1] * (in[8] - in[16]);
-
-      t2 = cos9[2] * (in[4] + in[16]);
-
-      t6 = t3 - t0 - t2;
-      t0 += t3 + t1;
-      t3 += t2 - t1;
-
-      t2 = cos18[0] * (in[2]  + in[10]);
-      t4 = cos18[1] * (in[10] - in[14]);
-      t7 = COS6_1 * in[6];
-
-      t1 = t2 + t4 + t7;
-      tmp[0] = t0 + t1;
-      tmp[8] = t0 - t1;
-      t1 = cos18[2] * (in[2] + in[14]);
-      t2 += t1 - t7;
-
-      tmp[3] = t3 + t2;
-      t0 = COS6_1 * (in[10] + in[14] - in[2]);
-      tmp[5] = t3 - t2;
-
-      t4 -= t1 + t7;
-
-      tmp[1] = t5 - t0;
-      tmp[7] = t5 + t0;
-      tmp[2] = t6 + t4;
-      tmp[6] = t6 - t4;
-    }
-#endif
-
-    {
-      real t0, t1, t2, t3, t4, t5, t6, t7;
-
-      t1 = COS6_2 * in[13];
-      t2 = COS6_2 * (in[9] + in[17] - in[5]);
-
-      t3 = in[1] + t1;
-      t4 = in[1] - t1 - t1;
-      t5 = t4 - t2;
-
-      t0 = cos9[0] * (in[5] + in[9]);
-      t1 = cos9[1] * (in[9] - in[17]);
-
-      tmp[13] = (t4 + t2 + t2) * tfcos36[17-13];
-      t2 = cos9[2] * (in[5] + in[17]);
-
-      t6 = t3 - t0 - t2;
-      t0 += t3 + t1;
-      t3 += t2 - t1;
-
-      t2 = cos18[0] * (in[3]  + in[11]);
-      t4 = cos18[1] * (in[11] - in[15]);
-      t7 = COS6_1 * in[7];
-
-      t1 = t2 + t4 + t7;
-      tmp[17] = (t0 + t1) * tfcos36[17-17];
-      tmp[9]  = (t0 - t1) * tfcos36[17-9];
-      t1 = cos18[2] * (in[3] + in[15]);
-      t2 += t1 - t7;
-
-      tmp[14] = (t3 + t2) * tfcos36[17-14];
-      t0 = COS6_1 * (in[11] + in[15] - in[3]);
-      tmp[12] = (t3 - t2) * tfcos36[17-12];
-
-      t4 -= t1 + t7;
-
-      tmp[16] = (t5 - t0) * tfcos36[17-16];
-      tmp[10] = (t5 + t0) * tfcos36[17-10];
-      tmp[15] = (t6 + t4) * tfcos36[17-15];
-      tmp[11] = (t6 - t4) * tfcos36[17-11];
-   }
-
-#define MACRO(v) { \
-    real tmpval; \
-    tmpval = tmp[(v)] + tmp[17-(v)]; \
-    out2[9+(v)] = tmpval * w[27+(v)]; \
-    out2[8-(v)] = tmpval * w[26-(v)]; \
-    tmpval = tmp[(v)] - tmp[17-(v)]; \
-    ts[SBLIMIT*(8-(v))] = out1[8-(v)] + tmpval * w[8-(v)]; \
-    ts[SBLIMIT*(9+(v))] = out1[9+(v)] + tmpval * w[9+(v)]; }
-
-{
-   register real *out2 = o2;
-   register real *w = wintab;
-   register real *out1 = o1;
-   register real *ts = tsbuf;
-
-   MACRO(0);
-   MACRO(1);
-   MACRO(2);
-   MACRO(3);
-   MACRO(4);
-   MACRO(5);
-   MACRO(6);
-   MACRO(7);
-   MACRO(8);
-}
-
-#else
-
-  {
-
-#define MACRO0(v) { \
-    real tmp; \
-    out2[9+(v)] = (tmp = sum0 + sum1) * w[27+(v)]; \
-    out2[8-(v)] = tmp * w[26-(v)];  } \
-    sum0 -= sum1; \
-    ts[SBLIMIT*(8-(v))] = out1[8-(v)] + sum0 * w[8-(v)]; \
-    ts[SBLIMIT*(9+(v))] = out1[9+(v)] + sum0 * w[9+(v)]; 
-#define MACRO1(v) { \
-    real sum0,sum1; \
-    sum0 = tmp1a + tmp2a; \
-    sum1 = (tmp1b + tmp2b) * tfcos36[(v)]; \
-    MACRO0(v); }
-#define MACRO2(v) { \
-    real sum0,sum1; \
-    sum0 = tmp2a - tmp1a; \
-    sum1 = (tmp2b - tmp1b) * tfcos36[(v)]; \
-    MACRO0(v); }
-
-    register const real *c = COS9;
-    register real *out2 = o2;
-    register real *w = wintab;
-    register real *out1 = o1;
-    register real *ts = tsbuf;
-
-    real ta33,ta66,tb33,tb66;
-
-    ta33 = in[2*3+0] * c[3];
-    ta66 = in[2*6+0] * c[6] + in[2*0+0];
-    tb33 = in[2*3+1] * c[3];
-    tb66 = in[2*6+1] * c[6] + in[2*0+1];
-
-    { 
-      real tmp1a,tmp2a,tmp1b,tmp2b;
-      tmp1a = in[2*1+0] * c[1] + ta33 + in[2*5+0] * c[5] + in[2*7+0] * c[7];
-      tmp1b = in[2*1+1] * c[1] + tb33 + in[2*5+1] * c[5] + in[2*7+1] * c[7];
-      tmp2a = in[2*2+0] * c[2] + in[2*4+0] * c[4] + ta66 + in[2*8+0] * c[8];
-      tmp2b = in[2*2+1] * c[2] + in[2*4+1] * c[4] + tb66 + in[2*8+1] * c[8];
-
-      MACRO1(0);
-      MACRO2(8);
-    }
-
-    {
-      real tmp1a,tmp2a,tmp1b,tmp2b;
-      tmp1a = ( in[2*1+0] - in[2*5+0] - in[2*7+0] ) * c[3];
-      tmp1b = ( in[2*1+1] - in[2*5+1] - in[2*7+1] ) * c[3];
-      tmp2a = ( in[2*2+0] - in[2*4+0] - in[2*8+0] ) * c[6] - in[2*6+0] + in[2*0+0];
-      tmp2b = ( in[2*2+1] - in[2*4+1] - in[2*8+1] ) * c[6] - in[2*6+1] + in[2*0+1];
-
-      MACRO1(1);
-      MACRO2(7);
-    }
-
-    {
-      real tmp1a,tmp2a,tmp1b,tmp2b;
-      tmp1a =   in[2*1+0] * c[5] - ta33 - in[2*5+0] * c[7] + in[2*7+0] * c[1];
-      tmp1b =   in[2*1+1] * c[5] - tb33 - in[2*5+1] * c[7] + in[2*7+1] * c[1];
-      tmp2a = - in[2*2+0] * c[8] - in[2*4+0] * c[2] + ta66 + in[2*8+0] * c[4];
-      tmp2b = - in[2*2+1] * c[8] - in[2*4+1] * c[2] + tb66 + in[2*8+1] * c[4];
-
-      MACRO1(2);
-      MACRO2(6);
-    }
-
-    {
-      real tmp1a,tmp2a,tmp1b,tmp2b;
-      tmp1a =   in[2*1+0] * c[7] - ta33 + in[2*5+0] * c[1] - in[2*7+0] * c[5];
-      tmp1b =   in[2*1+1] * c[7] - tb33 + in[2*5+1] * c[1] - in[2*7+1] * c[5];
-      tmp2a = - in[2*2+0] * c[4] + in[2*4+0] * c[8] + ta66 - in[2*8+0] * c[2];
-      tmp2b = - in[2*2+1] * c[4] + in[2*4+1] * c[8] + tb66 - in[2*8+1] * c[2];
-
-      MACRO1(3);
-      MACRO2(5);
-    }
-
-    {
-        real sum0,sum1;
-        sum0 =  in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0];
-        sum1 = (in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ) * tfcos36[4];
-        MACRO0(4);
-    }
-  }
-#endif
-
-  }
-}
-
-/*
- * new DCT12
- */
-static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,register real *ts)
-{
-#define DCT12_PART1 \
-             in5 = in[5*3];  \
-     in5 += (in4 = in[4*3]); \
-     in4 += (in3 = in[3*3]); \
-     in3 += (in2 = in[2*3]); \
-     in2 += (in1 = in[1*3]); \
-     in1 += (in0 = in[0*3]); \
-                             \
-     in5 += in3; in3 += in1; \
-                             \
-     in2 *= COS6_1; \
-     in3 *= COS6_1; \
-
-#define DCT12_PART2 \
-     in0 += in4 * COS6_2; \
-                          \
-     in4 = in0 + in2;     \
-     in0 -= in2;          \
-                          \
-     in1 += in5 * COS6_2; \
-                          \
-     in5 = (in1 + in3) * tfcos12[0]; \
-     in1 = (in1 - in3) * tfcos12[2]; \
-                         \
-     in3 = in4 + in5;    \
-     in4 -= in5;         \
-                         \
-     in2 = in0 + in1;    \
-     in0 -= in1;
-
-
-   {
-     real in0,in1,in2,in3,in4,in5;
-     register real *out1 = rawout1;
-     ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
-     ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
- 
-     DCT12_PART1
-
-     {
-       real tmp0,tmp1 = (in0 - in4);
-       {
-         real tmp2 = (in1 - in5) * tfcos12[1];
-         tmp0 = tmp1 + tmp2;
-         tmp1 -= tmp2;
-       }
-       ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1];
-       ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1];
-       ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1];
-       ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1];
-     }
-
-     DCT12_PART2
-
-     ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0];
-     ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0];
-     ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2];
-     ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2];
-
-     ts[(6+0)*SBLIMIT]  = out1[6+0] + in0 * wi[0];
-     ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0];
-     ts[(6+2)*SBLIMIT]  = out1[6+2] + in4 * wi[2];
-     ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2];
-  }
-
-  in++;
-
-  {
-     real in0,in1,in2,in3,in4,in5;
-     register real *out2 = rawout2;
- 
-     DCT12_PART1
-
-     {
-       real tmp0,tmp1 = (in0 - in4);
-       {
-         real tmp2 = (in1 - in5) * tfcos12[1];
-         tmp0 = tmp1 + tmp2;
-         tmp1 -= tmp2;
-       }
-       out2[5-1] = tmp0 * wi[11-1];
-       out2[0+1] = tmp0 * wi[6+1];
-       ts[(12+1)*SBLIMIT] += tmp1 * wi[1];
-       ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1];
-     }
-
-     DCT12_PART2
-
-     out2[5-0] = in2 * wi[11-0];
-     out2[0+0] = in2 * wi[6+0];
-     out2[0+2] = in3 * wi[6+2];
-     out2[5-2] = in3 * wi[11-2];
-
-     ts[(12+0)*SBLIMIT] += in0 * wi[0];
-     ts[(17-0)*SBLIMIT] += in0 * wi[5-0];
-     ts[(12+2)*SBLIMIT] += in4 * wi[2];
-     ts[(17-2)*SBLIMIT] += in4 * wi[5-2];
-  }
-
-  in++; 
-
-  {
-     real in0,in1,in2,in3,in4,in5;
-     register real *out2 = rawout2;
-     out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
-
-     DCT12_PART1
-
-     {
-       real tmp0,tmp1 = (in0 - in4);
-       {
-         real tmp2 = (in1 - in5) * tfcos12[1];
-         tmp0 = tmp1 + tmp2;
-         tmp1 -= tmp2;
-       }
-       out2[11-1] = tmp0 * wi[11-1];
-       out2[6 +1] = tmp0 * wi[6+1];
-       out2[0+1] += tmp1 * wi[1];
-       out2[5-1] += tmp1 * wi[5-1];
-     }
-
-     DCT12_PART2
-
-     out2[11-0] = in2 * wi[11-0];
-     out2[6 +0] = in2 * wi[6+0];
-     out2[6 +2] = in3 * wi[6+2];
-     out2[11-2] = in3 * wi[11-2];
-
-     out2[0+0] += in0 * wi[0];
-     out2[5-0] += in0 * wi[5-0];
-     out2[0+2] += in4 * wi[2];
-     out2[5-2] += in4 * wi[5-2];
-  }
-}
-
-/*
- * III_hybrid
- */
-static void III_hybrid(struct mpstr *mp,real fsIn[SBLIMIT][SSLIMIT],real tsOut[SSLIMIT][SBLIMIT],
-   int ch,struct gr_info_s *gr_info,struct frame *fr)
-{
-/*
-   static real block[2][2][SBLIMIT*SSLIMIT] = { { { 0, } } };
-   static int blc[2]={0,0};
- */
-
-   real *tspnt = (real *) tsOut;
-   real *rawout1,*rawout2;
-   int bt,sb = 0;
-
-   {
-     int b = mp->hybrid_blc[ch];
-     rawout1=mp->hybrid_block[b][ch];
-     b=-b+1;
-     rawout2=mp->hybrid_block[b][ch];
-     mp->hybrid_blc[ch] = b;
-   }
-  
-   if(gr_info->mixed_block_flag) {
-     sb = 2;
-#ifdef USE_3DNOW
-     (fr->dct36)(fsIn[0],rawout1,rawout2,win[0],tspnt);
-     (fr->dct36)(fsIn[1],rawout1+18,rawout2+18,win1[0],tspnt+1);
-#else
-     dct36(fsIn[0],rawout1,rawout2,win[0],tspnt);
-     dct36(fsIn[1],rawout1+18,rawout2+18,win1[0],tspnt+1);
-#endif
-     rawout1 += 36; rawout2 += 36; tspnt += 2;
-   }
- 
-   bt = gr_info->block_type;
-   if(bt == 2) {
-     for (; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) {
-       dct12(fsIn[sb]  ,rawout1   ,rawout2   ,win[2] ,tspnt);
-       dct12(fsIn[sb+1],rawout1+18,rawout2+18,win1[2],tspnt+1);
-     }
-   }
-   else {
-     for (; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36) {
-#ifdef USE_3DNOW
-       (fr->dct36)(fsIn[sb],rawout1,rawout2,win[bt],tspnt);
-       (fr->dct36)(fsIn[sb+1],rawout1+18,rawout2+18,win1[bt],tspnt+1);
-#else
-       dct36(fsIn[sb],rawout1,rawout2,win[bt],tspnt);
-       dct36(fsIn[sb+1],rawout1+18,rawout2+18,win1[bt],tspnt+1);
-#endif
-     }
-   }
-
-   for(;sb<SBLIMIT;sb++,tspnt++) {
-     int i;
-     for(i=0;i<SSLIMIT;i++) {
-       tspnt[i*SBLIMIT] = *rawout1++;
-       *rawout2++ = 0.0;
-     }
-   }
-}
-
-/*
- * main layer3 handler
- */
-int do_layer3(struct mpstr *mp,struct frame *fr,int outmode,struct audio_info_struct *ai)
-{
-  int gr, ch, ss,clip=0;
-  int scalefacs[2][39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */
-  struct III_sideinfo sideinfo;
-  int stereo = fr->stereo;
-  int single = fr->single;
-  int ms_stereo,i_stereo;
-  int sfreq = fr->sampling_frequency;
-  int stereo1,granules;
-
-  if(stereo == 1) { /* stream is mono */
-    stereo1 = 1;
-    single = 0;
-  }
-  else if(single >= 0) /* stream is stereo, but force to mono */
-    stereo1 = 1;
-  else
-    stereo1 = 2;
-
-  if(fr->mode == MPG_MD_JOINT_STEREO) {
-    ms_stereo = (fr->mode_ext & 0x2)>>1;
-    i_stereo  = fr->mode_ext & 0x1;
-  }
-  else
-    ms_stereo = i_stereo = 0;
-
-  granules = fr->lsf ? 1 : 2;
-  if(!III_get_side_info(&sideinfo,stereo,ms_stereo,sfreq,single,fr->lsf))
-    return -1;
-
-  set_pointer(sideinfo.main_data_begin);
-
-  for (gr=0;gr<granules;gr++) {
-    real hybridIn [2][SBLIMIT][SSLIMIT];
-    real hybridOut[2][SSLIMIT][SBLIMIT];
-
-    {
-      struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
-      long part2bits;
-      if(fr->lsf)
-        part2bits = III_get_scale_factors_2(scalefacs[0],gr_info,0);
-      else
-        part2bits = III_get_scale_factors_1(scalefacs[0],gr_info);
-
-      if(III_dequantize_sample(hybridIn[0], scalefacs[0],gr_info,sfreq,part2bits))
-        return clip;
-    }
-
-    if(stereo == 2) {
-      struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
-      long part2bits;
-      if(fr->lsf) 
-        part2bits = III_get_scale_factors_2(scalefacs[1],gr_info,i_stereo);
-      else
-        part2bits = III_get_scale_factors_1(scalefacs[1],gr_info);
-
-
-      if(III_dequantize_sample(hybridIn[1],scalefacs[1],gr_info,sfreq,part2bits))
-          return clip;
-
-
-      if(ms_stereo) {
-        int i;
-        int maxb = sideinfo.ch[0].gr[gr].maxb;
-        if(sideinfo.ch[1].gr[gr].maxb > maxb)
-            maxb = sideinfo.ch[1].gr[gr].maxb;
-        for(i=0;i<SSLIMIT*maxb;i++) {
-          real tmp0 = ((real *)hybridIn[0])[i];
-          real tmp1 = ((real *)hybridIn[1])[i];
-          ((real *)hybridIn[0])[i] = tmp0 + tmp1;
-          ((real *)hybridIn[1])[i] = tmp0 - tmp1;
-        }
-      }
-
-      if(i_stereo)
-        III_i_stereo(hybridIn,scalefacs[1],gr_info,sfreq,ms_stereo,fr->lsf);
-
-      if(ms_stereo || i_stereo || (single == 3) ) {
-        if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb) 
-          sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
-        else
-          gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
-      }
-
-      switch(single) {
-        case 3:
-          {
-            register int i;
-            register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
-            for(i=0;i<SSLIMIT*gr_info->maxb;i++,in0++)
-              *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */ 
-          }
-          break;
-        case 1:
-          {
-            register int i;
-            register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
-            for(i=0;i<SSLIMIT*gr_info->maxb;i++)
-              *in0++ = *in1++;
-          }
-          break;
-      }
-    }
-
-    for(ch=0;ch<stereo1;ch++) {
-      struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
-      III_antialias(hybridIn[ch],gr_info);
-      III_hybrid(mp,hybridIn[ch], hybridOut[ch], ch,gr_info,fr);
-    }
-
-#ifdef I486_OPT
-    if (fr->synth != synth_1to1 || single >= 0) {
-#endif
-    for(ss=0;ss<SSLIMIT;ss++) {
-      if(single >= 0) {
-        clip += (fr->synth_mono)(hybridOut[0][ss],pcm_sample,&pcm_point);
-      }
-      else {
-        int p1 = pcm_point;
-        clip += (fr->synth)(hybridOut[0][ss],0,pcm_sample,&p1);
-        clip += (fr->synth)(hybridOut[1][ss],1,pcm_sample,&pcm_point);
-      }
-
-      if(pcm_point >= audiobufsize)
-        audio_flush(outmode,ai);
-    }
-#ifdef I486_OPT
-    } else {
-      /* Only stereo, 16 bits benefit from the 486 optimization. */
-      ss=0;
-      while (ss < SSLIMIT) {
-        int n;
-        n=(audiobufsize - pcm_point) / (2*2*32);
-        if (n > (SSLIMIT-ss)) n=SSLIMIT-ss;
-        
-        synth_1to1_486(hybridOut[0][ss],0,pcm_sample+pcm_point,n);
-        synth_1to1_486(hybridOut[1][ss],1,pcm_sample+pcm_point,n);
-        ss+=n;
-        pcm_point+=(2*2*32)*n;
-        
-        if(pcm_point >= audiobufsize)
-          audio_flush(outmode,ai);
-      }
-    }
-#endif
-  }
-  
-  return clip;
-}
-
-

+ 0 - 415
panda/src/mpg123/mpg123.h

@@ -1,415 +0,0 @@
-/*
- * mpg123 defines 
- * used source: musicout.h from mpegaudio package
- */
-
-#include        <stdio.h>
-#include        <string.h>
-#include        <signal.h>
-
-#ifndef WIN32
-#include        <sys/signal.h>
-#include        <unistd.h>
-#endif
-
-#include        <math.h>
-
-typedef unsigned char byte;
-
-#ifdef OS2
-#include <float.h>
-#endif
-
-#define MPG123_REMOTE
-#ifdef HPUX
-#define random rand
-#define srandom srand
-#endif
-
-#define FRONTEND_NONE     0
-#define FRONTEND_SAJBER   1
-#define FRONTEND_TK3PLAY  2
-#define FRONTEND_GENERIC  3
-
-#define SKIP_JUNK 1
-
-#ifdef _WIN32   /* Win32 Additions By Tony Million */
-# undef WIN32
-# define WIN32
-
-# define M_PI       3.14159265358979323846
-# define M_SQRT2    1.41421356237309504880
-# define REAL_IS_FLOAT
-# define NEW_DCT9
-
-# define random rand
-# define srandom srand
-
-# undef MPG123_REMOTE           /* Get rid of this stuff for Win32 */
-#endif
-
-#include "xfermem.h"
-
-#ifdef SUNOS
-#define memmove(dst,src,size) bcopy(src,dst,size)
-#endif
-
-#ifdef REAL_IS_FLOAT
-#  define real float
-#elif defined(REAL_IS_LONG_DOUBLE)
-#  define real long double
-#else
-#  define real double
-#endif
-
-#ifdef __GNUC__
-#ifndef INLINE
-#define INLINE inline
-#endif /* INLINE */
-#else
-#ifndef INLINE
-#define INLINE
-#endif /* INLINE */
-#endif
-
-#include "mpgaudio.h"
-
-/* AUDIOBUFSIZE = n*64 with n=1,2,3 ...  */
-#define     AUDIOBUFSIZE        16384
-
-#define         FALSE                   0
-#define         TRUE                    1
-
-#define         MAX_NAME_SIZE           81
-#define         SBLIMIT                 32
-#define         SCALE_BLOCK             12
-#define         SSLIMIT                 18
-
-#define         MPG_MD_STEREO           0
-#define         MPG_MD_JOINT_STEREO     1
-#define         MPG_MD_DUAL_CHANNEL     2
-#define         MPG_MD_MONO             3
-
-#define MAXFRAMESIZE 1792
-#define HDRCMPMASK 0xfffffd00
-
-#define MAXOUTBURST 32768
-
-/* Pre Shift fo 16 to 8 bit converter table */
-#define AUSHIFT (3)
-
-
-struct al_table 
-{
-  short bits;
-  short d;
-};
-
-struct frame {
-    struct al_table *alloc;
-    int (*synth)(real *,int,unsigned char *,int *);
-    int (*synth_mono)(real *,unsigned char *,int *);
-#ifdef USE_3DNOW
-    void (*dct36)(real *,real *,real *,real *,real *);
-#endif
-    int stereo;
-    int jsbound;
-    int single;
-    int II_sblimit;
-    int down_sample_sblimit;
-    int lsf;
-    int mpeg25;
-    int down_sample;
-    int header_change;
-    int lay;
-    int error_protection;
-    int bitrate_index;
-    int sampling_frequency;
-    int padding;
-    int extension;
-    int mode;
-    int mode_ext;
-    int copyright;
-    int original;
-    int emphasis;
-    int framesize; /* computed framesize */
-};
-
-#define VBR_TOC_SIZE        100
-
-#define VBR_FRAMES_FLAG     0x0001
-#define VBR_BYTES_FLAG      0x0002
-#define VBR_TOC_FLAG        0x0004
-#define VBR_SCALE_FLAG      0x0008
-
-struct vbrHeader {
-    unsigned long flags;
-    unsigned long frames;
-    unsigned long bytes;
-    unsigned long scale;
-    unsigned char toc[100];
-};
-
-struct parameter {
-    int aggressive; /* renice to max. priority */
-    int shuffle;    /* shuffle/random play */
-    int remote; /* remote operation */
-    int outmode;    /* where to out the decoded sampels */
-    int quiet;  /* shut up! */
-    int xterm_title;  /* print filename in xterm title */
-    long usebuffer; /* second level buffer size */
-    int tryresync;  /* resync stream after error */
-    int verbose;    /* verbose level */
-#ifdef TERM_CONTROL
-    int term_ctrl;
-#endif
-    int force_mono;
-    int force_stereo;
-    int force_8bit;
-    long force_rate;
-    int down_sample;
-    int checkrange;
-    long doublespeed;
-    long halfspeed;
-    int force_reopen;
-    int stat_3dnow; /* automatic/force/force-off 3DNow! optimized code */
-    int test_3dnow;
-    long realtime;
-    char filename[256];
-    char *esdserver;
-    char *equalfile;
-    int  enable_equalizer;
-    long outscale;
-    long startFrame;
-};
-
-struct bitstream_info {
-  int bitindex;
-  unsigned char *wordpointer;
-};
-
-struct mpstr {
-  int bsize;
-  int framesize;
-  int fsizeold;
-  struct frame fr;
- /* int (*do_layer)(struct mpstr *,struct frame *fr,int,struct audio_info_struct *); */
-  unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */
-  real hybrid_block[2][2][SBLIMIT*SSLIMIT];
-  int  hybrid_blc[2];
-  unsigned long header;
-  int bsnum;
-  real synth_buffs[2][2][0x110];
-  int  synth_bo;
-
-  struct bitstream_info bsi;
-};
-
-extern struct bitstream_info bsi;
-
-struct reader {
-  int  (*init)(struct reader *);
-  void (*close)(struct reader *);
-  int  (*head_read)(struct reader *,unsigned long *newhead);
-  int  (*head_shift)(struct reader *,unsigned long *head);
-  int  (*skip_bytes)(struct reader *,int len);
-  int  (*read_frame_body)(struct reader *,unsigned char *,int size);
-  int  (*back_bytes)(struct reader *,int bytes);
-  int  (*back_frame)(struct reader *,struct frame *,int num);
-  long (*tell)(struct reader *);
-  void (*rewind)(struct reader *);
-  long filelen;
-  long filepos;
-  int  filept;
-  int  flags;
-  unsigned char id3buf[128];
-};
-#define READER_FD_OPENED 0x1
-#define READER_ID3TAG    0x2
-
-extern struct reader *rd,readers[];
-
-extern int halfspeed;
-extern int buffer_fd[2];
-extern txfermem *buffermem;
-extern char *prgName, *prgVersion;
-
-#ifndef NOXFERMEM
-extern void buffer_loop(struct audio_info_struct *ai,sigset_t *oldsigset);
-#endif
-
-
-/* ------ Declarations from "httpget.c" ------ */
-
-extern char *proxyurl;
-extern unsigned long proxyip;
-extern int http_open (char *url);
-extern char *httpauth;
-
-/* ------ Declarations from "common.c" ------ */
-
-extern void audio_flush(int, struct audio_info_struct *);
-extern void (*catchsignal(int signum, void(*handler)()))();
-
-extern void print_header(struct frame *);
-extern void print_header_compact(struct frame *);
-extern void print_id3_tag(unsigned char *buf);
-
-extern int split_dir_file(const char *path, char **dname, char **fname);
-
-extern unsigned int   get1bit(struct bitstream_info *);
-extern unsigned int   getbits(struct bitstream_info *,int);
-extern unsigned int   getbits_fast(struct bitstream_info *,int);
-extern void           backbits(struct bitstream_info *,int);
-extern int            getbitoffset(struct bitstream_info *);
-extern int            getbyte(struct bitstream_info *);
-
-extern void set_pointer(long);
-
-extern unsigned char *pcm_sample;
-extern int pcm_point;
-extern int audiobufsize;
-
-extern int OutputDescriptor;
-
-struct gr_info_s {
-      int scfsi;
-      unsigned part2_3_length;
-      unsigned big_values;
-      unsigned scalefac_compress;
-      unsigned block_type;
-      unsigned mixed_block_flag;
-      unsigned table_select[3];
-      unsigned subblock_gain[3];
-      unsigned maxband[3];
-      unsigned maxbandl;
-      unsigned maxb;
-      unsigned region1start;
-      unsigned region2start;
-      unsigned preflag;
-      unsigned scalefac_scale;
-      unsigned count1table_select;
-      real *full_gain[3];
-      real *pow2gain;
-};
-
-struct III_sideinfo
-{
-  unsigned main_data_begin;
-  unsigned private_bits;
-  struct {
-    struct gr_info_s gr[2];
-  } ch[2];
-};
-
-extern struct reader *open_stream(char *,int fd);
-extern void read_frame_init (void);
-extern int read_frame(struct frame *fr);
-extern int play_frame(struct mpstr *mp,int init,struct frame *fr);
-extern int do_layer3(struct mpstr *mp,struct frame *fr,int,struct audio_info_struct *);
-extern int do_layer2(struct mpstr *mp,struct frame *fr,int,struct audio_info_struct *);
-extern int do_layer1(struct mpstr *mp,struct frame *fr,int,struct audio_info_struct *);
-extern void do_equalizer(real *bandPtr,int channel);
-
-#ifdef PENTIUM_OPT
-extern int synth_1to1_pent (real *,int,unsigned char *);
-#endif
-extern int synth_1to1 (real *,int,unsigned char *,int *);
-extern int synth_1to1_8bit (real *,int,unsigned char *,int *);
-extern int synth_1to1_mono (real *,unsigned char *,int *);
-extern int synth_1to1_mono2stereo (real *,unsigned char *,int *);
-extern int synth_1to1_8bit_mono (real *,unsigned char *,int *);
-extern int synth_1to1_8bit_mono2stereo (real *,unsigned char *,int *);
-
-extern int synth_2to1 (real *,int,unsigned char *,int *);
-extern int synth_2to1_8bit (real *,int,unsigned char *,int *);
-extern int synth_2to1_mono (real *,unsigned char *,int *);
-extern int synth_2to1_mono2stereo (real *,unsigned char *,int *);
-extern int synth_2to1_8bit_mono (real *,unsigned char *,int *);
-extern int synth_2to1_8bit_mono2stereo (real *,unsigned char *,int *);
-
-extern int synth_4to1 (real *,int,unsigned char *,int *);
-extern int synth_4to1_8bit (real *,int,unsigned char *,int *);
-extern int synth_4to1_mono (real *,unsigned char *,int *);
-extern int synth_4to1_mono2stereo (real *,unsigned char *,int *);
-extern int synth_4to1_8bit_mono (real *,unsigned char *,int *);
-extern int synth_4to1_8bit_mono2stereo (real *,unsigned char *,int *);
-
-extern int synth_ntom (real *,int,unsigned char *,int *);
-extern int synth_ntom_8bit (real *,int,unsigned char *,int *);
-extern int synth_ntom_mono (real *,unsigned char *,int *);
-extern int synth_ntom_mono2stereo (real *,unsigned char *,int *);
-extern int synth_ntom_8bit_mono (real *,unsigned char *,int *);
-extern int synth_ntom_8bit_mono2stereo (real *,unsigned char *,int *);
-
-extern void rewindNbits(int bits);
-extern int  hsstell(void);
-extern void set_pointer(long);
-extern void huffman_decoder(int ,int *);
-extern void huffman_count1(int,int *);
-extern void print_stat(struct frame *fr,int no,long buffsize,struct audio_info_struct *ai);
-extern int get_songlen(struct frame *fr,int no);
-
-extern void init_layer3(int);
-extern void init_layer2(void);
-extern void make_decode_tables(long scale);
-extern void make_conv16to8_table(int);
-extern void dct64(real *,real *,real *);
-
-#ifdef USE_MMX
-extern void dct64_MMX(short *a,short *b,real *c);
-extern int synth_1to1_MMX(real *, int, short *, short *, int *);
-#endif
-
-extern void synth_ntom_set_step(long,long);
-
-extern void control_generic(struct mpstr *,struct frame *fr);
-extern void control_sajber(struct mpstr *,struct frame *fr);
-extern void control_tk3play(struct mpstr *,struct frame *fr);
-
-extern int cdr_open(struct audio_info_struct *ai, char *ame);
-extern int au_open(struct audio_info_struct *ai, char *name);
-extern int wav_open(struct audio_info_struct *ai, char *wavfilename);
-extern int wav_write(unsigned char *buf,int len);
-extern int cdr_close(void);
-extern int au_close(void);
-extern int wav_close(void);
-
-extern int au_open(struct audio_info_struct *ai, char *aufilename);
-extern int au_close(void);
-
-extern int cdr_open(struct audio_info_struct *ai, char *cdrfilename);
-extern int cdr_close(void);
-
-extern int getVBRHeader(struct vbrHeader *head,unsigned char *buf, 
-    struct frame *fr);
-
-
-extern unsigned char *conv16to8;
-extern long freqs[9];
-extern real muls[27][64];
-extern real decwin[512+32];
-#ifndef USE_MMX
-extern real *pnts[5];
-#endif
-
-extern real equalizer[2][32];
-extern real equalizer_sum[2][32];
-extern int equalizer_cnt;
-
-extern struct audio_name audio_val2name[];
-
-extern struct parameter param;
-
-/* 486 optimizations */
-#define FIR_BUFFER_SIZE  128
-extern void dct64_486(int *a,int *b,real *c);
-extern int synth_1to1_486(real *bandPtr,int channel,unsigned char *out,int nb_blocks);
-
-/* 3DNow! optimizations */
-#ifdef USE_3DNOW
-extern int getcpuflags(void);
-extern void dct36(real *,real *,real *,real *,real *);
-extern void dct36_3dnow(real *,real *,real *,real *,real *);
-extern int synth_1to1_3dnow(real *,int,unsigned char *,int *);
-#endif

+ 0 - 89
panda/src/mpg123/mpgaudio.h

@@ -1,89 +0,0 @@
-/* 
- * Audio 'LIB' defines
- */
-
-#define AUDIO_OUT_HEADPHONES       0x01
-#define AUDIO_OUT_INTERNAL_SPEAKER 0x02
-#define AUDIO_OUT_LINE_OUT         0x04
-
-enum { DECODE_TEST, DECODE_AUDIO, DECODE_FILE, DECODE_BUFFER, DECODE_WAV,
-    DECODE_AU,DECODE_CDR,DECODE_AUDIOFILE };
-
-#define AUDIO_FORMAT_MASK     0x100
-#define AUDIO_FORMAT_16       0x100
-#define AUDIO_FORMAT_8        0x000
-
-#define AUDIO_FORMAT_SIGNED_16    0x110
-#define AUDIO_FORMAT_UNSIGNED_16  0x120
-#define AUDIO_FORMAT_UNSIGNED_8   0x1
-#define AUDIO_FORMAT_SIGNED_8     0x2
-#define AUDIO_FORMAT_ULAW_8       0x4
-#define AUDIO_FORMAT_ALAW_8       0x8
-
-/* 3% rate tolerance */
-#define AUDIO_RATE_TOLERANCE      3
-
-#if 0
-#if defined(HPUX) || defined(SUNOS) || defined(SOLARIS) || defined(OSS) || defined(__NetBSD__) || defined(SPARCLINUX) || defined(__FreeBSD__)
-#endif
-#endif
-
-#define AUDIO_USES_FD
-
-#ifdef SGI
-/* #include <audio.h> */
-#include <dmedia/audio.h>
-#endif
-
-
-#ifdef ALSA
-#include <sys/asoundlib.h>
-#endif
-
-struct audio_info_struct
-{
-#ifdef AUDIO_USES_FD
-  int fn; /* filenumber */
-#endif
-#ifdef SGI
-  ALconfig config;
-  ALport port;
-#endif
-  long rate;
-  long gain;
-  int output;
-#ifdef ALSA
-  snd_pcm_t *handle;
-  snd_pcm_format_t alsa_format;
-#endif
-  char *device;
-  int channels;
-  int format;
-  int private1;
-  void *private2;
-};
-
-struct audio_name {
-  int  val;
-  char *name;
-  char *sname;
-};
-
-extern void audio_capabilities(struct audio_info_struct *);
-extern void audio_fit_capabilities(struct audio_info_struct *ai,int c,int r);
-
-extern char *audio_encoding_name(int format);
-
-extern int audio_play_samples(struct audio_info_struct *,unsigned char *,int);
-extern int audio_open(struct audio_info_struct *);
-extern int audio_reset_parameters(struct audio_info_struct *);
-extern int audio_rate_best_match(struct audio_info_struct *ai);
-extern int audio_set_rate(struct audio_info_struct *);
-extern int audio_set_format(struct audio_info_struct *);
-extern int audio_get_formats(struct audio_info_struct *);
-extern int audio_set_channels(struct audio_info_struct *);
-extern int audio_write_sample(struct audio_info_struct *,short *,int);
-extern int audio_close(struct audio_info_struct *);
-extern void audio_info_struct_init(struct audio_info_struct *);
-extern void audio_queueflush(struct audio_info_struct *ai);
-

+ 0 - 237
panda/src/mpg123/mpgbuffer.c

@@ -1,237 +0,0 @@
-/*
- *   buffer.c
- *
- *   Oliver Fromme  <[email protected]>
- *   Mon Apr 14 03:53:18 MET DST 1997
- */
-
-#include <stdlib.h>
-#include <errno.h>
-
-#include "mpg123.h"
-
-#ifdef WIN32
-#define SIGUSR1 0
-#define SIGCONT 0
-#define SIGSTOP 0
-#endif /* WIN32 */
-
-int outburst = MAXOUTBURST;
-int preload;
-
-static int intflag = FALSE;
-static int usr1flag = FALSE;
-
-static void catch_interrupt (void)
-{
-    intflag = TRUE;
-}
-
-static void catch_usr1 (void)
-{
-    usr1flag = TRUE;
-}
-
-/* Interfaces to writer process */
-
-extern void buffer_sig(int signal, int block);
-
-void buffer_ignore_lowmem(void)
-{
-#ifndef NOXFERMEM
-    if(buffermem->wakeme[XF_READER])
-        xfermem_putcmd(buffermem->fd[XF_WRITER], XF_CMD_WAKEUP);
-#endif
-}
-
-void buffer_end(void)
-{
-#ifndef NOXFERMEM
-    xfermem_putcmd(buffermem->fd[XF_WRITER], XF_CMD_TERMINATE);
-#endif
-}
-
-void buffer_resync(void)
-{
-    buffer_sig(SIGINT, TRUE);
-}
-
-void buffer_reset(void)
-{
-    buffer_sig(SIGUSR1, TRUE);
-}
-
-void buffer_start(void)
-{
-    buffer_sig(SIGCONT, FALSE);
-}
-
-void buffer_stop(void)
-{
-    buffer_sig(SIGSTOP, FALSE);
-}
-
-extern int buffer_pid;
-
-void buffer_sig(int signal, int block)
-{
-
-#ifndef NOXFERMEM
-
-    kill(buffer_pid, signal);
-
-    if (!buffermem || !block)
-        return;
-
-    if(xfermem_block(XF_WRITER, buffermem) != XF_CMD_WAKEUP) 
-        perror("Could not resync/reset buffers");
-#endif
-
-    return;
-}
-
-#ifndef NOXFERMEM
-
-void buffer_loop(struct audio_info_struct *ai, sigset_t *oldsigset)
-{
-    int bytes;
-    int my_fd = buffermem->fd[XF_READER];
-    txfermem *xf = buffermem;
-    int done = FALSE;
-
-    catchsignal (SIGINT, catch_interrupt);
-    catchsignal (SIGUSR1, catch_usr1);
-    sigprocmask (SIG_SETMASK, oldsigset, NULL);
-    if (param.outmode == DECODE_AUDIO) {
-        if (audio_open(ai) < 0) {
-            perror("audio");
-            exit(1);
-        }
-    }
-
-    for (;;) {
-        if (intflag) {
-            intflag = FALSE;
-            if (param.outmode == DECODE_AUDIO)
-                audio_queueflush (ai);
-            xf->readindex = xf->freeindex;
-            if (xf->wakeme[XF_WRITER])
-                xfermem_putcmd(my_fd, XF_CMD_WAKEUP);
-        }
-        if (usr1flag) {
-            usr1flag = FALSE;
-            /*   close and re-open in order to flush
-             *   the device's internal buffer before
-             *   changing the sample rate.   [OF]
-             */
-            /* writer must block when sending SIGUSR1
-             * or we will lose all data processed 
-             * in the meantime! [dk]
-             */
-            xf->readindex = xf->freeindex;
-            /* We've nailed down the new starting location -
-             * writer is now safe to go on. [dk]
-             */
-            if (xf->wakeme[XF_WRITER])
-                xfermem_putcmd(my_fd, XF_CMD_WAKEUP);
-            if (param.outmode == DECODE_AUDIO) {
-                audio_close (ai);
-                ai->rate = xf->buf[0]; 
-                ai->channels = xf->buf[1]; 
-                ai->format = xf->buf[2];
-                if (audio_open(ai) < 0) {
-                    perror("audio");
-                    exit(1);
-                }
-            }
-        }
-        if ( (bytes = xfermem_get_usedspace(xf)) < outburst ) {
-            /* if we got a buffer underrun we first
-             * fill 1/8 of the buffer before continue/start
-             * playing */
-            preload = xf->size>>3;
-            if(preload < outburst)
-                preload = outburst;
-        }
-        if(bytes < preload) {
-            int cmd;
-            if (done && !bytes) { 
-                break;
-            }
-
-            if(!done) {
-
-                cmd = xfermem_block(XF_READER, xf);
-
-                switch(cmd) {
-
-                    /* More input pending. */
-                    case XF_CMD_WAKEUP_INFO:
-                        continue;
-                    /* Yes, we know buffer is low but
-                     * know we don't care.
-                     */
-                    case XF_CMD_WAKEUP:
-                        break;  /* Proceed playing. */
-                    case XF_CMD_TERMINATE:
-                        /* Proceed playing without 
-                         * blocking any further.
-                         */
-                        done=TRUE;
-                        break;
-                    case -1:
-                        if(errno==EINTR)
-                            continue;
-                        perror("Yuck! Error in buffer handling...");
-                        done = TRUE;
-                        xf->readindex = xf->freeindex;
-                        xfermem_putcmd(xf->fd[XF_READER], XF_CMD_TERMINATE);
-                        break;
-                    default:
-                        fprintf(stderr, "\nEh!? Received unknown command 0x%x in buffer process. Tell Daniel!\n", cmd);
-                }
-            }
-        }
-        preload = outburst; /* set preload to lower mark */
-        if (bytes > xf->size - xf->readindex)
-            bytes = xf->size - xf->readindex;
-        if (bytes > outburst)
-            bytes = outburst;
-
-        if (param.outmode == DECODE_FILE)
-            bytes = write(OutputDescriptor, xf->data + xf->readindex, bytes);
-        else if (param.outmode == DECODE_AUDIO)
-            bytes = audio_play_samples(ai,
-                (unsigned char *) (xf->data + xf->readindex), bytes);
-
-        if(bytes < 0) {
-            bytes = 0;
-            if(errno != EINTR) {
-                perror("Ouch ... error while writing audio data: ");
-                /*
-                 * done==TRUE tells writer process to stop
-                 * sending data. There might be some latency
-                 * involved when resetting readindex to 
-                 * freeindex so we might need more than one
-                 * cycle to terminate. (The number of cycles
-                 * should be finite unless I managed to mess
-                 * up something. ;-) [dk]
-                 */
-                done = TRUE;
-                xf->readindex = xf->freeindex;
-                xfermem_putcmd(xf->fd[XF_READER], XF_CMD_TERMINATE);
-            }
-        }
-
-        xf->readindex = (xf->readindex + bytes) % xf->size;
-        if (xf->wakeme[XF_WRITER])
-            xfermem_putcmd(my_fd, XF_CMD_WAKEUP);
-    }
-
-    if (param.outmode == DECODE_AUDIO)
-        audio_close (ai);
-}
-
-#endif
-
-/* EOF */

+ 0 - 13
panda/src/mpg123/mpgbuffer.h

@@ -1,13 +0,0 @@
-/*
- * Application specific interaction between main and buffer
- * process. This is much less generic than the functions in
- * xfermem so I chose to put it in buffer.[hc].
- * 01/28/99 [dk]
- */
-
-void buffer_ignore_lowmem(void);
-void buffer_end(void);
-void buffer_resync(void);
-void buffer_reset(void);
-void buffer_start(void);
-void buffer_stop(void);

+ 0 - 501
panda/src/mpg123/readers.c

@@ -1,501 +0,0 @@
-#include <stdlib.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifdef WIN32
-#include <io.h>
-#endif
-#include "mpg123.h"
-#include "mpgbuffer.h"
-#include "common.h"
-
-#ifdef READ_MMAP
-#include <sys/mman.h>
-#ifndef MAP_FAILED
-#define MAP_FAILED ( (void *) -1 )
-#endif
-#endif
-
-static int get_fileinfo(struct reader *,char *buf);
-
-
-/*******************************************************************
- * stream based operation
- */
-static int fullread(int fd,unsigned char *buf,int count)
-{
-    int ret,cnt=0;
-    while(cnt < count) {
-    ret = read(fd,buf+cnt,count-cnt);
-    if(ret < 0)
-        return ret;
-    if(ret == 0)
-        break;
-    cnt += ret;
-    } 
-
-    return cnt;
-}
-
-static int default_init(struct reader *rds)
-{
-    char buf[128];
-
-    rds->filepos = 0;
-    rds->filelen = get_fileinfo(rds,buf);
-  
-    if(rds->filelen > 0) {
-    if(!strncmp(buf,"TAG",3)) {
-        rds->flags |= READER_ID3TAG;
-        memcpy(rds->id3buf,buf,128);
-    }
-    }
-    return 0;
-}
-
-void stream_close(struct reader *rds)
-{
-    if (rds->flags & READER_FD_OPENED)
-        close(rds->filept);
-}
-
-/**************************************** 
- * HACK,HACK,HACK: step back <num> frames 
- * can only work if the 'stream' isn't a real stream but a file
- */
-static int stream_back_bytes(struct reader *rds,int bytes)
-{
-    if(lseek(rds->filept,-bytes,SEEK_CUR) < 0)
-    return -1;
-    if(param.usebuffer)
-    buffer_resync();
-    return 0;
-}
-
-static int stream_back_frame(struct reader *rds,struct frame *fr,int num)
-{
-    long bytes;
-    unsigned char buf[4];
-    unsigned long newhead;
-
-    if(!firsthead)
-    return 0;
-
-    bytes = (fr->framesize+8)*(num+2);
-
-    /* Skipping back/forth requires a bit more work in buffered mode. 
-     * See mapped_back_frame(). 
-     */
-    if(param.usebuffer)
-    bytes += (long)(xfermem_get_usedspace(buffermem) /
-            (buffermem->buf[0] * buffermem->buf[1]
-             * (buffermem->buf[2] & AUDIO_FORMAT_MASK ?
-                16.0 : 8.0 ))
-            * (tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index] << 10));
-    /*
-      bytes += (long)(compute_buffer_offset(fr)*compute_bpf(fr));
-    */
-    if(lseek(rds->filept,-bytes,SEEK_CUR) < 0)
-    return -1;
-
-    if(fullread(rds->filept,buf,4) != 4)
-    return -1;
-
-    newhead = (buf[0]<<24) + (buf[1]<<16) + (buf[2]<<8) + buf[3];
-
-    while( (newhead & HDRCMPMASK) != (firsthead & HDRCMPMASK) ) {
-    if(fullread(rds->filept,buf,1) != 1)
-        return -1;
-    newhead <<= 8;
-    newhead |= buf[0];
-    newhead &= 0xffffffff;
-    }
-
-    if( lseek(rds->filept,-4,SEEK_CUR) < 0)
-    return -1;
-
-    read_frame(fr);
-    read_frame(fr);
-
-    if(fr->lay == 3) {
-    set_pointer(512);
-    }
-
-    if(param.usebuffer)
-    buffer_resync();
-
-    return 0;
-}
-
-static int stream_head_read(struct reader *rds,unsigned long *newhead)
-{
-    unsigned char hbuf[4];
-
-    if(fullread(rds->filept,hbuf,4) != 4)
-    return FALSE;
-  
-    *newhead = ((unsigned long) hbuf[0] << 24) |
-    ((unsigned long) hbuf[1] << 16) |
-    ((unsigned long) hbuf[2] << 8)  |
-    (unsigned long) hbuf[3];
-  
-    return TRUE;
-}
-
-static int stream_head_shift(struct reader *rds,unsigned long *head)
-{
-    unsigned char hbuf;
-
-    if(fullread(rds->filept,&hbuf,1) != 1)
-    return 0;
-    *head <<= 8;
-    *head |= hbuf;
-    *head &= 0xffffffff;
-    return 1;
-}
-
-static int stream_skip_bytes(struct reader *rds,int len)
-{
-    if (!param.usebuffer)
-    return lseek(rds->filept,len,SEEK_CUR);
-
-    else {
-
-    int ret = lseek(rds->filept,len,SEEK_CUR);
-    buffer_resync();
-    return ret;
-
-    }
-}
-
-static int stream_read_frame_body(struct reader *rds,unsigned char *buf,
-                  int size)
-{
-    long l;
-
-    if( (l=fullread(rds->filept,buf,size)) != size)
-    {
-        if(l <= 0)
-        return 0;
-        memset(buf+l,0,size-l);
-    }
-
-    return 1;
-}
-
-static long stream_tell(struct reader *rds)
-{
-    return lseek(rds->filept,0,SEEK_CUR);
-}
-
-static void stream_rewind(struct reader *rds)
-{
-    lseek(rds->filept,0,SEEK_SET);
-    if(param.usebuffer) 
-    buffer_resync();
-}
-
-/*
- * returns length of a file (if filept points to a file)
- * reads the last 128 bytes information into buffer
- */
-static int get_fileinfo(struct reader *rds,char *buf)
-{
-    int len;
-
-    if((len=lseek(rds->filept,0,SEEK_END)) < 0) {
-    return -1;
-    }
-    if(lseek(rds->filept,-128,SEEK_END) < 0)
-    return -1;
-    if(fullread(rds->filept,(unsigned char *)buf,128) != 128) {
-    return -1;
-    }
-    if(!strncmp(buf,"TAG",3)) {
-    len -= 128;
-    }
-    if(lseek(rds->filept,0,SEEK_SET) < 0)
-    return -1;
-    if(len <= 0)
-    return -1;
-    return len;
-}
-
-
-#ifdef READ_MMAP
-/*********************************************************+
- * memory mapped operation 
- *
- */
-static unsigned char *mapbuf;
-static unsigned char *mappnt;
-static unsigned char *mapend;
-
-static int mapped_init(struct reader *rds) 
-{
-    long len;
-    char buf[128];
-
-    len = get_fileinfo(rds,buf);
-    if(len < 0)
-    return -1;
-
-    if(!strncmp(buf,"TAG",3)) {
-    rds->flags |= READER_ID3TAG;
-    memcpy(rds->id3buf,buf,128);
-    }
-
-    mappnt = mapbuf = (unsigned char *)
-    mmap(NULL, len, PROT_READ, MAP_SHARED , rds->filept, 0);
-    if(!mapbuf || mapbuf == MAP_FAILED)
-    return -1;
-
-    mapend = mapbuf + len;
-
-    if(param.verbose > 1)
-    fprintf(stderr,"Using memory mapped IO for this stream.\n");
-
-    rds->filelen = len;
-    return 0;
-}
-
-static void mapped_rewind(struct reader *rds)
-{
-    mappnt = mapbuf;
-    if (param.usebuffer) 
-    buffer_resync();
-}
-
-static void mapped_close(struct reader *rds)
-{
-    munmap((void *)mapbuf,mapend-mapbuf);
-    if (rds->flags & READER_FD_OPENED)
-    close(rds->filept);
-}
-
-static int mapped_head_read(struct reader *rds,unsigned long *newhead) 
-{
-    unsigned long nh;
-
-    if(mappnt + 4 > mapend)
-    return FALSE;
-
-    nh = (*mappnt++)  << 24;
-    nh |= (*mappnt++) << 16;
-    nh |= (*mappnt++) << 8;
-    nh |= (*mappnt++) ;
-
-    *newhead = nh;
-    return TRUE;
-}
-
-static int mapped_head_shift(struct reader *rds,unsigned long *head)
-{
-    if(mappnt + 1 > mapend)
-    return FALSE;
-    *head <<= 8;
-    *head |= *mappnt++;
-    *head &= 0xffffffff;
-    return TRUE;
-}
-
-static int mapped_skip_bytes(struct reader *rds,int len)
-{
-    if(mappnt + len > mapend)
-    return FALSE;
-    mappnt += len;
-    if (param.usebuffer)
-    buffer_resync();
-    return TRUE;
-}
-
-static int mapped_read_frame_body(struct reader *rds,unsigned char *buf,
-                  int size)
-{
-    if(size <= 0) {
-    fprintf(stderr,"Ouch. Read_frame called with size <= 0\n");
-    return FALSE;
-    }
-    if(mappnt + size > mapend)
-    return FALSE;
-    memcpy(buf,mappnt,size);
-    mappnt += size;
-
-    return TRUE;
-}
-
-static int mapped_back_bytes(struct reader *rds,int bytes)
-{
-    if( (mappnt - bytes) < mapbuf || (mappnt - bytes + 4) > mapend)
-        return -1;
-    mappnt -= bytes;
-    if(param.usebuffer)
-    buffer_resync();
-    return 0;
-}
-
-static int mapped_back_frame(struct reader *rds,struct frame *fr,int num)
-{
-    long bytes;
-    unsigned long newhead;
-
-
-    if(!firsthead)
-        return 0;
-
-    bytes = (fr->framesize+8)*(num+2);
-
-    /* Buffered mode is a bit trickier. From the size of the buffered
-     * output audio stream we have to make a guess at the number of frames
-     * this corresponds to.
-     */
-    if(param.usebuffer) 
-    bytes += (long)(xfermem_get_usedspace(buffermem) /
-            (buffermem->buf[0] * buffermem->buf[1] 
-             * (buffermem->buf[2] & AUDIO_FORMAT_MASK ?
-                16.0 : 8.0 )) 
-            * (tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index] << 10));
-    /*
-      bytes += (long)(compute_buffer_offset(fr)*compute_bpf(fr));  
-    */
-
-    if( (mappnt - bytes) < mapbuf || (mappnt - bytes + 4) > mapend)
-        return -1;
-    mappnt -= bytes;
-
-    newhead = (mappnt[0]<<24) + (mappnt[1]<<16) + (mappnt[2]<<8) + mappnt[3];
-    mappnt += 4;
-
-    while( (newhead & HDRCMPMASK) != (firsthead & HDRCMPMASK) ) {
-        if(mappnt + 1 > mapend)
-            return -1;
-        newhead <<= 8;
-        newhead |= *mappnt++;
-        newhead &= 0xffffffff;
-    }
-    mappnt -= 4;
-
-    read_frame(fr);
-    read_frame(fr);
-
-    if(fr->lay == 3)
-        set_pointer(512);
-
-    if(param.usebuffer)
-    buffer_resync();
-    
-    return 0;
-}
-
-static long mapped_tell(struct reader *rds)
-{
-    return mappnt - mapbuf;
-}
-
-#endif
-
-/*****************************************************************
- * read frame helper
- */
-
-struct reader *rd;
-struct reader readers[] = {
-#ifdef READ_SYSTEM
-    { system_init,
-      NULL, /* filled in by system_init() */
-      NULL,
-      NULL,
-      NULL,
-      NULL,
-      NULL,
-      NULL,
-      NULL } ,
-#endif
-#ifdef READ_MMAP
-    { mapped_init,
-      mapped_close,
-      mapped_head_read,
-      mapped_head_shift,
-      mapped_skip_bytes,
-      mapped_read_frame_body,
-      mapped_back_bytes,
-      mapped_back_frame,
-      mapped_tell,
-      mapped_rewind } , 
-#endif 
-    { default_init,
-      stream_close,
-      stream_head_read,
-      stream_head_shift,
-      stream_skip_bytes,
-      stream_read_frame_body,
-      stream_back_bytes,
-      stream_back_frame,
-      stream_tell,
-      stream_rewind } ,
-    { NULL, }
-};
-
-
-/* open the device to read the bit stream from it */
-
-struct reader *open_stream(char *bs_filenam,int fd)
-{
-    int i;
-    int filept_opened = 1;
-    int filept;
-
-    if (!bs_filenam) {
-    if(fd < 0) {
-        filept = 0;
-        filept_opened = 0;
-    }
-    else
-        filept = fd;
-    }
-    else if (!strncmp(bs_filenam, "http://", 7)) 
-    filept = http_open(bs_filenam);
-#ifndef O_BINARY
-#define O_BINARY (0)
-#endif
-    else if ( (filept = open(bs_filenam, O_RDONLY|O_BINARY)) < 0) {
-    perror (bs_filenam);
-    return NULL;
-    }
-
-    rd = NULL;
-    for(i=0;;i++) {
-    readers[i].filelen = -1;
-    readers[i].filept  = filept;
-    readers[i].flags = 0;
-    if(filept_opened)
-        readers[i].flags |= READER_FD_OPENED;
-    if(!readers[i].init) {
-        fprintf(stderr,"Fatal error!\n");
-        exit(1);
-    }
-    if(readers[i].init(readers+i) >= 0) {
-        rd = &readers[i];
-        break;
-    }
-    }
-
-    if(rd && rd->flags & READER_ID3TAG) {
-    print_id3_tag(rd->id3buf);
-    }
-
-    return rd;
-}
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 138
panda/src/mpg123/tabinit.c

@@ -1,138 +0,0 @@
-
-#include <stdlib.h>
-
-#include "mpg123.h"
-
-static unsigned char *conv16to8_buf = NULL;
-unsigned char *conv16to8;
-
-#ifndef USE_MMX
-real decwin[512+32];
-static real cos64[16],cos32[8],cos16[4],cos8[2],cos4[1];
-
-real *pnts[] = { cos64,cos32,cos16,cos8,cos4 };
-
-
-static long intwinbase[] = {
-     0,    -1,    -1,    -1,    -1,    -1,    -1,    -2,    -2,    -2,
-    -2,    -3,    -3,    -4,    -4,    -5,    -5,    -6,    -7,    -7,
-    -8,    -9,   -10,   -11,   -13,   -14,   -16,   -17,   -19,   -21,
-   -24,   -26,   -29,   -31,   -35,   -38,   -41,   -45,   -49,   -53,
-   -58,   -63,   -68,   -73,   -79,   -85,   -91,   -97,  -104,  -111,
-  -117,  -125,  -132,  -139,  -147,  -154,  -161,  -169,  -176,  -183,
-  -190,  -196,  -202,  -208,  -213,  -218,  -222,  -225,  -227,  -228,
-  -228,  -227,  -224,  -221,  -215,  -208,  -200,  -189,  -177,  -163,
-  -146,  -127,  -106,   -83,   -57,   -29,     2,    36,    72,   111,
-   153,   197,   244,   294,   347,   401,   459,   519,   581,   645,
-   711,   779,   848,   919,   991,  1064,  1137,  1210,  1283,  1356,
-  1428,  1498,  1567,  1634,  1698,  1759,  1817,  1870,  1919,  1962,
-  2001,  2032,  2057,  2075,  2085,  2087,  2080,  2063,  2037,  2000,
-  1952,  1893,  1822,  1739,  1644,  1535,  1414,  1280,  1131,   970,
-   794,   605,   402,   185,   -45,  -288,  -545,  -814, -1095, -1388,
- -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
- -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209,
- -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959,
- -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092,
- -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
-   -70,   998,  2122,  3300,  4533,  5818,  7154,  8540,  9975, 11455,
- 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289,
- 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617,
- 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684,
- 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835,
- 73415, 73908, 74313, 74630, 74856, 74992, 75038 };
-
-void make_decode_tables(long scaleval)
-{
-  int i,j,k,kr,divv;
-  real *costab;
-  int idx;
-
-  
-  for(i=0;i<5;i++)
-  {
-    kr=0x10>>i; divv=0x40>>i;
-    costab = pnts[i];
-    for(k=0;k<kr;k++)
-      costab[k] = 1.0 / (2.0 * cos(M_PI * ((double) k * 2.0 + 1.0) / (double) divv));
-
-  }
-
-  idx = 0;
-  scaleval = -scaleval;
-  for(i=0,j=0;i<256;i++,j++,idx+=32)
-  {
-    if(idx < 512+16)
-      decwin[idx+16] = decwin[idx] = (double) intwinbase[j] / 65536.0 * (double) scaleval;
-
-    if(i % 32 == 31)
-      idx -= 1023;
-    if(i % 64 == 63)
-      scaleval = - scaleval;
-  }
-
-  for( /* i=256 */ ;i<512;i++,j--,idx+=32)
-  {
-    if(idx < 512+16)
-      decwin[idx+16] = decwin[idx] = (double) intwinbase[j] / 65536.0 * (double) scaleval;
-
-    if(i % 32 == 31)
-      idx -= 1023;
-    if(i % 64 == 63)
-      scaleval = - scaleval;
-  }
-
-}
-#endif
-
-void make_conv16to8_table(int mode)
-{
-  int i;
-
-  /*
-   * ????: 8.0 is right but on SB cards '2.0' is a better value ???
-   */
-  const double mul = 8.0;
-
-  if(!conv16to8_buf) {
-    conv16to8_buf = (unsigned char *) malloc(8192);
-    if(!conv16to8_buf) {
-      fprintf(stderr,"Can't allocate 16 to 8 converter table!\n");
-      exit(1);
-    }
-    conv16to8 = conv16to8_buf + 4096;
-  }
-
-  if(mode == AUDIO_FORMAT_ULAW_8) {
-    double m=127.0 / log(256.0);
-    int c1;
-
-    for(i=-4096;i<4096;i++) {
-/* dunno whether this is a valid transformation rule ?!?!? */
-      if(i < 0)
-        c1 = 127 - (int) (log( 1.0 - 255.0 * (double) i*mul / 32768.0 ) * m);
-      else
-        c1 = 255 - (int) (log( 1.0 + 255.0 * (double) i*mul / 32768.0 ) * m);
-      if(c1 < 0 || c1 > 255) 
-    fprintf(stderr,"Converror %d %d\n",i,c1);
-      if(c1 == 0)
-        c1 = 2;
-      conv16to8[i] = (unsigned char) c1;
-    }
-  }
-  else if(mode == AUDIO_FORMAT_SIGNED_8) {
-    for(i=-4096;i<4096;i++) {
-      conv16to8[i] = i>>5;
-    }
-  }
-  else if(mode == AUDIO_FORMAT_UNSIGNED_8) {
-    for(i=-4096;i<4096;i++) {
-      conv16to8[i] = (i>>5)+128;
-    }
-  }
-  else {
-    for(i=-4096;i<4096;i++) {
-      conv16to8[i] = 0;
-    }
-  }
-}
-

+ 0 - 79
panda/src/mpg123/vbrhead.c

@@ -1,79 +0,0 @@
-/*
- * This checks for the VBR Header defined by Xing(tm)
- */
-
-#include "mpg123.h"
-
-static unsigned long get32bits(unsigned char *buf) {
-    unsigned long ret = 0;
-
-    ret = (((unsigned long) buf[0]) << 24) |
-    (((unsigned long) buf[1]) << 16) |
-    (((unsigned long) buf[2]) << 8) |
-    ((unsigned long) buf[3]) ;
-
-    return ret;
-}
-
-int getVBRHeader(struct vbrHeader *head,unsigned char *buf, struct frame *fr) 
-{
-    int ssize;
-
-    if(fr->lay != 3)
-    return 0;
-
-    if(fr->lsf)
-    ssize = (fr->stereo == 1) ? 9 : 17;
-    else
-    ssize = (fr->stereo == 1) ? 17 : 32;
-
-
-    buf += ssize;
-
-    if(( buf[0] != 'X' ) || ( buf[1] != 'i' ) ||
-       ( buf[2] != 'n' ) || ( buf[3] != 'g' ) ) 
-    return 0;
-    buf+=4;
-    
-    head->flags = get32bits(buf);
-    buf+=4;
-    
-    if(head->flags & VBR_FRAMES_FLAG) {
-    head->frames = get32bits(buf);
-    buf += 4;
-    }
-
-    if(head->flags & VBR_BYTES_FLAG) {
-    head->bytes  = get32bits(buf); 
-    buf += 4;
-    }
-
-    if(head->flags & VBR_TOC_FLAG) {
-    memcpy(head->toc,buf,100);
-    buf += 100;
-    }
-
-    if(head->flags & VBR_SCALE_FLAG) {
-    head->scale = get32bits(buf);
-    buf += 4;
-    }
-
-    /* fprintf(stderr,"Found XING %04lx\n",head->flags); */
-
-    return 1;
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 287
panda/src/mpg123/xfermem.c

@@ -1,287 +0,0 @@
-/*
- *   xfermem.c
- *
- *   Oliver Fromme  <[email protected]>
- *   Sun Apr  6 02:26:26 MET DST 1997
- *
- *   See xfermem.h for documentation/description.
- */
-
-#ifndef NOXFERMEM
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/uio.h>
-#include <sys/mman.h>
-#include <sys/socket.h>
-#include <fcntl.h>
-#ifdef WIN32
-#include <io.h>
-#endif
-
-#ifdef AIX
-#include <sys/select.h>
-#endif
-
-#include "mpg123.h"
-#define HAVE_INCLUDED_MPG123_H
-
-#ifndef USE_MMAP
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#endif
-
-extern int errno;
-
-#if defined (USE_MMAP) && defined(MAP_ANONYMOUS) && !defined(MAP_ANON)
-#define MAP_ANON MAP_ANONYMOUS
-#endif
-
-void xfermem_init (txfermem **xf, int bufsize, int msize, int skipbuf)
-{
-    int regsize = bufsize + msize + skipbuf + sizeof(txfermem);
-    extern int preload;
-
-#ifdef USE_MMAP
-#  ifdef MAP_ANON
-    if ((*xf = (txfermem *) mmap(0, regsize, PROT_READ | PROT_WRITE,
-            MAP_ANON | MAP_SHARED, -1, 0)) == (txfermem *) -1) {
-        perror ("mmap()");
-        exit (1);
-    }
-#  else
-    int devzero;
-    if ((devzero = open("/dev/zero", O_RDWR, 0)) == -1) {
-        perror ("open(/dev/zero)");
-        exit (1);
-    }
-    if ((*xf = (txfermem *) mmap(0, regsize, PROT_READ | PROT_WRITE,
-            MAP_SHARED, devzero, 0)) == (txfermem *) -1) {
-        perror ("mmap()");
-        exit (1);
-    }
-    close (devzero);
-#  endif
-#else
-    struct shmid_ds shmemds;
-    int shmemid;
-    if ((shmemid = shmget(IPC_PRIVATE, regsize, IPC_CREAT | 0600)) == -1) {
-        perror ("shmget()");
-        exit (1);
-    }
-    if ((*xf = (txfermem *) shmat(shmemid, 0, 0)) == (txfermem *) -1) {
-        perror ("shmat()");
-        shmctl (shmemid, IPC_RMID, &shmemds);
-        exit (1);
-    }
-    if (shmctl(shmemid, IPC_RMID, &shmemds) == -1) {
-        perror ("shmctl()");
-        xfermem_done (*xf);
-        exit (1);
-    }
-#endif
-    if (socketpair(AF_UNIX, SOCK_STREAM, 0, (*xf)->fd) < 0) {
-        perror ("socketpair()");
-        xfermem_done (*xf);
-        exit (1);
-    }
-    (*xf)->freeindex = (*xf)->readindex = 0;
-    (*xf)->wakeme[0] = (*xf)->wakeme[1] = FALSE;
-    (*xf)->data = ((byte *) *xf) + sizeof(txfermem) + msize;
-    (*xf)->metadata = ((byte *) *xf) + sizeof(txfermem);
-    (*xf)->size = bufsize;
-    (*xf)->metasize = msize + skipbuf;
-    preload = bufsize>>3;
-}
-
-void xfermem_done (txfermem *xf)
-{
-    if(!xf)
-        return;
-#ifdef USE_MMAP
-    munmap ((caddr_t) xf, xf->size + xf->metasize + sizeof(txfermem));
-#else
-    if (shmdt((void *) xf) == -1) {
-        perror ("shmdt()");
-        exit (1);
-    }
-#endif
-}
-
-void xfermem_init_writer (txfermem *xf)
-{
-    if(xf)
-        close (xf->fd[XF_READER]);
-}
-
-void xfermem_init_reader (txfermem *xf)
-{
-    if(xf)
-        close (xf->fd[XF_WRITER]);
-}
-
-int xfermem_get_freespace (txfermem *xf)
-{
-    int freeindex, readindex;
-
-    if(!xf)
-        return 0;
-
-    if ((freeindex = xf->freeindex) < 0
-            || (readindex = xf->readindex) < 0)
-        return (0);
-    if (readindex > freeindex)
-        return ((readindex - freeindex) - 1);
-    else
-        return ((xf->size - (freeindex - readindex)) - 1);
-}
-
-int xfermem_get_usedspace (txfermem *xf)
-{
-    int freeindex, readindex;
-
-    if(!xf)
-        return 0;
-
-    if ((freeindex = xf->freeindex) < 0
-            || (readindex = xf->readindex) < 0)
-        return (0);
-    if (freeindex >= readindex)
-        return (freeindex - readindex);
-    else
-        return (xf->size - (readindex - freeindex));
-}
-
-int xfermem_getcmd (int fd, int block)
-{
-    fd_set selfds;
-    byte cmd;
-
-    for (;;) {
-        struct timeval selto = {0, 0};
-
-        FD_ZERO (&selfds);
-        FD_SET (fd, &selfds);
-        /* #ifdef HPUX */ /* seems to trigger performance problems? strange */
-#if 0
-        switch (select(FD_SETSIZE, (int *) &selfds, NULL, NULL, block ? NULL : &selto)) {
-#else
-        switch (select(FD_SETSIZE, &selfds, NULL, NULL, block ? NULL : &selto)) {
-#endif
-            case 0:
-                if (!block)
-                    return (0);
-                continue;
-            case -1:
-                if (errno == EINTR)
-                    continue;
-                return (-2);
-            case 1:
-                if (FD_ISSET(fd, &selfds))
-                    switch (read(fd, &cmd, 1)) {
-                        case 0: /* EOF */
-                            return (-1);
-                        case -1:
-                            if (errno == EINTR)
-                                continue;
-                            return (-3);
-                        case 1:
-                            return (cmd);
-                        default: /* ?!? */
-                            return (-4);
-                    }
-                else /* ?!? */
-                    return (-5);
-            default: /* ?!? */
-                return (-6);
-        }
-    }
-}
-
-int xfermem_putcmd (int fd, byte cmd)
-{
-    for (;;) {
-        switch (write(fd, &cmd, 1)) {
-            case 1:
-                return (1);
-            case -1:
-                if (errno != EINTR)
-                    return (-1);
-        }
-    }
-}
-
-int xfermem_block (int readwrite, txfermem *xf)
-{
-    int myfd = xf->fd[readwrite];
-    int result;
-
-    xf->wakeme[readwrite] = TRUE;
-    if (xf->wakeme[1 - readwrite])
-        xfermem_putcmd (myfd, XF_CMD_WAKEUP);
-    result = xfermem_getcmd(myfd, TRUE);
-    xf->wakeme[readwrite] = FALSE;
-    return ((result <= 0) ? -1 : result);
-}
-
-#elif defined(WIN32)
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <fcntl.h>
-
-#ifndef HAVE_INCLUDED_MPG123_H
-#include "mpg123.h"
-#else /* HAVE_INCLUDED_MPG123_H */
-#include "xfermem.h"
-#endif /* HAVE_INCLUDED_MPG123_H */
-
-extern int errno;
-
-void xfermem_init (txfermem **xf, int bufsize, int msize, int skipbuf)
-{
-  return;
-}
-void xfermem_done (txfermem *xf)
-{
-  return;
-}
-void xfermem_init_writer (txfermem *xf)
-{
-  return;
-}
-void xfermem_init_reader (txfermem *xf)
-{
-  return;
-}
-int xfermem_get_freespace (txfermem *xf)
-{
-  return 0;
-}
-int xfermem_get_usedspace (txfermem *xf)
-{
-  return 0;
-}
-int xfermem_getcmd (int fd, int block)
-{
-  return 0;
-}
-int xfermem_putcmd (int fd, byte cmd)
-{
-  return 0;
-}
-int xfermem_block (int readwrite, txfermem *xf)
-{
-  return 0;
-}
-#endif
-
-/* eof */
-

+ 0 - 60
panda/src/mpg123/xfermem.h

@@ -1,60 +0,0 @@
-/*
- *   xfermem.h
- *
- *   Oliver Fromme  <[email protected]>
- *   Sat Mar 29 04:41:34 MET 1997
- *
- *   This is a stand-alone module which implements a unidirectional,
- *   fast pipe using mmap().  Its primary use is to transfer large
- *   amounts of data from a parent process to its child process,
- *   with a buffer in between which decouples blocking conditions
- *   on both sides.  Control information is transferred between the
- *   processes through a socketpair.  See xftest.c for an example on
- *   how to use this module.
- */
-
-#ifndef TRUE
-#define FALSE 0
-#define TRUE  1
-#endif
-
-typedef struct {
-    int freeindex;  /* [W] next free index */
-    int readindex;  /* [R] next index to read */
-    int fd[2];
-    int wakeme[2];
-    byte *data;
-    byte *metadata;
-    int size;
-    int metasize;
-    int buf[3];
-} txfermem;
-/*
- *   [W] -- May be written to by the writing process only!
- *   [R] -- May be written to by the reading process only!
- *   All other entries are initialized once.
- */
-
-void xfermem_init (txfermem **xf, int bufsize, int msize,int skipbuf);
-void xfermem_init_writer (txfermem *xf);
-void xfermem_init_reader (txfermem *xf);
-
-int  xfermem_write (txfermem *xf, byte *data, int count);
-int  xfermem_read  (txfermem *xf, byte *data, int count);
-
-int xfermem_get_freespace (txfermem *xf);
-int xfermem_get_usedspace (txfermem *xf);
-#define XF_CMD_WAKEUP_INFO  0x04
-#define XF_CMD_WAKEUP    0x02
-#define XF_CMD_TERMINATE 0x03
-#define XF_WRITER 0
-#define XF_READER 1
-int xfermem_getcmd (int fd, int block);
-int xfermem_putcmd (int fd, byte cmd);
-int xfermem_block (int fd, txfermem *xf);
-
-void xfermem_done (txfermem *xf);
-#define xfermem_done_writer xfermem_init_reader
-#define xfermem_done_reader xfermem_init_writer
-
-/* EOF */