Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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
  154.