| OLD | NEW |
| 1 /* Copyright (c) 2007-2008 CSIRO | 1 /* Copyright (c) 2007-2008 CSIRO |
| 2 Copyright (c) 2007-2010 Xiph.Org Foundation | 2 Copyright (c) 2007-2010 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 Redistribution and use in source and binary forms, with or without | 6 Redistribution and use in source and binary forms, with or without |
| 7 modification, are permitted provided that the following conditions | 7 modification, are permitted provided that the following conditions |
| 8 are met: | 8 are met: |
| 9 | 9 |
| 10 - Redistributions of source code must retain the above copyright | 10 - Redistributions of source code must retain the above copyright |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 { | 154 { |
| 155 opus_custom_encoder_destroy(st); | 155 opus_custom_encoder_destroy(st); |
| 156 st = NULL; | 156 st = NULL; |
| 157 } | 157 } |
| 158 if (error) | 158 if (error) |
| 159 *error = ret; | 159 *error = ret; |
| 160 return st; | 160 return st; |
| 161 } | 161 } |
| 162 #endif /* CUSTOM_MODES */ | 162 #endif /* CUSTOM_MODES */ |
| 163 | 163 |
| 164 int celt_encoder_init(CELTEncoder *st, opus_int32 sampling_rate, int channels) | 164 static int opus_custom_encoder_init_arch(CELTEncoder *st, const CELTMode *mode, |
| 165 { | 165 int channels, int arch) |
| 166 int ret; | |
| 167 ret = opus_custom_encoder_init(st, opus_custom_mode_create(48000, 960, NULL),
channels); | |
| 168 if (ret != OPUS_OK) | |
| 169 return ret; | |
| 170 st->upsample = resampling_factor(sampling_rate); | |
| 171 return OPUS_OK; | |
| 172 } | |
| 173 | |
| 174 OPUS_CUSTOM_NOSTATIC int opus_custom_encoder_init(CELTEncoder *st, const CELTMod
e *mode, int channels) | |
| 175 { | 166 { |
| 176 if (channels < 0 || channels > 2) | 167 if (channels < 0 || channels > 2) |
| 177 return OPUS_BAD_ARG; | 168 return OPUS_BAD_ARG; |
| 178 | 169 |
| 179 if (st==NULL || mode==NULL) | 170 if (st==NULL || mode==NULL) |
| 180 return OPUS_ALLOC_FAIL; | 171 return OPUS_ALLOC_FAIL; |
| 181 | 172 |
| 182 OPUS_CLEAR((char*)st, opus_custom_encoder_get_size(mode, channels)); | 173 OPUS_CLEAR((char*)st, opus_custom_encoder_get_size(mode, channels)); |
| 183 | 174 |
| 184 st->mode = mode; | 175 st->mode = mode; |
| 185 st->overlap = mode->overlap; | 176 st->overlap = mode->overlap; |
| 186 st->stream_channels = st->channels = channels; | 177 st->stream_channels = st->channels = channels; |
| 187 | 178 |
| 188 st->upsample = 1; | 179 st->upsample = 1; |
| 189 st->start = 0; | 180 st->start = 0; |
| 190 st->end = st->mode->effEBands; | 181 st->end = st->mode->effEBands; |
| 191 st->signalling = 1; | 182 st->signalling = 1; |
| 192 | 183 |
| 193 st->arch = opus_select_arch(); | 184 st->arch = arch; |
| 194 | 185 |
| 195 st->constrained_vbr = 1; | 186 st->constrained_vbr = 1; |
| 196 st->clip = 1; | 187 st->clip = 1; |
| 197 | 188 |
| 198 st->bitrate = OPUS_BITRATE_MAX; | 189 st->bitrate = OPUS_BITRATE_MAX; |
| 199 st->vbr = 0; | 190 st->vbr = 0; |
| 200 st->force_intra = 0; | 191 st->force_intra = 0; |
| 201 st->complexity = 5; | 192 st->complexity = 5; |
| 202 st->lsb_depth=24; | 193 st->lsb_depth=24; |
| 203 | 194 |
| 204 opus_custom_encoder_ctl(st, OPUS_RESET_STATE); | 195 opus_custom_encoder_ctl(st, OPUS_RESET_STATE); |
| 205 | 196 |
| 206 return OPUS_OK; | 197 return OPUS_OK; |
| 207 } | 198 } |
| 208 | 199 |
| 209 #ifdef CUSTOM_MODES | 200 #ifdef CUSTOM_MODES |
| 201 int opus_custom_encoder_init(CELTEncoder *st, const CELTMode *mode, int channels
) |
| 202 { |
| 203 return opus_custom_encoder_init_arch(st, mode, channels, opus_select_arch()); |
| 204 } |
| 205 #endif |
| 206 |
| 207 int celt_encoder_init(CELTEncoder *st, opus_int32 sampling_rate, int channels, |
| 208 int arch) |
| 209 { |
| 210 int ret; |
| 211 ret = opus_custom_encoder_init_arch(st, |
| 212 opus_custom_mode_create(48000, 960, NULL), channels, arch); |
| 213 if (ret != OPUS_OK) |
| 214 return ret; |
| 215 st->upsample = resampling_factor(sampling_rate); |
| 216 return OPUS_OK; |
| 217 } |
| 218 |
| 219 #ifdef CUSTOM_MODES |
| 210 void opus_custom_encoder_destroy(CELTEncoder *st) | 220 void opus_custom_encoder_destroy(CELTEncoder *st) |
| 211 { | 221 { |
| 212 opus_free(st); | 222 opus_free(st); |
| 213 } | 223 } |
| 214 #endif /* CUSTOM_MODES */ | 224 #endif /* CUSTOM_MODES */ |
| 215 | 225 |
| 216 | 226 |
| 217 static int transient_analysis(const opus_val32 * OPUS_RESTRICT in, int len, int
C, | 227 static int transient_analysis(const opus_val32 * OPUS_RESTRICT in, int len, int
C, |
| 218 opus_val16 *tf_estimate, int *tf_chan) | 228 opus_val16 *tf_estimate, int *tf_chan) |
| 219 { | 229 { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 233 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, | 243 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, |
| 234 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, | 244 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, |
| 235 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, | 245 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
| 236 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, | 246 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, |
| 237 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, | 247 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, |
| 238 }; | 248 }; |
| 239 SAVE_STACK; | 249 SAVE_STACK; |
| 240 ALLOC(tmp, len, opus_val16); | 250 ALLOC(tmp, len, opus_val16); |
| 241 | 251 |
| 242 len2=len/2; | 252 len2=len/2; |
| 243 tf_max = 0; | |
| 244 for (c=0;c<C;c++) | 253 for (c=0;c<C;c++) |
| 245 { | 254 { |
| 246 opus_val32 mean; | 255 opus_val32 mean; |
| 247 opus_int32 unmask=0; | 256 opus_int32 unmask=0; |
| 248 opus_val32 norm; | 257 opus_val32 norm; |
| 249 opus_val16 maxE; | 258 opus_val16 maxE; |
| 250 mem0=0; | 259 mem0=0; |
| 251 mem1=0; | 260 mem1=0; |
| 252 /* High-pass filter: (1 - 2*z^-1 + z^-2) / (1 - z^-1 + .5*z^-2) */ | 261 /* High-pass filter: (1 - 2*z^-1 + z^-2) / (1 - z^-1 + .5*z^-2) */ |
| 253 for (i=0;i<len;i++) | 262 for (i=0;i<len;i++) |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 int bound = B*N/upsample; | 453 int bound = B*N/upsample; |
| 445 for (i=0;i<bound;i++) | 454 for (i=0;i<bound;i++) |
| 446 out[c*B*N+i] *= upsample; | 455 out[c*B*N+i] *= upsample; |
| 447 for (;i<B*N;i++) | 456 for (;i<B*N;i++) |
| 448 out[c*B*N+i] = 0; | 457 out[c*B*N+i] = 0; |
| 449 } while (++c<C); | 458 } while (++c<C); |
| 450 } | 459 } |
| 451 } | 460 } |
| 452 | 461 |
| 453 | 462 |
| 454 void preemphasis(const opus_val16 * OPUS_RESTRICT pcmp, celt_sig * OPUS_RESTRICT
inp, | 463 void celt_preemphasis(const opus_val16 * OPUS_RESTRICT pcmp, celt_sig * OPUS_RES
TRICT inp, |
| 455 int N, int CC, int upsample, const opus_val16 *coef, cel
t_sig *mem, int clip) | 464 int N, int CC, int upsample, const opus_val16 *coef, cel
t_sig *mem, int clip) |
| 456 { | 465 { |
| 457 int i; | 466 int i; |
| 458 opus_val16 coef0; | 467 opus_val16 coef0; |
| 459 celt_sig m; | 468 celt_sig m; |
| 460 int Nu; | 469 int Nu; |
| 461 | 470 |
| 462 coef0 = coef[0]; | 471 coef0 = coef[0]; |
| 463 | 472 |
| 464 | 473 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 481 inp[i*upsample] = x; | 490 inp[i*upsample] = x; |
| 482 } | 491 } |
| 483 | 492 |
| 484 #ifndef FIXED_POINT | 493 #ifndef FIXED_POINT |
| 485 if (clip) | 494 if (clip) |
| 486 { | 495 { |
| 487 /* Clip input to avoid encoding non-portable files */ | 496 /* Clip input to avoid encoding non-portable files */ |
| 488 for (i=0;i<Nu;i++) | 497 for (i=0;i<Nu;i++) |
| 489 inp[i*upsample] = MAX32(-65536.f, MIN32(65536.f,inp[i*upsample])); | 498 inp[i*upsample] = MAX32(-65536.f, MIN32(65536.f,inp[i*upsample])); |
| 490 } | 499 } |
| 500 #else |
| 501 (void)clip; /* Avoids a warning about clip being unused. */ |
| 491 #endif | 502 #endif |
| 492 m = *mem; | 503 m = *mem; |
| 493 #ifdef CUSTOM_MODES | 504 #ifdef CUSTOM_MODES |
| 494 if (coef[1] != 0) | 505 if (coef[1] != 0) |
| 495 { | 506 { |
| 496 opus_val16 coef1 = coef[1]; | 507 opus_val16 coef1 = coef[1]; |
| 497 opus_val16 coef2 = coef[2]; | 508 opus_val16 coef2 = coef[2]; |
| 498 for (i=0;i<N;i++) | 509 for (i=0;i<N;i++) |
| 499 { | 510 { |
| 500 opus_val16 x, tmp; | 511 celt_sig x, tmp; |
| 501 x = inp[i]; | 512 x = inp[i]; |
| 502 /* Apply pre-emphasis */ | 513 /* Apply pre-emphasis */ |
| 503 tmp = MULT16_16(coef2, x); | 514 tmp = MULT16_16(coef2, x); |
| 504 inp[i] = tmp + m; | 515 inp[i] = tmp + m; |
| 505 m = MULT16_32_Q15(coef1, inp[i]) - MULT16_32_Q15(coef0, tmp); | 516 m = MULT16_32_Q15(coef1, inp[i]) - MULT16_32_Q15(coef0, tmp); |
| 506 } | 517 } |
| 507 } else | 518 } else |
| 508 #endif | 519 #endif |
| 509 { | 520 { |
| 510 for (i=0;i<N;i++) | 521 for (i=0;i<N;i++) |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 815 if (diff < -QCONST16(4.f, DB_SHIFT)) | 826 if (diff < -QCONST16(4.f, DB_SHIFT)) |
| 816 trim_index++; | 827 trim_index++; |
| 817 if (diff < -QCONST16(10.f, DB_SHIFT)) | 828 if (diff < -QCONST16(10.f, DB_SHIFT)) |
| 818 trim_index++; | 829 trim_index++; |
| 819 trim -= MAX16(-QCONST16(2.f, 8), MIN16(QCONST16(2.f, 8), SHR16(diff+QCONST16(
1.f, DB_SHIFT),DB_SHIFT-8)/6 )); | 830 trim -= MAX16(-QCONST16(2.f, 8), MIN16(QCONST16(2.f, 8), SHR16(diff+QCONST16(
1.f, DB_SHIFT),DB_SHIFT-8)/6 )); |
| 820 trim -= SHR16(surround_trim, DB_SHIFT-8); | 831 trim -= SHR16(surround_trim, DB_SHIFT-8); |
| 821 trim -= 2*SHR16(tf_estimate, 14-8); | 832 trim -= 2*SHR16(tf_estimate, 14-8); |
| 822 #ifndef DISABLE_FLOAT_API | 833 #ifndef DISABLE_FLOAT_API |
| 823 if (analysis->valid) | 834 if (analysis->valid) |
| 824 { | 835 { |
| 825 trim -= MAX16(-QCONST16(2.f, 8), MIN16(QCONST16(2.f, 8), QCONST16(2.f, 8)*
(analysis->tonality_slope+.05f))); | 836 trim -= MAX16(-QCONST16(2.f, 8), MIN16(QCONST16(2.f, 8), |
| 837 (opus_val16)(QCONST16(2.f, 8)*(analysis->tonality_slope+.05f)))); |
| 826 } | 838 } |
| 827 #endif | 839 #endif |
| 828 | 840 |
| 829 #ifdef FIXED_POINT | 841 #ifdef FIXED_POINT |
| 830 trim_index = PSHR32(trim, 8); | 842 trim_index = PSHR32(trim, 8); |
| 831 #else | 843 #else |
| 832 trim_index = (int)floor(.5f+trim); | 844 trim_index = (int)floor(.5f+trim); |
| 833 #endif | 845 #endif |
| 834 if (trim_index<0) | 846 if (trim_index<0) |
| 835 trim_index = 0; | 847 trim_index = 0; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1016 c=0; do { | 1028 c=0; do { |
| 1017 OPUS_COPY(pre[c], prefilter_mem+c*COMBFILTER_MAXPERIOD, COMBFILTER_MAXPERI
OD); | 1029 OPUS_COPY(pre[c], prefilter_mem+c*COMBFILTER_MAXPERIOD, COMBFILTER_MAXPERI
OD); |
| 1018 OPUS_COPY(pre[c]+COMBFILTER_MAXPERIOD, in+c*(N+st->overlap)+st->overlap, N
); | 1030 OPUS_COPY(pre[c]+COMBFILTER_MAXPERIOD, in+c*(N+st->overlap)+st->overlap, N
); |
| 1019 } while (++c<CC); | 1031 } while (++c<CC); |
| 1020 | 1032 |
| 1021 if (enabled) | 1033 if (enabled) |
| 1022 { | 1034 { |
| 1023 VARDECL(opus_val16, pitch_buf); | 1035 VARDECL(opus_val16, pitch_buf); |
| 1024 ALLOC(pitch_buf, (COMBFILTER_MAXPERIOD+N)>>1, opus_val16); | 1036 ALLOC(pitch_buf, (COMBFILTER_MAXPERIOD+N)>>1, opus_val16); |
| 1025 | 1037 |
| 1026 pitch_downsample(pre, pitch_buf, COMBFILTER_MAXPERIOD+N, CC); | 1038 pitch_downsample(pre, pitch_buf, COMBFILTER_MAXPERIOD+N, CC, st->arch); |
| 1027 /* Don't search for the fir last 1.5 octave of the range because | 1039 /* Don't search for the fir last 1.5 octave of the range because |
| 1028 there's too many false-positives due to short-term correlation */ | 1040 there's too many false-positives due to short-term correlation */ |
| 1029 pitch_search(pitch_buf+(COMBFILTER_MAXPERIOD>>1), pitch_buf, N, | 1041 pitch_search(pitch_buf+(COMBFILTER_MAXPERIOD>>1), pitch_buf, N, |
| 1030 COMBFILTER_MAXPERIOD-3*COMBFILTER_MINPERIOD, &pitch_index); | 1042 COMBFILTER_MAXPERIOD-3*COMBFILTER_MINPERIOD, &pitch_index, |
| 1043 st->arch); |
| 1031 pitch_index = COMBFILTER_MAXPERIOD-pitch_index; | 1044 pitch_index = COMBFILTER_MAXPERIOD-pitch_index; |
| 1032 | 1045 |
| 1033 gain1 = remove_doubling(pitch_buf, COMBFILTER_MAXPERIOD, COMBFILTER_MINPER
IOD, | 1046 gain1 = remove_doubling(pitch_buf, COMBFILTER_MAXPERIOD, COMBFILTER_MINPER
IOD, |
| 1034 N, &pitch_index, st->prefilter_period, st->prefilter_gain); | 1047 N, &pitch_index, st->prefilter_period, st->prefilter_gain); |
| 1035 if (pitch_index > COMBFILTER_MAXPERIOD-2) | 1048 if (pitch_index > COMBFILTER_MAXPERIOD-2) |
| 1036 pitch_index = COMBFILTER_MAXPERIOD-2; | 1049 pitch_index = COMBFILTER_MAXPERIOD-2; |
| 1037 gain1 = MULT16_16_Q15(QCONST16(.7f,15),gain1); | 1050 gain1 = MULT16_16_Q15(QCONST16(.7f,15),gain1); |
| 1038 /*printf("%d %d %f %f\n", pitch_change, pitch_index, gain1, st->analysis.t
onality);*/ | 1051 /*printf("%d %d %f %f\n", pitch_change, pitch_index, gain1, st->analysis.t
onality);*/ |
| 1039 if (st->loss_rate>2) | 1052 if (st->loss_rate>2) |
| 1040 gain1 = HALF32(gain1); | 1053 gain1 = HALF32(gain1); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1149 /* Stereo savings */ | 1162 /* Stereo savings */ |
| 1150 if (C==2) | 1163 if (C==2) |
| 1151 { | 1164 { |
| 1152 int coded_stereo_bands; | 1165 int coded_stereo_bands; |
| 1153 int coded_stereo_dof; | 1166 int coded_stereo_dof; |
| 1154 opus_val16 max_frac; | 1167 opus_val16 max_frac; |
| 1155 coded_stereo_bands = IMIN(intensity, coded_bands); | 1168 coded_stereo_bands = IMIN(intensity, coded_bands); |
| 1156 coded_stereo_dof = (eBands[coded_stereo_bands]<<LM)-coded_stereo_bands; | 1169 coded_stereo_dof = (eBands[coded_stereo_bands]<<LM)-coded_stereo_bands; |
| 1157 /* Maximum fraction of the bits we can save if the signal is mono. */ | 1170 /* Maximum fraction of the bits we can save if the signal is mono. */ |
| 1158 max_frac = DIV32_16(MULT16_16(QCONST16(0.8f, 15), coded_stereo_dof), coded
_bins); | 1171 max_frac = DIV32_16(MULT16_16(QCONST16(0.8f, 15), coded_stereo_dof), coded
_bins); |
| 1172 stereo_saving = MIN16(stereo_saving, QCONST16(1.f, 8)); |
| 1159 /*printf("%d %d %d ", coded_stereo_dof, coded_bins, tot_boost);*/ | 1173 /*printf("%d %d %d ", coded_stereo_dof, coded_bins, tot_boost);*/ |
| 1160 target -= (opus_int32)MIN32(MULT16_32_Q15(max_frac,target), | 1174 target -= (opus_int32)MIN32(MULT16_32_Q15(max_frac,target), |
| 1161 SHR32(MULT16_16(stereo_saving-QCONST16(0.1f,8),(coded_ster
eo_dof<<BITRES)),8)); | 1175 SHR32(MULT16_16(stereo_saving-QCONST16(0.1f,8),(coded_ster
eo_dof<<BITRES)),8)); |
| 1162 } | 1176 } |
| 1163 /* Boost the rate according to dynalloc (minus the dynalloc average for calib
ration). */ | 1177 /* Boost the rate according to dynalloc (minus the dynalloc average for calib
ration). */ |
| 1164 target += tot_boost-(16<<LM); | 1178 target += tot_boost-(16<<LM); |
| 1165 /* Apply transient boost, compensating for average boost. */ | 1179 /* Apply transient boost, compensating for average boost. */ |
| 1166 tf_calibration = variable_duration==OPUS_FRAMESIZE_VARIABLE ? | 1180 tf_calibration = variable_duration==OPUS_FRAMESIZE_VARIABLE ? |
| 1167 QCONST16(0.02f,14) : QCONST16(0.04f,14); | 1181 QCONST16(0.02f,14) : QCONST16(0.04f,14); |
| 1168 target += (opus_int32)SHL32(MULT16_32_Q15(tf_estimate-tf_calibration, target)
,1); | 1182 target += (opus_int32)SHL32(MULT16_32_Q15(tf_estimate-tf_calibration, target)
,1); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1287 const OpusCustomMode *mode; | 1301 const OpusCustomMode *mode; |
| 1288 int nbEBands; | 1302 int nbEBands; |
| 1289 int overlap; | 1303 int overlap; |
| 1290 const opus_int16 *eBands; | 1304 const opus_int16 *eBands; |
| 1291 int secondMdct; | 1305 int secondMdct; |
| 1292 int signalBandwidth; | 1306 int signalBandwidth; |
| 1293 int transient_got_disabled=0; | 1307 int transient_got_disabled=0; |
| 1294 opus_val16 surround_masking=0; | 1308 opus_val16 surround_masking=0; |
| 1295 opus_val16 temporal_vbr=0; | 1309 opus_val16 temporal_vbr=0; |
| 1296 opus_val16 surround_trim = 0; | 1310 opus_val16 surround_trim = 0; |
| 1311 opus_int32 equiv_rate = 510000; |
| 1297 VARDECL(opus_val16, surround_dynalloc); | 1312 VARDECL(opus_val16, surround_dynalloc); |
| 1298 ALLOC_STACK; | 1313 ALLOC_STACK; |
| 1299 | 1314 |
| 1300 mode = st->mode; | 1315 mode = st->mode; |
| 1301 nbEBands = mode->nbEBands; | 1316 nbEBands = mode->nbEBands; |
| 1302 overlap = mode->overlap; | 1317 overlap = mode->overlap; |
| 1303 eBands = mode->eBands; | 1318 eBands = mode->eBands; |
| 1304 tf_estimate = 0; | 1319 tf_estimate = 0; |
| 1305 if (nbCompressedBytes<2 || pcm==NULL) | 1320 if (nbCompressedBytes<2 || pcm==NULL) |
| 1306 return OPUS_BAD_ARG; | 1321 { |
| 1322 RESTORE_STACK; |
| 1323 return OPUS_BAD_ARG; |
| 1324 } |
| 1307 | 1325 |
| 1308 frame_size *= st->upsample; | 1326 frame_size *= st->upsample; |
| 1309 for (LM=0;LM<=mode->maxLM;LM++) | 1327 for (LM=0;LM<=mode->maxLM;LM++) |
| 1310 if (mode->shortMdctSize<<LM==frame_size) | 1328 if (mode->shortMdctSize<<LM==frame_size) |
| 1311 break; | 1329 break; |
| 1312 if (LM>mode->maxLM) | 1330 if (LM>mode->maxLM) |
| 1331 { |
| 1332 RESTORE_STACK; |
| 1313 return OPUS_BAD_ARG; | 1333 return OPUS_BAD_ARG; |
| 1334 } |
| 1314 M=1<<LM; | 1335 M=1<<LM; |
| 1315 N = M*mode->shortMdctSize; | 1336 N = M*mode->shortMdctSize; |
| 1316 | 1337 |
| 1317 prefilter_mem = st->in_mem+CC*(st->overlap); | 1338 prefilter_mem = st->in_mem+CC*(st->overlap); |
| 1318 oldBandE = (opus_val16*)(st->in_mem+CC*(st->overlap+COMBFILTER_MAXPERIOD)); | 1339 oldBandE = (opus_val16*)(st->in_mem+CC*(st->overlap+COMBFILTER_MAXPERIOD)); |
| 1319 oldLogE = oldBandE + CC*nbEBands; | 1340 oldLogE = oldBandE + CC*nbEBands; |
| 1320 oldLogE2 = oldLogE + CC*nbEBands; | 1341 oldLogE2 = oldLogE + CC*nbEBands; |
| 1321 | 1342 |
| 1322 if (enc==NULL) | 1343 if (enc==NULL) |
| 1323 { | 1344 { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1334 int tmp = (mode->effEBands-st->end)>>1; | 1355 int tmp = (mode->effEBands-st->end)>>1; |
| 1335 st->end = IMAX(1, mode->effEBands-tmp); | 1356 st->end = IMAX(1, mode->effEBands-tmp); |
| 1336 compressed[0] = tmp<<5; | 1357 compressed[0] = tmp<<5; |
| 1337 compressed[0] |= LM<<3; | 1358 compressed[0] |= LM<<3; |
| 1338 compressed[0] |= (C==2)<<2; | 1359 compressed[0] |= (C==2)<<2; |
| 1339 /* Convert "standard mode" to Opus header */ | 1360 /* Convert "standard mode" to Opus header */ |
| 1340 if (mode->Fs==48000 && mode->shortMdctSize==120) | 1361 if (mode->Fs==48000 && mode->shortMdctSize==120) |
| 1341 { | 1362 { |
| 1342 int c0 = toOpus(compressed[0]); | 1363 int c0 = toOpus(compressed[0]); |
| 1343 if (c0<0) | 1364 if (c0<0) |
| 1365 { |
| 1366 RESTORE_STACK; |
| 1344 return OPUS_BAD_ARG; | 1367 return OPUS_BAD_ARG; |
| 1368 } |
| 1345 compressed[0] = c0; | 1369 compressed[0] = c0; |
| 1346 } | 1370 } |
| 1347 compressed++; | 1371 compressed++; |
| 1348 nbCompressedBytes--; | 1372 nbCompressedBytes--; |
| 1349 } | 1373 } |
| 1350 #else | 1374 #else |
| 1351 celt_assert(st->signalling==0); | 1375 celt_assert(st->signalling==0); |
| 1352 #endif | 1376 #endif |
| 1353 | 1377 |
| 1354 /* Can't produce more than 1275 output bytes */ | 1378 /* Can't produce more than 1275 output bytes */ |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1368 opus_int32 tmp; | 1392 opus_int32 tmp; |
| 1369 vbr_rate = 0; | 1393 vbr_rate = 0; |
| 1370 tmp = st->bitrate*frame_size; | 1394 tmp = st->bitrate*frame_size; |
| 1371 if (tell>1) | 1395 if (tell>1) |
| 1372 tmp += tell; | 1396 tmp += tell; |
| 1373 if (st->bitrate!=OPUS_BITRATE_MAX) | 1397 if (st->bitrate!=OPUS_BITRATE_MAX) |
| 1374 nbCompressedBytes = IMAX(2, IMIN(nbCompressedBytes, | 1398 nbCompressedBytes = IMAX(2, IMIN(nbCompressedBytes, |
| 1375 (tmp+4*mode->Fs)/(8*mode->Fs)-!!st->signalling)); | 1399 (tmp+4*mode->Fs)/(8*mode->Fs)-!!st->signalling)); |
| 1376 effectiveBytes = nbCompressedBytes; | 1400 effectiveBytes = nbCompressedBytes; |
| 1377 } | 1401 } |
| 1402 if (st->bitrate != OPUS_BITRATE_MAX) |
| 1403 equiv_rate = st->bitrate - (40*C+20)*((400>>LM) - 50); |
| 1378 | 1404 |
| 1379 if (enc==NULL) | 1405 if (enc==NULL) |
| 1380 { | 1406 { |
| 1381 ec_enc_init(&_enc, compressed, nbCompressedBytes); | 1407 ec_enc_init(&_enc, compressed, nbCompressedBytes); |
| 1382 enc = &_enc; | 1408 enc = &_enc; |
| 1383 } | 1409 } |
| 1384 | 1410 |
| 1385 if (vbr_rate>0) | 1411 if (vbr_rate>0) |
| 1386 { | 1412 { |
| 1387 /* Computes the max bit-rate allowed in VBR mode to avoid violating the | 1413 /* Computes the max bit-rate allowed in VBR mode to avoid violating the |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1441 total_bits=nbCompressedBytes*8; | 1467 total_bits=nbCompressedBytes*8; |
| 1442 nbAvailableBytes=2; | 1468 nbAvailableBytes=2; |
| 1443 ec_enc_shrink(enc, nbCompressedBytes); | 1469 ec_enc_shrink(enc, nbCompressedBytes); |
| 1444 } | 1470 } |
| 1445 /* Pretend we've filled all the remaining bits with zeros | 1471 /* Pretend we've filled all the remaining bits with zeros |
| 1446 (that's what the initialiser did anyway) */ | 1472 (that's what the initialiser did anyway) */ |
| 1447 tell = nbCompressedBytes*8; | 1473 tell = nbCompressedBytes*8; |
| 1448 enc->nbits_total+=tell-ec_tell(enc); | 1474 enc->nbits_total+=tell-ec_tell(enc); |
| 1449 } | 1475 } |
| 1450 c=0; do { | 1476 c=0; do { |
| 1451 preemphasis(pcm+c, in+c*(N+st->overlap)+st->overlap, N, CC, st->upsample, | 1477 celt_preemphasis(pcm+c, in+c*(N+st->overlap)+st->overlap, N, CC, st->upsam
ple, |
| 1452 mode->preemph, st->preemph_memE+c, st->clip); | 1478 mode->preemph, st->preemph_memE+c, st->clip); |
| 1453 } while (++c<CC); | 1479 } while (++c<CC); |
| 1454 | 1480 |
| 1455 | 1481 |
| 1456 | 1482 |
| 1457 /* Find pitch period and gain */ | 1483 /* Find pitch period and gain */ |
| 1458 { | 1484 { |
| 1459 int enabled; | 1485 int enabled; |
| 1460 int qg; | 1486 int qg; |
| 1461 enabled = (st->lfe || nbAvailableBytes>12*C) && st->start==0 && !silence &
& !st->disable_pf | 1487 enabled = ((st->lfe&&nbAvailableBytes>3) || nbAvailableBytes>12*C) && st->
start==0 && !silence && !st->disable_pf |
| 1462 && st->complexity >= 5 && !(st->consec_transient && LM!=3 && st->var
iable_duration==OPUS_FRAMESIZE_VARIABLE); | 1488 && st->complexity >= 5 && !(st->consec_transient && LM!=3 && st->var
iable_duration==OPUS_FRAMESIZE_VARIABLE); |
| 1463 | 1489 |
| 1464 prefilter_tapset = st->tapset_decision; | 1490 prefilter_tapset = st->tapset_decision; |
| 1465 pf_on = run_prefilter(st, in, prefilter_mem, CC, N, prefilter_tapset, &pit
ch_index, &gain1, &qg, enabled, nbAvailableBytes); | 1491 pf_on = run_prefilter(st, in, prefilter_mem, CC, N, prefilter_tapset, &pit
ch_index, &gain1, &qg, enabled, nbAvailableBytes); |
| 1466 if ((gain1 > QCONST16(.4f,15) || st->prefilter_gain > QCONST16(.4f,15)) &&
(!st->analysis.valid || st->analysis.tonality > .3) | 1492 if ((gain1 > QCONST16(.4f,15) || st->prefilter_gain > QCONST16(.4f,15)) &&
(!st->analysis.valid || st->analysis.tonality > .3) |
| 1467 && (pitch_index > 1.26*st->prefilter_period || pitch_index < .79*st-
>prefilter_period)) | 1493 && (pitch_index > 1.26*st->prefilter_period || pitch_index < .79*st-
>prefilter_period)) |
| 1468 pitch_change = 1; | 1494 pitch_change = 1; |
| 1469 if (pf_on==0) | 1495 if (pf_on==0) |
| 1470 { | 1496 { |
| 1471 if(st->start==0 && tell+16<=total_bits) | 1497 if(st->start==0 && tell+16<=total_bits) |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1605 mask_avg += QCONST16(.2f, DB_SHIFT); | 1631 mask_avg += QCONST16(.2f, DB_SHIFT); |
| 1606 /* Convert to 1/64th units used for the trim */ | 1632 /* Convert to 1/64th units used for the trim */ |
| 1607 surround_trim = 64*diff; | 1633 surround_trim = 64*diff; |
| 1608 /*printf("%d %d ", mask_avg, surround_trim);*/ | 1634 /*printf("%d %d ", mask_avg, surround_trim);*/ |
| 1609 surround_masking = mask_avg; | 1635 surround_masking = mask_avg; |
| 1610 } | 1636 } |
| 1611 /* Temporal VBR (but not for LFE) */ | 1637 /* Temporal VBR (but not for LFE) */ |
| 1612 if (!st->lfe) | 1638 if (!st->lfe) |
| 1613 { | 1639 { |
| 1614 opus_val16 follow=-QCONST16(10.0f,DB_SHIFT); | 1640 opus_val16 follow=-QCONST16(10.0f,DB_SHIFT); |
| 1615 float frame_avg=0; | 1641 opus_val32 frame_avg=0; |
| 1616 opus_val16 offset = shortBlocks?HALF16(SHL16(LM, DB_SHIFT)):0; | 1642 opus_val16 offset = shortBlocks?HALF16(SHL16(LM, DB_SHIFT)):0; |
| 1617 for(i=st->start;i<st->end;i++) | 1643 for(i=st->start;i<st->end;i++) |
| 1618 { | 1644 { |
| 1619 follow = MAX16(follow-QCONST16(1.f, DB_SHIFT), bandLogE[i]-offset); | 1645 follow = MAX16(follow-QCONST16(1.f, DB_SHIFT), bandLogE[i]-offset); |
| 1620 if (C==2) | 1646 if (C==2) |
| 1621 follow = MAX16(follow, bandLogE[i+nbEBands]-offset); | 1647 follow = MAX16(follow, bandLogE[i+nbEBands]-offset); |
| 1622 frame_avg += follow; | 1648 frame_avg += follow; |
| 1623 } | 1649 } |
| 1624 frame_avg /= (st->end-st->start); | 1650 frame_avg /= (st->end-st->start); |
| 1625 temporal_vbr = SUB16(frame_avg,st->spec_avg); | 1651 temporal_vbr = SUB16(frame_avg,st->spec_avg); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1703 } else if (shortBlocks || st->complexity < 3 || nbAvailableBytes < 10*C ||
st->start != 0) | 1729 } else if (shortBlocks || st->complexity < 3 || nbAvailableBytes < 10*C ||
st->start != 0) |
| 1704 { | 1730 { |
| 1705 if (st->complexity == 0) | 1731 if (st->complexity == 0) |
| 1706 st->spread_decision = SPREAD_NONE; | 1732 st->spread_decision = SPREAD_NONE; |
| 1707 else | 1733 else |
| 1708 st->spread_decision = SPREAD_NORMAL; | 1734 st->spread_decision = SPREAD_NORMAL; |
| 1709 } else { | 1735 } else { |
| 1710 /* Disable new spreading+tapset estimator until we can show it works | 1736 /* Disable new spreading+tapset estimator until we can show it works |
| 1711 better than the old one. So far it seems like spreading_decision() | 1737 better than the old one. So far it seems like spreading_decision() |
| 1712 works best. */ | 1738 works best. */ |
| 1713 if (0&&st->analysis.valid) | 1739 #if 0 |
| 1740 if (st->analysis.valid) |
| 1714 { | 1741 { |
| 1715 static const opus_val16 spread_thresholds[3] = {-QCONST16(.6f, 15),
-QCONST16(.2f, 15), -QCONST16(.07f, 15)}; | 1742 static const opus_val16 spread_thresholds[3] = {-QCONST16(.6f, 15),
-QCONST16(.2f, 15), -QCONST16(.07f, 15)}; |
| 1716 static const opus_val16 spread_histeresis[3] = {QCONST16(.15f, 15),
QCONST16(.07f, 15), QCONST16(.02f, 15)}; | 1743 static const opus_val16 spread_histeresis[3] = {QCONST16(.15f, 15),
QCONST16(.07f, 15), QCONST16(.02f, 15)}; |
| 1717 static const opus_val16 tapset_thresholds[2] = {QCONST16(.0f, 15), Q
CONST16(.15f, 15)}; | 1744 static const opus_val16 tapset_thresholds[2] = {QCONST16(.0f, 15), Q
CONST16(.15f, 15)}; |
| 1718 static const opus_val16 tapset_histeresis[2] = {QCONST16(.1f, 15), Q
CONST16(.05f, 15)}; | 1745 static const opus_val16 tapset_histeresis[2] = {QCONST16(.1f, 15), Q
CONST16(.05f, 15)}; |
| 1719 st->spread_decision = hysteresis_decision(-st->analysis.tonality, sp
read_thresholds, spread_histeresis, 3, st->spread_decision); | 1746 st->spread_decision = hysteresis_decision(-st->analysis.tonality, sp
read_thresholds, spread_histeresis, 3, st->spread_decision); |
| 1720 st->tapset_decision = hysteresis_decision(st->analysis.tonality_slop
e, tapset_thresholds, tapset_histeresis, 2, st->tapset_decision); | 1747 st->tapset_decision = hysteresis_decision(st->analysis.tonality_slop
e, tapset_thresholds, tapset_histeresis, 2, st->tapset_decision); |
| 1721 } else { | 1748 } else |
| 1749 #endif |
| 1750 { |
| 1722 st->spread_decision = spreading_decision(mode, X, | 1751 st->spread_decision = spreading_decision(mode, X, |
| 1723 &st->tonal_average, st->spread_decision, &st->hf_average, | 1752 &st->tonal_average, st->spread_decision, &st->hf_average, |
| 1724 &st->tapset_decision, pf_on&&!shortBlocks, effEnd, C, M); | 1753 &st->tapset_decision, pf_on&&!shortBlocks, effEnd, C, M); |
| 1725 } | 1754 } |
| 1726 /*printf("%d %d\n", st->tapset_decision, st->spread_decision);*/ | 1755 /*printf("%d %d\n", st->tapset_decision, st->spread_decision);*/ |
| 1727 /*printf("%f %d %f %d\n\n", st->analysis.tonality, st->spread_decision,
st->analysis.tonality_slope, st->tapset_decision);*/ | 1756 /*printf("%f %d %f %d\n\n", st->analysis.tonality, st->spread_decision,
st->analysis.tonality_slope, st->tapset_decision);*/ |
| 1728 } | 1757 } |
| 1729 ec_enc_icdf(enc, st->spread_decision, spread_icdf, 5); | 1758 ec_enc_icdf(enc, st->spread_decision, spread_icdf, 5); |
| 1730 } | 1759 } |
| 1731 | 1760 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1770 dynalloc_loop_logp = 1; | 1799 dynalloc_loop_logp = 1; |
| 1771 } | 1800 } |
| 1772 /* Making dynalloc more likely */ | 1801 /* Making dynalloc more likely */ |
| 1773 if (j) | 1802 if (j) |
| 1774 dynalloc_logp = IMAX(2, dynalloc_logp-1); | 1803 dynalloc_logp = IMAX(2, dynalloc_logp-1); |
| 1775 offsets[i] = boost; | 1804 offsets[i] = boost; |
| 1776 } | 1805 } |
| 1777 | 1806 |
| 1778 if (C==2) | 1807 if (C==2) |
| 1779 { | 1808 { |
| 1780 int effectiveRate; | |
| 1781 | |
| 1782 static const opus_val16 intensity_thresholds[21]= | 1809 static const opus_val16 intensity_thresholds[21]= |
| 1783 /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 off*/ | 1810 /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 off*/ |
| 1784 { 16,21,23,25,27,29,31,33,35,38,42,46,50,54,58,63,68,75,84,102,130}; | 1811 { 1, 2, 3, 4, 5, 6, 7, 8,16,24,36,44,50,56,62,67,72,79,88,106,134}; |
| 1785 static const opus_val16 intensity_histeresis[21]= | 1812 static const opus_val16 intensity_histeresis[21]= |
| 1786 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 6, 8, 12}; | 1813 { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 8, 8}; |
| 1787 | 1814 |
| 1788 /* Always use MS for 2.5 ms frames until we can do a better analysis */ | 1815 /* Always use MS for 2.5 ms frames until we can do a better analysis */ |
| 1789 if (LM!=0) | 1816 if (LM!=0) |
| 1790 dual_stereo = stereo_analysis(mode, X, LM, N); | 1817 dual_stereo = stereo_analysis(mode, X, LM, N); |
| 1791 | 1818 |
| 1792 /* Account for coarse energy */ | 1819 st->intensity = hysteresis_decision((opus_val16)(equiv_rate/1000), |
| 1793 effectiveRate = (8*effectiveBytes - 80)>>LM; | 1820 intensity_thresholds, intensity_histeresis, 21, st->intensity); |
| 1794 | |
| 1795 /* effectiveRate in kb/s */ | |
| 1796 effectiveRate = 2*effectiveRate/5; | |
| 1797 | |
| 1798 st->intensity = hysteresis_decision((opus_val16)effectiveRate, intensity_t
hresholds, intensity_histeresis, 21, st->intensity); | |
| 1799 st->intensity = IMIN(st->end,IMAX(st->start, st->intensity)); | 1821 st->intensity = IMIN(st->end,IMAX(st->start, st->intensity)); |
| 1800 } | 1822 } |
| 1801 | 1823 |
| 1802 alloc_trim = 5; | 1824 alloc_trim = 5; |
| 1803 if (tell+(6<<BITRES) <= total_bits - total_boost) | 1825 if (tell+(6<<BITRES) <= total_bits - total_boost) |
| 1804 { | 1826 { |
| 1805 if (st->lfe) | 1827 if (st->lfe) |
| 1806 alloc_trim = 5; | 1828 alloc_trim = 5; |
| 1807 else | 1829 else |
| 1808 alloc_trim = alloc_trim_analysis(mode, X, bandLogE, | 1830 alloc_trim = alloc_trim_analysis(mode, X, bandLogE, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1822 int lm_diff = mode->maxLM - LM; | 1844 int lm_diff = mode->maxLM - LM; |
| 1823 | 1845 |
| 1824 /* Don't attempt to use more than 510 kb/s, even for frames smaller than 20
ms. | 1846 /* Don't attempt to use more than 510 kb/s, even for frames smaller than 20
ms. |
| 1825 The CELT allocator will just not be able to use more than that anyway. *
/ | 1847 The CELT allocator will just not be able to use more than that anyway. *
/ |
| 1826 nbCompressedBytes = IMIN(nbCompressedBytes,1275>>(3-LM)); | 1848 nbCompressedBytes = IMIN(nbCompressedBytes,1275>>(3-LM)); |
| 1827 base_target = vbr_rate - ((40*C+20)<<BITRES); | 1849 base_target = vbr_rate - ((40*C+20)<<BITRES); |
| 1828 | 1850 |
| 1829 if (st->constrained_vbr) | 1851 if (st->constrained_vbr) |
| 1830 base_target += (st->vbr_offset>>lm_diff); | 1852 base_target += (st->vbr_offset>>lm_diff); |
| 1831 | 1853 |
| 1832 target = compute_vbr(mode, &st->analysis, base_target, LM, st->bitrate, | 1854 target = compute_vbr(mode, &st->analysis, base_target, LM, equiv_rate, |
| 1833 st->lastCodedBands, C, st->intensity, st->constrained_vbr, | 1855 st->lastCodedBands, C, st->intensity, st->constrained_vbr, |
| 1834 st->stereo_saving, tot_boost, tf_estimate, pitch_change, maxDepth, | 1856 st->stereo_saving, tot_boost, tf_estimate, pitch_change, maxDepth, |
| 1835 st->variable_duration, st->lfe, st->energy_mask!=NULL, surround_maski
ng, | 1857 st->variable_duration, st->lfe, st->energy_mask!=NULL, surround_maski
ng, |
| 1836 temporal_vbr); | 1858 temporal_vbr); |
| 1837 | 1859 |
| 1838 /* The current offset is removed from the target and the space used | 1860 /* The current offset is removed from the target and the space used |
| 1839 so far is added*/ | 1861 so far is added*/ |
| 1840 target=target+tell; | 1862 target=target+tell; |
| 1841 /* In VBR mode the frame size must not be reduced so much that it would | 1863 /* In VBR mode the frame size must not be reduced so much that it would |
| 1842 result in the encoder running out of bits. | 1864 result in the encoder running out of bits. |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1906 | 1928 |
| 1907 /* bits = packet size - where we are - safety*/ | 1929 /* bits = packet size - where we are - safety*/ |
| 1908 bits = (((opus_int32)nbCompressedBytes*8)<<BITRES) - ec_tell_frac(enc) - 1; | 1930 bits = (((opus_int32)nbCompressedBytes*8)<<BITRES) - ec_tell_frac(enc) - 1; |
| 1909 anti_collapse_rsv = isTransient&&LM>=2&&bits>=((LM+2)<<BITRES) ? (1<<BITRES)
: 0; | 1931 anti_collapse_rsv = isTransient&&LM>=2&&bits>=((LM+2)<<BITRES) ? (1<<BITRES)
: 0; |
| 1910 bits -= anti_collapse_rsv; | 1932 bits -= anti_collapse_rsv; |
| 1911 signalBandwidth = st->end-1; | 1933 signalBandwidth = st->end-1; |
| 1912 #ifndef DISABLE_FLOAT_API | 1934 #ifndef DISABLE_FLOAT_API |
| 1913 if (st->analysis.valid) | 1935 if (st->analysis.valid) |
| 1914 { | 1936 { |
| 1915 int min_bandwidth; | 1937 int min_bandwidth; |
| 1916 if (st->bitrate < (opus_int32)32000*C) | 1938 if (equiv_rate < (opus_int32)32000*C) |
| 1917 min_bandwidth = 13; | 1939 min_bandwidth = 13; |
| 1918 else if (st->bitrate < (opus_int32)48000*C) | 1940 else if (equiv_rate < (opus_int32)48000*C) |
| 1919 min_bandwidth = 16; | 1941 min_bandwidth = 16; |
| 1920 else if (st->bitrate < (opus_int32)60000*C) | 1942 else if (equiv_rate < (opus_int32)60000*C) |
| 1921 min_bandwidth = 18; | 1943 min_bandwidth = 18; |
| 1922 else if (st->bitrate < (opus_int32)80000*C) | 1944 else if (equiv_rate < (opus_int32)80000*C) |
| 1923 min_bandwidth = 19; | 1945 min_bandwidth = 19; |
| 1924 else | 1946 else |
| 1925 min_bandwidth = 20; | 1947 min_bandwidth = 20; |
| 1926 signalBandwidth = IMAX(st->analysis.bandwidth, min_bandwidth); | 1948 signalBandwidth = IMAX(st->analysis.bandwidth, min_bandwidth); |
| 1927 } | 1949 } |
| 1928 #endif | 1950 #endif |
| 1929 if (st->lfe) | 1951 if (st->lfe) |
| 1930 signalBandwidth = 1; | 1952 signalBandwidth = 1; |
| 1931 codedBands = compute_allocation(mode, st->start, st->end, offsets, cap, | 1953 codedBands = compute_allocation(mode, st->start, st->end, offsets, cap, |
| 1932 alloc_trim, &st->intensity, &dual_stereo, bits, &balance, pulses, | 1954 alloc_trim, &st->intensity, &dual_stereo, bits, &balance, pulses, |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2322 } | 2344 } |
| 2323 va_end(ap); | 2345 va_end(ap); |
| 2324 return OPUS_OK; | 2346 return OPUS_OK; |
| 2325 bad_arg: | 2347 bad_arg: |
| 2326 va_end(ap); | 2348 va_end(ap); |
| 2327 return OPUS_BAD_ARG; | 2349 return OPUS_BAD_ARG; |
| 2328 bad_request: | 2350 bad_request: |
| 2329 va_end(ap); | 2351 va_end(ap); |
| 2330 return OPUS_UNIMPLEMENTED; | 2352 return OPUS_UNIMPLEMENTED; |
| 2331 } | 2353 } |
| OLD | NEW |