1*49fe348cSAndroid Build Coastguard Worker /****************************************************************************** 2*49fe348cSAndroid Build Coastguard Worker * 3*49fe348cSAndroid Build Coastguard Worker * Copyright 2022 Google LLC 4*49fe348cSAndroid Build Coastguard Worker * 5*49fe348cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*49fe348cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*49fe348cSAndroid Build Coastguard Worker * You may obtain a copy of the License at: 8*49fe348cSAndroid Build Coastguard Worker * 9*49fe348cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*49fe348cSAndroid Build Coastguard Worker * 11*49fe348cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*49fe348cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*49fe348cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*49fe348cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*49fe348cSAndroid Build Coastguard Worker * limitations under the License. 16*49fe348cSAndroid Build Coastguard Worker * 17*49fe348cSAndroid Build Coastguard Worker ******************************************************************************/ 18*49fe348cSAndroid Build Coastguard Worker 19*49fe348cSAndroid Build Coastguard Worker #ifndef __LC3_SPEC_H 20*49fe348cSAndroid Build Coastguard Worker #define __LC3_SPEC_H 21*49fe348cSAndroid Build Coastguard Worker 22*49fe348cSAndroid Build Coastguard Worker #include "common.h" 23*49fe348cSAndroid Build Coastguard Worker #include "tables.h" 24*49fe348cSAndroid Build Coastguard Worker #include "bwdet.h" 25*49fe348cSAndroid Build Coastguard Worker #include "ltpf.h" 26*49fe348cSAndroid Build Coastguard Worker #include "tns.h" 27*49fe348cSAndroid Build Coastguard Worker #include "sns.h" 28*49fe348cSAndroid Build Coastguard Worker 29*49fe348cSAndroid Build Coastguard Worker 30*49fe348cSAndroid Build Coastguard Worker /** 31*49fe348cSAndroid Build Coastguard Worker * Spectral quantization side data 32*49fe348cSAndroid Build Coastguard Worker */ 33*49fe348cSAndroid Build Coastguard Worker typedef struct lc3_spec_side { 34*49fe348cSAndroid Build Coastguard Worker int g_idx, nq; 35*49fe348cSAndroid Build Coastguard Worker bool lsb_mode; 36*49fe348cSAndroid Build Coastguard Worker } lc3_spec_side_t; 37*49fe348cSAndroid Build Coastguard Worker 38*49fe348cSAndroid Build Coastguard Worker 39*49fe348cSAndroid Build Coastguard Worker /* ---------------------------------------------------------------------------- 40*49fe348cSAndroid Build Coastguard Worker * Encoding 41*49fe348cSAndroid Build Coastguard Worker * -------------------------------------------------------------------------- */ 42*49fe348cSAndroid Build Coastguard Worker 43*49fe348cSAndroid Build Coastguard Worker /** 44*49fe348cSAndroid Build Coastguard Worker * Spectrum analysis 45*49fe348cSAndroid Build Coastguard Worker * dt, sr, nbytes Duration, samplerate and size of the frame 46*49fe348cSAndroid Build Coastguard Worker * pitch, tns Pitch present indication and TNS bistream data 47*49fe348cSAndroid Build Coastguard Worker * spec Context of analysis 48*49fe348cSAndroid Build Coastguard Worker * x Spectral coefficients, scaled as output 49*49fe348cSAndroid Build Coastguard Worker * side Return quantization data 50*49fe348cSAndroid Build Coastguard Worker */ 51*49fe348cSAndroid Build Coastguard Worker void lc3_spec_analyze( 52*49fe348cSAndroid Build Coastguard Worker enum lc3_dt dt, enum lc3_srate sr, int nbytes, 53*49fe348cSAndroid Build Coastguard Worker bool pitch, const lc3_tns_data_t *tns, lc3_spec_analysis_t *spec, 54*49fe348cSAndroid Build Coastguard Worker float *x, lc3_spec_side_t *side); 55*49fe348cSAndroid Build Coastguard Worker 56*49fe348cSAndroid Build Coastguard Worker /** 57*49fe348cSAndroid Build Coastguard Worker * Put spectral quantization side data 58*49fe348cSAndroid Build Coastguard Worker * bits Bitstream context 59*49fe348cSAndroid Build Coastguard Worker * dt, sr Duration and samplerate of the frame 60*49fe348cSAndroid Build Coastguard Worker * side Spectral quantization side data 61*49fe348cSAndroid Build Coastguard Worker */ 62*49fe348cSAndroid Build Coastguard Worker void lc3_spec_put_side(lc3_bits_t *bits, 63*49fe348cSAndroid Build Coastguard Worker enum lc3_dt dt, enum lc3_srate sr, const lc3_spec_side_t *side); 64*49fe348cSAndroid Build Coastguard Worker 65*49fe348cSAndroid Build Coastguard Worker /** 66*49fe348cSAndroid Build Coastguard Worker * Encode spectral coefficients 67*49fe348cSAndroid Build Coastguard Worker * bits Bitstream context 68*49fe348cSAndroid Build Coastguard Worker * dt, sr, bw Duration, samplerate, bandwidth 69*49fe348cSAndroid Build Coastguard Worker * nbytes and size of the frame 70*49fe348cSAndroid Build Coastguard Worker * side, x Quantization data, and scaled coefficients 71*49fe348cSAndroid Build Coastguard Worker */ 72*49fe348cSAndroid Build Coastguard Worker void lc3_spec_encode(lc3_bits_t *bits, 73*49fe348cSAndroid Build Coastguard Worker enum lc3_dt dt, enum lc3_srate sr, enum lc3_bandwidth bw, 74*49fe348cSAndroid Build Coastguard Worker int nbytes, const lc3_spec_side_t *side, float *x); 75*49fe348cSAndroid Build Coastguard Worker 76*49fe348cSAndroid Build Coastguard Worker 77*49fe348cSAndroid Build Coastguard Worker /* ---------------------------------------------------------------------------- 78*49fe348cSAndroid Build Coastguard Worker * Decoding 79*49fe348cSAndroid Build Coastguard Worker * -------------------------------------------------------------------------- */ 80*49fe348cSAndroid Build Coastguard Worker 81*49fe348cSAndroid Build Coastguard Worker /** 82*49fe348cSAndroid Build Coastguard Worker * Get spectral quantization side data 83*49fe348cSAndroid Build Coastguard Worker * bits Bitstream context 84*49fe348cSAndroid Build Coastguard Worker * dt, sr Duration and samplerate of the frame 85*49fe348cSAndroid Build Coastguard Worker * side Return quantization side data 86*49fe348cSAndroid Build Coastguard Worker * return 0: Ok -1: Invalid bandwidth indication 87*49fe348cSAndroid Build Coastguard Worker */ 88*49fe348cSAndroid Build Coastguard Worker int lc3_spec_get_side(lc3_bits_t *bits, 89*49fe348cSAndroid Build Coastguard Worker enum lc3_dt dt, enum lc3_srate sr, lc3_spec_side_t *side); 90*49fe348cSAndroid Build Coastguard Worker 91*49fe348cSAndroid Build Coastguard Worker /** 92*49fe348cSAndroid Build Coastguard Worker * Decode spectral coefficients 93*49fe348cSAndroid Build Coastguard Worker * bits Bitstream context 94*49fe348cSAndroid Build Coastguard Worker * dt, sr, bw Duration, samplerate, bandwidth 95*49fe348cSAndroid Build Coastguard Worker * nbytes and size of the frame 96*49fe348cSAndroid Build Coastguard Worker * side Quantization side data 97*49fe348cSAndroid Build Coastguard Worker * x Spectral coefficients 98*49fe348cSAndroid Build Coastguard Worker * return 0: Ok -1: Invalid bitstream data 99*49fe348cSAndroid Build Coastguard Worker */ 100*49fe348cSAndroid Build Coastguard Worker int lc3_spec_decode(lc3_bits_t *bits, 101*49fe348cSAndroid Build Coastguard Worker enum lc3_dt dt, enum lc3_srate sr, enum lc3_bandwidth bw, 102*49fe348cSAndroid Build Coastguard Worker int nbytes, const lc3_spec_side_t *side, float *x); 103*49fe348cSAndroid Build Coastguard Worker 104*49fe348cSAndroid Build Coastguard Worker 105*49fe348cSAndroid Build Coastguard Worker #endif /* __LC3_SPEC_H */ 106