198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/* Copyright (C) 2006 Jean-Marc Valin */
298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/**
398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   @file filterbank.h
498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   @brief Converting between psd and filterbank
598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project */
698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/*
798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   Redistribution and use in source and binary forms, with or without
898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   modification, are permitted provided that the following conditions are
998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   met:
1098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
1198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   1. Redistributions of source code must retain the above copyright notice,
1298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   this list of conditions and the following disclaimer.
1398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
1498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   2. Redistributions in binary form must reproduce the above copyright
1598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   notice, this list of conditions and the following disclaimer in the
1698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   documentation and/or other materials provided with the distribution.
1798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
1898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   3. The name of the author may not be used to endorse or promote products
1998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   derived from this software without specific prior written permission.
2098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
2198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
2598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
2998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
3098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   POSSIBILITY OF SUCH DAMAGE.
3298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project*/
3398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
3498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#ifndef FILTERBANK_H
3598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#define FILTERBANK_H
3698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
3798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#include "arch.h"
3898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
3998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projecttypedef struct {
4098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   int *bank_left;
4198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   int *bank_right;
4298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   spx_word16_t *filter_left;
4398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   spx_word16_t *filter_right;
4498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#ifndef FIXED_POINT
4598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   float *scaling;
4698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#endif
4798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   int nb_banks;
4898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project   int len;
4998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project} FilterBank;
5098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
5198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
5298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source ProjectFilterBank *filterbank_new(int banks, spx_word32_t sampling, int len, int type);
5398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
5498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_destroy(FilterBank *bank);
5598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
5698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_compute_bank32(FilterBank *bank, spx_word32_t *ps, spx_word32_t *mel);
5798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
5898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_compute_psd16(FilterBank *bank, spx_word16_t *mel, spx_word16_t *psd);
5998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
6098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#ifndef FIXED_POINT
6198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_compute_bank(FilterBank *bank, float *psd, float *mel);
6298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_compute_psd(FilterBank *bank, float *mel, float *psd);
6398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#endif
6498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
6598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project
6698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#endif
67