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>2012-11-26 12:08:15 +0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2012-12-14 23:58:53 +0400
commit1cae62ec033ca3a5bda8e97c9c9ed95d711917cd (patch)
tree1c5cc6ff92f5fb87d97f4cb734bfa1e0b299f4cf
parent27d11ae1be3aa17d4a1c08603e0f86ba4efc7258 (diff)
Re-enable analysis for 40- and 60-ms frames
-rw-r--r--src/opus_encoder.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index f04b2563..9a8f9fc7 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -812,18 +812,17 @@ opus_int32 opus_encode_float(OpusEncoder *st, const opus_val16 *pcm, int frame_s
#ifndef FIXED_POINT
/* Only perform analysis up to 20-ms frames. Longer ones will be split if
they're in CELT-only mode. */
- perform_analysis = st->silk_mode.complexity >= 7 && frame_size <= st->Fs/50 && st->Fs==48000;
- if (perform_analysis)
+ analysis_info.valid = 0;
+ perform_analysis = st->silk_mode.complexity >= 7 && st->Fs==48000;
+ if (!perform_analysis)
+ st->voice_ratio = -1;
+ else if (frame_size <= st->Fs/50)
{
- analysis_info.valid = 0;
tonality_analysis(&st->analysis, &analysis_info, celt_enc, pcm, IMIN(480, frame_size), st->channels);
if (frame_size > st->Fs/100)
tonality_analysis(&st->analysis, &analysis_info, celt_enc, pcm+(st->Fs/100)*st->channels, 480, st->channels);
if (analysis_info.valid && st->signal_type == OPUS_AUTO)
st->voice_ratio = (int)floor(.5+100*(1-analysis_info.music_prob));
- } else {
- analysis_info.valid = 0;
- st->voice_ratio = -1;
}
#endif
@@ -1153,6 +1152,14 @@ opus_int32 opus_encode_float(OpusEncoder *st, const opus_val16 *pcm, int frame_s
RESTORE_STACK;
return ret;
}
+ /* Perform analysis for 40-60 ms frames */
+ if (perform_analysis && frame_size > st->Fs/50)
+ {
+ int nb_analysis = frame_size/(st->Fs/100);
+ for (i=0;i<nb_analysis;i++)
+ tonality_analysis(&st->analysis, &analysis_info, celt_enc, pcm+i*(st->Fs/100)*st->channels, 480, st->channels);
+ st->voice_ratio = (int)floor(.5+100*(1-analysis_info.music_prob));
+ }
curr_bandwidth = st->bandwidth;