PageRenderTime 25ms CodeModel.GetById 15ms app.highlight 7ms RepoModel.GetById 2ms app.codeStats 0ms

/media/libvorbis/lib/psy.h

http://github.com/zpao/v8monkey
C Header | 154 lines | 103 code | 32 blank | 19 comment | 0 complexity | 1d22c6de7533247fe5a2f20f908c4efe MD5 | raw file
  1/********************************************************************
  2 *                                                                  *
  3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
  4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
  5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
  6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  7 *                                                                  *
  8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  9 * by the Xiph.Org Foundation http://www.xiph.org/                  *
 10 *                                                                  *
 11 ********************************************************************
 12
 13 function: random psychoacoustics (not including preecho)
 14 last mod: $Id: psy.h 16946 2010-03-03 16:12:40Z xiphmont $
 15
 16 ********************************************************************/
 17
 18#ifndef _V_PSY_H_
 19#define _V_PSY_H_
 20#include "smallft.h"
 21
 22#include "backends.h"
 23#include "envelope.h"
 24
 25#ifndef EHMER_MAX
 26#define EHMER_MAX 56
 27#endif
 28
 29/* psychoacoustic setup ********************************************/
 30#define P_BANDS 17      /* 62Hz to 16kHz */
 31#define P_LEVELS 8      /* 30dB to 100dB */
 32#define P_LEVEL_0 30.    /* 30 dB */
 33#define P_NOISECURVES 3
 34
 35#define NOISE_COMPAND_LEVELS 40
 36typedef struct vorbis_info_psy{
 37  int   blockflag;
 38
 39  float ath_adjatt;
 40  float ath_maxatt;
 41
 42  float tone_masteratt[P_NOISECURVES];
 43  float tone_centerboost;
 44  float tone_decay;
 45  float tone_abs_limit;
 46  float toneatt[P_BANDS];
 47
 48  int noisemaskp;
 49  float noisemaxsupp;
 50  float noisewindowlo;
 51  float noisewindowhi;
 52  int   noisewindowlomin;
 53  int   noisewindowhimin;
 54  int   noisewindowfixed;
 55  float noiseoff[P_NOISECURVES][P_BANDS];
 56  float noisecompand[NOISE_COMPAND_LEVELS];
 57
 58  float max_curve_dB;
 59
 60  int normal_p;
 61  int normal_start;
 62  int normal_partition;
 63  double normal_thresh;
 64} vorbis_info_psy;
 65
 66typedef struct{
 67  int   eighth_octave_lines;
 68
 69  /* for block long/short tuning; encode only */
 70  float preecho_thresh[VE_BANDS];
 71  float postecho_thresh[VE_BANDS];
 72  float stretch_penalty;
 73  float preecho_minenergy;
 74
 75  float ampmax_att_per_sec;
 76
 77  /* channel coupling config */
 78  int   coupling_pkHz[PACKETBLOBS];
 79  int   coupling_pointlimit[2][PACKETBLOBS];
 80  int   coupling_prepointamp[PACKETBLOBS];
 81  int   coupling_postpointamp[PACKETBLOBS];
 82  int   sliding_lowpass[2][PACKETBLOBS];
 83
 84} vorbis_info_psy_global;
 85
 86typedef struct {
 87  float ampmax;
 88  int   channels;
 89
 90  vorbis_info_psy_global *gi;
 91  int   coupling_pointlimit[2][P_NOISECURVES];
 92} vorbis_look_psy_global;
 93
 94
 95typedef struct {
 96  int n;
 97  struct vorbis_info_psy *vi;
 98
 99  float ***tonecurves;
100  float **noiseoffset;
101
102  float *ath;
103  long  *octave;             /* in n.ocshift format */
104  long  *bark;
105
106  long  firstoc;
107  long  shiftoc;
108  int   eighth_octave_lines; /* power of two, please */
109  int   total_octave_lines;
110  long  rate; /* cache it */
111
112  float m_val; /* Masking compensation value */
113
114} vorbis_look_psy;
115
116extern void   _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
117                           vorbis_info_psy_global *gi,int n,long rate);
118extern void   _vp_psy_clear(vorbis_look_psy *p);
119extern void  *_vi_psy_dup(void *source);
120
121extern void   _vi_psy_free(vorbis_info_psy *i);
122extern vorbis_info_psy *_vi_psy_copy(vorbis_info_psy *i);
123
124extern void _vp_noisemask(vorbis_look_psy *p,
125                          float *logmdct,
126                          float *logmask);
127
128extern void _vp_tonemask(vorbis_look_psy *p,
129                         float *logfft,
130                         float *logmask,
131                         float global_specmax,
132                         float local_specmax);
133
134extern void _vp_offset_and_mix(vorbis_look_psy *p,
135                               float *noise,
136                               float *tone,
137                               int offset_select,
138                               float *logmask,
139                               float *mdct,
140                               float *logmdct);
141
142extern float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd);
143
144extern void _vp_couple_quantize_normalize(int blobno,
145                                          vorbis_info_psy_global *g,
146                                          vorbis_look_psy *p,
147                                          vorbis_info_mapping0 *vi,
148                                          float **mdct,
149                                          int   **iwork,
150                                          int    *nonzero,
151                                          int     sliding_lowpass,
152                                          int     ch);
153
154#endif