This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

About my bug report



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;
}
  








Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]