mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			156 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
		
		
			
		
	
	
			156 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
| 
											12 years ago
										 | /* Copyright (C) 2002-2006 Jean-Marc Valin */ | ||
|  | /**
 | ||
|  |    @file sb_celp.h | ||
|  |    @brief Sub-band CELP mode used for wideband encoding | ||
|  | */ | ||
|  | /*
 | ||
|  |    Redistribution and use in source and binary forms, with or without | ||
|  |    modification, are permitted provided that the following conditions | ||
|  |    are met: | ||
|  |     | ||
|  |    - Redistributions of source code must retain the above copyright | ||
|  |    notice, this list of conditions and the following disclaimer. | ||
|  |     | ||
|  |    - Redistributions in binary form must reproduce the above copyright | ||
|  |    notice, this list of conditions and the following disclaimer in the | ||
|  |    documentation and/or other materials provided with the distribution. | ||
|  |     | ||
|  |    - Neither the name of the Xiph.org Foundation nor the names of its | ||
|  |    contributors may be used to endorse or promote products derived from | ||
|  |    this software without specific prior written permission. | ||
|  |     | ||
|  |    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
|  |    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
|  |    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
|  |    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR | ||
|  |    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
|  |    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
|  |    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
|  |    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
|  |    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
|  |    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
|  |    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
|  | 
 | ||
|  | */ | ||
|  | 
 | ||
|  | #ifndef SB_CELP_H
 | ||
|  | #define SB_CELP_H
 | ||
|  | 
 | ||
|  | #include "modes.h"
 | ||
|  | #include <speex/speex_bits.h>
 | ||
|  | #include "nb_celp.h"
 | ||
|  | 
 | ||
|  | /**Structure representing the full state of the sub-band encoder*/ | ||
|  | typedef struct SBEncState { | ||
|  |    const SpeexMode *mode;         /**< Pointer to the mode (containing for vtable info) */ | ||
|  |    void *st_low;                  /**< State of the low-band (narrowband) encoder */ | ||
|  |    int    full_frame_size;        /**< Length of full-band frames*/ | ||
|  |    int    frame_size;             /**< Length of high-band frames*/ | ||
|  |    int    subframeSize;           /**< Length of high-band sub-frames*/ | ||
|  |    int    nbSubframes;            /**< Number of high-band sub-frames*/ | ||
|  |    int    windowSize;             /**< Length of high-band LPC window*/ | ||
|  |    int    lpcSize;                /**< Order of high-band LPC analysis */ | ||
|  |    int    first;                  /**< First frame? */ | ||
|  |    spx_word16_t  lpc_floor;       /**< Controls LPC analysis noise floor */ | ||
|  |    spx_word16_t  gamma1;          /**< Perceptual weighting coef 1 */ | ||
|  |    spx_word16_t  gamma2;          /**< Perceptual weighting coef 2 */ | ||
|  | 
 | ||
|  |    char  *stack;                  /**< Temporary allocation stack */ | ||
|  |    spx_word16_t *high;               /**< High-band signal (buffer) */ | ||
|  |    spx_word16_t *h0_mem, *h1_mem; | ||
|  | 
 | ||
|  |    const spx_word16_t *window;    /**< LPC analysis window */ | ||
|  |    const spx_word16_t *lagWindow;       /**< Auto-correlation window */ | ||
|  |    spx_lsp_t *old_lsp;            /**< LSPs of previous frame */ | ||
|  |    spx_lsp_t *old_qlsp;           /**< Quantized LSPs of previous frame */ | ||
|  |    spx_coef_t *interp_qlpc;       /**< Interpolated quantized LPCs for current sub-frame */ | ||
|  | 
 | ||
|  |    spx_mem_t *mem_sp;             /**< Synthesis signal memory */ | ||
|  |    spx_mem_t *mem_sp2; | ||
|  |    spx_mem_t *mem_sw;             /**< Perceptual signal memory */ | ||
|  |    spx_word32_t *pi_gain; | ||
|  |    spx_word16_t *exc_rms; | ||
|  |    spx_word16_t *innov_rms_save;         /**< If non-NULL, innovation is copied here */ | ||
|  | 
 | ||
|  | #ifndef DISABLE_VBR
 | ||
|  |    float  vbr_quality;            /**< Quality setting for VBR encoding */ | ||
|  |    int    vbr_enabled;            /**< 1 for enabling VBR, 0 otherwise */ | ||
|  |    spx_int32_t vbr_max;           /**< Max bit-rate allowed in VBR mode (total) */ | ||
|  |    spx_int32_t vbr_max_high;      /**< Max bit-rate allowed in VBR mode for the high-band */ | ||
|  |    spx_int32_t abr_enabled;       /**< ABR setting (in bps), 0 if off */ | ||
|  |    float  abr_drift; | ||
|  |    float  abr_drift2; | ||
|  |    float  abr_count; | ||
|  |    int    vad_enabled;            /**< 1 for enabling VAD, 0 otherwise */ | ||
|  |    float  relative_quality; | ||
|  | #endif /* #ifndef DISABLE_VBR */
 | ||
|  |     | ||
|  |    int    encode_submode; | ||
|  |    const SpeexSubmode * const *submodes; | ||
|  |    int    submodeID; | ||
|  |    int    submodeSelect; | ||
|  |    int    complexity; | ||
|  |    spx_int32_t sampling_rate; | ||
|  | 
 | ||
|  | } SBEncState; | ||
|  | 
 | ||
|  | 
 | ||
|  | /**Structure representing the full state of the sub-band decoder*/ | ||
|  | typedef struct SBDecState { | ||
|  |    const SpeexMode *mode;            /**< Pointer to the mode (containing for vtable info) */ | ||
|  |    void *st_low;               /**< State of the low-band (narrowband) encoder */ | ||
|  |    int    full_frame_size; | ||
|  |    int    frame_size; | ||
|  |    int    subframeSize; | ||
|  |    int    nbSubframes; | ||
|  |    int    lpcSize; | ||
|  |    int    first; | ||
|  |    spx_int32_t sampling_rate; | ||
|  |    int    lpc_enh_enabled; | ||
|  | 
 | ||
|  |    char  *stack; | ||
|  |    spx_word16_t *g0_mem, *g1_mem; | ||
|  | 
 | ||
|  |    spx_word16_t *excBuf; | ||
|  |    spx_lsp_t *old_qlsp; | ||
|  |    spx_coef_t *interp_qlpc; | ||
|  | 
 | ||
|  |    spx_mem_t *mem_sp; | ||
|  |    spx_word32_t *pi_gain; | ||
|  |    spx_word16_t *exc_rms; | ||
|  |    spx_word16_t *innov_save;      /** If non-NULL, innovation is copied here */ | ||
|  |     | ||
|  |    spx_word16_t last_ener; | ||
|  |    spx_int32_t seed; | ||
|  | 
 | ||
|  |    int    encode_submode; | ||
|  |    const SpeexSubmode * const *submodes; | ||
|  |    int    submodeID; | ||
|  | } SBDecState; | ||
|  | 
 | ||
|  | 
 | ||
|  | /**Initializes encoder state*/ | ||
|  | void *sb_encoder_init(const SpeexMode *m); | ||
|  | 
 | ||
|  | /**De-allocates encoder state resources*/ | ||
|  | void sb_encoder_destroy(void *state); | ||
|  | 
 | ||
|  | /**Encodes one frame*/ | ||
|  | int sb_encode(void *state, void *in, SpeexBits *bits); | ||
|  | 
 | ||
|  | 
 | ||
|  | /**Initializes decoder state*/ | ||
|  | void *sb_decoder_init(const SpeexMode *m); | ||
|  | 
 | ||
|  | /**De-allocates decoder state resources*/ | ||
|  | void sb_decoder_destroy(void *state); | ||
|  | 
 | ||
|  | /**Decodes one frame*/ | ||
|  | int sb_decode(void *state, SpeexBits *bits, void *out); | ||
|  | 
 | ||
|  | int sb_encoder_ctl(void *state, int request, void *ptr); | ||
|  | 
 | ||
|  | int sb_decoder_ctl(void *state, int request, void *ptr); | ||
|  | 
 | ||
|  | #endif
 |