Allow all even frame sizes, change the selection of number of short MDCTs per frame to be more intelligent.
diff --git a/libcelt/modes.c b/libcelt/modes.c
index a2eb973..72ae883 100644
--- a/libcelt/modes.c
+++ b/libcelt/modes.c
@@ -338,24 +338,35 @@
    mode->eBands = compute_ebands(Fs, frame_size, &mode->nbEBands);
    compute_pbands(mode, res);
    mode->ePredCoef = QCONST16(.8f,15);
-   
-   if (frame_size <= 64)
+
+   if (frame_size > 384 && (frame_size%8)==0)
    {
-      mode->nbShortMdcts = 1;
-   } else if (frame_size <= 256)
+     mode->nbShortMdcts = 4;
+   } else if (frame_size > 384 && (frame_size%10)==0)
    {
-      mode->nbShortMdcts = 2;
-   } else if (frame_size <= 384)
+     mode->nbShortMdcts = 5;
+   } else if (frame_size > 256 && (frame_size%6)==0)
    {
-      mode->nbShortMdcts = 3;
-   } else {
-      mode->nbShortMdcts = 4;
+     mode->nbShortMdcts = 3;
+   } else if (frame_size > 256 && (frame_size%8)==0)
+   {
+     mode->nbShortMdcts = 4;
+   } else if (frame_size > 64 && (frame_size%4)==0)
+   {
+     mode->nbShortMdcts = 2;
+   } else if (frame_size > 128 && (frame_size%6)==0)
+   {
+     mode->nbShortMdcts = 3;
+   } else
+   {
+     mode->nbShortMdcts = 1;
    }
+
    if (mode->nbShortMdcts > 1)
-      mode->overlap = frame_size/mode->nbShortMdcts;
+      mode->overlap = ((frame_size/mode->nbShortMdcts)>>2)<<2; /* Overlap must be divisible by 4 */
    else
-      mode->overlap = frame_size/2;
-   
+      mode->overlap = (frame_size>>3)<<2;
+
    compute_allocation_table(mode, res);
    /*printf ("%d bands\n", mode->nbEBands);*/