Surround analysis should now work for non-20ms frame sizes.
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 12 Sep 2013 03:34:51 +0000 (23:34 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 12 Sep 2013 03:34:51 +0000 (23:34 -0400)
Not well tested.

src/opus_multistream_encoder.c

index 985a841..3065b6f 100644 (file)
@@ -222,8 +222,7 @@ void surround_analysis(const CELTMode *celt_mode, const void *pcm, opus_val16 *b
 {
    int c;
    int i;
-   /* FIXME: pass LM properly */
-   int LM=3;
+   int LM;
    int pos[8] = {0};
    int upsample;
    int frame_size;
@@ -237,6 +236,10 @@ void surround_analysis(const CELTMode *celt_mode, const void *pcm, opus_val16 *b
    upsample = resampling_factor(rate);
    frame_size = len*upsample;
 
+   for (LM=0;LM<=celt_mode->maxLM;LM++)
+      if (celt_mode->shortMdctSize<<LM==frame_size)
+         break;
+
    ALLOC(in, frame_size+overlap, opus_val32);
    ALLOC(x, len, opus_val16);
    ALLOC(freq, frame_size, opus_val32);