aacquant.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * FAAC - Freeware Advanced Audio Coder
  3.  * Copyright (C) 2001 Menno Bakker
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  * You should have received a copy of the GNU Lesser General Public
  15.  * License along with this library; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  * $Id: aacquant.h,v 1.3 2001/06/04 23:02:24 wmay Exp $
  19.  */
  20. #ifndef AACQUANT_H
  21. #define AACQUANT_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif /* __cplusplus */
  25. #include "coder.h"
  26. #include "psych.h"
  27. #define IXMAX_VAL 8191
  28. #define PRECALC_SIZE (IXMAX_VAL+2)
  29. #define LARGE_BITS 100000
  30. #define SF_OFFSET 100
  31. #define POW20(x)  pow(2.0,((double)x)*.25)
  32. #define IPOW20(x)  pow(2.0,-((double)x)*.1875)
  33. typedef struct {
  34.     int     over_count;      /* number of quantization noise > masking */
  35.     int     tot_count;       /* all */
  36.     double  over_noise;      /* sum of quantization noise > masking */
  37.     double  tot_noise;       /* sum of all quantization noise */
  38.     double  max_noise;       /* max quantization noise */
  39. } calcNoiseResult;
  40. void AACQuantizeInit(CoderInfo *coderInfo, unsigned int numChannels);
  41. void AACQuantizeEnd(CoderInfo *coderInfo, unsigned int numChannels);
  42. int AACQuantize(CoderInfo *coderInfo,
  43. PsyInfo *psyInfo,
  44. ChannelInfo *channelInfo,
  45. int *cb_width,
  46. int num_cb,
  47. double *xr,
  48. int desired_rate);
  49. static int SearchStepSize(CoderInfo *coderInfo,
  50.   const int desired_rate,
  51.   const double *xr,
  52.   int *xi);
  53. static void Quantize(const double *xr, int *ix, double istep);
  54. static int SortForGrouping(CoderInfo* coderInfo, PsyInfo *psyInfo,
  55.    ChannelInfo *channelInfo, int *sfb_width_table,
  56.    double *xr);
  57. static int CountBitsLong(CoderInfo *coderInfo, int *xi);
  58. static int CountBits(CoderInfo *coderInfo, int *ix, const double *xr);
  59. static int InnerLoop(CoderInfo *coderInfo, double *xr_pow, int *xi, int max_bits);
  60. static void CalcAllowedDist(PsyInfo *psyInfo, int *cb_width, int num_cb,
  61. double *xr, double *xmin);
  62. static int CalcNoise(CoderInfo *coderInfo, double *xr, int *xi, double *requant_xr,
  63.  double *error_energy, double *xmin, calcNoiseResult *res);
  64. static int OuterLoop(CoderInfo *coderInfo, double *xr, double *xr_pow, int *xi,
  65.  double *xmin, int target_bits);
  66. static int QuantCompare(calcNoiseResult *best,
  67. calcNoiseResult *calc);
  68. static int BalanceNoise(CoderInfo *coderInfo, double *distort, double *xrpow);
  69. static void AmpScalefacBands(CoderInfo *coderInfo, double *distort, double *xr_pow);
  70. #ifdef __cplusplus
  71. }
  72. #endif /* __cplusplus */
  73. #endif /* AACQUANT_H */