| OLD | NEW |
| 1 /* Copyright (c) 2007-2008 CSIRO | 1 /* Copyright (c) 2007-2008 CSIRO |
| 2 Copyright (c) 2007-2009 Xiph.Org Foundation | 2 Copyright (c) 2007-2009 Xiph.Org Foundation |
| 3 Copyright (c) 2008 Gregory Maxwell | 3 Copyright (c) 2008 Gregory Maxwell |
| 4 Written by Jean-Marc Valin and Gregory Maxwell */ | 4 Written by Jean-Marc Valin and Gregory Maxwell */ |
| 5 /** | 5 /** |
| 6 @file celt.h | 6 @file celt.h |
| 7 @brief Contains all the functions for encoding and decoding audio | 7 @brief Contains all the functions for encoding and decoding audio |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 /* | 10 /* |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 float music_prob; | 59 float music_prob; |
| 60 int bandwidth; | 60 int bandwidth; |
| 61 }AnalysisInfo; | 61 }AnalysisInfo; |
| 62 | 62 |
| 63 #define __celt_check_mode_ptr_ptr(ptr) ((ptr) + ((ptr) - (const CELTMode**)(ptr)
)) | 63 #define __celt_check_mode_ptr_ptr(ptr) ((ptr) + ((ptr) - (const CELTMode**)(ptr)
)) |
| 64 | 64 |
| 65 #define __celt_check_analysis_ptr(ptr) ((ptr) + ((ptr) - (const AnalysisInfo*)(p
tr))) | 65 #define __celt_check_analysis_ptr(ptr) ((ptr) + ((ptr) - (const AnalysisInfo*)(p
tr))) |
| 66 | 66 |
| 67 /* Encoder/decoder Requests */ | 67 /* Encoder/decoder Requests */ |
| 68 | 68 |
| 69 /* Expose this option again when variable framesize actually works */ |
| 70 #define OPUS_FRAMESIZE_VARIABLE 5010 /**< Optimize the frame size d
ynamically */ |
| 71 |
| 72 |
| 69 #define CELT_SET_PREDICTION_REQUEST 10002 | 73 #define CELT_SET_PREDICTION_REQUEST 10002 |
| 70 /** Controls the use of interframe prediction. | 74 /** Controls the use of interframe prediction. |
| 71 0=Independent frames | 75 0=Independent frames |
| 72 1=Short term interframe prediction allowed | 76 1=Short term interframe prediction allowed |
| 73 2=Long term prediction allowed | 77 2=Long term prediction allowed |
| 74 */ | 78 */ |
| 75 #define CELT_SET_PREDICTION(x) CELT_SET_PREDICTION_REQUEST, __opus_check_int(x) | 79 #define CELT_SET_PREDICTION(x) CELT_SET_PREDICTION_REQUEST, __opus_check_int(x) |
| 76 | 80 |
| 77 #define CELT_SET_INPUT_CLIPPING_REQUEST 10004 | 81 #define CELT_SET_INPUT_CLIPPING_REQUEST 10004 |
| 78 #define CELT_SET_INPUT_CLIPPING(x) CELT_SET_INPUT_CLIPPING_REQUEST, __opus_check
_int(x) | 82 #define CELT_SET_INPUT_CLIPPING(x) CELT_SET_INPUT_CLIPPING_REQUEST, __opus_check
_int(x) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 | 115 |
| 112 #define OPUS_SET_ENERGY_MASK_REQUEST 10026 | 116 #define OPUS_SET_ENERGY_MASK_REQUEST 10026 |
| 113 #define OPUS_SET_ENERGY_MASK(x) OPUS_SET_ENERGY_MASK_REQUEST, __opus_check_val16
_ptr(x) | 117 #define OPUS_SET_ENERGY_MASK(x) OPUS_SET_ENERGY_MASK_REQUEST, __opus_check_val16
_ptr(x) |
| 114 | 118 |
| 115 /* Encoder stuff */ | 119 /* Encoder stuff */ |
| 116 | 120 |
| 117 int celt_encoder_get_size(int channels); | 121 int celt_encoder_get_size(int channels); |
| 118 | 122 |
| 119 int celt_encode_with_ec(OpusCustomEncoder * OPUS_RESTRICT st, const opus_val16 *
pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes, ec_enc *
enc); | 123 int celt_encode_with_ec(OpusCustomEncoder * OPUS_RESTRICT st, const opus_val16 *
pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes, ec_enc *
enc); |
| 120 | 124 |
| 121 int celt_encoder_init(CELTEncoder *st, opus_int32 sampling_rate, int channels); | 125 int celt_encoder_init(CELTEncoder *st, opus_int32 sampling_rate, int channels, |
| 126 int arch); |
| 122 | 127 |
| 123 | 128 |
| 124 | 129 |
| 125 /* Decoder stuff */ | 130 /* Decoder stuff */ |
| 126 | 131 |
| 127 int celt_decoder_get_size(int channels); | 132 int celt_decoder_get_size(int channels); |
| 128 | 133 |
| 129 | 134 |
| 130 int celt_decoder_init(CELTDecoder *st, opus_int32 sampling_rate, int channels); | 135 int celt_decoder_init(CELTDecoder *st, opus_int32 sampling_rate, int channels); |
| 131 | 136 |
| 132 int celt_decode_with_ec(OpusCustomDecoder * OPUS_RESTRICT st, const unsigned cha
r *data, int len, opus_val16 * OPUS_RESTRICT pcm, int frame_size, ec_dec *dec); | 137 int celt_decode_with_ec(OpusCustomDecoder * OPUS_RESTRICT st, const unsigned cha
r *data, int len, opus_val16 * OPUS_RESTRICT pcm, int frame_size, ec_dec *dec); |
| 133 | 138 |
| 134 #define celt_encoder_ctl opus_custom_encoder_ctl | 139 #define celt_encoder_ctl opus_custom_encoder_ctl |
| 135 #define celt_decoder_ctl opus_custom_decoder_ctl | 140 #define celt_decoder_ctl opus_custom_decoder_ctl |
| 136 | 141 |
| 137 | 142 |
| 138 #ifdef CUSTOM_MODES | 143 #ifdef CUSTOM_MODES |
| 139 #define OPUS_CUSTOM_NOSTATIC | 144 #define OPUS_CUSTOM_NOSTATIC |
| 140 #else | 145 #else |
| 141 #define OPUS_CUSTOM_NOSTATIC static inline | 146 #define OPUS_CUSTOM_NOSTATIC static OPUS_INLINE |
| 142 #endif | 147 #endif |
| 143 | 148 |
| 144 static const unsigned char trim_icdf[11] = {126, 124, 119, 109, 87, 41, 19, 9, 4
, 2, 0}; | 149 static const unsigned char trim_icdf[11] = {126, 124, 119, 109, 87, 41, 19, 9, 4
, 2, 0}; |
| 145 /* Probs: NONE: 21.875%, LIGHT: 6.25%, NORMAL: 65.625%, AGGRESSIVE: 6.25% */ | 150 /* Probs: NONE: 21.875%, LIGHT: 6.25%, NORMAL: 65.625%, AGGRESSIVE: 6.25% */ |
| 146 static const unsigned char spread_icdf[4] = {25, 23, 2, 0}; | 151 static const unsigned char spread_icdf[4] = {25, 23, 2, 0}; |
| 147 | 152 |
| 148 static const unsigned char tapset_icdf[3]={2,1,0}; | 153 static const unsigned char tapset_icdf[3]={2,1,0}; |
| 149 | 154 |
| 150 #ifdef CUSTOM_MODES | 155 #ifdef CUSTOM_MODES |
| 151 static const unsigned char toOpusTable[20] = { | 156 static const unsigned char toOpusTable[20] = { |
| 152 0xE0, 0xE8, 0xF0, 0xF8, | 157 0xE0, 0xE8, 0xF0, 0xF8, |
| 153 0xC0, 0xC8, 0xD0, 0xD8, | 158 0xC0, 0xC8, 0xD0, 0xD8, |
| 154 0xA0, 0xA8, 0xB0, 0xB8, | 159 0xA0, 0xA8, 0xB0, 0xB8, |
| 155 0x00, 0x00, 0x00, 0x00, | 160 0x00, 0x00, 0x00, 0x00, |
| 156 0x80, 0x88, 0x90, 0x98, | 161 0x80, 0x88, 0x90, 0x98, |
| 157 }; | 162 }; |
| 158 | 163 |
| 159 static const unsigned char fromOpusTable[16] = { | 164 static const unsigned char fromOpusTable[16] = { |
| 160 0x80, 0x88, 0x90, 0x98, | 165 0x80, 0x88, 0x90, 0x98, |
| 161 0x40, 0x48, 0x50, 0x58, | 166 0x40, 0x48, 0x50, 0x58, |
| 162 0x20, 0x28, 0x30, 0x38, | 167 0x20, 0x28, 0x30, 0x38, |
| 163 0x00, 0x08, 0x10, 0x18 | 168 0x00, 0x08, 0x10, 0x18 |
| 164 }; | 169 }; |
| 165 | 170 |
| 166 static inline int toOpus(unsigned char c) | 171 static OPUS_INLINE int toOpus(unsigned char c) |
| 167 { | 172 { |
| 168 int ret=0; | 173 int ret=0; |
| 169 if (c<0xA0) | 174 if (c<0xA0) |
| 170 ret = toOpusTable[c>>3]; | 175 ret = toOpusTable[c>>3]; |
| 171 if (ret == 0) | 176 if (ret == 0) |
| 172 return -1; | 177 return -1; |
| 173 else | 178 else |
| 174 return ret|(c&0x7); | 179 return ret|(c&0x7); |
| 175 } | 180 } |
| 176 | 181 |
| 177 static inline int fromOpus(unsigned char c) | 182 static OPUS_INLINE int fromOpus(unsigned char c) |
| 178 { | 183 { |
| 179 if (c<0x80) | 184 if (c<0x80) |
| 180 return -1; | 185 return -1; |
| 181 else | 186 else |
| 182 return fromOpusTable[(c>>3)-16] | (c&0x7); | 187 return fromOpusTable[(c>>3)-16] | (c&0x7); |
| 183 } | 188 } |
| 184 #endif /* CUSTOM_MODES */ | 189 #endif /* CUSTOM_MODES */ |
| 185 | 190 |
| 186 #define COMBFILTER_MAXPERIOD 1024 | 191 #define COMBFILTER_MAXPERIOD 1024 |
| 187 #define COMBFILTER_MINPERIOD 15 | 192 #define COMBFILTER_MINPERIOD 15 |
| 188 | 193 |
| 189 extern const signed char tf_select_table[4][8]; | 194 extern const signed char tf_select_table[4][8]; |
| 190 | 195 |
| 191 int resampling_factor(opus_int32 rate); | 196 int resampling_factor(opus_int32 rate); |
| 192 | 197 |
| 193 void preemphasis(const opus_val16 * OPUS_RESTRICT pcmp, celt_sig * OPUS_RESTRICT
inp, | 198 void celt_preemphasis(const opus_val16 * OPUS_RESTRICT pcmp, celt_sig * OPUS_RES
TRICT inp, |
| 194 int N, int CC, int upsample, const opus_val16 *coef, cel
t_sig *mem, int clip); | 199 int N, int CC, int upsample, const opus_val16 *coef, cel
t_sig *mem, int clip); |
| 195 | 200 |
| 196 void comb_filter(opus_val32 *y, opus_val32 *x, int T0, int T1, int N, | 201 void comb_filter(opus_val32 *y, opus_val32 *x, int T0, int T1, int N, |
| 197 opus_val16 g0, opus_val16 g1, int tapset0, int tapset1, | 202 opus_val16 g0, opus_val16 g1, int tapset0, int tapset1, |
| 198 const opus_val16 *window, int overlap); | 203 const opus_val16 *window, int overlap); |
| 199 | 204 |
| 200 void init_caps(const CELTMode *m,int *cap,int LM,int C); | 205 void init_caps(const CELTMode *m,int *cap,int LM,int C); |
| 201 | 206 |
| 202 #ifdef RESYNTH | 207 #ifdef RESYNTH |
| 203 void deemphasis(celt_sig *in[], opus_val16 *pcm, int N, int C, int downsample, c
onst opus_val16 *coef, celt_sig *mem, celt_sig * OPUS_RESTRICT scratch); | 208 void deemphasis(celt_sig *in[], opus_val16 *pcm, int N, int C, int downsample, c
onst opus_val16 *coef, celt_sig *mem, celt_sig * OPUS_RESTRICT scratch); |
| 204 | 209 |
| 205 void compute_inv_mdcts(const CELTMode *mode, int shortBlocks, celt_sig *X, | 210 void compute_inv_mdcts(const CELTMode *mode, int shortBlocks, celt_sig *X, |
| 206 celt_sig * OPUS_RESTRICT out_mem[], int C, int LM); | 211 celt_sig * OPUS_RESTRICT out_mem[], int C, int LM); |
| 207 #endif | 212 #endif |
| 208 | 213 |
| 209 #ifdef __cplusplus | 214 #ifdef __cplusplus |
| 210 } | 215 } |
| 211 #endif | 216 #endif |
| 212 | 217 |
| 213 #endif /* CELT_H */ | 218 #endif /* CELT_H */ |
| OLD | NEW |