Mercurial > libavcodec.hg
comparison aacpsy.c @ 9937:3e39dbd2d9eb libavcodec
cosmetics: prettyprinting, K&R style, break overly long lines
| author | diego |
|---|---|
| date | Wed, 08 Jul 2009 21:16:06 +0000 |
| parents | 7f42ae22c351 |
| children | 6c1ac45b3097 |
comparison
equal
deleted
inserted
replaced
| 9936:7f42ae22c351 | 9937:3e39dbd2d9eb |
|---|---|
| 104 * Borrowed from Lame. | 104 * Borrowed from Lame. |
| 105 */ | 105 */ |
| 106 static av_cold float ath(float f, float add) | 106 static av_cold float ath(float f, float add) |
| 107 { | 107 { |
| 108 f /= 1000.0f; | 108 f /= 1000.0f; |
| 109 return 3.64 * pow(f, -0.8) | 109 return 3.64 * pow(f, -0.8) |
| 110 - 6.8 * exp(-0.6 * (f - 3.4) * (f - 3.4)) | 110 - 6.8 * exp(-0.6 * (f - 3.4) * (f - 3.4)) |
| 111 + 6.0 * exp(-0.15 * (f - 8.7) * (f - 8.7)) | 111 + 6.0 * exp(-0.15 * (f - 8.7) * (f - 8.7)) |
| 112 + (0.6 + 0.04 * add) * 0.001 * f * f * f * f; | 112 + (0.6 + 0.04 * add) * 0.001 * f * f * f * f; |
| 113 } | 113 } |
| 114 | 114 |
| 179 static FFPsyWindowInfo psy_3gpp_window(FFPsyContext *ctx, | 179 static FFPsyWindowInfo psy_3gpp_window(FFPsyContext *ctx, |
| 180 const int16_t *audio, const int16_t *la, | 180 const int16_t *audio, const int16_t *la, |
| 181 int channel, int prev_type) | 181 int channel, int prev_type) |
| 182 { | 182 { |
| 183 int i, j; | 183 int i, j; |
| 184 int br = ctx->avctx->bit_rate / ctx->avctx->channels; | 184 int br = ctx->avctx->bit_rate / ctx->avctx->channels; |
| 185 int attack_ratio = br <= 16000 ? 18 : 10; | 185 int attack_ratio = br <= 16000 ? 18 : 10; |
| 186 Psy3gppContext *pctx = (Psy3gppContext*) ctx->model_priv_data; | 186 Psy3gppContext *pctx = (Psy3gppContext*) ctx->model_priv_data; |
| 187 Psy3gppChannel *pch = &pctx->ch[channel]; | 187 Psy3gppChannel *pch = &pctx->ch[channel]; |
| 188 uint8_t grouping = 0; | 188 uint8_t grouping = 0; |
| 189 FFPsyWindowInfo wi; | 189 FFPsyWindowInfo wi; |
| 190 | 190 |
| 191 memset(&wi, 0, sizeof(wi)); | 191 memset(&wi, 0, sizeof(wi)); |
| 192 if (la) { | 192 if (la) { |
| 193 float s[8], v; | 193 float s[8], v; |
| 197 for (i = 0; i < 8; i++) { | 197 for (i = 0; i < 8; i++) { |
| 198 for (j = 0; j < 128; j++) { | 198 for (j = 0; j < 128; j++) { |
| 199 v = iir_filter(audio[(i*128+j)*ctx->avctx->channels], pch->iir_state); | 199 v = iir_filter(audio[(i*128+j)*ctx->avctx->channels], pch->iir_state); |
| 200 sum += v*v; | 200 sum += v*v; |
| 201 } | 201 } |
| 202 s[i] = sum; | 202 s[i] = sum; |
| 203 sum2 += sum; | 203 sum2 += sum; |
| 204 } | 204 } |
| 205 for (i = 0; i < 8; i++) { | 205 for (i = 0; i < 8; i++) { |
| 206 if (s[i] > pch->win_energy * attack_ratio) { | 206 if (s[i] > pch->win_energy * attack_ratio) { |
| 207 attack_n = i + 1; | 207 attack_n = i + 1; |
| 208 switch_to_eight = 1; | 208 switch_to_eight = 1; |
| 209 break; | 209 break; |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 pch->win_energy = pch->win_energy*7/8 + sum2/64; | 212 pch->win_energy = pch->win_energy*7/8 + sum2/64; |
| 253 } | 253 } |
| 254 | 254 |
| 255 /** | 255 /** |
| 256 * Calculate band thresholds as suggested in 3GPP TS26.403 | 256 * Calculate band thresholds as suggested in 3GPP TS26.403 |
| 257 */ | 257 */ |
| 258 static void psy_3gpp_analyze(FFPsyContext *ctx, int channel, const float *coefs, | 258 static void psy_3gpp_analyze(FFPsyContext *ctx, int channel, |
| 259 FFPsyWindowInfo *wi) | 259 const float *coefs, FFPsyWindowInfo *wi) |
| 260 { | 260 { |
| 261 Psy3gppContext *pctx = (Psy3gppContext*) ctx->model_priv_data; | 261 Psy3gppContext *pctx = (Psy3gppContext*) ctx->model_priv_data; |
| 262 Psy3gppChannel *pch = &pctx->ch[channel]; | 262 Psy3gppChannel *pch = &pctx->ch[channel]; |
| 263 int start = 0; | 263 int start = 0; |
| 264 int i, w, g; | 264 int i, w, g; |
| 265 const int num_bands = ctx->num_bands[wi->num_windows == 8]; | 265 const int num_bands = ctx->num_bands[wi->num_windows == 8]; |
| 266 const uint8_t* band_sizes = ctx->bands[wi->num_windows == 8]; | 266 const uint8_t* band_sizes = ctx->bands[wi->num_windows == 8]; |
| 267 Psy3gppCoeffs *coeffs = &pctx->psy_coef[wi->num_windows == 8]; | 267 Psy3gppCoeffs *coeffs = &pctx->psy_coef[wi->num_windows == 8]; |
| 268 | 268 |
| 269 //calculate energies, initial thresholds and related values - 5.4.2 "Threshold Calculation" | 269 //calculate energies, initial thresholds and related values - 5.4.2 "Threshold Calculation" |
| 270 for (w = 0; w < wi->num_windows*16; w += 16) { | 270 for (w = 0; w < wi->num_windows*16; w += 16) { |
| 271 for (g = 0; g < num_bands; g++) { | 271 for (g = 0; g < num_bands; g++) { |
| 272 Psy3gppBand *band = &pch->band[w+g]; | 272 Psy3gppBand *band = &pch->band[w+g]; |
| 273 band->energy = 0.0f; | 273 band->energy = 0.0f; |
| 274 for (i = 0; i < band_sizes[g]; i++) | 274 for (i = 0; i < band_sizes[g]; i++) |
| 275 band->energy += coefs[start+i] * coefs[start+i]; | 275 band->energy += coefs[start+i] * coefs[start+i]; |
| 276 band->energy *= 1.0f / (512*512); | 276 band->energy *= 1.0f / (512*512); |
| 277 band->thr = band->energy * 0.001258925f; | 277 band->thr = band->energy * 0.001258925f; |
| 278 start += band_sizes[g]; | 278 start += band_sizes[g]; |
| 279 | 279 |
| 280 ctx->psy_bands[channel*PSY_MAX_BANDS+w+g].energy = band->energy; | 280 ctx->psy_bands[channel*PSY_MAX_BANDS+w+g].energy = band->energy; |
| 281 } | 281 } |
| 282 } | 282 } |
| 283 //modify thresholds - spread, threshold in quiet - 5.4.3 "Spreaded Energy Calculation" | 283 //modify thresholds - spread, threshold in quiet - 5.4.3 "Spreaded Energy Calculation" |
