Adds _init() functions that do not allocate the states themselves
authorJean-Marc Valin <jean-marc.valin@octasic.com>
Fri, 27 Aug 2010 20:54:33 +0000 (16:54 -0400)
committerJean-Marc Valin <jean-marc.valin@octasic.com>
Fri, 27 Aug 2010 20:54:33 +0000 (16:54 -0400)
libcelt/celt.c
libcelt/celt.h

index a2d9001..c4c3831 100644 (file)
@@ -106,8 +106,13 @@ int celt_encoder_get_size(const CELTMode *mode, int channels)
 
 CELTEncoder *celt_encoder_create(const CELTMode *mode, int channels, int *error)
 {
-   CELTEncoder *st;
+   return celt_encoder_init(
+         (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)
+{
    if (channels < 0 || channels > 2)
    {
       celt_warning("Only mono and stereo supported");
@@ -116,7 +121,7 @@ CELTEncoder *celt_encoder_create(const CELTMode *mode, int channels, int *error)
       return NULL;
    }
 
-   st = celt_alloc(celt_encoder_get_size(mode, channels));
+   CELT_MEMSET((char*)st, 0, celt_encoder_get_size(mode, channels));
    
    if (st==NULL)
    {
@@ -1151,9 +1156,13 @@ int celt_decoder_get_size(const CELTMode *mode, int channels)
 
 CELTDecoder *celt_decoder_create(const CELTMode *mode, int channels, int *error)
 {
-   int C;
-   CELTDecoder *st;
+   return celt_decoder_init(
+         (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)
+{
    if (channels < 0 || channels > 2)
    {
       celt_warning("Only mono and stereo supported");
@@ -1162,8 +1171,7 @@ CELTDecoder *celt_decoder_create(const CELTMode *mode, int channels, int *error)
       return NULL;
    }
 
-   C = CHANNELS(channels);
-   st = celt_alloc(celt_decoder_get_size(mode, channels));
+   CELT_MEMSET((char*)st, 0, celt_decoder_get_size(mode, channels));
 
    if (st==NULL)
    {
index c4a7bdb..b747cab 100644 (file)
@@ -156,6 +156,7 @@ EXPORT int celt_mode_info(const CELTMode *mode, int request, celt_int32 *value);
 
 /* Encoder stuff */
 
+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).
@@ -168,6 +169,8 @@ EXPORT int celt_mode_info(const CELTMode *mode, int request, celt_int32 *value);
 */
 EXPORT CELTEncoder *celt_encoder_create(const CELTMode *mode, int channels, int *error);
 
+EXPORT CELTEncoder *celt_encoder_init(CELTEncoder *st, const CELTMode *mode, int channels, int *error);
+
 /** Destroys a an encoder state.
  @param st Encoder state to be destroyed
  */
@@ -263,6 +266,7 @@ EXPORT int celt_encoder_ctl(CELTEncoder * st, int request, ...);
 
 /* Decoder stuff */
 
+EXPORT int celt_decoder_get_size(const CELTMode *mode, int channels);
 
 /** Creates a new decoder state. Each stream needs its own decoder state (can't
     be shared across simultaneous streams).
@@ -274,6 +278,8 @@ EXPORT int celt_encoder_ctl(CELTEncoder * st, int request, ...);
  */
 EXPORT CELTDecoder *celt_decoder_create(const CELTMode *mode, int channels, int *error);
 
+EXPORT CELTDecoder *celt_decoder_init(CELTDecoder *st, const CELTMode *mode, int channels, int *error);
+
 /** Destroys a a decoder state.
  @param st Decoder state to be destroyed
  */