This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
About my bug report
- To: gcc-bugs at gcc dot gnu dot org
- Subject: About my bug report
- From: "JJ" <jj201 at algonet dot se>
- Date: 13 Mar 2000 15:21:54 +0100
About my bug report. I can also add that I now know that the bug show up when optimization
"-frerun-loop-opt" is turned on.
The GCC version : 2.95.1
The system type : AmigaOS/WarpOS
All options you passed to the compiler: read the output below
Preprocessed output of the source file that caused the compiler error: Attached file
-------------------------------------------------------------------------------------
# ppc-amigaos-gcc -DNDEBUG -warpup -V 2.95.1 -O3 -mcpu=604e -mmultiple -funroll-loops -fomit-frame-pointer -ffast-math -v --save-temps -c quantize.c -o quantize.o
Reading specs from adelib/gcc-lib/ppc-amigaos/2.95.1/specs
gcc driver version 2.7.2.1 executing gcc version 2.95.1
adelib/gcc-lib/ppc-amigaos/2.95.1/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=95 -DPPC -Damiga -Damigaos -DMCH_AMIGA -DAMIGA -D__PPC__ -D__amiga__ -D__amigaos__ -D__MCH_AMIGA__ -D__AMIGA__ -D__PPC -D__amiga -D__amigaos -D__MCH_AMIGA -D__AMIGA -Asystem(amigaos) -Acpu(powerpc) -Amachine(powerpc) -D__CHAR_UNSIGNED__ -D__OPTIMIZE__ -I/ade/os-includeppc -D_CALL_SYSV -D_BIG_ENDIAN -Amachine(bigendian) -DWARPUP -DNDEBUG quantize.c quantize.i
GNU CPP version 2.7.2.1 (PowerPC System V.4)
#include "..." search starts here:
#include <...> search starts here:
adeos-includeppc
adelib/gcc-lib/ppc-amigaos/2.7.2.1/include
adelib/gcc-lib/ppc-amigaos/2.7.2.1/sys-include
adeppc-amigaos/include
End of search list.
adelib/gcc-lib/ppc-amigaos/2.95.1/cc1 quantize.i -quiet -dumpbase quantize.c -mcpu=604e -mmultiple -O3 -version -funroll-loops -fomit-frame-pointer -ffast-math -o quantize.s
GNU C version 2.95.1 19990816 (release) (ppc-elf) compiled by GNU C version 2.7.2.1.
quantize.c: In function `VBR_iteration_loop':
quantize.c:667: Internal compiler error in `schedule_region', at haifa-sched.c:7777
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/faq.html#bugreport> for instructions.
-------------------------------------------------------------------------------------
Kind regards
Jörgen Johansson
# 1 "quantize.c"
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/assert.h" 1 3
# 52 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/assert.h" 3
# 24 "quantize.c" 2
# 1 "globalflags.h" 1
# 1 "lame.h" 1
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/stdio.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/types.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/types.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/cdefs.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/cdefs.h" 1 3
# 44 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/cdefs.h" 2 3
# 101 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/cdefs.h" 3
# 40 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/types.h" 2 3
typedef struct _physadr {
short r[1];
} *physadr;
typedef struct label_t {
int val[15];
} label_t;
typedef unsigned long vm_offset_t;
typedef unsigned long vm_size_t;
typedef signed char int8_t;
typedef unsigned char u_int8_t;
typedef short int16_t;
typedef unsigned short u_int16_t;
typedef int int32_t;
typedef unsigned int u_int32_t;
typedef long long int64_t;
typedef unsigned long long u_int64_t;
typedef int32_t register_t;
# 47 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/types.h" 2 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/ansi.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/stdarg.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/va-ppc.h" 1 3
typedef struct __va_list_tag {
char gpr;
char fpr;
char *overflow_arg_area;
char *reg_save_area;
} __va_list[1], __gnuc_va_list[1];
typedef struct {
long __gp_save[8];
double __fp_save[8];
} __va_regsave_t;
# 90 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/va-ppc.h" 3
# 167 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/va-ppc.h" 3
# 230 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/va-ppc.h" 3
# 42 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/stdarg.h" 2 3
# 124 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/stdarg.h" 3
# 168 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/stdarg.h" 3
typedef __gnuc_va_list va_list;
# 55 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/ansi.h" 2 3
# 49 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/types.h" 2 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/endian.h" 1 3
unsigned long htonl (unsigned long) ;
unsigned short htons (unsigned short) ;
unsigned long ntohl (unsigned long) ;
unsigned short ntohs (unsigned short) ;
# 50 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/types.h" 2 3
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef u_int64_t u_quad_t;
typedef int64_t quad_t;
typedef quad_t * qaddr_t;
typedef char * caddr_t;
typedef int32_t daddr_t;
typedef int16_t dev_t;
typedef u_int32_t fixpt_t;
typedef u_int16_t gid_t;
typedef u_int32_t ino_t;
typedef long key_t;
typedef u_int16_t mode_t;
typedef u_int16_t nlink_t;
typedef int32_t off_t;
typedef int32_t pid_t;
typedef int32_t rlim_t;
typedef int32_t segsz_t;
typedef int32_t swblk_t;
typedef u_int16_t uid_t;
off_t lseek (int, off_t, int) ;
int ftruncate (int, off_t) ;
int truncate (const char *, off_t) ;
typedef unsigned long clock_t;
typedef unsigned long size_t;
typedef int ssize_t;
typedef long time_t;
typedef int32_t fd_mask;
typedef struct fd_set {
fd_mask fds_bits[((( 256 ) + (( (sizeof(fd_mask) * 8 ) ) - 1)) / ( (sizeof(fd_mask) * 8 ) )) ];
} fd_set;
# 168 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/types.h" 3
# 43 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/stdio.h" 2 3
typedef long fpos_t;
struct __sbuf {
unsigned char *_base;
int _size;
};
typedef struct __sFILE {
unsigned char *_p;
int _r;
int _w;
short _flags;
short _file;
struct __sbuf _bf;
int _lbfsize;
void *_cookie;
int (*_close) (void *) ;
int (*_read) (void *, char *, int) ;
fpos_t (*_seek) (void *, fpos_t, int) ;
int (*_write) (void *, const char *, int) ;
struct __sbuf _ub;
unsigned char *_up;
int _ur;
unsigned char _ubuf[3];
unsigned char _nbuf[1];
struct __sbuf _lb;
int _blksize;
int _offset;
} FILE;
extern FILE **__sF;
void clearerr (FILE *) ;
int fclose (FILE *) ;
int feof (FILE *) ;
int ferror (FILE *) ;
int fflush (FILE *) ;
int fgetc (FILE *) ;
int fgetpos (FILE *, fpos_t *) ;
char *fgets (char *, int, FILE *) ;
FILE *fopen (const char *, const char *) ;
int fprintf (FILE *, const char *, ...) ;
int fputc (int, FILE *) ;
int fputs (const char *, FILE *) ;
size_t fread (void *, size_t, size_t, FILE *) ;
FILE *freopen (const char *, const char *, FILE *) ;
int fscanf (FILE *, const char *, ...) ;
int fseek (FILE *, long, int) ;
int fsetpos (FILE *, const fpos_t *) ;
long ftell (FILE *) ;
size_t fwrite (const void *, size_t, size_t, FILE *) ;
int getc (FILE *) ;
int getchar (void) ;
char *gets (char *) ;
extern int sys_nerr;
void perror (const char *) ;
int printf (const char *, ...) ;
int putc (int, FILE *) ;
int putchar (int) ;
int puts (const char *) ;
int remove (const char *) ;
int rename (const char *, const char *) ;
void rewind (FILE *) ;
int scanf (const char *, ...) ;
void setbuf (FILE *, char *) ;
int setvbuf (FILE *, char *, int, size_t) ;
int sprintf (char *, const char *, ...) ;
int sscanf (const char *, const char *, ...) ;
FILE *tmpfile (void) ;
char *tmpnam (char *) ;
int ungetc (int, FILE *) ;
int vfprintf (FILE *, const char *, va_list ) ;
int vprintf (const char *, va_list ) ;
int vsprintf (char *, const char *, va_list ) ;
char *ctermid (char *) ;
FILE *fdopen (int, const char *) ;
int fileno (FILE *) ;
char *fgetln (FILE *, size_t *) ;
int fpurge (FILE *) ;
int getw (FILE *) ;
int pclose (FILE *) ;
FILE *popen (const char *, const char *) ;
int putw (int, FILE *) ;
void setbuffer (FILE *, char *, int) ;
int setlinebuf (FILE *) ;
char *tempnam (const char *, const char *) ;
int snprintf (char *, size_t, const char *, ...) ;
int vsnprintf (char *, size_t, const char *, va_list ) ;
int vscanf (const char *, va_list ) ;
int vsscanf (const char *, const char *, va_list ) ;
FILE *funopen (const void *,
int (*)(void *, char *, int),
int (*)(void *, const char *, int),
fpos_t (*)(void *, fpos_t, int),
int (*)(void *)) ;
int __srget (FILE *) ;
int __svfscanf (FILE *, const char *, va_list ) ;
int __swbuf (int, FILE *) ;
static __inline int __sputc(int _c, FILE *_p) {
if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
return (*_p->_p++ = _c);
else
return (__swbuf(_c, _p));
}
# 356 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/stdio.h" 3
# 22 "lame.h" 2
typedef enum sound_file_format_e {
sf_unknown, sf_wave, sf_aiff, sf_mp3, sf_raw
} sound_file_format;
typedef struct {
unsigned long num_samples;
int num_channels;
int samplerate;
int gtkflag;
int bWriteVbrTag;
int quality;
int silent;
int mode;
int mode_fixed;
int force_ms;
int brate;
int copyright;
int original;
int error_protection;
int padding;
int disable_reservoir;
int experimentalX;
int experimentalY;
int experimentalZ;
int VBR;
int VBR_q;
int VBR_min_bitrate_kbps;
int VBR_max_bitrate_kbps;
int resamplerate;
int lowpassfreq;
int highpassfreq;
int lowpasswidth;
int highpasswidth;
sound_file_format input_format;
int swapbytes;
char *inPath;
char *outPath;
int ATHonly;
int noATH;
float cwlimit;
int allow_diff_short;
int no_short_blocks;
int emphasis;
int sfb21;
long int frameNum;
long totalframes;
int encoder_delay;
int framesize;
int mode_gr;
int stereo;
int VBR_min_bitrate;
int VBR_max_bitrate;
float resample_ratio;
float lowpass1,lowpass2;
float highpass1,highpass2;
int filter_type;
int quantization;
int noise_shaping;
int noise_shaping_stop;
int psymodel;
int ms_masking;
int use_best_huffman;
} lame_global_flags;
lame_global_flags *lame_init(void);
void lame_usage(char *);
void lame_help(char *);
void lame_parse_args(int argc, char **argv);
void lame_init_infile(void);
void lame_init_params();
void lame_print_config();
int lame_readframe(short int Buffer[2][1152]);
int lame_encode(short int Buffer[2][1152],char *mp3buffer);
int lame_encode_buffer(short int leftpcm[], short int rightpcm[],int num_samples,
char *mp3buffer,int mp3buffer_size);
int lame_encode_finish(char *mp3buf);
void lame_close_infile(void);
void lame_mp3_tags(void);
int lame_decode_init(void);
int lame_decode(char *mp3buf,int len,short pcm[][1152]);
# 4 "globalflags.h" 2
extern lame_global_flags gf;
# 25 "quantize.c" 2
# 1 "util.h" 1
# 1 "machine.h" 1
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/string.h" 1 3
void *memchr (const void *, int, size_t) ;
void *memmove (void *, const void *, size_t) ;
char *strcat (char *, const char *) ;
char *strchr (const char *, int) ;
int strcmp (const char *, const char *) ;
int strcoll (const char *, const char *) ;
char *strcpy (char *, const char *) ;
size_t strcspn (const char *, const char *) ;
char *strerror (int) ;
unsigned int strlen (const char *) ;
char *strncat (char *, const char *, size_t) ;
int strncmp (const char *, const char *, size_t) ;
char *strncpy (char *, const char *, size_t) ;
char *strpbrk (const char *, const char *) ;
char *strrchr (const char *, int) ;
size_t strspn (const char *, const char *) ;
char *strstr (const char *, const char *) ;
char *strtok (char *, const char *) ;
size_t strxfrm (char *, const char *, size_t) ;
int bcmp (const void *, const void *, size_t) ;
void bcopy (const void *, void *, size_t) ;
void bzero (void *, size_t) ;
int ffs (int) ;
char *index (const char *, int) ;
void *memccpy (void *, const void *, int, size_t) ;
char *rindex (const char *, int) ;
int strcasecmp (const char *, const char *) ;
char *strdup (const char *) ;
void strmode (int, char *) ;
int strncasecmp (const char *, const char *, size_t) ;
char *strsep (char **, const char *) ;
void swab (const void *, void *, size_t) ;
int stricmp (const char *, const char *) ;
int strnicmp (const char *, const char *, size_t) ;
# 28 "machine.h" 2
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/math.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/float.h" 1 3
# 39 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/math.h" 2 3
double acos (double) ;
double asin (double) ;
double atan (double) ;
double atan2 (double, double) ;
double ceil (double) ;
double cos (double) ;
double cosh (double) ;
double exp (double) ;
double fabs (double) ;
double floor (double) ;
double fmod (double, double) ;
double frexp (double, int *) ;
double ldexp (double, int) ;
double log (double) ;
double log10 (double) ;
double modf (double, double *) ;
double pow (double, double) ;
double sin (double) ;
double sinh (double) ;
double sqrt (double) ;
double tan (double) ;
double tanh (double) ;
double acosh (double) ;
double asinh (double) ;
double atanh (double) ;
double cabs();
double cbrt (double) ;
double copysign (double, double) ;
double drem (double, double) ;
double erf (double) ;
double erfc (double) ;
double expm1 (double) ;
int finite (double) ;
double hypot (double, double) ;
double j0 (double) ;
double j1 (double) ;
double jn (int, double) ;
double lgamma (double) ;
double log1p (double) ;
double logb (double) ;
double rint (double) ;
double scalb (double, int) ;
double y0 (double) ;
double y1 (double) ;
double yn (int, double) ;
int isinf (double) ;
int isnan (double) ;
# 29 "machine.h" 2
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/stdlib.h" 1 3
typedef int wchar_t;
typedef struct {
int quot;
int rem;
} div_t;
typedef struct {
long quot;
long rem;
} ldiv_t;
typedef struct {
quad_t quot;
quad_t rem;
} qdiv_t;
void abort (void) ;
int abs (int) ;
int atexit (void (*)(void)) ;
double atof (const char *) ;
int atoi (const char *) ;
long atol (const char *) ;
void *bsearch (const void *, const void *, size_t,
size_t, int (*)(const void *, const void *)) ;
void *calloc (size_t, size_t) ;
div_t div (int, int) ;
void exit (int) ;
void free (void *) ;
char *getenv (const char *) ;
long labs (long) ;
ldiv_t ldiv (long, long) ;
void *malloc (size_t) ;
void qsort (void *, size_t, size_t,
int (*)(const void *, const void *)) ;
int rand (void) ;
void *realloc (void *, size_t) ;
void srand (unsigned) ;
double strtod (const char *, char **) ;
long strtol (const char *, char **, int) ;
unsigned long
strtoul (const char *, char **, int) ;
int system (const char *) ;
int mblen (const char *, size_t) ;
size_t mbstowcs (wchar_t *, const char *, size_t) ;
int wctomb (char *, wchar_t) ;
int mbtowc (wchar_t *, const char *, size_t) ;
size_t wcstombs (char *, const wchar_t *, size_t) ;
void *alloca (size_t) ;
char *getbsize (int *, long *) ;
char *cgetcap (char *, char *, int) ;
int cgetclose (void) ;
int cgetent (char **, char **, char *) ;
int cgetfirst (char **, char **) ;
int cgetmatch (char *, char *) ;
int cgetnext (char **, char **) ;
int cgetnum (char *, char *, long *) ;
int cgetset (char *) ;
int cgetstr (char *, char *, char **) ;
int cgetustr (char *, char *, char **) ;
int daemon (int, int) ;
char *devname (int, int) ;
int getloadavg (double [], int) ;
long a64l (const char *) ;
char *l64a (long) ;
void cfree (void *) ;
int getopt (int, char * const *, const char *) ;
extern char *optarg;
extern int opterr;
extern int optind;
extern int optopt;
extern int optreset;
int getsubopt (char **, char * const *, char **) ;
extern char *suboptarg;
int heapsort (void *, size_t, size_t,
int (*)(const void *, const void *)) ;
int mergesort (void *, size_t, size_t,
int (*)(const void *, const void *)) ;
int radixsort (const unsigned char **, int, const unsigned char *,
unsigned) ;
int sradixsort (const unsigned char **, int, const unsigned char *,
unsigned) ;
char *initstate (unsigned, char *, int) ;
long random (void) ;
char *realpath (const char *, char *) ;
char *setstate (char *) ;
void srandom (unsigned) ;
int putenv (const char *) ;
int setenv (const char *, const char *, int) ;
void unsetenv (const char *) ;
void setproctitle (const char *, ...) ;
quad_t qabs (quad_t) ;
qdiv_t qdiv (quad_t, quad_t) ;
quad_t strtoq (const char *, char **, int) ;
u_quad_t strtouq (const char *, char **, int) ;
double drand48 (void) ;
double erand48 (unsigned short[3]) ;
long jrand48 (unsigned short[3]) ;
void lcong48 (unsigned short[7]) ;
long lrand48 (void) ;
long mrand48 (void) ;
long nrand48 (unsigned short[3]) ;
unsigned short *seed48 (unsigned short[3]) ;
void srand48 (long) ;
# 30 "machine.h" 2
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/ctype.h" 1 3
extern const char *_ctype_;
extern int isalnum (int) ;
extern int isalpha (int) ;
extern int iscntrl (int) ;
extern int isdigit (int) ;
extern int isgraph (int) ;
extern int islower (int) ;
extern int isprint (int) ;
extern int ispunct (int) ;
extern int isspace (int) ;
extern int isupper (int) ;
extern int isxdigit (int) ;
extern int tolower (int) ;
extern int toupper (int) ;
extern int isblank (int) ;
extern int isascii (int) ;
extern int toascii (int) ;
extern int _tolower (int) ;
extern int _toupper (int) ;
# 31 "machine.h" 2
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/signal.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/signal.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/signal.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/m68k/signal.h" 1 3
typedef int sig_atomic_t;
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/trap.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/m68k/trap.h" 1 3
# 6 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/trap.h" 2 3
# 47 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/m68k/signal.h" 2 3
struct sigcontext {
int sc_onstack;
int sc_mask;
int sc_sp;
int sc_fp;
int sc_ap;
int sc_pc;
int sc_ps;
};
# 6 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/machine/signal.h" 2 3
# 46 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/signal.h" 2 3
# 109 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/signal.h" 3
typedef unsigned int sigset_t;
struct sigaction {
void (*sa_handler)();
sigset_t sa_mask;
int sa_flags;
};
typedef void (*sig_t) (int) ;
struct sigaltstack {
char *ss_base;
int ss_size;
int ss_flags;
};
struct sigvec {
void (*sv_handler)();
int sv_mask;
int sv_flags;
};
struct sigstack {
char *ss_sp;
int ss_onstack;
};
# 222 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/signal.h" 3
void (*signal (int, void (*) (int) ) ) (int) ;
# 42 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/signal.h" 2 3
extern const char * const sys_signame[];
extern const char *const sys_siglist[];
int raise (int) ;
int kill (pid_t, int) ;
int sigaction (int, const struct sigaction *, struct sigaction *) ;
int sigaddset (sigset_t *, int) ;
int sigdelset (sigset_t *, int) ;
int sigemptyset (sigset_t *) ;
int sigfillset (sigset_t *) ;
int sigismember (const sigset_t *, int) ;
int sigpending (sigset_t *) ;
int sigprocmask (int, const sigset_t *, sigset_t *) ;
int sigsuspend (const sigset_t *) ;
extern __inline int sigaddset(sigset_t *set, int signo) {
extern int errno;
if (signo <= 0 || signo >= 33 ) {
errno = 22;
return -1;
}
*set |= (1 << ((signo)-1));
return (0);
}
extern __inline int sigdelset(sigset_t *set, int signo) {
extern int errno;
if (signo <= 0 || signo >= 33 ) {
errno = 22;
return -1;
}
*set &= ~(1 << ((signo)-1));
return (0);
}
extern __inline int sigismember(const sigset_t *set, int signo) {
extern int errno;
if (signo <= 0 || signo >= 33 ) {
errno = 22;
return -1;
}
return ((*set & (1 << ((signo)-1))) != 0);
}
int killpg (pid_t, int) ;
int sigblock (int) ;
int siginterrupt (int, int) ;
int sigpause (int) ;
void volatile sigreturn (struct sigcontext *) ;
int sigsetmask (int) ;
int sigstack (const struct sigstack *, struct sigstack *) ;
int sigvec (int, struct sigvec *, struct sigvec *) ;
void psignal (unsigned int, const char *) ;
# 32 "machine.h" 2
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/stat.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/time.h" 1 3
struct timeval {
long tv_sec;
long tv_usec;
};
struct timespec {
time_t ts_sec;
long ts_nsec;
};
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};
# 104 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/time.h" 3
# 113 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/time.h" 3
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
};
struct clockinfo {
int hz;
int tick;
int tickadj;
int stathz;
int profhz;
};
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/time.h" 1 3
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
long tm_gmtoff;
char *tm_zone;
};
char *asctime (const struct tm *) ;
clock_t clock (void) ;
char *ctime (const time_t *) ;
double difftime (time_t, time_t) ;
struct tm *gmtime (const time_t *) ;
struct tm *localtime (const time_t *) ;
time_t mktime (struct tm *) ;
size_t strftime (char *, size_t, const char *, const struct tm *) ;
time_t time (time_t *) ;
extern char *tzname[2];
void tzset (void) ;
char *timezone (int, int) ;
void tzsetwall (void) ;
# 143 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/time.h" 2 3
int adjtime (const struct timeval *, struct timeval *) ;
int getitimer (int, struct itimerval *) ;
int gettimeofday (struct timeval *, struct timezone *) ;
int setitimer (int, const struct itimerval *, struct itimerval *) ;
int settimeofday (const struct timeval *, const struct timezone *) ;
int utimes (const char *, const struct timeval *) ;
# 40 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/stat.h" 2 3
# 64 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/stat.h" 3
struct stat
{
dev_t st_dev;
ino_t st_ino;
unsigned short st_mode;
short st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
time_t st_atime;
int st_spare1;
time_t st_mtime;
int st_spare2;
time_t st_ctime;
int st_spare3;
long st_blksize;
long st_blocks;
long st_spare4[2];
};
mode_t umask (mode_t) ;
int chmod (const char *, mode_t) ;
int fstat (int, struct stat *) ;
int mkdir (const char *, mode_t) ;
int mkfifo (const char *, mode_t) ;
int stat (const char *, struct stat *) ;
int fchmod (int, mode_t) ;
int lstat (const char *, struct stat *) ;
# 34 "machine.h" 2
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/fcntl.h" 1 3
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/fcntl.h" 1 3
# 120 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/sys/fcntl.h" 3
struct flock {
short l_type;
short l_whence;
off_t l_start;
off_t l_len;
pid_t l_pid;
};
int open (const char *, int, ...) ;
int fcntl (int, int, ...) ;
int creat (const char *, mode_t) ;
int flock (int, int) ;
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/fcntl.h" 2 3
# 35 "machine.h" 2
# 1 "/ade/lib/gcc-lib/ppc-amigaos/2.7.2.1/include/errno.h" 1 3
extern int errno;
extern int errno;
# 36 "machine.h" 2
typedef float FLOAT;
typedef double FLOAT8;
# 93 "machine.h"
# 8 "util.h" 2
# 1 "encoder.h" 1
# 9 "util.h" 2
typedef struct {
unsigned int steps;
unsigned int bits;
unsigned int group;
unsigned int quant;
} sb_alloc, *alloc_ptr;
typedef sb_alloc al_table[32 ][16];
typedef struct {
int version;
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;
} layer, *the_layer;
typedef struct {
layer *header;
int actual_mode;
al_table *alloc;
int tab_num;
int jsbound;
int sblimit;
} frame_params;
enum byte_order { order_unknown, order_bigEndian, order_littleEndian };
extern enum byte_order NativeByteOrder;
typedef struct bit_stream_struc {
unsigned char* pbtOutBuf;
int nOutBufPos;
FILE *pt;
unsigned char *buf;
int buf_size;
unsigned long totbit;
int buf_byte_idx;
int buf_bit_idx;
} Bit_stream_struc;
# 1 "l3side.h" 1
typedef FLOAT8 D576[576];
typedef int I576[576];
typedef FLOAT8 D192_3[192][3];
typedef int I192_3[192][3];
typedef struct {
FLOAT8 l[21 ];
FLOAT8 s[12 ][3];
} III_psy_xmin;
typedef struct {
III_psy_xmin thm;
III_psy_xmin en;
} III_psy_ratio;
typedef struct {
unsigned part2_3_length;
unsigned big_values;
unsigned count1;
unsigned global_gain;
unsigned scalefac_compress;
unsigned window_switching_flag;
unsigned block_type;
unsigned mixed_block_flag;
unsigned table_select[3];
int subblock_gain[3];
unsigned region0_count;
unsigned region1_count;
unsigned preflag;
unsigned scalefac_scale;
unsigned count1table_select;
unsigned part2_length;
unsigned sfb_lmax;
unsigned sfb_smax;
unsigned count1bits;
unsigned *sfb_partition_table;
unsigned slen[4];
} gr_info;
typedef struct {
int main_data_begin;
unsigned private_bits;
int resvDrain;
unsigned scfsi[2][4];
struct {
struct gr_info_ss {
gr_info tt;
} ch[2];
} gr[2];
} III_side_info_t;
typedef struct {
int l[22 ];
int s[13 ][3];
} III_scalefac_t;
# 153 "util.h" 2
extern FLOAT8 s_freq[2][4];
extern int bitrate[2][3][15];
extern void display_bitrates(FILE *out_fh);
extern int BitrateIndex(int, int, int,int);
extern int SmpFrqIndex(long, int*);
extern void *mem_alloc(unsigned long, char*);
extern void empty_buffer(Bit_stream_struc*);
extern int copy_buffer(char *buffer,Bit_stream_struc *bs);
extern void init_bit_stream_w(Bit_stream_struc*);
extern void alloc_buffer(Bit_stream_struc*, int);
extern void desalloc_buffer(Bit_stream_struc*);
extern void putbits(Bit_stream_struc*, unsigned int, int);
extern enum byte_order DetermineByteOrder(void);
extern void SwapBytesInWords( short *loc, int words );
extern void
getframebits(layer *info, int *bitsPerFrame, int *mean_bits);
void timestatus(layer *info,long frameNum,long totalframes);
# 26 "quantize.c" 2
# 1 "quantize.h" 1
extern int cont_flag;
extern int pretab[];
void iteration_loop( FLOAT8 pe[2][2], FLOAT8 ms_ratio[2],
FLOAT8 xr_org[2][2][576], III_psy_ratio ratio[2][2],
III_side_info_t *l3_side, int l3_enc[2][2][576],
III_scalefac_t scalefac[2][2], frame_params *fr_ps);
void VBR_iteration_loop( FLOAT8 pe[2][2], FLOAT8 ms_ratio[2],
FLOAT8 xr_org[2][2][576], III_psy_ratio ratio[2][2],
III_side_info_t *l3_side, int l3_enc[2][2][576],
III_scalefac_t scalefac[2][2], frame_params *fr_ps);
extern int bit_buffer[50000];
# 28 "quantize.c" 2
# 1 "l3bitstream.h" 1
void III_format_bitstream( int bitsPerFrame,
frame_params *in_fr_ps,
int l3_enc[2][2][576],
III_side_info_t *l3_side,
III_scalefac_t scalefac[2][2],
Bit_stream_struc *in_bs);
int HuffmanCode( int table_select, int x, int y, unsigned *code, unsigned int *extword, int *codebits, int *extbits );
void III_FlushBitstream(void);
int abs_and_sign( int *x );
# 29 "quantize.c" 2
# 1 "reservoir.h" 1
int ResvFrameBegin( frame_params *fr_ps, III_side_info_t *l3_side, int mean_bits, int frameLength );
void ResvMaxBits2( int mean_bits, int *targ_bits, int *max_bits, int gr);
void ResvAdjust(gr_info *gi, III_side_info_t *l3_side, int mean_bits );
void ResvFrameEnd(III_side_info_t *l3_side, int mean_bits );
# 30 "quantize.c" 2
# 1 "quantize-pvt.h" 1
extern FLOAT masking_lower;
extern int convert_mdct, convert_psy, reduce_sidechannel;
extern unsigned nr_of_sfb_block[6][3][4];
extern int pretab[21];
struct scalefac_struct
{
int l[1+ 22 ];
int s[1+ 13 ];
};
extern struct scalefac_struct scalefac_band;
extern struct scalefac_struct sfBandIndex[6];
extern FLOAT8 pow43[(8206 +2) ];
extern FLOAT8 pow20[256 ];
extern FLOAT8 ipow20[256 ];
FLOAT8 ATHformula(FLOAT8 f);
void compute_ath(layer *info,FLOAT8 ATH_l[21 ],FLOAT8 ATH_s[21 ]);
void ms_convert(FLOAT8 xr[2][576],FLOAT8 xr_org[2][576]);
void on_pe(FLOAT8 pe[2][2],III_side_info_t *l3_side,
int targ_bits[2],int mean_bits, int gr);
void reduce_side(int targ_bits[2],FLOAT8 ms_ener_ratio,int mean_bits);
void outer_loop( FLOAT8 xr[576],
int bits,
FLOAT8 noise[4],
FLOAT8 targ_noise[4],
III_psy_xmin *l3_xmin,
int l3_enc[576],
frame_params *fr_ps,
III_scalefac_t *scalefac,
gr_info *,
FLOAT8 xfsf[4][21 ],
int ch);
void outer_loop_dual( FLOAT8 xr[2][576],
FLOAT8 xr_org[2][576],
int mean_bits,
int bit_rate,
int best_over[2],
III_psy_xmin l3_xmin[2],
int l3_enc[2][576],
frame_params *fr_ps,
III_scalefac_t scalefac[2],
int gr,
III_side_info_t *l3_side,
III_psy_ratio ratio[2],
FLOAT8 pe[2][2],
FLOAT8 ms_ratio[2]);
void iteration_init( III_side_info_t *l3_side, int l3_enc[2][2][576],
frame_params *fr_ps);
int inner_loop( FLOAT8 xrpow[576],
int l3_enc[576],
int max_bits,
gr_info *cod_info);
int calc_xmin( FLOAT8 xr[576],
III_psy_ratio *ratio,
gr_info *cod_info,
III_psy_xmin *l3_xmin);
int scale_bitcount( III_scalefac_t *scalefac, gr_info *cod_info);
int scale_bitcount_lsf( III_scalefac_t *scalefac, gr_info *cod_info);
int calc_noise1( FLOAT8 xr[576],
int ix[576],
gr_info *cod_info,
FLOAT8 xfsf[4][21 ],
FLOAT8 distort[4][21 ],
III_psy_xmin *l3_xmin,
III_scalefac_t *,
FLOAT8 *noise, FLOAT8 *tot_noise, FLOAT8 *max_noise);
void calc_noise2( FLOAT8 xr[2][576],
int ix[2][576],
gr_info *cod_info[2],
FLOAT8 xfsf[2][4][21 ],
FLOAT8 distort[2][4][21 ],
III_psy_xmin l3_xmin[2],
III_scalefac_t scalefac[2],
int over[2],
FLOAT8 noise[2], FLOAT8 tot_noise[2], FLOAT8 max_noise[2]);
int loop_break( III_scalefac_t *scalefac, gr_info *cod_info);
void amp_scalefac_bands(FLOAT8 xrpow[576],
gr_info *cod_info,
III_scalefac_t *scalefac,
FLOAT8 distort[4][21 ]);
void quantize_xrpow( FLOAT8 xr[576],
int ix[576],
gr_info *cod_info );
void quantize_xrpow_ISO( FLOAT8 xr[576],
int ix[576],
gr_info *cod_info );
int
new_choose_table( int ix[576],
unsigned int begin,
unsigned int end, int * s );
int bin_search_StepSize2(int desired_rate, FLOAT8 start, int ix[576],
FLOAT8 xrs[576], FLOAT8 xrspow[576], gr_info * cod_info);
int count_bits(int *ix, FLOAT8 xr[576], gr_info *cod_info);
int quant_compare(
int best_over,FLOAT8 best_tot_noise,FLOAT8 best_over_noise,FLOAT8 best_max_over,
int over,FLOAT8 tot_noise, FLOAT8 over_noise,FLOAT8 max_noise);
int VBR_compare(
int best_over,FLOAT8 best_tot_noise,FLOAT8 best_over_noise,FLOAT8 best_max_over,
int over,FLOAT8 tot_noise, FLOAT8 over_noise,FLOAT8 max_noise);
void best_huffman_divide(int gr, int ch, gr_info *cod_info, int *ix);
void best_scalefac_store(int gr, int ch,
III_side_info_t *l3_side,
III_scalefac_t scalefac[2][2]);
int init_outer_loop(
FLOAT8 xr[576],
gr_info *cod_info);
# 31 "quantize.c" 2
# 117 "quantize.c"
void
iteration_loop( FLOAT8 pe[2][2], FLOAT8 ms_ener_ratio[2],
FLOAT8 xr_org[2][2][576], III_psy_ratio ratio[2][2],
III_side_info_t *l3_side, int l3_enc[2][2][576],
III_scalefac_t scalefac[2][2], frame_params *fr_ps)
{
III_psy_xmin l3_xmin[2];
gr_info *cod_info;
layer *info;
int over[2];
FLOAT8 noise[4];
FLOAT8 targ_noise[4];
int bitsPerFrame;
int mean_bits;
int ch, gr, i, bit_rate;
FLOAT8 xr[2][576];
FLOAT8 xfsf[4][21 ];
iteration_init(l3_side,l3_enc,fr_ps);
info = fr_ps->header;
bit_rate = bitrate[info->version][info->lay-1][info->bitrate_index];
getframebits(info, &bitsPerFrame, &mean_bits);
ResvFrameBegin( fr_ps, l3_side, mean_bits, bitsPerFrame );
for ( gr = 0; gr < gf.mode_gr; gr++ ) {
if (convert_psy) {
outer_loop_dual( xr, xr_org[gr], mean_bits, bit_rate, over,
l3_xmin, l3_enc[gr], fr_ps, scalefac[gr],
gr, l3_side, ratio[gr], pe, ms_ener_ratio);
for (ch=0 ; ch < gf.stereo ; ch ++ ) {
cod_info = &l3_side->gr[gr].ch[ch].tt;
best_scalefac_store(gr, ch, l3_side, scalefac);
ResvAdjust(cod_info, l3_side, mean_bits );
((void) 0) ;
}
for ( ch = 0; ch < gf.stereo; ch++ ) {
for ( i = 0; i < 576; i++) {
if (xr[ch][i] < 0)
l3_enc[gr][ch][i] *= -1;
}
}
} else {
int targ_bits[2];
if (convert_mdct)
ms_convert(xr_org[gr], xr_org[gr]);
on_pe(pe,l3_side,targ_bits,mean_bits, gr);
if (reduce_sidechannel)
reduce_side(targ_bits,ms_ener_ratio[gr],mean_bits);
for (ch=0 ; ch < gf.stereo ; ch ++) {
cod_info = &l3_side->gr[gr].ch[ch].tt;
if (!init_outer_loop(xr_org[gr][ch], cod_info))
{
memset(&scalefac[gr][ch],0,sizeof(III_scalefac_t));
memset(l3_enc[gr][ch],0,576*sizeof(int));
noise[0]=noise[1]=noise[2]=noise[3]=0;
}
else
{
calc_xmin(xr_org[gr][ch], &ratio[gr][ch], cod_info, &l3_xmin[ch]);
outer_loop( xr_org[gr][ch], targ_bits[ch], noise, targ_noise,
&l3_xmin[ch], l3_enc[gr][ch], fr_ps,
&scalefac[gr][ch], cod_info, xfsf, ch);
}
best_scalefac_store(gr, ch, l3_side, scalefac);
if (gf.use_best_huffman==1 && cod_info->block_type == 0 ) {
best_huffman_divide(gr, ch, cod_info, l3_enc[gr][ch]);
}
ResvAdjust(cod_info, l3_side, mean_bits );
for ( i = 0; i < 576; i++) {
if (xr_org[gr][ch][i] < 0)
l3_enc[gr][ch][i] *= -1;
}
}
}
}
# 248 "quantize.c"
ResvFrameEnd(l3_side, mean_bits );
}
void
set_masking_lower (int nbits)
{
FLOAT masking_lower_db, adjust;
# 280 "quantize.c"
masking_lower_db = -6 + 2*gf.VBR_q;
adjust = (nbits-125)/(2500.0-125.0);
adjust = 4*(adjust-1);
masking_lower_db += adjust;
masking_lower = pow(10.0,masking_lower_db/10);
}
void
VBR_iteration_loop (FLOAT8 pe[2][2], FLOAT8 ms_ener_ratio[2],
FLOAT8 xr[2][2][576], III_psy_ratio ratio[2][2],
III_side_info_t * l3_side, int l3_enc[2][2][576],
III_scalefac_t scalefac[2][2], frame_params * fr_ps)
{
gr_info bst_cod_info, clean_cod_info;
III_scalefac_t bst_scalefac;
int bst_l3_enc[576];
III_psy_xmin l3_xmin;
gr_info *cod_info = 0 ;
layer *info;
int save_bits[2][2];
FLOAT8 noise[4];
FLOAT8 targ_noise[4];
FLOAT8 xfsf[4][21 ];
int this_bits, dbits;
int used_bits=0;
int min_bits,max_bits,min_mean_bits=0;
int frameBits[15];
int bitsPerFrame;
int bits;
int mean_bits;
int i,ch, gr, analog_silence;
int reparted = 0;
iteration_init(l3_side,l3_enc,fr_ps);
info = fr_ps->header;
for( info->bitrate_index = 1;
info->bitrate_index <= gf.VBR_max_bitrate;
info->bitrate_index++ ) {
getframebits (info, &bitsPerFrame, &mean_bits);
if (info->bitrate_index == gf.VBR_min_bitrate) {
min_mean_bits=mean_bits/gf.stereo;
}
frameBits[info->bitrate_index]=
ResvFrameBegin (fr_ps, l3_side, mean_bits, bitsPerFrame);
}
info->bitrate_index=gf.VBR_max_bitrate;
analog_silence=0;
for (gr = 0; gr < gf.mode_gr; gr++) {
int num_chan=gf.stereo;
if (reduce_sidechannel) num_chan=1;
if (convert_mdct)
ms_convert(xr[gr],xr[gr]);
for (ch = 0; ch < num_chan; ch++) {
int real_bits;
cod_info = &l3_side->gr[gr].ch[ch].tt;
min_bits = (( 125 ) > ( min_mean_bits ) ? ( 125 ) : ( min_mean_bits )) ;
if (!init_outer_loop(xr[gr][ch], cod_info))
{
memset(&scalefac[gr][ch],0,sizeof(III_scalefac_t));
memset(l3_enc[gr][ch],0,576*sizeof(int));
save_bits[gr][ch] = 0;
analog_silence=1;
continue;
}
memcpy( &clean_cod_info, cod_info, sizeof(gr_info) );
set_masking_lower( 2500 );
if (0==calc_xmin(xr[gr][ch], &ratio[gr][ch], cod_info, &l3_xmin)) {
analog_silence=1;
min_bits=125;
}
if (cod_info->block_type== 2 ) {
min_bits += (( 1100 ) > ( pe[gr][ch] ) ? ( 1100 ) : ( pe[gr][ch] )) ;
min_bits= (( min_bits ) < ( 1800 ) ? ( min_bits ) : ( 1800 )) ;
}
max_bits = 1200 + frameBits[gf.VBR_max_bitrate]/(gf.stereo*gf.mode_gr);
max_bits= (( max_bits ) < ( 2500 ) ? ( max_bits ) : ( 2500 )) ;
max_bits= (( max_bits ) > ( min_bits ) ? ( max_bits ) : ( min_bits )) ;
dbits = (max_bits-min_bits)/4;
this_bits = (max_bits+min_bits)/2;
real_bits = max_bits+1;
do {
int better;
((void) 0) ;
((void) 0) ;
if( this_bits >= real_bits ){
this_bits -= dbits;
dbits /= 2;
continue;
}
targ_noise[0]=0;
targ_noise[1]=0;
targ_noise[2]=0;
targ_noise[3]=0;
targ_noise[0]= (( 0 ) > ( targ_noise[0] ) ? ( 0 ) : ( targ_noise[0] )) ;
targ_noise[2]= (( 0 ) > ( targ_noise[2] ) ? ( 0 ) : ( targ_noise[2] )) ;
memcpy( cod_info, &clean_cod_info, sizeof(gr_info) );
set_masking_lower( this_bits );
calc_xmin(xr[gr][ch], &ratio[gr][ch], cod_info, &l3_xmin);
outer_loop( xr[gr][ch], this_bits, noise, targ_noise,
&l3_xmin, l3_enc[gr][ch], fr_ps,
&scalefac[gr][ch], cod_info, xfsf,
ch);
better=VBR_compare((int)targ_noise[0],targ_noise[3],targ_noise[2],
targ_noise[1],(int)noise[0],noise[3],noise[2],
noise[1]);
if (better) {
real_bits = cod_info->part2_3_length;
memcpy( &bst_scalefac, &scalefac[gr][ch], sizeof(III_scalefac_t) );
memcpy( bst_l3_enc, l3_enc [gr][ch], sizeof(int)*576 );
memcpy( &bst_cod_info, cod_info, sizeof(gr_info) );
this_bits -= dbits;
} else {
this_bits += dbits;
}
dbits /= 2;
} while (dbits>10) ;
if (real_bits <= max_bits)
{
memcpy( cod_info, &bst_cod_info, sizeof(gr_info) );
memcpy( &scalefac[gr][ch], &bst_scalefac, sizeof(III_scalefac_t) );
memcpy( l3_enc [gr][ch], bst_l3_enc, sizeof(int)*576 );
}
((void) 0) ;
save_bits[gr][ch] = cod_info->part2_3_length;
used_bits += save_bits[gr][ch];
}
}
if (reduce_sidechannel) {
for (gr = 0; gr < gf.mode_gr; gr++) {
FLOAT8 fac = .33*(.5-ms_ener_ratio[gr])/.5;
save_bits[gr][1]=((1-fac)/(1+fac))*save_bits[gr][0];
save_bits[gr][1]= (( 125 ) > ( save_bits[gr][1] ) ? ( 125 ) : ( save_bits[gr][1] )) ;
used_bits += save_bits[gr][1];
}
}
for( info->bitrate_index = (analog_silence ? 1 : gf.VBR_min_bitrate );
info->bitrate_index < gf.VBR_max_bitrate;
info->bitrate_index++ )
if( used_bits <= frameBits[info->bitrate_index] ) break;
getframebits (info, &bitsPerFrame, &mean_bits);
bits=ResvFrameBegin (fr_ps, l3_side, mean_bits, bitsPerFrame);
if (used_bits > bits ) {
reparted = 1;
for( gr = 0; gr < gf.mode_gr; gr++) {
for(ch = 0; ch < gf.stereo; ch++) {
save_bits[gr][ch]=(save_bits[gr][ch]*frameBits[info->bitrate_index])/used_bits;
}
}
used_bits=0;
for( gr = 0; gr < gf.mode_gr; gr++) {
for(ch = 0; ch < gf.stereo; ch++) {
used_bits += save_bits[gr][ch];
}
}
}
((void) 0) ;
for(gr = 0; gr < gf.mode_gr; gr++) {
for(ch = 0; ch < gf.stereo; ch++) {
if (reparted || (reduce_sidechannel && ch == 1))
{
cod_info = &l3_side->gr[gr].ch[ch].tt;
if (!init_outer_loop(xr[gr][ch], cod_info))
{
memset(&scalefac[gr][ch],0,sizeof(III_scalefac_t));
memset(l3_enc[gr][ch],0,576*sizeof(int));
noise[0]=noise[1]=noise[2]=noise[3]=0;
}
else
{
set_masking_lower( save_bits[gr][ch] );
calc_xmin(xr[gr][ch], &ratio[gr][ch], cod_info, &l3_xmin);
outer_loop( xr[gr][ch], save_bits[gr][ch], noise,targ_noise,
&l3_xmin, l3_enc[gr][ch], fr_ps,
&scalefac[gr][ch], cod_info, xfsf, ch);
}
}
}
}
for (gr = 0; gr < gf.mode_gr; gr++)
for (ch = 0; ch < gf.stereo; ch++) {
cod_info = &l3_side->gr[gr].ch[ch].tt;
best_scalefac_store(gr, ch, l3_side, scalefac);
if (cod_info->block_type == 0 ) {
best_huffman_divide(gr, ch, cod_info, l3_enc[gr][ch]);
}
ResvAdjust (cod_info, l3_side, mean_bits);
}
for (gr = 0; gr < gf.mode_gr; gr++)
for (ch = 0; ch < gf.stereo; ch++) {
int *pi = &l3_enc[gr][ch][0];
for (i = 0; i < 576; i++) {
FLOAT8 pr = xr[gr][ch][i];
if ((pr < 0) && (pi[i] > 0))
pi[i] *= -1;
}
}
ResvFrameEnd (l3_side, mean_bits);
}
int init_outer_loop(
FLOAT8 xr[576],
gr_info *cod_info)
{
int i;
for ( i = 0; i < 4; i++ )
cod_info->slen[i] = 0;
cod_info->sfb_partition_table = &nr_of_sfb_block[0][0][0];
cod_info->part2_3_length = 0;
cod_info->big_values = ((cod_info->block_type== 2 )?288:0);
cod_info->count1 = 0;
cod_info->scalefac_compress = 0;
cod_info->table_select[0] = 0;
cod_info->table_select[1] = 0;
cod_info->table_select[2] = 0;
cod_info->subblock_gain[0] = 0;
cod_info->subblock_gain[1] = 0;
cod_info->subblock_gain[2] = 0;
cod_info->region0_count = 0;
cod_info->region1_count = 0;
cod_info->part2_length = 0;
cod_info->preflag = 0;
cod_info->scalefac_scale = 0;
cod_info->global_gain = 210;
cod_info->count1table_select= 0;
cod_info->count1bits = 0;
if (gf.experimentalZ) {
int j,b; FLOAT8 en[3],mx;
if ((cod_info->block_type== 2 ) ) {
for (b=0; b<3; b++) en[b]=0;
for ( i=0,j = 0; j < 192; j++ ) {
for (b=0; b<3; b++) {
en[b]+=xr[i] * xr[i];
i++;
}
}
mx = 1e-12;
for (b=0; b<3; b++) mx= (( mx ) > ( en[b] ) ? ( mx ) : ( en[b] )) ;
for (b=0; b<3; b++) en[b] = (( en[b] ) > ( 1e-12 ) ? ( en[b] ) : ( 1e-12 )) /mx;
for (b=0; b<3; b++) {
cod_info->subblock_gain[b] = (int)(-.5*log(en[b])/ 0.69314718055994530942 + 0.5);
if (cod_info->subblock_gain[b] > 2)
cod_info->subblock_gain[b]=2;
if (cod_info->subblock_gain[b] < 0)
cod_info->subblock_gain[b]=0;
}
if (1e-99 < en[0]+en[1]+en[2])
return 1;
else
return 0;
}
}
for (i=0; i<576; i++)
if ( 1e-99 < fabs (xr[i]) )
return 1;
return 0;
}
void outer_loop(
FLOAT8 xr[576],
int targ_bits,
FLOAT8 best_noise[4],
FLOAT8 targ_noise[4],
III_psy_xmin *l3_xmin,
int l3_enc[576],
frame_params *fr_ps,
III_scalefac_t *scalefac,
gr_info *cod_info,
FLOAT8 xfsf[4][21 ],
int ch)
{
III_scalefac_t scalefac_w;
gr_info save_cod_info;
int l3_enc_w[576];
int i, iteration;
int status,bits_found=0;
int huff_bits;
FLOAT8 xrpow[576],temp;
int better;
int over=0;
FLOAT8 max_noise;
FLOAT8 over_noise;
FLOAT8 tot_noise;
int best_over=100;
FLOAT8 best_max_noise=0;
FLOAT8 best_over_noise=0;
FLOAT8 best_tot_noise=0;
FLOAT8 xfsf_w[4][21 ];
FLOAT8 distort[4][21 ];
int compute_stepsize=1;
int notdone=1;
iteration = 0;
while ( notdone ) {
static FLOAT8 OldValue[2] = {180, 180};
int try_scale=0;
iteration ++;
if (compute_stepsize) {
compute_stepsize=0;
memset(&scalefac_w, 0, sizeof(III_scalefac_t));
for (i=0;i<576;i++) {
temp=fabs(xr[i]);
xrpow[i]=sqrt(sqrt(temp)*temp);
}
bits_found=bin_search_StepSize2(targ_bits,OldValue[ch],
l3_enc_w,xr,xrpow,cod_info);
OldValue[ch] = cod_info->global_gain;
}
huff_bits = targ_bits - cod_info->part2_length;
if (huff_bits < 0) {
((void) 0) ;
notdone=0;
} else {
int real_bits;
if (iteration==1) {
if(bits_found>huff_bits) {
cod_info->global_gain++;
real_bits = inner_loop(xrpow, l3_enc_w, huff_bits, cod_info);
} else real_bits=bits_found;
}
else
real_bits=inner_loop(xrpow, l3_enc_w, huff_bits, cod_info);
cod_info->part2_3_length = real_bits;
if (gf.noise_shaping==0) {
over=0;
}else{
over=calc_noise1( xr, l3_enc_w, cod_info,
xfsf_w,distort, l3_xmin, &scalefac_w, &over_noise,
&tot_noise, &max_noise);
}
if (iteration == 1) better=1;
else
better=quant_compare(
best_over,best_tot_noise,best_over_noise,best_max_noise,
over, tot_noise, over_noise, max_noise);
if (better) {
best_over=over;
best_max_noise=max_noise;
best_over_noise=over_noise;
best_tot_noise=tot_noise;
memcpy(scalefac, &scalefac_w, sizeof(III_scalefac_t));
memcpy(l3_enc,l3_enc_w,sizeof(int)*576);
memcpy(&save_cod_info,cod_info,sizeof(save_cod_info));
}
}
if (gf.noise_shaping_stop==0)
if (over==0) notdone=0;
if (notdone) {
amp_scalefac_bands( xrpow, cod_info, &scalefac_w, distort);
if ( (status = loop_break(&scalefac_w, cod_info)) == 0 ) {
if ( fr_ps->header->version == 1 ) {
status = scale_bitcount(&scalefac_w, cod_info);
}else{
status = scale_bitcount_lsf(&scalefac_w, cod_info);
}
if (status && (cod_info->scalefac_scale==0)) try_scale=1;
}
notdone = !status;
}
if (try_scale && gf.experimentalY) {
init_outer_loop(xr, cod_info);
compute_stepsize=1;
notdone=1;
cod_info->scalefac_scale=1;
}
}
memcpy(cod_info,&save_cod_info,sizeof(save_cod_info));
cod_info->part2_3_length += cod_info->part2_length;
((void) 0) ;
best_noise[0]=best_over;
best_noise[1]=best_max_noise;
best_noise[2]=best_over_noise;
best_noise[3]=best_tot_noise;
}
int calc_noise1( FLOAT8 xr[576], int ix[576], gr_info *cod_info,
FLOAT8 xfsf[4][21 ], FLOAT8 distort[4][21 ],
III_psy_xmin *l3_xmin, III_scalefac_t *scalefac,
FLOAT8 *over_noise,
FLOAT8 *tot_noise, FLOAT8 *max_noise)
{
int start, end, l, i, over=0;
u_int sfb;
FLOAT8 sum,step,bw;
int count=0;
FLOAT8 noise;
*over_noise=0;
*tot_noise=0;
*max_noise=-999;
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ ) {
FLOAT8 step;
int s = scalefac->l[sfb];
if (cod_info->preflag)
s += pretab[sfb];
s = cod_info->global_gain - (s << (cod_info->scalefac_scale + 1));
((void) 0) ;
((void) 0) ;
step = pow20[ s ] ;
start = scalefac_band.l[ sfb ];
end = scalefac_band.l[ sfb+1 ];
bw = end - start;
for ( sum = 0.0, l = start; l < end; l++ )
{
FLOAT8 temp;
temp = fabs(xr[l]) - pow43[ix[l]] * step;
sum += temp * temp;
}
xfsf[0][sfb] = sum / bw;
noise = 10*log10((( .001 ) > ( xfsf[0][sfb] / l3_xmin->l[sfb] ) ? ( .001 ) : ( xfsf[0][sfb] / l3_xmin->l[sfb] )) );
distort[0][sfb] = noise;
if (noise>0) {
over++;
*over_noise += noise;
}
*tot_noise += noise;
*max_noise= (( *max_noise ) > ( noise ) ? ( *max_noise ) : ( noise )) ;
count++;
}
for ( i = 0; i < 3; i++ ) {
for ( sfb = cod_info->sfb_smax; sfb < 12 ; sfb++ ) {
int s;
s = (scalefac->s[sfb][i] << (cod_info->scalefac_scale + 1))
+ cod_info->subblock_gain[i] * 8;
s = cod_info->global_gain - s;
((void) 0) ;
((void) 0) ;
step = pow20[ s ] ;
start = scalefac_band.s[ sfb ];
end = scalefac_band.s[ sfb+1 ];
bw = end - start;
for ( sum = 0.0, l = start; l < end; l++ ) {
FLOAT8 temp;
temp = fabs(xr[l * 3 + i]) - pow43[ix[l * 3 + i]] * step;
sum += temp * temp;
}
xfsf[i+1][sfb] = sum / bw;
noise = 10*log10((( .001 ) > ( xfsf[i+1][sfb] / l3_xmin->s[sfb][i] ) ? ( .001 ) : ( xfsf[i+1][sfb] / l3_xmin->s[sfb][i] )) );
distort[i+1][sfb] = noise;
if (noise > 0) {
over++;
*over_noise += noise;
}
*tot_noise += noise;
*max_noise= (( *max_noise ) > ( noise ) ? ( *max_noise ) : ( noise )) ;
count++;
}
}
if (count>1) *tot_noise /= count;
if (over>1) *over_noise /= over;
return over;
}
void amp_scalefac_bands(FLOAT8 xrpow[576],
gr_info *cod_info,
III_scalefac_t *scalefac,
FLOAT8 distort[4][21 ])
{
int start, end, l,i;
u_int sfb;
FLOAT8 ifqstep34;
FLOAT8 distort_thresh;
if ( cod_info->scalefac_scale == 0 )
ifqstep34 = 1.29683955465100964055;
else
ifqstep34 = 1.68179283050742922612;
distort_thresh = -900;
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ ) {
distort_thresh = (( distort[0][sfb] ) > ( distort_thresh ) ? ( distort[0][sfb] ) : ( distort_thresh )) ;
}
for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ ) {
for ( i = 0; i < 3; i++ ) {
distort_thresh = (( distort[i+1][sfb] ) > ( distort_thresh ) ? ( distort[i+1][sfb] ) : ( distort_thresh )) ;
}
}
distort_thresh= (( distort_thresh * 1.05 ) < ( 0.0 ) ? ( distort_thresh * 1.05 ) : ( 0.0 )) ;
for ( sfb = 0; sfb < cod_info->sfb_lmax; sfb++ ) {
if ( distort[0][sfb]>distort_thresh ) {
scalefac->l[sfb]++;
start = scalefac_band.l[sfb];
end = scalefac_band.l[sfb+1];
for ( l = start; l < end; l++ )
xrpow[l] *= ifqstep34;
}
}
for ( i = 0; i < 3; i++ ) {
for ( sfb = cod_info->sfb_smax; sfb < 12; sfb++ ) {
if ( distort[i+1][sfb]>distort_thresh) {
scalefac->s[sfb][i]++;
start = scalefac_band.s[sfb];
end = scalefac_band.s[sfb+1];
for (l = start; l < end; l++)
xrpow[l * 3 + i] *= ifqstep34;
}
}
}
}
int quant_compare(
int best_over,FLOAT8 best_tot_noise,FLOAT8 best_over_noise,FLOAT8 best_max_noise,
int over,FLOAT8 tot_noise, FLOAT8 over_noise, FLOAT8 max_noise)
{
int better=0;
if (gf.experimentalX==0) {
better = ((over < best_over) ||
((over==best_over) && (over_noise<=best_over_noise)) ) ;
}
if (gf.experimentalX==1)
better = max_noise < best_max_noise;
if (gf.experimentalX==2) {
better = tot_noise < best_tot_noise;
}
if (gf.experimentalX==3) {
better = (tot_noise < best_tot_noise) &&
(max_noise < best_max_noise + 2);
}
if (gf.experimentalX==4) {
better = ( ( (0>=max_noise) && (best_max_noise>2)) ||
( (0>=max_noise) && (best_max_noise<0) && ((best_max_noise+2)>max_noise) && (tot_noise<best_tot_noise) ) ||
( (0>=max_noise) && (best_max_noise>0) && ((best_max_noise+2)>max_noise) && (tot_noise<(best_tot_noise+best_over_noise)) ) ||
( (0<max_noise) && (best_max_noise>-0.5) && ((best_max_noise+1)>max_noise) && ((tot_noise+over_noise)<(best_tot_noise+best_over_noise)) ) ||
( (0<max_noise) && (best_max_noise>-1) && ((best_max_noise+1.5)>max_noise) && ((tot_noise+over_noise+over_noise)<(best_tot_noise+best_over_noise+best_over_noise)) ) );
}
if (gf.experimentalX==5) {
better = (over_noise < best_over_noise)
|| ((over_noise == best_over_noise)&&(tot_noise < best_tot_noise));
}
if (gf.experimentalX==6) {
better = (over_noise < best_over_noise)
||( (over_noise == best_over_noise)
&&( (max_noise < best_max_noise)
||( (max_noise == best_max_noise)
&&(tot_noise <= best_tot_noise)
)
)
);
}
return better;
}
int VBR_compare(
int best_over,FLOAT8 best_tot_noise,FLOAT8 best_over_noise,FLOAT8 best_max_noise,
int over,FLOAT8 tot_noise, FLOAT8 over_noise, FLOAT8 max_noise)
{
int better=0;
better = ((over <= best_over) &&
(over_noise<=best_over_noise) &&
(tot_noise<=best_tot_noise) &&
(max_noise<=best_max_noise));
return better;
}