celt_encoder_create() now defaults to Opus standard mode
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sat, 29 Jan 2011 04:07:32 +0000 (23:07 -0500)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sat, 29 Jan 2011 04:07:32 +0000 (23:07 -0500)
The old constructor is renamed celt_encoder_create_custom(). Same
for the decoder.

libcelt/celt.c
libcelt/celt.h
libcelt/modes.c
libcelt/testcelt.c
tests/tandem-test.c
tools/celtdec.c
tools/celtenc.c

index b828384..66bf401 100644 (file)
@@ -127,14 +127,27 @@ int celt_encoder_get_size(const CELTMode *mode, int channels)
    return size;
 }
 
-CELTEncoder *celt_encoder_create(const CELTMode *mode, int channels, int *error)
+CELTEncoder *celt_encoder_create(int channels, int *error)
 {
+   CELTMode *mode = celt_mode_create(48000, 960, NULL);
    return celt_encoder_init(
          (CELTEncoder *)celt_alloc(celt_encoder_get_size(mode, channels)),
+         channels, error);
+}
+
+CELTEncoder *celt_encoder_create_custom(const CELTMode *mode, int channels, int *error)
+{
+   return celt_encoder_init_custom(
+         (CELTEncoder *)celt_alloc(celt_encoder_get_size(mode, channels)),
          mode, channels, error);
 }
 
-CELTEncoder *celt_encoder_init(CELTEncoder *st, const CELTMode *mode, int channels, int *error)
+CELTEncoder *celt_encoder_init(CELTEncoder *st, int channels, int *error)
+{
+   return celt_encoder_init_custom(st, celt_mode_create(48000, 960, NULL), channels, error);
+}
+
+CELTEncoder *celt_encoder_init_custom(CELTEncoder *st, const CELTMode *mode, int channels, int *error)
 {
    if (channels < 0 || channels > 2)
    {
@@ -1672,14 +1685,27 @@ int celt_decoder_get_size(const CELTMode *mode, int channels)
    return size;
 }
 
-CELTDecoder *celt_decoder_create(const CELTMode *mode, int channels, int *error)
+CELTDecoder *celt_decoder_create(int channels, int *error)
 {
+   const CELTMode *mode = celt_mode_create(48000, 960, NULL);
    return celt_decoder_init(
          (CELTDecoder *)celt_alloc(celt_decoder_get_size(mode, channels)),
+         channels, error);
+}
+
+CELTDecoder *celt_decoder_create_custom(const CELTMode *mode, int channels, int *error)
+{
+   return celt_decoder_init_custom(
+         (CELTDecoder *)celt_alloc(celt_decoder_get_size(mode, channels)),
          mode, channels, error);
 }
 
-CELTDecoder *celt_decoder_init(CELTDecoder *st, const CELTMode *mode, int channels, int *error)
+CELTDecoder *celt_decoder_init(CELTDecoder *st, int channels, int *error)
+{
+   return celt_decoder_init_custom(st, celt_mode_create(48000, 960, NULL), channels, error);
+}
+
+CELTDecoder *celt_decoder_init_custom(CELTDecoder *st, const CELTMode *mode, int channels, int *error)
 {
    if (channels < 0 || channels > 2)
    {
index fddef5a..a8270d3 100644 (file)
@@ -163,6 +163,14 @@ EXPORT int celt_encoder_get_size(const CELTMode *mode, int channels);
 
 /** Creates a new encoder state. Each stream needs its own encoder 
     state (can't be shared across simultaneous streams).
+ @param channels Number of channels
+ @param error Returns an error code
+ @return Newly created encoder state.
+*/
+EXPORT CELTEncoder *celt_encoder_create(int channels, int *error);
+
+/** Creates a new encoder state. Each stream needs its own encoder
+    state (can't be shared across simultaneous streams).
  @param mode Contains all the information about the characteristics of
  *  the stream (must be the same characteristics as used for the 
  *  decoder)
@@ -170,9 +178,11 @@ EXPORT int celt_encoder_get_size(const CELTMode *mode, int channels);
  @param error Returns an error code
  @return Newly created encoder state.
 */
-EXPORT CELTEncoder *celt_encoder_create(const CELTMode *mode, int channels, int *error);
+EXPORT CELTEncoder *celt_encoder_create_custom(const CELTMode *mode, int channels, int *error);
+
+EXPORT CELTEncoder *celt_encoder_init(CELTEncoder *st, int channels, int *error);
 
-EXPORT CELTEncoder *celt_encoder_init(CELTEncoder *st, const CELTMode *mode, int channels, int *error);
+EXPORT CELTEncoder *celt_encoder_init_custom(CELTEncoder *st, const CELTMode *mode, int channels, int *error);
 
 /** Destroys a an encoder state.
  @param st Encoder state to be destroyed
@@ -235,9 +245,21 @@ EXPORT int celt_decoder_get_size(const CELTMode *mode, int channels);
  @param error Returns an error code
  @return Newly created decoder state.
  */
-EXPORT CELTDecoder *celt_decoder_create(const CELTMode *mode, int channels, int *error);
+EXPORT CELTDecoder *celt_decoder_create(int channels, int *error);
+
+/** Creates a new decoder state. Each stream needs its own decoder state (can't
+    be shared across simultaneous streams).
+ @param mode Contains all the information about the characteristics of the
+             stream (must be the same characteristics as used for the encoder)
+ @param channels Number of channels
+ @param error Returns an error code
+ @return Newly created decoder state.
+ */
+EXPORT CELTDecoder *celt_decoder_create_custom(const CELTMode *mode, int channels, int *error);
+
+EXPORT CELTDecoder *celt_decoder_init(CELTDecoder *st, int channels, int *error);
 
-EXPORT CELTDecoder *celt_decoder_init(CELTDecoder *st, const CELTMode *mode, int channels, int *error);
+EXPORT CELTDecoder *celt_decoder_init_custom(CELTDecoder *st, const CELTMode *mode, int channels, int *error);
 
 /** Destroys a a decoder state.
  @param st Decoder state to be destroyed
index 35985b6..3f59284 100644 (file)
@@ -278,10 +278,16 @@ CELTMode *celt_mode_create(celt_int32 Fs, int frame_size, int *error)
 
    for (i=0;i<TOTAL_MODES;i++)
    {
-      if (Fs == static_mode_list[i]->Fs &&
-          frame_size == static_mode_list[i]->shortMdctSize*static_mode_list[i]->nbShortMdcts)
+      int j;
+      for (j=0;j<4;j++)
       {
-         return (CELTMode*)static_mode_list[i];
+         if (Fs == static_mode_list[i]->Fs &&
+               (frame_size<<j) == static_mode_list[i]->shortMdctSize*static_mode_list[i]->nbShortMdcts)
+         {
+            if (error)
+               *error = CELT_OK;
+            return (CELTMode*)static_mode_list[i];
+         }
       }
    }
 #ifndef CUSTOM_MODES
index d14272f..4c45868 100644 (file)
@@ -107,13 +107,13 @@ int main(int argc, char *argv[])
       return 1;
    }
    
-   enc = celt_encoder_create(mode, channels, &err);
+   enc = celt_encoder_create_custom(mode, channels, &err);
    if (err != 0)
    {
       fprintf(stderr, "Failed to create the encoder: %s\n", celt_strerror(err));
       return 1;
    }
-   dec = celt_decoder_create(mode, channels, &err);
+   dec = celt_decoder_create_custom(mode, channels, &err);
    if (err != 0)
    {
       fprintf(stderr, "Failed to create the decoder: %s\n", celt_strerror(err));
index e1f21ba..e45f8f2 100644 (file)
@@ -85,12 +85,12 @@ int async_tandem(int rate, int frame_size, int channels, int bitrate_min,
         exit(1);
     }
 
-    dec = celt_decoder_create(mode, channels, &error);
+    dec = celt_decoder_create_custom(mode, channels, &error);
     if (error){
       fprintf(stderr, "Error: celt_decoder_create returned %s\n", celt_strerror(error));
       exit(1);
     }
-    enc = celt_encoder_create(mode, channels, &error);
+    enc = celt_encoder_create_custom(mode, channels, &error);
     if (error){
       fprintf(stderr, "Error: celt_encoder_create returned %s\n", celt_strerror(error));
       exit(1);
@@ -167,7 +167,11 @@ int async_tandem(int rate, int frame_size, int channels, int bitrate_min,
 
 int main(int argc, char *argv[])
 {
+#ifdef CUSTOM_MODES
     int sizes[8]={960,480,240,120,512,256,128,64};
+#else
+    int sizes[4]={960,480,240,120};
+#endif
     unsigned int seed;
     int ch, n;
 
@@ -184,6 +188,7 @@ int main(int argc, char *argv[])
     srand(seed);
     printf("CELT codec tests. Random seed: %u (%.4X)\n", seed, rand() % 65536);
 
+#ifdef CUSTOM_MODES
     for (n = 0; n < 8; n++) {
         for (ch = 1; ch <= 2; ch++) {
             async_tandem(48000, sizes[n], ch, 12000 * ch, 128000 * ch);
@@ -192,6 +197,12 @@ int main(int argc, char *argv[])
             async_tandem(16000, sizes[n], ch, 12000 * ch, 64000 * ch);
         }
     }
-
+#else
+    for (n = 0; n < 4; n++) {
+        for (ch = 1; ch <= 2; ch++) {
+            async_tandem(48000, sizes[n], ch, 12000 * ch, 128000 * ch);
+        }
+    }
+#endif
     return 0;
 }
index 23e1e1e..c26fa68 100644 (file)
@@ -315,7 +315,7 @@ static CELTDecoder *process_header(ogg_packet *op, celt_int32 enh_enabled, celt_
    
    *channels = header.nb_channels;
    *overlap=header.overlap;
-   st = celt_decoder_create(*mode, header.nb_channels, NULL);
+   st = celt_decoder_create_custom(*mode, header.nb_channels, NULL);
    if (!st)
    {
       fprintf (stderr, "Decoder initialization failed.\n");
index 65d9311..458fe6f 100644 (file)
@@ -525,7 +525,7 @@ int main(int argc, char **argv)
    }
 
    /*Initialize CELT encoder*/
-   st = celt_encoder_create(mode, chan, NULL);
+   st = celt_encoder_create_custom(mode, chan, NULL);
 
    if (!with_cbr)
    {