| OLD | NEW |
| 1 /* Copyright (c) 2007-2008 CSIRO | 1 /* Copyright (c) 2007-2008 CSIRO |
| 2 Copyright (c) 2007-2009 Xiph.Org Foundation | 2 Copyright (c) 2007-2009 Xiph.Org Foundation |
| 3 Copyright (c) 2008-2012 Gregory Maxwell | 3 Copyright (c) 2008-2012 Gregory Maxwell |
| 4 Written by Jean-Marc Valin and Gregory Maxwell */ | 4 Written by Jean-Marc Valin and Gregory Maxwell */ |
| 5 /* | 5 /* |
| 6 Redistribution and use in source and binary forms, with or without | 6 Redistribution and use in source and binary forms, with or without |
| 7 modification, are permitted provided that the following conditions | 7 modification, are permitted provided that the following conditions |
| 8 are met: | 8 are met: |
| 9 | 9 |
| 10 - Redistributions of source code must retain the above copyright | 10 - Redistributions of source code must retain the above copyright |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 #ifndef OPUS_CUSTOM_H | 35 #ifndef OPUS_CUSTOM_H |
| 36 #define OPUS_CUSTOM_H | 36 #define OPUS_CUSTOM_H |
| 37 | 37 |
| 38 #include "opus_defines.h" | 38 #include "opus_defines.h" |
| 39 | 39 |
| 40 #ifdef __cplusplus | 40 #ifdef __cplusplus |
| 41 extern "C" { | 41 extern "C" { |
| 42 #endif | 42 #endif |
| 43 | 43 |
| 44 #ifdef CUSTOM_MODES | 44 #ifdef CUSTOM_MODES |
| 45 #define OPUS_CUSTOM_EXPORT OPUS_EXPORT | 45 # define OPUS_CUSTOM_EXPORT OPUS_EXPORT |
| 46 #define OPUS_CUSTOM_EXPORT_STATIC OPUS_EXPORT | 46 # define OPUS_CUSTOM_EXPORT_STATIC OPUS_EXPORT |
| 47 #else | 47 #else |
| 48 #define OPUS_CUSTOM_EXPORT | 48 # define OPUS_CUSTOM_EXPORT |
| 49 #ifdef CELT_C | 49 # ifdef OPUS_BUILD |
| 50 #define OPUS_CUSTOM_EXPORT_STATIC static inline | 50 # define OPUS_CUSTOM_EXPORT_STATIC static inline |
| 51 #else | 51 # else |
| 52 #define OPUS_CUSTOM_EXPORT_STATIC | 52 # define OPUS_CUSTOM_EXPORT_STATIC |
| 53 #endif | 53 # endif |
| 54 #endif | 54 #endif |
| 55 | 55 |
| 56 /** @defgroup opus_custom Opus Custom | 56 /** @defgroup opus_custom Opus Custom |
| 57 * @{ | 57 * @{ |
| 58 * Opus Custom is an optional part of the Opus specification and | 58 * Opus Custom is an optional part of the Opus specification and |
| 59 * reference implementation which uses a distinct API from the regular | 59 * reference implementation which uses a distinct API from the regular |
| 60 * API and supports frame sizes that are not normally supported.\ Use | 60 * API and supports frame sizes that are not normally supported.\ Use |
| 61 * of Opus Custom is discouraged for all but very special applications | 61 * of Opus Custom is discouraged for all but very special applications |
| 62 * for which a frame size different from 2.5, 5, 10, or 20 ms is needed | 62 * for which a frame size different from 2.5, 5, 10, or 20 ms is needed |
| 63 * (for either complexity or latency reasons) and where interoperability | 63 * (for either complexity or latency reasons) and where interoperability |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 * @return A newly created mode | 119 * @return A newly created mode |
| 120 */ | 120 */ |
| 121 OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomMode *opus_custom_mode_crea
te(opus_int32 Fs, int frame_size, int *error); | 121 OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomMode *opus_custom_mode_crea
te(opus_int32 Fs, int frame_size, int *error); |
| 122 | 122 |
| 123 /** Destroys a mode struct. Only call this after all encoders and | 123 /** Destroys a mode struct. Only call this after all encoders and |
| 124 * decoders using this mode are destroyed as well. | 124 * decoders using this mode are destroyed as well. |
| 125 * @param [in] mode <tt>OpusCustomMode*</tt>: Mode to be freed. | 125 * @param [in] mode <tt>OpusCustomMode*</tt>: Mode to be freed. |
| 126 */ | 126 */ |
| 127 OPUS_CUSTOM_EXPORT void opus_custom_mode_destroy(OpusCustomMode *mode); | 127 OPUS_CUSTOM_EXPORT void opus_custom_mode_destroy(OpusCustomMode *mode); |
| 128 | 128 |
| 129 |
| 130 #if !defined(OPUS_BUILD) || defined(CELT_ENCODER_C) |
| 131 |
| 129 /* Encoder */ | 132 /* Encoder */ |
| 130 /** Gets the size of an OpusCustomEncoder structure. | 133 /** Gets the size of an OpusCustomEncoder structure. |
| 131 * @param [in] mode <tt>OpusCustomMode *</tt>: Mode configuration | 134 * @param [in] mode <tt>OpusCustomMode *</tt>: Mode configuration |
| 132 * @param [in] channels <tt>int</tt>: Number of channels | 135 * @param [in] channels <tt>int</tt>: Number of channels |
| 133 * @returns size | 136 * @returns size |
| 134 */ | 137 */ |
| 135 OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_encoder_get_si
ze( | 138 OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_encoder_get_si
ze( |
| 136 const OpusCustomMode *mode, | 139 const OpusCustomMode *mode, |
| 137 int channels | 140 int channels |
| 138 ) OPUS_ARG_NONNULL(1); | 141 ) OPUS_ARG_NONNULL(1); |
| 139 | 142 |
| 140 /** Creates a new encoder state. Each stream needs its own encoder | |
| 141 * state (can't be shared across simultaneous streams). | |
| 142 * @param [in] mode <tt>OpusCustomMode*</tt>: Contains all the information abou
t the characteristics of | |
| 143 * the stream (must be the same characteristics as used for the | |
| 144 * decoder) | |
| 145 * @param [in] channels <tt>int</tt>: Number of channels | |
| 146 * @param [out] error <tt>int*</tt>: Returns an error code | |
| 147 * @return Newly created encoder state. | |
| 148 */ | |
| 149 OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomEncoder *opus_custom_encode
r_create( | |
| 150 const OpusCustomMode *mode, | |
| 151 int channels, | |
| 152 int *error | |
| 153 ) OPUS_ARG_NONNULL(1); | |
| 154 | |
| 155 /** Initializes a previously allocated encoder state | 143 /** Initializes a previously allocated encoder state |
| 156 * The memory pointed to by st must be the size returned by opus_custom_encoder
_get_size. | 144 * The memory pointed to by st must be the size returned by opus_custom_encoder
_get_size. |
| 157 * This is intended for applications which use their own allocator instead of m
alloc. | 145 * This is intended for applications which use their own allocator instead of m
alloc. |
| 158 * @see opus_custom_encoder_create(),opus_custom_encoder_get_size() | 146 * @see opus_custom_encoder_create(),opus_custom_encoder_get_size() |
| 159 * To reset a previously initialized state use the OPUS_RESET_STATE CTL. | 147 * To reset a previously initialized state use the OPUS_RESET_STATE CTL. |
| 160 * @param [in] st <tt>OpusCustomEncoder*</tt>: Encoder state | 148 * @param [in] st <tt>OpusCustomEncoder*</tt>: Encoder state |
| 161 * @param [in] mode <tt>OpusCustomMode *</tt>: Contains all the information abo
ut the characteristics of | 149 * @param [in] mode <tt>OpusCustomMode *</tt>: Contains all the information abo
ut the characteristics of |
| 162 * the stream (must be the same characteristics as used for the | 150 * the stream (must be the same characteristics as used for the |
| 163 * decoder) | 151 * decoder) |
| 164 * @param [in] channels <tt>int</tt>: Number of channels | 152 * @param [in] channels <tt>int</tt>: Number of channels |
| 165 * @return OPUS_OK Success or @ref opus_errorcodes | 153 * @return OPUS_OK Success or @ref opus_errorcodes |
| 166 */ | 154 */ |
| 167 OPUS_CUSTOM_EXPORT_STATIC int opus_custom_encoder_init( | 155 OPUS_CUSTOM_EXPORT_STATIC int opus_custom_encoder_init( |
| 168 OpusCustomEncoder *st, | 156 OpusCustomEncoder *st, |
| 169 const OpusCustomMode *mode, | 157 const OpusCustomMode *mode, |
| 170 int channels | 158 int channels |
| 171 ) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); | 159 ) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); |
| 172 | 160 |
| 161 #endif |
| 162 |
| 163 |
| 164 /** Creates a new encoder state. Each stream needs its own encoder |
| 165 * state (can't be shared across simultaneous streams). |
| 166 * @param [in] mode <tt>OpusCustomMode*</tt>: Contains all the information abou
t the characteristics of |
| 167 * the stream (must be the same characteristics as used for the |
| 168 * decoder) |
| 169 * @param [in] channels <tt>int</tt>: Number of channels |
| 170 * @param [out] error <tt>int*</tt>: Returns an error code |
| 171 * @return Newly created encoder state. |
| 172 */ |
| 173 OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomEncoder *opus_custom_encode
r_create( |
| 174 const OpusCustomMode *mode, |
| 175 int channels, |
| 176 int *error |
| 177 ) OPUS_ARG_NONNULL(1); |
| 178 |
| 179 |
| 173 /** Destroys a an encoder state. | 180 /** Destroys a an encoder state. |
| 174 * @param[in] st <tt>OpusCustomEncoder*</tt>: State to be freed. | 181 * @param[in] st <tt>OpusCustomEncoder*</tt>: State to be freed. |
| 175 */ | 182 */ |
| 176 OPUS_CUSTOM_EXPORT void opus_custom_encoder_destroy(OpusCustomEncoder *st); | 183 OPUS_CUSTOM_EXPORT void opus_custom_encoder_destroy(OpusCustomEncoder *st); |
| 177 | 184 |
| 178 /** Encodes a frame of audio. | 185 /** Encodes a frame of audio. |
| 179 * @param [in] st <tt>OpusCustomEncoder*</tt>: Encoder state | 186 * @param [in] st <tt>OpusCustomEncoder*</tt>: Encoder state |
| 180 * @param [in] pcm <tt>float*</tt>: PCM audio in float format, with a normal ra
nge of +/-1.0. | 187 * @param [in] pcm <tt>float*</tt>: PCM audio in float format, with a normal ra
nge of +/-1.0. |
| 181 * Samples with a range beyond +/-1.0 are supported but will | 188 * Samples with a range beyond +/-1.0 are supported but will |
| 182 * be clipped by decoders using the integer API and should | 189 * be clipped by decoders using the integer API and should |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 ) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); | 229 ) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); |
| 223 | 230 |
| 224 /** Perform a CTL function on an Opus custom encoder. | 231 /** Perform a CTL function on an Opus custom encoder. |
| 225 * | 232 * |
| 226 * Generally the request and subsequent arguments are generated | 233 * Generally the request and subsequent arguments are generated |
| 227 * by a convenience macro. | 234 * by a convenience macro. |
| 228 * @see opus_encoderctls | 235 * @see opus_encoderctls |
| 229 */ | 236 */ |
| 230 OPUS_CUSTOM_EXPORT int opus_custom_encoder_ctl(OpusCustomEncoder * OPUS_RESTRICT
st, int request, ...) OPUS_ARG_NONNULL(1); | 237 OPUS_CUSTOM_EXPORT int opus_custom_encoder_ctl(OpusCustomEncoder * OPUS_RESTRICT
st, int request, ...) OPUS_ARG_NONNULL(1); |
| 231 | 238 |
| 239 |
| 240 #if !defined(OPUS_BUILD) || defined(CELT_DECODER_C) |
| 232 /* Decoder */ | 241 /* Decoder */ |
| 233 | 242 |
| 234 /** Gets the size of an OpusCustomDecoder structure. | 243 /** Gets the size of an OpusCustomDecoder structure. |
| 235 * @param [in] mode <tt>OpusCustomMode *</tt>: Mode configuration | 244 * @param [in] mode <tt>OpusCustomMode *</tt>: Mode configuration |
| 236 * @param [in] channels <tt>int</tt>: Number of channels | 245 * @param [in] channels <tt>int</tt>: Number of channels |
| 237 * @returns size | 246 * @returns size |
| 238 */ | 247 */ |
| 239 OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_decoder_get_si
ze( | 248 OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_decoder_get_si
ze( |
| 240 const OpusCustomMode *mode, | 249 const OpusCustomMode *mode, |
| 241 int channels | 250 int channels |
| 242 ) OPUS_ARG_NONNULL(1); | 251 ) OPUS_ARG_NONNULL(1); |
| 243 | 252 |
| 244 /** Creates a new decoder state. Each stream needs its own decoder state (can't | |
| 245 * be shared across simultaneous streams). | |
| 246 * @param [in] mode <tt>OpusCustomMode</tt>: Contains all the information about
the characteristics of the | |
| 247 * stream (must be the same characteristics as used for the encoder) | |
| 248 * @param [in] channels <tt>int</tt>: Number of channels | |
| 249 * @param [out] error <tt>int*</tt>: Returns an error code | |
| 250 * @return Newly created decoder state. | |
| 251 */ | |
| 252 OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomDecoder *opus_custom_decode
r_create( | |
| 253 const OpusCustomMode *mode, | |
| 254 int channels, | |
| 255 int *error | |
| 256 ) OPUS_ARG_NONNULL(1); | |
| 257 | |
| 258 /** Initializes a previously allocated decoder state | 253 /** Initializes a previously allocated decoder state |
| 259 * The memory pointed to by st must be the size returned by opus_custom_decoder
_get_size. | 254 * The memory pointed to by st must be the size returned by opus_custom_decoder
_get_size. |
| 260 * This is intended for applications which use their own allocator instead of m
alloc. | 255 * This is intended for applications which use their own allocator instead of m
alloc. |
| 261 * @see opus_custom_decoder_create(),opus_custom_decoder_get_size() | 256 * @see opus_custom_decoder_create(),opus_custom_decoder_get_size() |
| 262 * To reset a previously initialized state use the OPUS_RESET_STATE CTL. | 257 * To reset a previously initialized state use the OPUS_RESET_STATE CTL. |
| 263 * @param [in] st <tt>OpusCustomDecoder*</tt>: Decoder state | 258 * @param [in] st <tt>OpusCustomDecoder*</tt>: Decoder state |
| 264 * @param [in] mode <tt>OpusCustomMode *</tt>: Contains all the information abo
ut the characteristics of | 259 * @param [in] mode <tt>OpusCustomMode *</tt>: Contains all the information abo
ut the characteristics of |
| 265 * the stream (must be the same characteristics as used for the | 260 * the stream (must be the same characteristics as used for the |
| 266 * encoder) | 261 * encoder) |
| 267 * @param [in] channels <tt>int</tt>: Number of channels | 262 * @param [in] channels <tt>int</tt>: Number of channels |
| 268 * @return OPUS_OK Success or @ref opus_errorcodes | 263 * @return OPUS_OK Success or @ref opus_errorcodes |
| 269 */ | 264 */ |
| 270 OPUS_CUSTOM_EXPORT_STATIC int opus_custom_decoder_init( | 265 OPUS_CUSTOM_EXPORT_STATIC int opus_custom_decoder_init( |
| 271 OpusCustomDecoder *st, | 266 OpusCustomDecoder *st, |
| 272 const OpusCustomMode *mode, | 267 const OpusCustomMode *mode, |
| 273 int channels | 268 int channels |
| 274 ) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); | 269 ) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); |
| 275 | 270 |
| 271 #endif |
| 272 |
| 273 |
| 274 /** Creates a new decoder state. Each stream needs its own decoder state (can't |
| 275 * be shared across simultaneous streams). |
| 276 * @param [in] mode <tt>OpusCustomMode</tt>: Contains all the information about
the characteristics of the |
| 277 * stream (must be the same characteristics as used for the encoder) |
| 278 * @param [in] channels <tt>int</tt>: Number of channels |
| 279 * @param [out] error <tt>int*</tt>: Returns an error code |
| 280 * @return Newly created decoder state. |
| 281 */ |
| 282 OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomDecoder *opus_custom_decode
r_create( |
| 283 const OpusCustomMode *mode, |
| 284 int channels, |
| 285 int *error |
| 286 ) OPUS_ARG_NONNULL(1); |
| 287 |
| 276 /** Destroys a an decoder state. | 288 /** Destroys a an decoder state. |
| 277 * @param[in] st <tt>OpusCustomDecoder*</tt>: State to be freed. | 289 * @param[in] st <tt>OpusCustomDecoder*</tt>: State to be freed. |
| 278 */ | 290 */ |
| 279 OPUS_CUSTOM_EXPORT void opus_custom_decoder_destroy(OpusCustomDecoder *st); | 291 OPUS_CUSTOM_EXPORT void opus_custom_decoder_destroy(OpusCustomDecoder *st); |
| 280 | 292 |
| 281 /** Decode an opus custom frame with floating point output | 293 /** Decode an opus custom frame with floating point output |
| 282 * @param [in] st <tt>OpusCustomDecoder*</tt>: Decoder state | 294 * @param [in] st <tt>OpusCustomDecoder*</tt>: Decoder state |
| 283 * @param [in] data <tt>char*</tt>: Input payload. Use a NULL pointer to indica
te packet loss | 295 * @param [in] data <tt>char*</tt>: Input payload. Use a NULL pointer to indica
te packet loss |
| 284 * @param [in] len <tt>int</tt>: Number of bytes in payload | 296 * @param [in] len <tt>int</tt>: Number of bytes in payload |
| 285 * @param [out] pcm <tt>float*</tt>: Output signal (interleaved if 2 channels).
length | 297 * @param [out] pcm <tt>float*</tt>: Output signal (interleaved if 2 channels).
length |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 */ | 332 */ |
| 321 OPUS_CUSTOM_EXPORT int opus_custom_decoder_ctl(OpusCustomDecoder * OPUS_RESTRICT
st, int request, ...) OPUS_ARG_NONNULL(1); | 333 OPUS_CUSTOM_EXPORT int opus_custom_decoder_ctl(OpusCustomDecoder * OPUS_RESTRICT
st, int request, ...) OPUS_ARG_NONNULL(1); |
| 322 | 334 |
| 323 /**@}*/ | 335 /**@}*/ |
| 324 | 336 |
| 325 #ifdef __cplusplus | 337 #ifdef __cplusplus |
| 326 } | 338 } |
| 327 #endif | 339 #endif |
| 328 | 340 |
| 329 #endif /* OPUS_CUSTOM_H */ | 341 #endif /* OPUS_CUSTOM_H */ |
| OLD | NEW |