diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2011-08-31 16:43:08 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2011-08-31 16:43:08 -0400 |
commit | 875f8dbd56e303985a69ab9b4e0c7cf840741afa (patch) | |
tree | a70cee0aac38ea47efd744d82c8b43e21216770f | |
parent | 58686e6fe144b14037d3dfc9c76462e85c6be2ec (diff) | |
download | opus-875f8dbd56e303985a69ab9b4e0c7cf840741afa.tar.gz |
Makes the CELT init() functions behave just like the Opus ones.
-rw-r--r-- | libcelt/celt.c | 105 | ||||
-rw-r--r-- | libcelt/celt.h | 16 | ||||
-rw-r--r-- | src/opus_decoder.c | 2 | ||||
-rw-r--r-- | src/opus_encoder.c | 2 |
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)); |