| celt.h | | celt.h | |
|
| /* (C) 2007-2008 Jean-Marc Valin, CSIRO | | /* Copyright (c) 2007-2008 CSIRO | |
| (C) 2008 Gregory Maxwell */ | | Copyright (c) 2007-2009 Xiph.Org Foundation | |
| | | Copyright (c) 2008 Gregory Maxwell | |
| | | Written by Jean-Marc Valin and Gregory Maxwell */ | |
| /** | | /** | |
| @file celt.h | | @file celt.h | |
| @brief Contains all the functions for encoding and decoding audio | | @brief Contains all the functions for encoding and decoding audio | |
| */ | | */ | |
| | | | |
| /* | | /* | |
| Redistribution and use in source and binary forms, with or without | | Redistribution and use in source and binary forms, with or without | |
| modification, are permitted provided that the following conditions | | modification, are permitted provided that the following conditions | |
| are met: | | are met: | |
| | | | |
| | | | |
| skipping to change at line 54 | | skipping to change at line 56 | |
| #endif | | #endif | |
| | | | |
| #if defined(__GNUC__) && defined(CELT_BUILD) | | #if defined(__GNUC__) && defined(CELT_BUILD) | |
| #define EXPORT __attribute__ ((visibility ("default"))) | | #define EXPORT __attribute__ ((visibility ("default"))) | |
| #elif defined(WIN32) | | #elif defined(WIN32) | |
| #define EXPORT __declspec(dllexport) | | #define EXPORT __declspec(dllexport) | |
| #else | | #else | |
| #define EXPORT | | #define EXPORT | |
| #endif | | #endif | |
| | | | |
|
| #define _celt_check_int(x) (((void)((x) == (celt_int32_t)0)), (celt_int32_t
)(x)) | | #define _celt_check_int(x) (((void)((x) == (celt_int32)0)), (celt_int32)(x)
) | |
| #define _celt_check_mode_ptr_ptr(ptr) ((ptr) + ((ptr) - (CELTMode**)(ptr))) | | #define _celt_check_mode_ptr_ptr(ptr) ((ptr) + ((ptr) - (CELTMode**)(ptr))) | |
| | | | |
| /* Error codes */ | | /* Error codes */ | |
| /** No error */ | | /** No error */ | |
| #define CELT_OK 0 | | #define CELT_OK 0 | |
| /** An (or more) invalid argument (e.g. out of range) */ | | /** An (or more) invalid argument (e.g. out of range) */ | |
| #define CELT_BAD_ARG -1 | | #define CELT_BAD_ARG -1 | |
| /** The mode struct passed is invalid */ | | /** The mode struct passed is invalid */ | |
| #define CELT_INVALID_MODE -2 | | #define CELT_INVALID_MODE -2 | |
| /** An internal error was detected */ | | /** An internal error was detected */ | |
| #define CELT_INTERNAL_ERROR -3 | | #define CELT_INTERNAL_ERROR -3 | |
| /** The data passed (e.g. compressed data to decoder) is corrupted */ | | /** The data passed (e.g. compressed data to decoder) is corrupted */ | |
| #define CELT_CORRUPTED_DATA -4 | | #define CELT_CORRUPTED_DATA -4 | |
| /** Invalid/unsupported request number */ | | /** Invalid/unsupported request number */ | |
| #define CELT_UNIMPLEMENTED -5 | | #define CELT_UNIMPLEMENTED -5 | |
| /** An encoder or decoder structure is invalid or already freed */ | | /** An encoder or decoder structure is invalid or already freed */ | |
| #define CELT_INVALID_STATE -6 | | #define CELT_INVALID_STATE -6 | |
|
| | | /** Memory allocation has failed */ | |
| | | #define CELT_ALLOC_FAIL -7 | |
| | | | |
| /* Requests */ | | /* Requests */ | |
| #define CELT_GET_MODE_REQUEST 1 | | #define CELT_GET_MODE_REQUEST 1 | |
| /** Get the CELTMode used by an encoder or decoder */ | | /** Get the CELTMode used by an encoder or decoder */ | |
| #define CELT_GET_MODE(x) CELT_GET_MODE_REQUEST, _celt_check_mode_ptr_ptr(x) | | #define CELT_GET_MODE(x) CELT_GET_MODE_REQUEST, _celt_check_mode_ptr_ptr(x) | |
| #define CELT_SET_COMPLEXITY_REQUEST 2 | | #define CELT_SET_COMPLEXITY_REQUEST 2 | |
| /** Controls the complexity from 0-10 (int) */ | | /** Controls the complexity from 0-10 (int) */ | |
| #define CELT_SET_COMPLEXITY(x) CELT_SET_COMPLEXITY_REQUEST, _celt_check_int
(x) | | #define CELT_SET_COMPLEXITY(x) CELT_SET_COMPLEXITY_REQUEST, _celt_check_int
(x) | |
| #define CELT_SET_PREDICTION_REQUEST 4 | | #define CELT_SET_PREDICTION_REQUEST 4 | |
| /** Controls the use of interframe prediction. | | /** Controls the use of interframe prediction. | |
| | | | |
| skipping to change at line 98 | | skipping to change at line 102 | |
| /** Set the target VBR rate in bits per second(int); 0=CBR (default) */ | | /** Set the target VBR rate in bits per second(int); 0=CBR (default) */ | |
| #define CELT_SET_VBR_RATE(x) CELT_SET_VBR_RATE_REQUEST, _celt_check_int(x) | | #define CELT_SET_VBR_RATE(x) CELT_SET_VBR_RATE_REQUEST, _celt_check_int(x) | |
| /** Reset the encoder/decoder memories to zero*/ | | /** Reset the encoder/decoder memories to zero*/ | |
| #define CELT_RESET_STATE_REQUEST 8 | | #define CELT_RESET_STATE_REQUEST 8 | |
| #define CELT_RESET_STATE CELT_RESET_STATE_REQUEST | | #define CELT_RESET_STATE CELT_RESET_STATE_REQUEST | |
| | | | |
| /** GET the frame size used in the current mode */ | | /** GET the frame size used in the current mode */ | |
| #define CELT_GET_FRAME_SIZE 1000 | | #define CELT_GET_FRAME_SIZE 1000 | |
| /** GET the lookahead used in the current mode */ | | /** GET the lookahead used in the current mode */ | |
| #define CELT_GET_LOOKAHEAD 1001 | | #define CELT_GET_LOOKAHEAD 1001 | |
|
| /** GET the number of channels used in the current mode */ | | | |
| #define CELT_GET_NB_CHANNELS 1002 | | | |
| /** GET the sample rate used in the current mode */ | | /** GET the sample rate used in the current mode */ | |
| #define CELT_GET_SAMPLE_RATE 1003 | | #define CELT_GET_SAMPLE_RATE 1003 | |
| | | | |
| /** GET the bit-stream version for compatibility check */ | | /** GET the bit-stream version for compatibility check */ | |
| #define CELT_GET_BITSTREAM_VERSION 2000 | | #define CELT_GET_BITSTREAM_VERSION 2000 | |
| | | | |
| /** Contains the state of an encoder. One encoder state is needed | | /** Contains the state of an encoder. One encoder state is needed | |
| for each stream. It is initialised once at the beginning of the | | for each stream. It is initialised once at the beginning of the | |
| stream. Do *not* re-initialise the state for every frame. | | stream. Do *not* re-initialise the state for every frame. | |
| @brief Encoder state | | @brief Encoder state | |
| | | | |
| skipping to change at line 133 | | skipping to change at line 135 | |
| | | | |
| /** \defgroup codec Encoding and decoding */ | | /** \defgroup codec Encoding and decoding */ | |
| /* @{ */ | | /* @{ */ | |
| | | | |
| /* Mode calls */ | | /* Mode calls */ | |
| | | | |
| /** Creates a new mode struct. This will be passed to an encoder or | | /** Creates a new mode struct. This will be passed to an encoder or | |
| decoder. The mode MUST NOT BE DESTROYED until the encoders and | | decoder. The mode MUST NOT BE DESTROYED until the encoders and | |
| decoders that use it are destroyed as well. | | decoders that use it are destroyed as well. | |
| @param Fs Sampling rate (32000 to 96000 Hz) | | @param Fs Sampling rate (32000 to 96000 Hz) | |
|
| @param channels Number of channels | | | |
| @param frame_size Number of samples (per channel) to encode in each | | @param frame_size Number of samples (per channel) to encode in each | |
| packet (even values; 64 - 512) | | packet (even values; 64 - 512) | |
| @param error Returned error code (if NULL, no error will be returned) | | @param error Returned error code (if NULL, no error will be returned) | |
| @return A newly created mode | | @return A newly created mode | |
| */ | | */ | |
|
| EXPORT CELTMode *celt_mode_create(celt_int32_t Fs, int channels, int frame_
size, int *error); | | EXPORT CELTMode *celt_mode_create(celt_int32 Fs, int frame_size, int *error
); | |
| | | | |
| /** Destroys a mode struct. Only call this after all encoders and | | /** Destroys a mode struct. Only call this after all encoders and | |
| decoders using this mode are destroyed as well. | | decoders using this mode are destroyed as well. | |
| @param mode Mode to be destroyed | | @param mode Mode to be destroyed | |
| */ | | */ | |
| EXPORT void celt_mode_destroy(CELTMode *mode); | | EXPORT void celt_mode_destroy(CELTMode *mode); | |
| | | | |
| /** Query information from a mode */ | | /** Query information from a mode */ | |
|
| EXPORT int celt_mode_info(const CELTMode *mode, int request, celt_int32_t *
value); | | EXPORT int celt_mode_info(const CELTMode *mode, int request, celt_int32 *va
lue); | |
| | | | |
| /* Encoder stuff */ | | /* Encoder stuff */ | |
| | | | |
| /** Creates a new encoder state. Each stream needs its own encoder | | /** Creates a new encoder state. Each stream needs its own encoder | |
| state (can't be shared across simultaneous streams). | | state (can't be shared across simultaneous streams). | |
| @param mode Contains all the information about the characteristics of | | @param mode Contains all the information about the characteristics of | |
| * the stream (must be the same characteristics as used for the | | * the stream (must be the same characteristics as used for the | |
| * decoder) | | * decoder) | |
|
| | | @param channels Number of channels | |
| | | @param error Returns an error code | |
| @return Newly created encoder state. | | @return Newly created encoder state. | |
| */ | | */ | |
|
| EXPORT CELTEncoder *celt_encoder_create(const CELTMode *mode); | | EXPORT CELTEncoder *celt_encoder_create(const CELTMode *mode, int channels,
int *error); | |
| | | | |
| /** Destroys a an encoder state. | | /** Destroys a an encoder state. | |
| @param st Encoder state to be destroyed | | @param st Encoder state to be destroyed | |
| */ | | */ | |
| EXPORT void celt_encoder_destroy(CELTEncoder *st); | | EXPORT void celt_encoder_destroy(CELTEncoder *st); | |
| | | | |
| /** Encodes a frame of audio. | | /** Encodes a frame of audio. | |
| @param st Encoder state | | @param st Encoder state | |
| @param pcm PCM audio in float format, with a normal range of ±1.0. | | @param pcm PCM audio in float format, with a normal range of ±1.0. | |
| * Samples with a range beyond ±1.0 are supported but will | | * Samples with a range beyond ±1.0 are supported but will | |
| | | | |
| skipping to change at line 208 | | skipping to change at line 211 | |
| @param compressed The compressed data is written here. This may not alias
pcm or | | @param compressed The compressed data is written here. This may not alias
pcm or | |
| * optional_synthesis. | | * optional_synthesis. | |
| @param nbCompressedBytes Maximum number of bytes to use for compressing th
e frame | | @param nbCompressedBytes Maximum number of bytes to use for compressing th
e frame | |
| * (can change from one frame to another) | | * (can change from one frame to another) | |
| @return Number of bytes written to "compressed". Will be the same as | | @return Number of bytes written to "compressed". Will be the same as | |
| * "nbCompressedBytes" unless the stream is VBR and will never be lar
ger. | | * "nbCompressedBytes" unless the stream is VBR and will never be lar
ger. | |
| * If negative, an error has occurred (see error codes). It is IMPORT
ANT that | | * If negative, an error has occurred (see error codes). It is IMPORT
ANT that | |
| * the length returned be somehow transmitted to the decoder. Otherwi
se, no | | * the length returned be somehow transmitted to the decoder. Otherwi
se, no | |
| * decoding is possible. | | * decoding is possible. | |
| */ | | */ | |
|
| EXPORT int celt_encode(CELTEncoder *st, const celt_int16_t *pcm, celt_int16
_t *optional_synthesis, unsigned char *compressed, int nbCompressedBytes); | | EXPORT int celt_encode(CELTEncoder *st, const celt_int16 *pcm, celt_int16 *
optional_synthesis, unsigned char *compressed, int nbCompressedBytes); | |
| | | | |
| /** Query and set encoder parameters | | /** Query and set encoder parameters | |
| @param st Encoder state | | @param st Encoder state | |
| @param request Parameter to change or query | | @param request Parameter to change or query | |
| @param value Pointer to a 32-bit int value | | @param value Pointer to a 32-bit int value | |
| @return Error code | | @return Error code | |
| */ | | */ | |
| EXPORT int celt_encoder_ctl(CELTEncoder * st, int request, ...); | | EXPORT int celt_encoder_ctl(CELTEncoder * st, int request, ...); | |
| | | | |
| /* Decoder stuff */ | | /* Decoder stuff */ | |
| | | | |
| /** Creates a new decoder state. Each stream needs its own decoder state (c
an't | | /** Creates a new decoder state. Each stream needs its own decoder state (c
an't | |
| be shared across simultaneous streams). | | be shared across simultaneous streams). | |
| @param mode Contains all the information about the characteristics of the | | @param mode Contains all the information about the characteristics of the | |
| stream (must be the same characteristics as used for the encod
er) | | stream (must be the same characteristics as used for the encod
er) | |
|
| | | @param channels Number of channels | |
| | | @param error Returns an error code | |
| @return Newly created decoder state. | | @return Newly created decoder state. | |
| */ | | */ | |
|
| EXPORT CELTDecoder *celt_decoder_create(const CELTMode *mode); | | EXPORT CELTDecoder *celt_decoder_create(const CELTMode *mode, int channels,
int *error); | |
| | | | |
| /** Destroys a a decoder state. | | /** Destroys a a decoder state. | |
| @param st Decoder state to be destroyed | | @param st Decoder state to be destroyed | |
| */ | | */ | |
| EXPORT void celt_decoder_destroy(CELTDecoder *st); | | EXPORT void celt_decoder_destroy(CELTDecoder *st); | |
| | | | |
| /** Decodes a frame of audio. | | /** Decodes a frame of audio. | |
| @param st Decoder state | | @param st Decoder state | |
| @param data Compressed data produced by an encoder | | @param data Compressed data produced by an encoder | |
| @param len Number of bytes to read from "data". This MUST be exactly the n
umber | | @param len Number of bytes to read from "data". This MUST be exactly the n
umber | |
| | | | |
| skipping to change at line 253 | | skipping to change at line 258 | |
| | | | |
| /** Decodes a frame of audio. | | /** Decodes a frame of audio. | |
| @param st Decoder state | | @param st Decoder state | |
| @param data Compressed data produced by an encoder | | @param data Compressed data produced by an encoder | |
| @param len Number of bytes to read from "data". This MUST be exactly the n
umber | | @param len Number of bytes to read from "data". This MUST be exactly the n
umber | |
| of bytes returned by the encoder. Using a larger value WILL NOT
WORK. | | of bytes returned by the encoder. Using a larger value WILL NOT
WORK. | |
| @param pcm One frame (frame_size samples per channel) of decoded PCM will
be | | @param pcm One frame (frame_size samples per channel) of decoded PCM will
be | |
| returned here in 16-bit PCM format (native endian). | | returned here in 16-bit PCM format (native endian). | |
| @return Error code. | | @return Error code. | |
| */ | | */ | |
|
| EXPORT int celt_decode(CELTDecoder *st, const unsigned char *data, int len,
celt_int16_t *pcm); | | EXPORT int celt_decode(CELTDecoder *st, const unsigned char *data, int len,
celt_int16 *pcm); | |
| | | | |
| /** Query and set decoder parameters | | /** Query and set decoder parameters | |
| @param st Decoder state | | @param st Decoder state | |
| @param request Parameter to change or query | | @param request Parameter to change or query | |
| @param value Pointer to a 32-bit int value | | @param value Pointer to a 32-bit int value | |
| @return Error code | | @return Error code | |
| */ | | */ | |
| EXPORT int celt_decoder_ctl(CELTDecoder * st, int request, ...); | | EXPORT int celt_decoder_ctl(CELTDecoder * st, int request, ...); | |
| | | | |
|
| | | /** Returns the English string that corresponds to an error code | |
| | | * @param error Error code (negative for an error, 0 for success | |
| | | * @return Constant string (must NOT be freed) | |
| | | */ | |
| | | EXPORT const char *celt_strerror(int error); | |
| | | | |
| /* @} */ | | /* @} */ | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| #endif /*CELT_H */ | | #endif /*CELT_H */ | |
| | | | |
End of changes. 14 change blocks. |
| 12 lines changed or deleted | | 23 lines changed or added | |
|