diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2013-09-28 19:29:23 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2013-09-28 23:50:30 -0400 |
commit | 292544453fc89a9a2d14781328f8b1a517e756bc (patch) | |
tree | 37ecfeb6612381ad6030a1606cd7e42c8962f4b7 /src/analysis.c | |
parent | a4c2512aa4fbd49142e2026ab5cdeacaa1e1e394 (diff) | |
download | libopus-292544453fc89a9a2d14781328f8b1a517e756bc.tar.gz |
Makes analysis work when encoding more than 20 ms at a time
Diffstat (limited to 'src/analysis.c')
-rw-r--r-- | src/analysis.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/analysis.c b/src/analysis.c index c130e3a4..53247df9 100644 --- a/src/analysis.c +++ b/src/analysis.c @@ -625,22 +625,23 @@ void run_analysis(TonalityAnalysisState *analysis, const CELTMode *celt_mode, co int offset; int pcm_len; - /* Avoid overflow/wrap-around of the analysis buffer */ - analysis_frame_size = IMIN((DETECT_SIZE-5)*Fs/100, analysis_frame_size); - - pcm_len = analysis_frame_size - analysis->analysis_offset; - offset = analysis->analysis_offset; - do { - tonality_analysis(analysis, NULL, celt_mode, analysis_pcm, IMIN(480, pcm_len), offset, c1, c2, C, lsb_depth, downmix); - offset += 480; - pcm_len -= 480; - } while (pcm_len>0); - analysis->analysis_offset = analysis_frame_size; - - analysis->analysis_offset -= frame_size; - - /* Only perform analysis up to 20-ms frames. Longer ones will be split if - they're in CELT-only mode. */ + if (analysis_pcm != NULL) + { + /* Avoid overflow/wrap-around of the analysis buffer */ + analysis_frame_size = IMIN((DETECT_SIZE-5)*Fs/100, analysis_frame_size); + + pcm_len = analysis_frame_size - analysis->analysis_offset; + offset = analysis->analysis_offset; + do { + tonality_analysis(analysis, NULL, celt_mode, analysis_pcm, IMIN(480, pcm_len), offset, c1, c2, C, lsb_depth, downmix); + offset += 480; + pcm_len -= 480; + } while (pcm_len>0); + analysis->analysis_offset = analysis_frame_size; + + analysis->analysis_offset -= frame_size; + } + analysis_info->valid = 0; tonality_get_info(analysis, analysis_info, frame_size); } |