]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/sbr.h
lavc: add a null bitstream filter
[ffmpeg] / libavcodec / sbr.h
index 3025860d7ebaa62afb6271044a45dfb17e05e0a7..a47ad6eedb7151c2c3c8fc4b34dd7819d4dda491 100644 (file)
@@ -3,25 +3,25 @@
  * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl )
  * Copyright (c) 2010      Alex Converse <alex.converse@gmail.com>
  *
- * This file is part of FFmpeg.
+ * This file is part of Libav.
  *
- * FFmpeg is free software; you can redistribute it and/or
+ * Libav is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
  *
- * FFmpeg is distributed in the hope that it will be useful,
+ * Libav is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
+ * License along with Libav; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 /**
- * @file libavcodec/sbr.h
+ * @file
  * Spectral Band Replication definitions and structures
  * @author Robert Swain ( rob opendot cl )
  */
 
 #include <stdint.h>
 #include "fft.h"
+#include "aacps.h"
+#include "sbrdsp.h"
 
 /**
  * Spectral Band Replication header - spectrum parameters that invoke a reset if they differ from the previous header.
  */
-typedef struct {
+typedef struct SpectrumParameters {
     uint8_t bs_start_freq;
     uint8_t bs_stop_freq;
     uint8_t bs_xover_band;
 
     /**
-     * @defgroup bs_header_extra_1     Variables associated with bs_header_extra_1
+     * @name Variables associated with bs_header_extra_1
      * @{
      */
     uint8_t bs_freq_scale;
@@ -55,14 +57,14 @@ typedef struct {
 /**
  * Spectral Band Replication per channel data
  */
-typedef struct {
+typedef struct SBRData {
     /**
-     * @defgroup bitstream     Main bitstream data variables
+     * @name Main bitstream data variables
      * @{
      */
     unsigned           bs_frame_class;
     unsigned           bs_add_harmonic_flag;
-    unsigned           bs_num_env[2];
+    unsigned           bs_num_env;
     uint8_t            bs_freq_res[7];
     unsigned           bs_num_noise;
     uint8_t            bs_df_env[5];
@@ -73,11 +75,11 @@ typedef struct {
     /** @} */
 
     /**
-     * @defgroup state         State variables
+     * @name State variables
      * @{
      */
-    DECLARE_ALIGNED(16, float, synthesis_filterbank_samples)[SBR_SYNTHESIS_BUF_SIZE];
-    DECLARE_ALIGNED(16, float, analysis_filterbank_samples) [1312];
+    DECLARE_ALIGNED(32, float, synthesis_filterbank_samples)[SBR_SYNTHESIS_BUF_SIZE];
+    DECLARE_ALIGNED(32, float, analysis_filterbank_samples) [1312];
     int                synthesis_filterbank_samples_offset;
     ///l_APrev and l_A
     int                e_a[2];
@@ -86,8 +88,9 @@ typedef struct {
     ///QMF values of the original signal
     float              W[2][32][32][2];
     ///QMF output of the HF adjustor
-    float              Y[2][38][64][2];
-    float              g_temp[42][48];
+    int                Ypos;
+    DECLARE_ALIGNED(16, float, Y)[2][38][64][2];
+    DECLARE_ALIGNED(16, float, g_temp)[42][48];
     float              q_temp[42][48];
     uint8_t            s_indexmapped[8][48];
     ///Envelope scalefactors
@@ -108,14 +111,14 @@ typedef struct {
 /**
  * Spectral Band Replication
  */
-typedef struct {
+typedef struct SpectralBandReplication {
     int                sample_rate;
     int                start;
     int                reset;
     SpectrumParameters spectrum_params;
     int                bs_amp_res_header;
     /**
-     * @defgroup bs_header_extra_2     variables associated with bs_header_extra_2
+     * @name Variables associated with bs_header_extra_2
      * @{
      */
     unsigned           bs_limiter_bands;
@@ -130,9 +133,11 @@ typedef struct {
     unsigned           kx[2];
     ///M' and M respectively, M is the number of QMF subbands that use SBR.
     unsigned           m[2];
+    unsigned           kx_and_m_pushed;
     ///The number of frequency bands in f_master
     unsigned           n_master;
     SBRData            data[2];
+    PSContext          ps;
     ///N_Low and N_High respectively, the number of frequency bands for low and high resolution
     unsigned           n[2];
     ///Number of noise floor bands
@@ -153,15 +158,15 @@ typedef struct {
     uint8_t            patch_num_subbands[6];
     uint8_t            patch_start_subband[6];
     ///QMF low frequency input to the HF generator
-    float              X_low[32][40][2];
+    DECLARE_ALIGNED(16, float, X_low)[32][40][2];
     ///QMF output of the HF generator
-    float              X_high[64][40][2];
+    DECLARE_ALIGNED(16, float, X_high)[64][40][2];
     ///QMF values of the reconstructed signal
-    DECLARE_ALIGNED(16, float, X)[2][32][64];
+    DECLARE_ALIGNED(16, float, X)[2][2][38][64];
     ///Zeroth coefficient used to filter the subband signals
-    float              alpha0[64][2];
+    DECLARE_ALIGNED(16, float, alpha0)[64][2];
     ///First coefficient used to filter the subband signals
-    float              alpha1[64][2];
+    DECLARE_ALIGNED(16, float, alpha1)[64][2];
     ///Dequantized envelope scalefactors, remapped
     float              e_origmapped[7][48];
     ///Dequantized noise scalefactors, remapped
@@ -175,9 +180,10 @@ typedef struct {
     ///Sinusoidal levels
     float              s_m[7][48];
     float              gain[7][48];
-    DECLARE_ALIGNED(16, float, qmf_filter_scratch)[5][64];
-    RDFTContext        rdft;
+    DECLARE_ALIGNED(32, float, qmf_filter_scratch)[5][64];
+    FFTContext         mdct_ana;
     FFTContext         mdct;
+    SBRDSPContext      dsp;
 } SpectralBandReplication;
 
 #endif /* AVCODEC_SBR_H */