Fix short length detection.
authorTimothy B. Terriberry <tterribe@xiph.org>
Wed, 2 Feb 2011 19:42:33 +0000 (11:42 -0800)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 3 Feb 2011 06:07:27 +0000 (01:07 -0500)
aa6fec66 added a check to reject modes with shorts longer than
 3.33 ms (less than 300 per second).
However, it only rejected modes which could not be split at all.
This expands the check to also reject modes which, even after
 splitting the maximum amount, still do not have shorts less than
 3.33 ms.

libcelt/modes.c

index 2b2e686..ca50992 100644 (file)
@@ -323,12 +323,13 @@ CELTMode *celt_mode_create(celt_int32 Fs, int frame_size, int *error)
    } else if ((celt_int32)frame_size*300 >= Fs && (frame_size%4)==0)
    {
      LM = 1;
-   } else if ((celt_int32)frame_size*300 <= Fs)
+   } else
    {
      LM = 0;
    }
+
    /* Shorts longer than 3.3ms are not supported. */
-   else
+   if ((celt_int32)(frame_size>>LM)*300 > Fs)
    {
       if (error)
          *error = CELT_INVALID_MODE;