summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2011-08-31 16:43:08 -0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2011-08-31 16:43:08 -0400
commit875f8dbd56e303985a69ab9b4e0c7cf840741afa (patch)
treea70cee0aac38ea47efd744d82c8b43e21216770f
parent58686e6fe144b14037d3dfc9c76462e85c6be2ec (diff)
downloadopus-875f8dbd56e303985a69ab9b4e0c7cf840741afa.tar.gz
Makes the CELT init() functions behave just like the Opus ones.
-rw-r--r--libcelt/celt.c105
-rw-r--r--libcelt/celt.h16
-rw-r--r--src/opus_decoder.c2
-rw-r--r--src/opus_encoder.c2
4 files changed, 41 insertions, 84 deletions
diff --git a/libcelt/celt.c b/libcelt/celt.c
index f85c21de..809f8f51 100644
--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -197,57 +197,42 @@ int celt_encoder_get_size_custom(const CELTMode *mode, int channels)
return size;
}
-CELTEncoder *celt_encoder_create(int sampling_rate, int channels, int *error)
-{
- CELTEncoder *st;
- st = (CELTEncoder *)opus_alloc(celt_encoder_get_size(channels));
- if (st!=NULL && celt_encoder_init(st, sampling_rate, channels, error)==NULL)
- {
- celt_encoder_destroy(st);
- st = NULL;
- }
- return st;
-}
-
CELTEncoder *celt_encoder_create_custom(const CELTMode *mode, int channels, int *error)
{
+ int ret;
CELTEncoder *st = (CELTEncoder *)opus_alloc(celt_encoder_get_size_custom(mode, channels));
- if (st!=NULL && celt_encoder_init_custom(st, mode, channels, error)==NULL)
+ /* init will handle the NULL case */
+ ret = celt_encoder_init_custom(st, mode, channels);
+ if (ret != CELT_OK)
{
celt_encoder_destroy(st);
st = NULL;
+ if (error)
+ *error = ret;
}
return st;
}
-CELTEncoder *celt_encoder_init(CELTEncoder *st, int sampling_rate, int channels, int *error)
+int celt_encoder_init(CELTEncoder *st, int sampling_rate, int channels)
{
- celt_encoder_init_custom(st, celt_mode_create(48000, 960, NULL), channels, error);
+ int ret;
+ ret = celt_encoder_init_custom(st, celt_mode_create(48000, 960, NULL), channels);
+ if (ret != CELT_OK)
+ return ret;
st->upsample = resampling_factor(sampling_rate);
if (st->upsample==0)
- {
- if (error)
- *error = CELT_BAD_ARG;
- return NULL;
- }
- return st;
+ return CELT_BAD_ARG;
+ else
+ return CELT_OK;
}
-CELTEncoder *celt_encoder_init_custom(CELTEncoder *st, const CELTMode *mode, int channels, int *error)
+int celt_encoder_init_custom(CELTEncoder *st, const CELTMode *mode, int channels)
{
if (channels < 0 || channels > 2)
- {
- if (error)
- *error = CELT_BAD_ARG;
- return NULL;
- }
+ return CELT_BAD_ARG;
if (st==NULL || mode==NULL)
- {
- if (error)
- *error = CELT_ALLOC_FAIL;
- return NULL;
- }
+ return CELT_ALLOC_FAIL;
OPUS_CLEAR((char*)st, celt_encoder_get_size_custom(mode, channels));
@@ -274,9 +259,7 @@ CELTEncoder *celt_encoder_init_custom(CELTEncoder *st, const CELTMode *mode, int
st->tapset_decision = 0;
st->complexity = 5;
- if (error)
- *error = CELT_OK;
- return st;
+ return CELT_OK;
}
void celt_encoder_destroy(CELTEncoder *st)
@@ -1921,57 +1904,41 @@ int celt_decoder_get_size_custom(const CELTMode *mode, int channels)
return size;
}
-CELTDecoder *celt_decoder_create(int sampling_rate, int channels, int *error)
-{
- CELTDecoder *st;
- st = (CELTDecoder *)opus_alloc(celt_decoder_get_size(channels));
- if (st!=NULL && celt_decoder_init(st, sampling_rate, channels, error)==NULL)
- {
- celt_decoder_destroy(st);
- st = NULL;
- }
- return st;
-}
-
CELTDecoder *celt_decoder_create_custom(const CELTMode *mode, int channels, int *error)
{
+ int ret;
CELTDecoder *st = (CELTDecoder *)opus_alloc(celt_decoder_get_size_custom(mode, channels));
- if (st!=NULL && celt_decoder_init_custom(st, mode, channels, error)==NULL)
+ ret = celt_decoder_init_custom(st, mode, channels);
+ if (ret != CELT_OK)
{
celt_decoder_destroy(st);
st = NULL;
+ if (error)
+ *error = ret;
}
return st;
}
-CELTDecoder *celt_decoder_init(CELTDecoder *st, int sampling_rate, int channels, int *error)
+int celt_decoder_init(CELTDecoder *st, int sampling_rate, int channels)
{
- celt_decoder_init_custom(st, celt_mode_create(48000, 960, NULL), channels, error);
+ int ret;
+ ret = celt_decoder_init_custom(st, celt_mode_create(48000, 960, NULL), channels);
+ if (ret != CELT_OK)
+ return ret;
st->downsample = resampling_factor(sampling_rate);
if (st->downsample==0)
- {
- if (error)
- *error = CELT_BAD_ARG;
- return NULL;
- }
- return st;
+ return CELT_BAD_ARG;
+ else
+ return CELT_OK;
}
-CELTDecoder *celt_decoder_init_custom(CELTDecoder *st, const CELTMode *mode, int channels, int *error)
+int celt_decoder_init_custom(CELTDecoder *st, const CELTMode *mode, int channels)
{
if (channels < 0 || channels > 2)
- {
- if (error)
- *error = CELT_BAD_ARG;
- return NULL;
- }
+ return CELT_BAD_ARG;
if (st==NULL)
- {
- if (error)
- *error = CELT_ALLOC_FAIL;
- return NULL;
- }
+ return CELT_ALLOC_FAIL;
OPUS_CLEAR((char*)st, celt_decoder_get_size_custom(mode, channels));
@@ -1986,9 +1953,7 @@ CELTDecoder *celt_decoder_init_custom(CELTDecoder *st, const CELTMode *mode, int
st->loss_count = 0;
- if (error)
- *error = CELT_OK;
- return st;
+ return CELT_OK;
}
void celt_decoder_destroy(CELTDecoder *st)
diff --git a/libcelt/celt.h b/libcelt/celt.h
index 21ac728c..8237076a 100644
--- a/libcelt/celt.h
+++ b/libcelt/celt.h
@@ -173,14 +173,6 @@ CELT_EXPORT int celt_encoder_get_size_custom(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.
-*/
-CELT_EXPORT CELTEncoder *celt_encoder_create(int sampling_rate, 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)
@@ -190,9 +182,9 @@ CELT_EXPORT CELTEncoder *celt_encoder_create(int sampling_rate, int channels, in
*/
CELT_EXPORT CELTEncoder *celt_encoder_create_custom(const CELTMode *mode, int channels, int *error);
-CELT_EXPORT CELTEncoder *celt_encoder_init(CELTEncoder *st, int sampling_rate, int channels, int *error);
+CELT_EXPORT int celt_encoder_init(CELTEncoder *st, int sampling_rate, int channels);
-CELT_EXPORT CELTEncoder *celt_encoder_init_custom(CELTEncoder *st, const CELTMode *mode, int channels, int *error);
+CELT_EXPORT int celt_encoder_init_custom(CELTEncoder *st, const CELTMode *mode, int channels);
/** Destroys a an encoder state.
@param st Encoder state to be destroyed
@@ -269,9 +261,9 @@ CELT_EXPORT CELTDecoder *celt_decoder_create(int sampling_rate, int channels, in
*/
CELT_EXPORT CELTDecoder *celt_decoder_create_custom(const CELTMode *mode, int channels, int *error);
-CELT_EXPORT CELTDecoder *celt_decoder_init(CELTDecoder *st, int sampling_rate, int channels, int *error);
+CELT_EXPORT int celt_decoder_init(CELTDecoder *st, int sampling_rate, int channels);
-CELT_EXPORT CELTDecoder *celt_decoder_init_custom(CELTDecoder *st, const CELTMode *mode, int channels, int *error);
+CELT_EXPORT int celt_decoder_init_custom(CELTDecoder *st, const CELTMode *mode, int channels);
/** Destroys a a decoder state.
@param st Decoder state to be destroyed
diff --git a/src/opus_decoder.c b/src/opus_decoder.c
index 57f04ff9..a90f9104 100644
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -109,7 +109,7 @@ int opus_decoder_init(OpusDecoder *st, int Fs, int channels)
}
/* Initialize CELT decoder */
- celt_decoder_init(celt_dec, Fs, channels, &ret);
+ ret = celt_decoder_init(celt_dec, Fs, channels);
if (ret != CELT_OK)
goto failure;
celt_decoder_ctl(celt_dec, CELT_SET_SIGNALLING(0));
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index e7a387fa..d21a3ad0 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -154,7 +154,7 @@ int opus_encoder_init(OpusEncoder* st, int Fs, int channels, int application)
/* Create CELT encoder */
/* Initialize CELT encoder */
- celt_encoder_init(celt_enc, Fs, channels, &err);
+ err = celt_encoder_init(celt_enc, Fs, channels);
if (err != CELT_OK)
goto failure;
celt_encoder_ctl(celt_enc, CELT_SET_SIGNALLING(0));