1885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Copyright (c) 2007-2008 CSIRO 2885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Copyright (c) 2007-2009 Xiph.Org Foundation 3885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Copyright (c) 2008 Gregory Maxwell 4885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Written by Jean-Marc Valin and Gregory Maxwell */ 5885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* 6885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Redistribution and use in source and binary forms, with or without 7885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org modification, are permitted provided that the following conditions 8885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org are met: 9885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 10885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org - Redistributions of source code must retain the above copyright 11885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org notice, this list of conditions and the following disclaimer. 12885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 13885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org - Redistributions in binary form must reproduce the above copyright 14885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org notice, this list of conditions and the following disclaimer in the 15885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org documentation and/or other materials provided with the distribution. 16885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 17885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 21885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 22885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 23885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 24885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org*/ 29885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef MODES_H 31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MODES_H 32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "opus_types.h" 34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "celt.h" 35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "arch.h" 36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "mdct.h" 37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "entenc.h" 38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "entdec.h" 39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_PERIOD 1024 41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef OVERLAP 43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define OVERLAP(mode) ((mode)->overlap) 44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef FRAMESIZE 47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define FRAMESIZE(mode) ((mode)->mdctSize) 48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef struct { 51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int size; 52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const opus_int16 *index; 53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const unsigned char *bits; 54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const unsigned char *caps; 55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} PulseCache; 56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/** Mode definition (opaque) 58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org @brief Mode definition 59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org */ 60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgstruct OpusCustomMode { 61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 Fs; 62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int overlap; 63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int nbEBands; 65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int effEBands; 66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_val16 preemph[4]; 67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const opus_int16 *eBands; /**< Definition for each "pseudo-critical band" */ 68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int maxLM; 70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int nbShortMdcts; 71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int shortMdctSize; 72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int nbAllocVectors; /**< Number of lines in the matrix below */ 74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const unsigned char *allocVectors; /**< Number of bits in each band for several rates */ 75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const opus_int16 *logN; 76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const opus_val16 *window; 78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org mdct_lookup mdct; 79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PulseCache cache; 80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}; 81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 84