Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * AAC Spectral Band Replication function declarations
  3.  * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl )
  4.  * Copyright (c) 2010      Alex Converse <alex.converse@gmail.com>
  5.  *
  6.  * This file is part of FFmpeg.
  7.  *
  8.  * FFmpeg is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU Lesser General Public
  10.  * License as published by the Free Software Foundation; either
  11.  * version 2.1 of the License, or (at your option) any later version.
  12.  *
  13.  * FFmpeg is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.  * Lesser General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Lesser General Public
  19.  * License along with FFmpeg; if not, write to the Free Software
  20.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  21.  */
  22.  
  23. /**
  24.  * @file
  25.  * AAC Spectral Band Replication function declarations
  26.  * @author Robert Swain ( rob opendot cl )
  27.  */
  28.  
  29. #ifndef AVCODEC_AACSBR_H
  30. #define AVCODEC_AACSBR_H
  31.  
  32. #include "get_bits.h"
  33. #include "aac.h"
  34. #include "sbr.h"
  35.  
  36. #define ENVELOPE_ADJUSTMENT_OFFSET 2
  37. #define NOISE_FLOOR_OFFSET FIXR(6.0f)
  38.  
  39. /**
  40.  * SBR VLC tables
  41.  */
  42. enum {
  43.     T_HUFFMAN_ENV_1_5DB,
  44.     F_HUFFMAN_ENV_1_5DB,
  45.     T_HUFFMAN_ENV_BAL_1_5DB,
  46.     F_HUFFMAN_ENV_BAL_1_5DB,
  47.     T_HUFFMAN_ENV_3_0DB,
  48.     F_HUFFMAN_ENV_3_0DB,
  49.     T_HUFFMAN_ENV_BAL_3_0DB,
  50.     F_HUFFMAN_ENV_BAL_3_0DB,
  51.     T_HUFFMAN_NOISE_3_0DB,
  52.     T_HUFFMAN_NOISE_BAL_3_0DB,
  53. };
  54.  
  55. /**
  56.  * bs_frame_class - frame class of current SBR frame (14496-3 sp04 p98)
  57.  */
  58. enum {
  59.     FIXFIX,
  60.     FIXVAR,
  61.     VARFIX,
  62.     VARVAR,
  63. };
  64.  
  65. enum {
  66.     EXTENSION_ID_PS = 2,
  67. };
  68.  
  69. static const int8_t vlc_sbr_lav[10] =
  70.     { 60, 60, 24, 24, 31, 31, 12, 12, 31, 12 };
  71.  
  72. #define SBR_INIT_VLC_STATIC(num, size) \
  73.     INIT_VLC_STATIC(&vlc_sbr[num], 9, sbr_tmp[num].table_size / sbr_tmp[num].elem_size,     \
  74.                     sbr_tmp[num].sbr_bits ,                      1,                      1, \
  75.                     sbr_tmp[num].sbr_codes, sbr_tmp[num].elem_size, sbr_tmp[num].elem_size, \
  76.                     size)
  77.  
  78. #define SBR_VLC_ROW(name) \
  79.     { name ## _codes, name ## _bits, sizeof(name ## _codes), sizeof(name ## _codes[0]) }
  80.  
  81. /** Initialize SBR. */
  82. void AAC_RENAME(ff_aac_sbr_init)(void);
  83. /** Initialize one SBR context. */
  84. void AAC_RENAME(ff_aac_sbr_ctx_init)(AACContext *ac, SpectralBandReplication *sbr);
  85. /** Close one SBR context. */
  86. void AAC_RENAME(ff_aac_sbr_ctx_close)(SpectralBandReplication *sbr);
  87. /** Decode one SBR element. */
  88. int AAC_RENAME(ff_decode_sbr_extension)(AACContext *ac, SpectralBandReplication *sbr,
  89.                             GetBitContext *gb, int crc, int cnt, int id_aac);
  90. /** Apply one SBR element to one AAC element. */
  91. void AAC_RENAME(ff_sbr_apply)(AACContext *ac, SpectralBandReplication *sbr, int id_aac,
  92.                   INTFLOAT* L, INTFLOAT *R);
  93.  
  94. void ff_aacsbr_func_ptr_init_mips(AACSBRContext *c);
  95.  
  96. #endif /* AVCODEC_AACSBR_H */
  97.