Added celt_encoder_ctl() and CELT_SET_COMPLEXITY
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Tue, 30 Sep 2008 11:36:54 +0000 (07:36 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Tue, 30 Sep 2008 11:36:54 +0000 (07:36 -0400)
libcelt/celt.c
libcelt/celt.h
libcelt/modes.c
libcelt/quant_bands.c

index 3095d33..d582438 100644 (file)
@@ -711,6 +711,26 @@ int celt_encode(CELTEncoder * restrict st, celt_int16_t * restrict pcm, unsigned
 }
 #endif
 
+int celt_encoder_ctl(CELTEncoder * restrict st, int request, celt_int32_t *value)
+{
+   switch (request)
+   {
+      case CELT_SET_COMPLEXITY:
+      {
+         if (*value<0 || *value>10)
+            return CELT_BAD_ARG;
+         if (*value<=2)
+            st->pitch_enabled = 0;
+         else
+            st->pitch_enabled = 1;
+      }
+      break;
+      default:
+         return CELT_BAD_REQUEST;
+   }
+   return CELT_OK;
+}
+
 /****************************************************************************/
 /*                                                                          */
 /*                                DECODER                                   */
index 53df442..32d6a6f 100644 (file)
@@ -62,8 +62,12 @@ extern "C" {
 #define CELT_INTERNAL_ERROR   -3
 /** The data passed (e.g. compressed data to decoder) is corrupted */
 #define CELT_CORRUPTED_DATA   -4
+/** Invalid/unsupported request number */
+#define CELT_BAD_REQUEST      -5
 
 /* Requests */
+#define CELT_SET_COMPLEXITY    0
+
 /** GET the frame size used in the current mode */
 #define CELT_GET_FRAME_SIZE   1000
 /** GET the lookahead used in the current mode */
@@ -119,7 +123,6 @@ EXPORT void celt_mode_destroy(CELTMode *mode);
 /** Query information from a mode */
 EXPORT int celt_mode_info(const CELTMode *mode, int request, celt_int32_t *value);
 
-
 /* Encoder stuff */
 
 
@@ -152,6 +155,14 @@ EXPORT void celt_encoder_destroy(CELTEncoder *st);
 EXPORT int celt_encode_float(CELTEncoder *st, float *pcm, unsigned char *compressed, int nbCompressedBytes);
 EXPORT int celt_encode(CELTEncoder *st, celt_int16_t *pcm, unsigned char *compressed, int nbCompressedBytes);
 
+/** Query and set encoder parameters 
+ @param st Encoder state
+ @param request Parameter to change or query
+ @param value Pointer to a 32-bit int value
+ @return Error code
+*/
+EXPORT int celt_encoder_ctl(CELTEncoder * restrict st, int request, celt_int32_t *value);
+
 /* Decoder stuff */
 
 
index 2f1db65..0d52f3c 100644 (file)
@@ -69,7 +69,7 @@ int celt_mode_info(const CELTMode *mode, int request, celt_int32_t *value)
          *value = CELT_BITSTREAM_VERSION;
          break;
       default:
-         return CELT_BAD_ARG;
+         return CELT_BAD_REQUEST;
    }
    return CELT_OK;
 }
index 469d42a..3ad16eb 100644 (file)
@@ -229,7 +229,6 @@ static void unquant_fine_energy_mono(const CELTMode *m, celt_ener_t *eBands, cel
    for (i=0;i<m->nbEBands;i++)
    {
       int q2;
-      celt_int16_t frac = 1<<fine_quant[i];
       celt_word16_t offset;
       if (fine_quant[i] <= 0)
          continue;