tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

psy.h (4628B)


      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 https://xiph.org/                     *
     10 *                                                                  *
     11 ********************************************************************
     12 
     13 function: random psychoacoustics (not including preecho)
     14 
     15 ********************************************************************/
     16 
     17 #ifndef _V_PSY_H_
     18 #define _V_PSY_H_
     19 #include "smallft.h"
     20 
     21 #include "backends.h"
     22 #include "envelope.h"
     23 
     24 #ifndef EHMER_MAX
     25 #define EHMER_MAX 56
     26 #endif
     27 
     28 /* psychoacoustic setup ********************************************/
     29 #define P_BANDS 17      /* 62Hz to 16kHz */
     30 #define P_LEVELS 8      /* 30dB to 100dB */
     31 #define P_LEVEL_0 30.    /* 30 dB */
     32 #define P_NOISECURVES 3
     33 
     34 #define NOISE_COMPAND_LEVELS 40
     35 typedef struct vorbis_info_psy{
     36  int   blockflag;
     37 
     38  float ath_adjatt;
     39  float ath_maxatt;
     40 
     41  float tone_masteratt[P_NOISECURVES];
     42  float tone_centerboost;
     43  float tone_decay;
     44  float tone_abs_limit;
     45  float toneatt[P_BANDS];
     46 
     47  int noisemaskp;
     48  float noisemaxsupp;
     49  float noisewindowlo;
     50  float noisewindowhi;
     51  int   noisewindowlomin;
     52  int   noisewindowhimin;
     53  int   noisewindowfixed;
     54  float noiseoff[P_NOISECURVES][P_BANDS];
     55  float noisecompand[NOISE_COMPAND_LEVELS];
     56 
     57  float max_curve_dB;
     58 
     59  int normal_p;
     60  int normal_start;
     61  int normal_partition;
     62  double normal_thresh;
     63 } vorbis_info_psy;
     64 
     65 typedef struct{
     66  int   eighth_octave_lines;
     67 
     68  /* for block long/short tuning; encode only */
     69  float preecho_thresh[VE_BANDS];
     70  float postecho_thresh[VE_BANDS];
     71  float stretch_penalty;
     72  float preecho_minenergy;
     73 
     74  float ampmax_att_per_sec;
     75 
     76  /* channel coupling config */
     77  int   coupling_pkHz[PACKETBLOBS];
     78  int   coupling_pointlimit[2][PACKETBLOBS];
     79  int   coupling_prepointamp[PACKETBLOBS];
     80  int   coupling_postpointamp[PACKETBLOBS];
     81  int   sliding_lowpass[2][PACKETBLOBS];
     82 
     83 } vorbis_info_psy_global;
     84 
     85 typedef struct {
     86  float ampmax;
     87  int   channels;
     88 
     89  vorbis_info_psy_global *gi;
     90  int   coupling_pointlimit[2][P_NOISECURVES];
     91 } vorbis_look_psy_global;
     92 
     93 
     94 typedef struct {
     95  int n;
     96  struct vorbis_info_psy *vi;
     97 
     98  float ***tonecurves;
     99  float **noiseoffset;
    100 
    101  float *ath;
    102  long  *octave;             /* in n.ocshift format */
    103  long  *bark;
    104 
    105  long  firstoc;
    106  long  shiftoc;
    107  int   eighth_octave_lines; /* power of two, please */
    108  int   total_octave_lines;
    109  long  rate; /* cache it */
    110 
    111  float m_val; /* Masking compensation value */
    112 
    113 } vorbis_look_psy;
    114 
    115 extern void   _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
    116                           vorbis_info_psy_global *gi,int n,long rate);
    117 extern void   _vp_psy_clear(vorbis_look_psy *p);
    118 extern void  *_vi_psy_dup(void *source);
    119 
    120 extern void   _vi_psy_free(vorbis_info_psy *i);
    121 extern vorbis_info_psy *_vi_psy_copy(vorbis_info_psy *i);
    122 
    123 extern void _vp_noisemask(vorbis_look_psy *p,
    124                          float *logmdct,
    125                          float *logmask);
    126 
    127 extern void _vp_tonemask(vorbis_look_psy *p,
    128                         float *logfft,
    129                         float *logmask,
    130                         float global_specmax,
    131                         float local_specmax);
    132 
    133 extern void _vp_offset_and_mix(vorbis_look_psy *p,
    134                               float *noise,
    135                               float *tone,
    136                               int offset_select,
    137                               float *logmask,
    138                               float *mdct,
    139                               float *logmdct);
    140 
    141 extern float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd);
    142 
    143 extern void _vp_couple_quantize_normalize(int blobno,
    144                                          vorbis_info_psy_global *g,
    145                                          vorbis_look_psy *p,
    146                                          vorbis_info_mapping0 *vi,
    147                                          float **mdct,
    148                                          int   **iwork,
    149                                          int    *nonzero,
    150                                          int     sliding_lowpass,
    151                                          int     ch);
    152 
    153 #endif