added ogg/vorbis source code for ease of building on msvc
[laserbrain_demo] / libs / vorbis / psy.h
diff --git a/libs/vorbis/psy.h b/libs/vorbis/psy.h
new file mode 100644 (file)
index 0000000..c1ea824
--- /dev/null
@@ -0,0 +1,154 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: random psychoacoustics (not including preecho)
+ last mod: $Id: psy.h 16946 2010-03-03 16:12:40Z xiphmont $
+
+ ********************************************************************/
+
+#ifndef _V_PSY_H_
+#define _V_PSY_H_
+#include "smallft.h"
+
+#include "backends.h"
+#include "envelope.h"
+
+#ifndef EHMER_MAX
+#define EHMER_MAX 56
+#endif
+
+/* psychoacoustic setup ********************************************/
+#define P_BANDS 17      /* 62Hz to 16kHz */
+#define P_LEVELS 8      /* 30dB to 100dB */
+#define P_LEVEL_0 30.    /* 30 dB */
+#define P_NOISECURVES 3
+
+#define NOISE_COMPAND_LEVELS 40
+typedef struct vorbis_info_psy{
+  int   blockflag;
+
+  float ath_adjatt;
+  float ath_maxatt;
+
+  float tone_masteratt[P_NOISECURVES];
+  float tone_centerboost;
+  float tone_decay;
+  float tone_abs_limit;
+  float toneatt[P_BANDS];
+
+  int noisemaskp;
+  float noisemaxsupp;
+  float noisewindowlo;
+  float noisewindowhi;
+  int   noisewindowlomin;
+  int   noisewindowhimin;
+  int   noisewindowfixed;
+  float noiseoff[P_NOISECURVES][P_BANDS];
+  float noisecompand[NOISE_COMPAND_LEVELS];
+
+  float max_curve_dB;
+
+  int normal_p;
+  int normal_start;
+  int normal_partition;
+  double normal_thresh;
+} vorbis_info_psy;
+
+typedef struct{
+  int   eighth_octave_lines;
+
+  /* for block long/short tuning; encode only */
+  float preecho_thresh[VE_BANDS];
+  float postecho_thresh[VE_BANDS];
+  float stretch_penalty;
+  float preecho_minenergy;
+
+  float ampmax_att_per_sec;
+
+  /* channel coupling config */
+  int   coupling_pkHz[PACKETBLOBS];
+  int   coupling_pointlimit[2][PACKETBLOBS];
+  int   coupling_prepointamp[PACKETBLOBS];
+  int   coupling_postpointamp[PACKETBLOBS];
+  int   sliding_lowpass[2][PACKETBLOBS];
+
+} vorbis_info_psy_global;
+
+typedef struct {
+  float ampmax;
+  int   channels;
+
+  vorbis_info_psy_global *gi;
+  int   coupling_pointlimit[2][P_NOISECURVES];
+} vorbis_look_psy_global;
+
+
+typedef struct {
+  int n;
+  struct vorbis_info_psy *vi;
+
+  float ***tonecurves;
+  float **noiseoffset;
+
+  float *ath;
+  long  *octave;             /* in n.ocshift format */
+  long  *bark;
+
+  long  firstoc;
+  long  shiftoc;
+  int   eighth_octave_lines; /* power of two, please */
+  int   total_octave_lines;
+  long  rate; /* cache it */
+
+  float m_val; /* Masking compensation value */
+
+} vorbis_look_psy;
+
+extern void   _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
+                           vorbis_info_psy_global *gi,int n,long rate);
+extern void   _vp_psy_clear(vorbis_look_psy *p);
+extern void  *_vi_psy_dup(void *source);
+
+extern void   _vi_psy_free(vorbis_info_psy *i);
+extern vorbis_info_psy *_vi_psy_copy(vorbis_info_psy *i);
+
+extern void _vp_noisemask(vorbis_look_psy *p,
+                          float *logmdct,
+                          float *logmask);
+
+extern void _vp_tonemask(vorbis_look_psy *p,
+                         float *logfft,
+                         float *logmask,
+                         float global_specmax,
+                         float local_specmax);
+
+extern void _vp_offset_and_mix(vorbis_look_psy *p,
+                               float *noise,
+                               float *tone,
+                               int offset_select,
+                               float *logmask,
+                               float *mdct,
+                               float *logmdct);
+
+extern float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd);
+
+extern void _vp_couple_quantize_normalize(int blobno,
+                                          vorbis_info_psy_global *g,
+                                          vorbis_look_psy *p,
+                                          vorbis_info_mapping0 *vi,
+                                          float **mdct,
+                                          int   **iwork,
+                                          int    *nonzero,
+                                          int     sliding_lowpass,
+                                          int     ch);
+
+#endif