Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.xiph.org/xiph/opus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2011-11-28 23:17:47 +0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2012-05-26 01:40:12 +0400
commit5781fd1209a37fe81680634681ffddce9dbc02aa (patch)
treec08f3964fe7d1bcb2d13fe587a1fc814a5b0c76e
parentdc8e08c22d1392477da6b6501fbc3a65c647384a (diff)
VBR tuning
-rw-r--r--celt/celt.c30
-rw-r--r--src/analysis.c3
2 files changed, 19 insertions, 14 deletions
diff --git a/celt/celt.c b/celt/celt.c
index 6246e592..8544e8d4 100644
--- a/celt/celt.c
+++ b/celt/celt.c
@@ -823,7 +823,7 @@ static int alloc_trim_analysis(const CELTMode *m, const celt_norm *X,
trim_index-=1;
#ifndef FIXED_POINT
trim += MAX16(-QCONST16(4.f, 8), .75f*log2(1.001-sum*sum));
- *stereo_saving = -.5*log2(1.01-sum*sum);
+ *stereo_saving = -.25*log2(1.01-sum*sum);
/*printf("%f\n", *stereo_saving);*/
#else
*stereo_saving = 0;
@@ -854,17 +854,18 @@ static int alloc_trim_analysis(const CELTMode *m, const celt_norm *X,
if (analysis->valid)
{
trim -= MAX16(-QCONST16(2.f, 8), MIN16(QCONST16(2.f, 8), 2*(analysis->tonality_slope+.05)));
- if (analysis->tonality_slope > .15)
+ /*if (analysis->tonality_slope > .15)
trim_index--;
if (analysis->tonality_slope > .3)
trim_index--;
if (analysis->tonality_slope < -.15)
trim_index++;
if (analysis->tonality_slope < -.3)
- trim_index++;
+ trim_index++;*/
}
#endif
- trim_index = floor(.5+trim);
+ /*printf("%d %f\n", trim_index, trim);*/
+ /*trim_index = floor(.5+trim);*/
if (trim_index<0)
trim_index = 0;
if (trim_index>10)
@@ -1316,10 +1317,10 @@ int celt_encode_with_ec(CELTEncoder * restrict st, const opus_val16 * pcm, int f
} else {
if (st->analysis.valid)
{
- static const opus_val16 spread_thresholds[3] = {-QCONST16(.7f, 15), -QCONST16(.3f, 15), -QCONST16(.1f, 15)};
- static const opus_val16 spread_histeresis[3] = {QCONST16(.2f, 15), QCONST16(.1f, 15), QCONST16(.05f, 15)};
+ static const opus_val16 spread_thresholds[3] = {-QCONST16(.6f, 15), -QCONST16(.2f, 15), -QCONST16(.07f, 15)};
+ static const opus_val16 spread_histeresis[3] = {QCONST16(.15f, 15), QCONST16(.07f, 15), QCONST16(.02f, 15)};
static const opus_val16 tapset_thresholds[2] = {QCONST16(.0f, 15), QCONST16(.15f, 15)};
- static const opus_val16 tapset_histeresis[2] = {QCONST16(.05f, 15), QCONST16(.05f, 15)};
+ static const opus_val16 tapset_histeresis[2] = {QCONST16(.1f, 15), QCONST16(.05f, 15)};
st->spread_decision = hysteresis_decision(-st->analysis.tonality, spread_thresholds, spread_histeresis, 3, st->spread_decision);
st->tapset_decision = hysteresis_decision(st->analysis.tonality_slope, tapset_thresholds, tapset_histeresis, 2, st->tapset_decision);
} else {
@@ -1327,6 +1328,7 @@ int celt_encode_with_ec(CELTEncoder * restrict st, const opus_val16 * pcm, int f
&st->tonal_average, st->spread_decision, &st->hf_average,
&st->tapset_decision, pf_on&&!shortBlocks, effEnd, C, M);
}
+ /*printf("%d %d\n", st->tapset_decision, st->spread_decision);*/
/*printf("%f %d %f %d\n\n", st->analysis.tonality, st->spread_decision, st->analysis.tonality_slope, st->tapset_decision);*/
}
ec_enc_icdf(enc, st->spread_decision, spread_icdf, 5);
@@ -1479,11 +1481,12 @@ int celt_encode_with_ec(CELTEncoder * restrict st, const opus_val16 * pcm, int f
if (st->constrained_vbr)
target += (st->vbr_offset>>lm_diff);
+ /*printf("%f %f %f\n", st->analysis.activity, st->analysis.tonality, tf_estimate);*/
#ifndef FIXED_POINT
if (st->analysis.valid && st->analysis.activity<.4)
- target -= (coded_bins<<BITRES)*2*(.4-st->analysis.activity);
-
- target -= MIN32(target/3, stereo_saving*(st->mode->eBands[intensity]<<LM<<BITRES));
+ target -= (coded_bins<<BITRES)*1*(.4-st->analysis.activity);
+ if (C==2)
+ target -= MIN32(target/3, stereo_saving*(st->mode->eBands[intensity]<<LM<<BITRES));
#endif
#ifdef FIXED_POINT
@@ -1496,9 +1499,10 @@ int celt_encode_with_ec(CELTEncoder * restrict st, const opus_val16 * pcm, int f
if (st->analysis.valid) {
int tonal_target;
float tonal;
- tonal = st->analysis.tonality;
- tonal -= .06;
- tonal_target = target + (coded_bins<<BITRES)*1.55*tonal;
+ tonal = st->analysis.tonality*st->analysis.tonality;
+ tonal -= .08;
+ tonal_target = target + (coded_bins<<BITRES)*1.5f*tonal;
+ /*printf("%f %d\n", tonal, tonal_target);*/
new_target = IMAX(tonal_target,new_target);
}
#endif
diff --git a/src/analysis.c b/src/analysis.c
index 56710b4f..df2c6918 100644
--- a/src/analysis.c
+++ b/src/analysis.c
@@ -70,7 +70,7 @@ static const int tbands[NB_TBANDS+1] = {
2, 4, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 68, 80, 96, 120
};
-#define NB_TONAL_SKIP_BANDS 8
+#define NB_TONAL_SKIP_BANDS 0
typedef struct {
float angle[240];
@@ -260,6 +260,7 @@ void tonality_analysis(TonalityAnalysisState *tonal, AnalysisInfo *info, CELTEnc
if (b>=NB_TONAL_SKIP_BANDS)
frame_tonality += band_tonality[b];
slope += band_tonality[b]*(b-8);
+ /*printf("%f %f ", band_tonality[b], stationarity);*/
if (band_tonality[b] > info->boost_amount[1] && b>=7 && b < NB_TBANDS-1)
{
if (band_tonality[b] > info->boost_amount[0])