Allowing frame sizes up to 1024, with pitch enabled only up to 512
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 9 Jul 2009 02:21:31 +0000 (22:21 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 9 Jul 2009 02:21:31 +0000 (22:21 -0400)
libcelt/celt.c
libcelt/modes.c

index fdad55a..6269d63 100644 (file)
@@ -607,7 +607,7 @@ int celt_encode_float(CELTEncoder * restrict st, const celt_sig_t * pcm, celt_si
 
    if (shortBlocks && !transient_shift) 
    {
-      celt_word32_t sum[5]={1,1,1,1,1};
+      celt_word32_t sum[8]={1,1,1,1,1,1,1,1};
       int m;
       for (c=0;c<C;c++)
       {
@@ -677,7 +677,9 @@ int celt_encode_float(CELTEncoder * restrict st, const celt_sig_t * pcm, celt_si
    /* Pitch analysis: we do it early to save on the peak stack space */
    /* Don't use pitch if there isn't enough data available yet, 
       or if we're using shortBlocks */
-   has_pitch = st->pitch_enabled && st->pitch_permitted && (st->pitch_available >= MAX_PERIOD) && (!shortBlocks) && !intra_ener;
+   has_pitch = st->pitch_enabled && st->pitch_permitted && (N <= 512) 
+            && (st->pitch_available >= MAX_PERIOD) && (!shortBlocks)
+            && !intra_ener;
 #ifdef EXP_PSY
    ALLOC(tonality, MAX_PERIOD/4, celt_word16_t);
    {
index 5da5faf..82184aa 100644 (file)
@@ -328,9 +328,9 @@ CELTMode *celt_mode_create(celt_int32_t Fs, int channels, int frame_size, int *e
          *error = CELT_BAD_ARG;
       return NULL;
    }
-   if (frame_size < 64 || frame_size > 512 || frame_size%2!=0)
+   if (frame_size < 64 || frame_size > 1024 || frame_size%2!=0)
    {
-      celt_warning("Only even frame sizes from 64 to 512 are supported");
+      celt_warning("Only even frame sizes from 64 to 1024 are supported");
       if (error)
          *error = CELT_BAD_ARG;
       return NULL;
@@ -352,7 +352,10 @@ CELTMode *celt_mode_create(celt_int32_t Fs, int channels, int frame_size, int *e
       goto failure;
    mode->ePredCoef = QCONST16(.8f,15);
 
-   if (frame_size > 384 && (frame_size%8)==0)
+   if (frame_size > 640 && (frame_size%16)==0)
+   {
+     mode->nbShortMdcts = 8;
+   } else if (frame_size > 384 && (frame_size%8)==0)
    {
      mode->nbShortMdcts = 4;
    } else if (frame_size > 384 && (frame_size%10)==0)