From 2af82edce4859b0609138f757febf70fbcb9851f Mon Sep 17 00:00:00 2001 From: philippe44 Date: Thu, 1 Aug 2019 23:00:33 -0700 Subject: [PATCH] add opus codec (i2s default IO changed!) --- README.md | 3 + components/codecs/component.mk | 9 +- components/codecs/inc/opus/opus.h | 981 ++++++++ components/codecs/inc/opus/opus_custom.h | 342 +++ components/codecs/inc/opus/opus_defines.h | 799 ++++++ components/codecs/inc/opus/opus_multistream.h | 660 +++++ components/codecs/inc/opus/opus_projection.h | 568 +++++ components/codecs/inc/opus/opus_types.h | 166 ++ components/codecs/inc/opusfile/opusfile.h | 2164 +++++++++++++++++ components/codecs/lib/libopus.a | Bin 0 -> 893194 bytes components/codecs/lib/libopusfile.a | Bin 0 -> 165804 bytes components/squeezelite/component.mk | 6 +- components/squeezelite/decode.c | 3 + components/squeezelite/main.c | 7 +- components/squeezelite/opus.c | 317 +++ components/squeezelite/output.c | 2 +- components/squeezelite/output_i2s.c | 4 +- components/squeezelite/slimproto.c | 11 +- components/squeezelite/squeezelite.h | 20 +- components/squeezelite/stream.c | 4 +- components/squeezelite/vorbis.c | 33 +- main/Kconfig.projbuild | 5 + 22 files changed, 6065 insertions(+), 39 deletions(-) create mode 100644 components/codecs/inc/opus/opus.h create mode 100644 components/codecs/inc/opus/opus_custom.h create mode 100644 components/codecs/inc/opus/opus_defines.h create mode 100644 components/codecs/inc/opus/opus_multistream.h create mode 100644 components/codecs/inc/opus/opus_projection.h create mode 100644 components/codecs/inc/opus/opus_types.h create mode 100644 components/codecs/inc/opusfile/opusfile.h create mode 100644 components/codecs/lib/libopus.a create mode 100644 components/codecs/lib/libopusfile.a create mode 100644 components/squeezelite/opus.c diff --git a/README.md b/README.md index d434bcba..08383ae2 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,9 @@ nvs_set autoexec2 str -v "squeezelite -o \"BT -n 'MySpeaker'\" -b 500:2000 -R -u #pragma GCC push_options #pragma GCC optimize ("O0") #pragma GCC pop_options +- opus & opusfile + - per mad & few others, edit configure and change $ac_link to add -c (faking link) + - change ac_files to remove '' - better use helixaac - set IDF_PATH=/home/esp-idf - set ESPPORT=COM9 diff --git a/components/codecs/component.mk b/components/codecs/component.mk index c68cbd97..99e87521 100644 --- a/components/codecs/component.mk +++ b/components/codecs/component.mk @@ -9,11 +9,14 @@ COMPONENT_ADD_LDFLAGS=-l$(COMPONENT_NAME) \ $(COMPONENT_PATH)/lib/libvorbisidec.a \ $(COMPONENT_PATH)/lib/libogg.a \ $(COMPONENT_PATH)/lib/libalac.a \ - $(COMPONENT_PATH)/lib/libresample16.a \ - $(COMPONENT_PATH)/lib/libsoxr.a - + $(COMPONENT_PATH)/lib/libresample16.a \ + $(COMPONENT_PATH)/lib/libsoxr.a \ + $(COMPONENT_PATH)/lib/libopusfile.a \ + $(COMPONENT_PATH)/lib/libopus.a + #$(COMPONENT_PATH)/lib/libfaad.a #$(COMPONENT_PATH)/lib/libvorbisidec.a + #$(COMPONENT_PATH)/lib/libesp-opus.a #$(COMPONENT_PATH)/lib/libogg.a #$(COMPONENT_PATH)/lib/libesp-tremor.a #$(COMPONENT_PATH)/lib/libesp-ogg-container.a diff --git a/components/codecs/inc/opus/opus.h b/components/codecs/inc/opus/opus.h new file mode 100644 index 00000000..d282f21d --- /dev/null +++ b/components/codecs/inc/opus/opus.h @@ -0,0 +1,981 @@ +/* Copyright (c) 2010-2011 Xiph.Org Foundation, Skype Limited + Written by Jean-Marc Valin and Koen Vos */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** + * @file opus.h + * @brief Opus reference implementation API + */ + +#ifndef OPUS_H +#define OPUS_H + +#include "opus_types.h" +#include "opus_defines.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @mainpage Opus + * + * The Opus codec is designed for interactive speech and audio transmission over the Internet. + * It is designed by the IETF Codec Working Group and incorporates technology from + * Skype's SILK codec and Xiph.Org's CELT codec. + * + * The Opus codec is designed to handle a wide range of interactive audio applications, + * including Voice over IP, videoconferencing, in-game chat, and even remote live music + * performances. It can scale from low bit-rate narrowband speech to very high quality + * stereo music. Its main features are: + + * @li Sampling rates from 8 to 48 kHz + * @li Bit-rates from 6 kb/s to 510 kb/s + * @li Support for both constant bit-rate (CBR) and variable bit-rate (VBR) + * @li Audio bandwidth from narrowband to full-band + * @li Support for speech and music + * @li Support for mono and stereo + * @li Support for multichannel (up to 255 channels) + * @li Frame sizes from 2.5 ms to 60 ms + * @li Good loss robustness and packet loss concealment (PLC) + * @li Floating point and fixed-point implementation + * + * Documentation sections: + * @li @ref opus_encoder + * @li @ref opus_decoder + * @li @ref opus_repacketizer + * @li @ref opus_multistream + * @li @ref opus_libinfo + * @li @ref opus_custom + */ + +/** @defgroup opus_encoder Opus Encoder + * @{ + * + * @brief This page describes the process and functions used to encode Opus. + * + * Since Opus is a stateful codec, the encoding process starts with creating an encoder + * state. This can be done with: + * + * @code + * int error; + * OpusEncoder *enc; + * enc = opus_encoder_create(Fs, channels, application, &error); + * @endcode + * + * From this point, @c enc can be used for encoding an audio stream. An encoder state + * @b must @b not be used for more than one stream at the same time. Similarly, the encoder + * state @b must @b not be re-initialized for each frame. + * + * While opus_encoder_create() allocates memory for the state, it's also possible + * to initialize pre-allocated memory: + * + * @code + * int size; + * int error; + * OpusEncoder *enc; + * size = opus_encoder_get_size(channels); + * enc = malloc(size); + * error = opus_encoder_init(enc, Fs, channels, application); + * @endcode + * + * where opus_encoder_get_size() returns the required size for the encoder state. Note that + * future versions of this code may change the size, so no assuptions should be made about it. + * + * The encoder state is always continuous in memory and only a shallow copy is sufficient + * to copy it (e.g. memcpy()) + * + * It is possible to change some of the encoder's settings using the opus_encoder_ctl() + * interface. All these settings already default to the recommended value, so they should + * only be changed when necessary. The most common settings one may want to change are: + * + * @code + * opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate)); + * opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complexity)); + * opus_encoder_ctl(enc, OPUS_SET_SIGNAL(signal_type)); + * @endcode + * + * where + * + * @arg bitrate is in bits per second (b/s) + * @arg complexity is a value from 1 to 10, where 1 is the lowest complexity and 10 is the highest + * @arg signal_type is either OPUS_AUTO (default), OPUS_SIGNAL_VOICE, or OPUS_SIGNAL_MUSIC + * + * See @ref opus_encoderctls and @ref opus_genericctls for a complete list of parameters that can be set or queried. Most parameters can be set or changed at any time during a stream. + * + * To encode a frame, opus_encode() or opus_encode_float() must be called with exactly one frame (2.5, 5, 10, 20, 40 or 60 ms) of audio data: + * @code + * len = opus_encode(enc, audio_frame, frame_size, packet, max_packet); + * @endcode + * + * where + * + * + * opus_encode() and opus_encode_float() return the number of bytes actually written to the packet. + * The return value can be negative, which indicates that an error has occurred. If the return value + * is 2 bytes or less, then the packet does not need to be transmitted (DTX). + * + * Once the encoder state if no longer needed, it can be destroyed with + * + * @code + * opus_encoder_destroy(enc); + * @endcode + * + * If the encoder was created with opus_encoder_init() rather than opus_encoder_create(), + * then no action is required aside from potentially freeing the memory that was manually + * allocated for it (calling free(enc) for the example above) + * + */ + +/** Opus encoder state. + * This contains the complete state of an Opus encoder. + * It is position independent and can be freely copied. + * @see opus_encoder_create,opus_encoder_init + */ +typedef struct OpusEncoder OpusEncoder; + +/** Gets the size of an OpusEncoder structure. + * @param[in] channels int: Number of channels. + * This must be 1 or 2. + * @returns The size in bytes. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_encoder_get_size(int channels); + +/** + */ + +/** Allocates and initializes an encoder state. + * There are three coding modes: + * + * @ref OPUS_APPLICATION_VOIP gives best quality at a given bitrate for voice + * signals. It enhances the input signal by high-pass filtering and + * emphasizing formants and harmonics. Optionally it includes in-band + * forward error correction to protect against packet loss. Use this + * mode for typical VoIP applications. Because of the enhancement, + * even at high bitrates the output may sound different from the input. + * + * @ref OPUS_APPLICATION_AUDIO gives best quality at a given bitrate for most + * non-voice signals like music. Use this mode for music and mixed + * (music/voice) content, broadcast, and applications requiring less + * than 15 ms of coding delay. + * + * @ref OPUS_APPLICATION_RESTRICTED_LOWDELAY configures low-delay mode that + * disables the speech-optimized mode in exchange for slightly reduced delay. + * This mode can only be set on an newly initialized or freshly reset encoder + * because it changes the codec delay. + * + * This is useful when the caller knows that the speech-optimized modes will not be needed (use with caution). + * @param [in] Fs opus_int32: Sampling rate of input signal (Hz) + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param [in] channels int: Number of channels (1 or 2) in input signal + * @param [in] application int: Coding mode (@ref OPUS_APPLICATION_VOIP/@ref OPUS_APPLICATION_AUDIO/@ref OPUS_APPLICATION_RESTRICTED_LOWDELAY) + * @param [out] error int*: @ref opus_errorcodes + * @note Regardless of the sampling rate and number channels selected, the Opus encoder + * can switch to a lower audio bandwidth or number of channels if the bitrate + * selected is too low. This also means that it is safe to always use 48 kHz stereo input + * and let the encoder optimize the encoding. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusEncoder *opus_encoder_create( + opus_int32 Fs, + int channels, + int application, + int *error +); + +/** Initializes a previously allocated encoder state + * The memory pointed to by st must be at least the size returned by opus_encoder_get_size(). + * This is intended for applications which use their own allocator instead of malloc. + * @see opus_encoder_create(),opus_encoder_get_size() + * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL. + * @param [in] st OpusEncoder*: Encoder state + * @param [in] Fs opus_int32: Sampling rate of input signal (Hz) + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param [in] channels int: Number of channels (1 or 2) in input signal + * @param [in] application int: Coding mode (OPUS_APPLICATION_VOIP/OPUS_APPLICATION_AUDIO/OPUS_APPLICATION_RESTRICTED_LOWDELAY) + * @retval #OPUS_OK Success or @ref opus_errorcodes + */ +OPUS_EXPORT int opus_encoder_init( + OpusEncoder *st, + opus_int32 Fs, + int channels, + int application +) OPUS_ARG_NONNULL(1); + +/** Encodes an Opus frame. + * @param [in] st OpusEncoder*: Encoder state + * @param [in] pcm opus_int16*: Input signal (interleaved if 2 channels). length is frame_size*channels*sizeof(opus_int16) + * @param [in] frame_size int: Number of samples per channel in the + * input signal. + * This must be an Opus frame size for + * the encoder's sampling rate. + * For example, at 48 kHz the permitted + * values are 120, 240, 480, 960, 1920, + * and 2880. + * Passing in a duration of less than + * 10 ms (480 samples at 48 kHz) will + * prevent the encoder from using the LPC + * or hybrid modes. + * @param [out] data unsigned char*: Output payload. + * This must contain storage for at + * least \a max_data_bytes. + * @param [in] max_data_bytes opus_int32: Size of the allocated + * memory for the output + * payload. This may be + * used to impose an upper limit on + * the instant bitrate, but should + * not be used as the only bitrate + * control. Use #OPUS_SET_BITRATE to + * control the bitrate. + * @returns The length of the encoded packet (in bytes) on success or a + * negative error code (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_encode( + OpusEncoder *st, + const opus_int16 *pcm, + int frame_size, + unsigned char *data, + opus_int32 max_data_bytes +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); + +/** Encodes an Opus frame from floating point input. + * @param [in] st OpusEncoder*: Encoder state + * @param [in] pcm float*: Input in float format (interleaved if 2 channels), with a normal range of +/-1.0. + * Samples with a range beyond +/-1.0 are supported but will + * be clipped by decoders using the integer API and should + * only be used if it is known that the far end supports + * extended dynamic range. + * length is frame_size*channels*sizeof(float) + * @param [in] frame_size int: Number of samples per channel in the + * input signal. + * This must be an Opus frame size for + * the encoder's sampling rate. + * For example, at 48 kHz the permitted + * values are 120, 240, 480, 960, 1920, + * and 2880. + * Passing in a duration of less than + * 10 ms (480 samples at 48 kHz) will + * prevent the encoder from using the LPC + * or hybrid modes. + * @param [out] data unsigned char*: Output payload. + * This must contain storage for at + * least \a max_data_bytes. + * @param [in] max_data_bytes opus_int32: Size of the allocated + * memory for the output + * payload. This may be + * used to impose an upper limit on + * the instant bitrate, but should + * not be used as the only bitrate + * control. Use #OPUS_SET_BITRATE to + * control the bitrate. + * @returns The length of the encoded packet (in bytes) on success or a + * negative error code (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_encode_float( + OpusEncoder *st, + const float *pcm, + int frame_size, + unsigned char *data, + opus_int32 max_data_bytes +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); + +/** Frees an OpusEncoder allocated by opus_encoder_create(). + * @param[in] st OpusEncoder*: State to be freed. + */ +OPUS_EXPORT void opus_encoder_destroy(OpusEncoder *st); + +/** Perform a CTL function on an Opus encoder. + * + * Generally the request and subsequent arguments are generated + * by a convenience macro. + * @param st OpusEncoder*: Encoder state. + * @param request This and all remaining parameters should be replaced by one + * of the convenience macros in @ref opus_genericctls or + * @ref opus_encoderctls. + * @see opus_genericctls + * @see opus_encoderctls + */ +OPUS_EXPORT int opus_encoder_ctl(OpusEncoder *st, int request, ...) OPUS_ARG_NONNULL(1); +/**@}*/ + +/** @defgroup opus_decoder Opus Decoder + * @{ + * + * @brief This page describes the process and functions used to decode Opus. + * + * The decoding process also starts with creating a decoder + * state. This can be done with: + * @code + * int error; + * OpusDecoder *dec; + * dec = opus_decoder_create(Fs, channels, &error); + * @endcode + * where + * @li Fs is the sampling rate and must be 8000, 12000, 16000, 24000, or 48000 + * @li channels is the number of channels (1 or 2) + * @li error will hold the error code in case of failure (or #OPUS_OK on success) + * @li the return value is a newly created decoder state to be used for decoding + * + * While opus_decoder_create() allocates memory for the state, it's also possible + * to initialize pre-allocated memory: + * @code + * int size; + * int error; + * OpusDecoder *dec; + * size = opus_decoder_get_size(channels); + * dec = malloc(size); + * error = opus_decoder_init(dec, Fs, channels); + * @endcode + * where opus_decoder_get_size() returns the required size for the decoder state. Note that + * future versions of this code may change the size, so no assuptions should be made about it. + * + * The decoder state is always continuous in memory and only a shallow copy is sufficient + * to copy it (e.g. memcpy()) + * + * To decode a frame, opus_decode() or opus_decode_float() must be called with a packet of compressed audio data: + * @code + * frame_size = opus_decode(dec, packet, len, decoded, max_size, 0); + * @endcode + * where + * + * @li packet is the byte array containing the compressed data + * @li len is the exact number of bytes contained in the packet + * @li decoded is the decoded audio data in opus_int16 (or float for opus_decode_float()) + * @li max_size is the max duration of the frame in samples (per channel) that can fit into the decoded_frame array + * + * opus_decode() and opus_decode_float() return the number of samples (per channel) decoded from the packet. + * If that value is negative, then an error has occurred. This can occur if the packet is corrupted or if the audio + * buffer is too small to hold the decoded audio. + * + * Opus is a stateful codec with overlapping blocks and as a result Opus + * packets are not coded independently of each other. Packets must be + * passed into the decoder serially and in the correct order for a correct + * decode. Lost packets can be replaced with loss concealment by calling + * the decoder with a null pointer and zero length for the missing packet. + * + * A single codec state may only be accessed from a single thread at + * a time and any required locking must be performed by the caller. Separate + * streams must be decoded with separate decoder states and can be decoded + * in parallel unless the library was compiled with NONTHREADSAFE_PSEUDOSTACK + * defined. + * + */ + +/** Opus decoder state. + * This contains the complete state of an Opus decoder. + * It is position independent and can be freely copied. + * @see opus_decoder_create,opus_decoder_init + */ +typedef struct OpusDecoder OpusDecoder; + +/** Gets the size of an OpusDecoder structure. + * @param [in] channels int: Number of channels. + * This must be 1 or 2. + * @returns The size in bytes. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decoder_get_size(int channels); + +/** Allocates and initializes a decoder state. + * @param [in] Fs opus_int32: Sample rate to decode at (Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param [in] channels int: Number of channels (1 or 2) to decode + * @param [out] error int*: #OPUS_OK Success or @ref opus_errorcodes + * + * Internally Opus stores data at 48000 Hz, so that should be the default + * value for Fs. However, the decoder can efficiently decode to buffers + * at 8, 12, 16, and 24 kHz so if for some reason the caller cannot use + * data at the full sample rate, or knows the compressed data doesn't + * use the full frequency range, it can request decoding at a reduced + * rate. Likewise, the decoder is capable of filling in either mono or + * interleaved stereo pcm buffers, at the caller's request. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusDecoder *opus_decoder_create( + opus_int32 Fs, + int channels, + int *error +); + +/** Initializes a previously allocated decoder state. + * The state must be at least the size returned by opus_decoder_get_size(). + * This is intended for applications which use their own allocator instead of malloc. @see opus_decoder_create,opus_decoder_get_size + * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL. + * @param [in] st OpusDecoder*: Decoder state. + * @param [in] Fs opus_int32: Sampling rate to decode to (Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param [in] channels int: Number of channels (1 or 2) to decode + * @retval #OPUS_OK Success or @ref opus_errorcodes + */ +OPUS_EXPORT int opus_decoder_init( + OpusDecoder *st, + opus_int32 Fs, + int channels +) OPUS_ARG_NONNULL(1); + +/** Decode an Opus packet. + * @param [in] st OpusDecoder*: Decoder state + * @param [in] data char*: Input payload. Use a NULL pointer to indicate packet loss + * @param [in] len opus_int32: Number of bytes in payload* + * @param [out] pcm opus_int16*: Output signal (interleaved if 2 channels). length + * is frame_size*channels*sizeof(opus_int16) + * @param [in] frame_size Number of samples per channel of available space in \a pcm. + * If this is less than the maximum packet duration (120ms; 5760 for 48kHz), this function will + * not be capable of decoding some packets. In the case of PLC (data==NULL) or FEC (decode_fec=1), + * then frame_size needs to be exactly the duration of audio that is missing, otherwise the + * decoder will not be in the optimal state to decode the next incoming packet. For the PLC and + * FEC cases, frame_size must be a multiple of 2.5 ms. + * @param [in] decode_fec int: Flag (0 or 1) to request that any in-band forward error correction data be + * decoded. If no such data is available, the frame is decoded as if it were lost. + * @returns Number of decoded samples or @ref opus_errorcodes + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decode( + OpusDecoder *st, + const unsigned char *data, + opus_int32 len, + opus_int16 *pcm, + int frame_size, + int decode_fec +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + +/** Decode an Opus packet with floating point output. + * @param [in] st OpusDecoder*: Decoder state + * @param [in] data char*: Input payload. Use a NULL pointer to indicate packet loss + * @param [in] len opus_int32: Number of bytes in payload + * @param [out] pcm float*: Output signal (interleaved if 2 channels). length + * is frame_size*channels*sizeof(float) + * @param [in] frame_size Number of samples per channel of available space in \a pcm. + * If this is less than the maximum packet duration (120ms; 5760 for 48kHz), this function will + * not be capable of decoding some packets. In the case of PLC (data==NULL) or FEC (decode_fec=1), + * then frame_size needs to be exactly the duration of audio that is missing, otherwise the + * decoder will not be in the optimal state to decode the next incoming packet. For the PLC and + * FEC cases, frame_size must be a multiple of 2.5 ms. + * @param [in] decode_fec int: Flag (0 or 1) to request that any in-band forward error correction data be + * decoded. If no such data is available the frame is decoded as if it were lost. + * @returns Number of decoded samples or @ref opus_errorcodes + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decode_float( + OpusDecoder *st, + const unsigned char *data, + opus_int32 len, + float *pcm, + int frame_size, + int decode_fec +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + +/** Perform a CTL function on an Opus decoder. + * + * Generally the request and subsequent arguments are generated + * by a convenience macro. + * @param st OpusDecoder*: Decoder state. + * @param request This and all remaining parameters should be replaced by one + * of the convenience macros in @ref opus_genericctls or + * @ref opus_decoderctls. + * @see opus_genericctls + * @see opus_decoderctls + */ +OPUS_EXPORT int opus_decoder_ctl(OpusDecoder *st, int request, ...) OPUS_ARG_NONNULL(1); + +/** Frees an OpusDecoder allocated by opus_decoder_create(). + * @param[in] st OpusDecoder*: State to be freed. + */ +OPUS_EXPORT void opus_decoder_destroy(OpusDecoder *st); + +/** Parse an opus packet into one or more frames. + * Opus_decode will perform this operation internally so most applications do + * not need to use this function. + * This function does not copy the frames, the returned pointers are pointers into + * the input packet. + * @param [in] data char*: Opus packet to be parsed + * @param [in] len opus_int32: size of data + * @param [out] out_toc char*: TOC pointer + * @param [out] frames char*[48] encapsulated frames + * @param [out] size opus_int16[48] sizes of the encapsulated frames + * @param [out] payload_offset int*: returns the position of the payload within the packet (in bytes) + * @returns number of frames + */ +OPUS_EXPORT int opus_packet_parse( + const unsigned char *data, + opus_int32 len, + unsigned char *out_toc, + const unsigned char *frames[48], + opus_int16 size[48], + int *payload_offset +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(5); + +/** Gets the bandwidth of an Opus packet. + * @param [in] data char*: Opus packet + * @retval OPUS_BANDWIDTH_NARROWBAND Narrowband (4kHz bandpass) + * @retval OPUS_BANDWIDTH_MEDIUMBAND Mediumband (6kHz bandpass) + * @retval OPUS_BANDWIDTH_WIDEBAND Wideband (8kHz bandpass) + * @retval OPUS_BANDWIDTH_SUPERWIDEBAND Superwideband (12kHz bandpass) + * @retval OPUS_BANDWIDTH_FULLBAND Fullband (20kHz bandpass) + * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_bandwidth(const unsigned char *data) OPUS_ARG_NONNULL(1); + +/** Gets the number of samples per frame from an Opus packet. + * @param [in] data char*: Opus packet. + * This must contain at least one byte of + * data. + * @param [in] Fs opus_int32: Sampling rate in Hz. + * This must be a multiple of 400, or + * inaccurate results will be returned. + * @returns Number of samples per frame. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_samples_per_frame(const unsigned char *data, opus_int32 Fs) OPUS_ARG_NONNULL(1); + +/** Gets the number of channels from an Opus packet. + * @param [in] data char*: Opus packet + * @returns Number of channels + * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_nb_channels(const unsigned char *data) OPUS_ARG_NONNULL(1); + +/** Gets the number of frames in an Opus packet. + * @param [in] packet char*: Opus packet + * @param [in] len opus_int32: Length of packet + * @returns Number of frames + * @retval OPUS_BAD_ARG Insufficient data was passed to the function + * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_nb_frames(const unsigned char packet[], opus_int32 len) OPUS_ARG_NONNULL(1); + +/** Gets the number of samples of an Opus packet. + * @param [in] packet char*: Opus packet + * @param [in] len opus_int32: Length of packet + * @param [in] Fs opus_int32: Sampling rate in Hz. + * This must be a multiple of 400, or + * inaccurate results will be returned. + * @returns Number of samples + * @retval OPUS_BAD_ARG Insufficient data was passed to the function + * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_nb_samples(const unsigned char packet[], opus_int32 len, opus_int32 Fs) OPUS_ARG_NONNULL(1); + +/** Gets the number of samples of an Opus packet. + * @param [in] dec OpusDecoder*: Decoder state + * @param [in] packet char*: Opus packet + * @param [in] len opus_int32: Length of packet + * @returns Number of samples + * @retval OPUS_BAD_ARG Insufficient data was passed to the function + * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decoder_get_nb_samples(const OpusDecoder *dec, const unsigned char packet[], opus_int32 len) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); + +/** Applies soft-clipping to bring a float signal within the [-1,1] range. If + * the signal is already in that range, nothing is done. If there are values + * outside of [-1,1], then the signal is clipped as smoothly as possible to + * both fit in the range and avoid creating excessive distortion in the + * process. + * @param [in,out] pcm float*: Input PCM and modified PCM + * @param [in] frame_size int Number of samples per channel to process + * @param [in] channels int: Number of channels + * @param [in,out] softclip_mem float*: State memory for the soft clipping process (one float per channel, initialized to zero) + */ +OPUS_EXPORT void opus_pcm_soft_clip(float *pcm, int frame_size, int channels, float *softclip_mem); + + +/**@}*/ + +/** @defgroup opus_repacketizer Repacketizer + * @{ + * + * The repacketizer can be used to merge multiple Opus packets into a single + * packet or alternatively to split Opus packets that have previously been + * merged. Splitting valid Opus packets is always guaranteed to succeed, + * whereas merging valid packets only succeeds if all frames have the same + * mode, bandwidth, and frame size, and when the total duration of the merged + * packet is no more than 120 ms. The 120 ms limit comes from the + * specification and limits decoder memory requirements at a point where + * framing overhead becomes negligible. + * + * The repacketizer currently only operates on elementary Opus + * streams. It will not manipualte multistream packets successfully, except in + * the degenerate case where they consist of data from a single stream. + * + * The repacketizing process starts with creating a repacketizer state, either + * by calling opus_repacketizer_create() or by allocating the memory yourself, + * e.g., + * @code + * OpusRepacketizer *rp; + * rp = (OpusRepacketizer*)malloc(opus_repacketizer_get_size()); + * if (rp != NULL) + * opus_repacketizer_init(rp); + * @endcode + * + * Then the application should submit packets with opus_repacketizer_cat(), + * extract new packets with opus_repacketizer_out() or + * opus_repacketizer_out_range(), and then reset the state for the next set of + * input packets via opus_repacketizer_init(). + * + * For example, to split a sequence of packets into individual frames: + * @code + * unsigned char *data; + * int len; + * while (get_next_packet(&data, &len)) + * { + * unsigned char out[1276]; + * opus_int32 out_len; + * int nb_frames; + * int err; + * int i; + * err = opus_repacketizer_cat(rp, data, len); + * if (err != OPUS_OK) + * { + * release_packet(data); + * return err; + * } + * nb_frames = opus_repacketizer_get_nb_frames(rp); + * for (i = 0; i < nb_frames; i++) + * { + * out_len = opus_repacketizer_out_range(rp, i, i+1, out, sizeof(out)); + * if (out_len < 0) + * { + * release_packet(data); + * return (int)out_len; + * } + * output_next_packet(out, out_len); + * } + * opus_repacketizer_init(rp); + * release_packet(data); + * } + * @endcode + * + * Alternatively, to combine a sequence of frames into packets that each + * contain up to TARGET_DURATION_MS milliseconds of data: + * @code + * // The maximum number of packets with duration TARGET_DURATION_MS occurs + * // when the frame size is 2.5 ms, for a total of (TARGET_DURATION_MS*2/5) + * // packets. + * unsigned char *data[(TARGET_DURATION_MS*2/5)+1]; + * opus_int32 len[(TARGET_DURATION_MS*2/5)+1]; + * int nb_packets; + * unsigned char out[1277*(TARGET_DURATION_MS*2/2)]; + * opus_int32 out_len; + * int prev_toc; + * nb_packets = 0; + * while (get_next_packet(data+nb_packets, len+nb_packets)) + * { + * int nb_frames; + * int err; + * nb_frames = opus_packet_get_nb_frames(data[nb_packets], len[nb_packets]); + * if (nb_frames < 1) + * { + * release_packets(data, nb_packets+1); + * return nb_frames; + * } + * nb_frames += opus_repacketizer_get_nb_frames(rp); + * // If adding the next packet would exceed our target, or it has an + * // incompatible TOC sequence, output the packets we already have before + * // submitting it. + * // N.B., The nb_packets > 0 check ensures we've submitted at least one + * // packet since the last call to opus_repacketizer_init(). Otherwise a + * // single packet longer than TARGET_DURATION_MS would cause us to try to + * // output an (invalid) empty packet. It also ensures that prev_toc has + * // been set to a valid value. Additionally, len[nb_packets] > 0 is + * // guaranteed by the call to opus_packet_get_nb_frames() above, so the + * // reference to data[nb_packets][0] should be valid. + * if (nb_packets > 0 && ( + * ((prev_toc & 0xFC) != (data[nb_packets][0] & 0xFC)) || + * opus_packet_get_samples_per_frame(data[nb_packets], 48000)*nb_frames > + * TARGET_DURATION_MS*48)) + * { + * out_len = opus_repacketizer_out(rp, out, sizeof(out)); + * if (out_len < 0) + * { + * release_packets(data, nb_packets+1); + * return (int)out_len; + * } + * output_next_packet(out, out_len); + * opus_repacketizer_init(rp); + * release_packets(data, nb_packets); + * data[0] = data[nb_packets]; + * len[0] = len[nb_packets]; + * nb_packets = 0; + * } + * err = opus_repacketizer_cat(rp, data[nb_packets], len[nb_packets]); + * if (err != OPUS_OK) + * { + * release_packets(data, nb_packets+1); + * return err; + * } + * prev_toc = data[nb_packets][0]; + * nb_packets++; + * } + * // Output the final, partial packet. + * if (nb_packets > 0) + * { + * out_len = opus_repacketizer_out(rp, out, sizeof(out)); + * release_packets(data, nb_packets); + * if (out_len < 0) + * return (int)out_len; + * output_next_packet(out, out_len); + * } + * @endcode + * + * An alternate way of merging packets is to simply call opus_repacketizer_cat() + * unconditionally until it fails. At that point, the merged packet can be + * obtained with opus_repacketizer_out() and the input packet for which + * opus_repacketizer_cat() needs to be re-added to a newly reinitialized + * repacketizer state. + */ + +typedef struct OpusRepacketizer OpusRepacketizer; + +/** Gets the size of an OpusRepacketizer structure. + * @returns The size in bytes. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_repacketizer_get_size(void); + +/** (Re)initializes a previously allocated repacketizer state. + * The state must be at least the size returned by opus_repacketizer_get_size(). + * This can be used for applications which use their own allocator instead of + * malloc(). + * It must also be called to reset the queue of packets waiting to be + * repacketized, which is necessary if the maximum packet duration of 120 ms + * is reached or if you wish to submit packets with a different Opus + * configuration (coding mode, audio bandwidth, frame size, or channel count). + * Failure to do so will prevent a new packet from being added with + * opus_repacketizer_cat(). + * @see opus_repacketizer_create + * @see opus_repacketizer_get_size + * @see opus_repacketizer_cat + * @param rp OpusRepacketizer*: The repacketizer state to + * (re)initialize. + * @returns A pointer to the same repacketizer state that was passed in. + */ +OPUS_EXPORT OpusRepacketizer *opus_repacketizer_init(OpusRepacketizer *rp) OPUS_ARG_NONNULL(1); + +/** Allocates memory and initializes the new repacketizer with + * opus_repacketizer_init(). + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusRepacketizer *opus_repacketizer_create(void); + +/** Frees an OpusRepacketizer allocated by + * opus_repacketizer_create(). + * @param[in] rp OpusRepacketizer*: State to be freed. + */ +OPUS_EXPORT void opus_repacketizer_destroy(OpusRepacketizer *rp); + +/** Add a packet to the current repacketizer state. + * This packet must match the configuration of any packets already submitted + * for repacketization since the last call to opus_repacketizer_init(). + * This means that it must have the same coding mode, audio bandwidth, frame + * size, and channel count. + * This can be checked in advance by examining the top 6 bits of the first + * byte of the packet, and ensuring they match the top 6 bits of the first + * byte of any previously submitted packet. + * The total duration of audio in the repacketizer state also must not exceed + * 120 ms, the maximum duration of a single packet, after adding this packet. + * + * The contents of the current repacketizer state can be extracted into new + * packets using opus_repacketizer_out() or opus_repacketizer_out_range(). + * + * In order to add a packet with a different configuration or to add more + * audio beyond 120 ms, you must clear the repacketizer state by calling + * opus_repacketizer_init(). + * If a packet is too large to add to the current repacketizer state, no part + * of it is added, even if it contains multiple frames, some of which might + * fit. + * If you wish to be able to add parts of such packets, you should first use + * another repacketizer to split the packet into pieces and add them + * individually. + * @see opus_repacketizer_out_range + * @see opus_repacketizer_out + * @see opus_repacketizer_init + * @param rp OpusRepacketizer*: The repacketizer state to which to + * add the packet. + * @param[in] data const unsigned char*: The packet data. + * The application must ensure + * this pointer remains valid + * until the next call to + * opus_repacketizer_init() or + * opus_repacketizer_destroy(). + * @param len opus_int32: The number of bytes in the packet data. + * @returns An error code indicating whether or not the operation succeeded. + * @retval #OPUS_OK The packet's contents have been added to the repacketizer + * state. + * @retval #OPUS_INVALID_PACKET The packet did not have a valid TOC sequence, + * the packet's TOC sequence was not compatible + * with previously submitted packets (because + * the coding mode, audio bandwidth, frame size, + * or channel count did not match), or adding + * this packet would increase the total amount of + * audio stored in the repacketizer state to more + * than 120 ms. + */ +OPUS_EXPORT int opus_repacketizer_cat(OpusRepacketizer *rp, const unsigned char *data, opus_int32 len) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); + + +/** Construct a new packet from data previously submitted to the repacketizer + * state via opus_repacketizer_cat(). + * @param rp OpusRepacketizer*: The repacketizer state from which to + * construct the new packet. + * @param begin int: The index of the first frame in the current + * repacketizer state to include in the output. + * @param end int: One past the index of the last frame in the + * current repacketizer state to include in the + * output. + * @param[out] data const unsigned char*: The buffer in which to + * store the output packet. + * @param maxlen opus_int32: The maximum number of bytes to store in + * the output buffer. In order to guarantee + * success, this should be at least + * 1276 for a single frame, + * or for multiple frames, + * 1277*(end-begin). + * However, 1*(end-begin) plus + * the size of all packet data submitted to + * the repacketizer since the last call to + * opus_repacketizer_init() or + * opus_repacketizer_create() is also + * sufficient, and possibly much smaller. + * @returns The total size of the output packet on success, or an error code + * on failure. + * @retval #OPUS_BAD_ARG [begin,end) was an invalid range of + * frames (begin < 0, begin >= end, or end > + * opus_repacketizer_get_nb_frames()). + * @retval #OPUS_BUFFER_TOO_SMALL \a maxlen was insufficient to contain the + * complete output packet. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_repacketizer_out_range(OpusRepacketizer *rp, int begin, int end, unsigned char *data, opus_int32 maxlen) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + +/** Return the total number of frames contained in packet data submitted to + * the repacketizer state so far via opus_repacketizer_cat() since the last + * call to opus_repacketizer_init() or opus_repacketizer_create(). + * This defines the valid range of packets that can be extracted with + * opus_repacketizer_out_range() or opus_repacketizer_out(). + * @param rp OpusRepacketizer*: The repacketizer state containing the + * frames. + * @returns The total number of frames contained in the packet data submitted + * to the repacketizer state. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_repacketizer_get_nb_frames(OpusRepacketizer *rp) OPUS_ARG_NONNULL(1); + +/** Construct a new packet from data previously submitted to the repacketizer + * state via opus_repacketizer_cat(). + * This is a convenience routine that returns all the data submitted so far + * in a single packet. + * It is equivalent to calling + * @code + * opus_repacketizer_out_range(rp, 0, opus_repacketizer_get_nb_frames(rp), + * data, maxlen) + * @endcode + * @param rp OpusRepacketizer*: The repacketizer state from which to + * construct the new packet. + * @param[out] data const unsigned char*: The buffer in which to + * store the output packet. + * @param maxlen opus_int32: The maximum number of bytes to store in + * the output buffer. In order to guarantee + * success, this should be at least + * 1277*opus_repacketizer_get_nb_frames(rp). + * However, + * 1*opus_repacketizer_get_nb_frames(rp) + * plus the size of all packet data + * submitted to the repacketizer since the + * last call to opus_repacketizer_init() or + * opus_repacketizer_create() is also + * sufficient, and possibly much smaller. + * @returns The total size of the output packet on success, or an error code + * on failure. + * @retval #OPUS_BUFFER_TOO_SMALL \a maxlen was insufficient to contain the + * complete output packet. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *data, opus_int32 maxlen) OPUS_ARG_NONNULL(1); + +/** Pads a given Opus packet to a larger size (possibly changing the TOC sequence). + * @param[in,out] data const unsigned char*: The buffer containing the + * packet to pad. + * @param len opus_int32: The size of the packet. + * This must be at least 1. + * @param new_len opus_int32: The desired size of the packet after padding. + * This must be at least as large as len. + * @returns an error code + * @retval #OPUS_OK \a on success. + * @retval #OPUS_BAD_ARG \a len was less than 1 or new_len was less than len. + * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet. + */ +OPUS_EXPORT int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len); + +/** Remove all padding from a given Opus packet and rewrite the TOC sequence to + * minimize space usage. + * @param[in,out] data const unsigned char*: The buffer containing the + * packet to strip. + * @param len opus_int32: The size of the packet. + * This must be at least 1. + * @returns The new size of the output packet on success, or an error code + * on failure. + * @retval #OPUS_BAD_ARG \a len was less than 1. + * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_packet_unpad(unsigned char *data, opus_int32 len); + +/** Pads a given Opus multi-stream packet to a larger size (possibly changing the TOC sequence). + * @param[in,out] data const unsigned char*: The buffer containing the + * packet to pad. + * @param len opus_int32: The size of the packet. + * This must be at least 1. + * @param new_len opus_int32: The desired size of the packet after padding. + * This must be at least 1. + * @param nb_streams opus_int32: The number of streams (not channels) in the packet. + * This must be at least as large as len. + * @returns an error code + * @retval #OPUS_OK \a on success. + * @retval #OPUS_BAD_ARG \a len was less than 1. + * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet. + */ +OPUS_EXPORT int opus_multistream_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len, int nb_streams); + +/** Remove all padding from a given Opus multi-stream packet and rewrite the TOC sequence to + * minimize space usage. + * @param[in,out] data const unsigned char*: The buffer containing the + * packet to strip. + * @param len opus_int32: The size of the packet. + * This must be at least 1. + * @param nb_streams opus_int32: The number of streams (not channels) in the packet. + * This must be at least 1. + * @returns The new size of the output packet on success, or an error code + * on failure. + * @retval #OPUS_BAD_ARG \a len was less than 1 or new_len was less than len. + * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_packet_unpad(unsigned char *data, opus_int32 len, int nb_streams); + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* OPUS_H */ diff --git a/components/codecs/inc/opus/opus_custom.h b/components/codecs/inc/opus/opus_custom.h new file mode 100644 index 00000000..41f36bf2 --- /dev/null +++ b/components/codecs/inc/opus/opus_custom.h @@ -0,0 +1,342 @@ +/* Copyright (c) 2007-2008 CSIRO + Copyright (c) 2007-2009 Xiph.Org Foundation + Copyright (c) 2008-2012 Gregory Maxwell + Written by Jean-Marc Valin and Gregory Maxwell */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** + @file opus_custom.h + @brief Opus-Custom reference implementation API + */ + +#ifndef OPUS_CUSTOM_H +#define OPUS_CUSTOM_H + +#include "opus_defines.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef CUSTOM_MODES +# define OPUS_CUSTOM_EXPORT OPUS_EXPORT +# define OPUS_CUSTOM_EXPORT_STATIC OPUS_EXPORT +#else +# define OPUS_CUSTOM_EXPORT +# ifdef OPUS_BUILD +# define OPUS_CUSTOM_EXPORT_STATIC static OPUS_INLINE +# else +# define OPUS_CUSTOM_EXPORT_STATIC +# endif +#endif + +/** @defgroup opus_custom Opus Custom + * @{ + * Opus Custom is an optional part of the Opus specification and + * reference implementation which uses a distinct API from the regular + * API and supports frame sizes that are not normally supported.\ Use + * of Opus Custom is discouraged for all but very special applications + * for which a frame size different from 2.5, 5, 10, or 20 ms is needed + * (for either complexity or latency reasons) and where interoperability + * is less important. + * + * In addition to the interoperability limitations the use of Opus custom + * disables a substantial chunk of the codec and generally lowers the + * quality available at a given bitrate. Normally when an application needs + * a different frame size from the codec it should buffer to match the + * sizes but this adds a small amount of delay which may be important + * in some very low latency applications. Some transports (especially + * constant rate RF transports) may also work best with frames of + * particular durations. + * + * Libopus only supports custom modes if they are enabled at compile time. + * + * The Opus Custom API is similar to the regular API but the + * @ref opus_encoder_create and @ref opus_decoder_create calls take + * an additional mode parameter which is a structure produced by + * a call to @ref opus_custom_mode_create. Both the encoder and decoder + * must create a mode using the same sample rate (fs) and frame size + * (frame size) so these parameters must either be signaled out of band + * or fixed in a particular implementation. + * + * Similar to regular Opus the custom modes support on the fly frame size + * switching, but the sizes available depend on the particular frame size in + * use. For some initial frame sizes on a single on the fly size is available. + */ + +/** Contains the state of an encoder. One encoder state is needed + for each stream. It is initialized once at the beginning of the + stream. Do *not* re-initialize the state for every frame. + @brief Encoder state + */ +typedef struct OpusCustomEncoder OpusCustomEncoder; + +/** State of the decoder. One decoder state is needed for each stream. + It is initialized once at the beginning of the stream. Do *not* + re-initialize the state for every frame. + @brief Decoder state + */ +typedef struct OpusCustomDecoder OpusCustomDecoder; + +/** The mode contains all the information necessary to create an + encoder. Both the encoder and decoder need to be initialized + with exactly the same mode, otherwise the output will be + corrupted. + @brief Mode configuration + */ +typedef struct OpusCustomMode OpusCustomMode; + +/** Creates a new mode struct. This will be passed to an encoder or + * decoder. The mode MUST NOT BE DESTROYED until the encoders and + * decoders that use it are destroyed as well. + * @param [in] Fs int: Sampling rate (8000 to 96000 Hz) + * @param [in] frame_size int: Number of samples (per channel) to encode in each + * packet (64 - 1024, prime factorization must contain zero or more 2s, 3s, or 5s and no other primes) + * @param [out] error int*: Returned error code (if NULL, no error will be returned) + * @return A newly created mode + */ +OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomMode *opus_custom_mode_create(opus_int32 Fs, int frame_size, int *error); + +/** Destroys a mode struct. Only call this after all encoders and + * decoders using this mode are destroyed as well. + * @param [in] mode OpusCustomMode*: Mode to be freed. + */ +OPUS_CUSTOM_EXPORT void opus_custom_mode_destroy(OpusCustomMode *mode); + + +#if !defined(OPUS_BUILD) || defined(CELT_ENCODER_C) + +/* Encoder */ +/** Gets the size of an OpusCustomEncoder structure. + * @param [in] mode OpusCustomMode *: Mode configuration + * @param [in] channels int: Number of channels + * @returns size + */ +OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_encoder_get_size( + const OpusCustomMode *mode, + int channels +) OPUS_ARG_NONNULL(1); + +# ifdef CUSTOM_MODES +/** Initializes a previously allocated encoder state + * The memory pointed to by st must be the size returned by opus_custom_encoder_get_size. + * This is intended for applications which use their own allocator instead of malloc. + * @see opus_custom_encoder_create(),opus_custom_encoder_get_size() + * To reset a previously initialized state use the OPUS_RESET_STATE CTL. + * @param [in] st OpusCustomEncoder*: Encoder state + * @param [in] mode OpusCustomMode *: Contains all the information about the characteristics of + * the stream (must be the same characteristics as used for the + * decoder) + * @param [in] channels int: Number of channels + * @return OPUS_OK Success or @ref opus_errorcodes + */ +OPUS_CUSTOM_EXPORT int opus_custom_encoder_init( + OpusCustomEncoder *st, + const OpusCustomMode *mode, + int channels +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); +# endif +#endif + + +/** Creates a new encoder state. Each stream needs its own encoder + * state (can't be shared across simultaneous streams). + * @param [in] mode OpusCustomMode*: Contains all the information about the characteristics of + * the stream (must be the same characteristics as used for the + * decoder) + * @param [in] channels int: Number of channels + * @param [out] error int*: Returns an error code + * @return Newly created encoder state. +*/ +OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomEncoder *opus_custom_encoder_create( + const OpusCustomMode *mode, + int channels, + int *error +) OPUS_ARG_NONNULL(1); + + +/** Destroys a an encoder state. + * @param[in] st OpusCustomEncoder*: State to be freed. + */ +OPUS_CUSTOM_EXPORT void opus_custom_encoder_destroy(OpusCustomEncoder *st); + +/** Encodes a frame of audio. + * @param [in] st OpusCustomEncoder*: Encoder state + * @param [in] pcm float*: PCM audio in float format, with a normal range of +/-1.0. + * Samples with a range beyond +/-1.0 are supported but will + * be clipped by decoders using the integer API and should + * only be used if it is known that the far end supports + * extended dynamic range. There must be exactly + * frame_size samples per channel. + * @param [in] frame_size int: Number of samples per frame of input signal + * @param [out] compressed char *: The compressed data is written here. This may not alias pcm and must be at least maxCompressedBytes long. + * @param [in] maxCompressedBytes int: Maximum number of bytes to use for compressing the frame + * (can change from one frame to another) + * @return Number of bytes written to "compressed". + * If negative, an error has occurred (see error codes). It is IMPORTANT that + * the length returned be somehow transmitted to the decoder. Otherwise, no + * decoding is possible. + */ +OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT int opus_custom_encode_float( + OpusCustomEncoder *st, + const float *pcm, + int frame_size, + unsigned char *compressed, + int maxCompressedBytes +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); + +/** Encodes a frame of audio. + * @param [in] st OpusCustomEncoder*: Encoder state + * @param [in] pcm opus_int16*: PCM audio in signed 16-bit format (native endian). + * There must be exactly frame_size samples per channel. + * @param [in] frame_size int: Number of samples per frame of input signal + * @param [out] compressed char *: The compressed data is written here. This may not alias pcm and must be at least maxCompressedBytes long. + * @param [in] maxCompressedBytes int: Maximum number of bytes to use for compressing the frame + * (can change from one frame to another) + * @return Number of bytes written to "compressed". + * If negative, an error has occurred (see error codes). It is IMPORTANT that + * the length returned be somehow transmitted to the decoder. Otherwise, no + * decoding is possible. + */ +OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT int opus_custom_encode( + OpusCustomEncoder *st, + const opus_int16 *pcm, + int frame_size, + unsigned char *compressed, + int maxCompressedBytes +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); + +/** Perform a CTL function on an Opus custom encoder. + * + * Generally the request and subsequent arguments are generated + * by a convenience macro. + * @see opus_encoderctls + */ +OPUS_CUSTOM_EXPORT int opus_custom_encoder_ctl(OpusCustomEncoder * OPUS_RESTRICT st, int request, ...) OPUS_ARG_NONNULL(1); + + +#if !defined(OPUS_BUILD) || defined(CELT_DECODER_C) +/* Decoder */ + +/** Gets the size of an OpusCustomDecoder structure. + * @param [in] mode OpusCustomMode *: Mode configuration + * @param [in] channels int: Number of channels + * @returns size + */ +OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_decoder_get_size( + const OpusCustomMode *mode, + int channels +) OPUS_ARG_NONNULL(1); + +/** Initializes a previously allocated decoder state + * The memory pointed to by st must be the size returned by opus_custom_decoder_get_size. + * This is intended for applications which use their own allocator instead of malloc. + * @see opus_custom_decoder_create(),opus_custom_decoder_get_size() + * To reset a previously initialized state use the OPUS_RESET_STATE CTL. + * @param [in] st OpusCustomDecoder*: Decoder state + * @param [in] mode OpusCustomMode *: Contains all the information about the characteristics of + * the stream (must be the same characteristics as used for the + * encoder) + * @param [in] channels int: Number of channels + * @return OPUS_OK Success or @ref opus_errorcodes + */ +OPUS_CUSTOM_EXPORT_STATIC int opus_custom_decoder_init( + OpusCustomDecoder *st, + const OpusCustomMode *mode, + int channels +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2); + +#endif + + +/** Creates a new decoder state. Each stream needs its own decoder state (can't + * be shared across simultaneous streams). + * @param [in] mode OpusCustomMode: Contains all the information about the characteristics of the + * stream (must be the same characteristics as used for the encoder) + * @param [in] channels int: Number of channels + * @param [out] error int*: Returns an error code + * @return Newly created decoder state. + */ +OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomDecoder *opus_custom_decoder_create( + const OpusCustomMode *mode, + int channels, + int *error +) OPUS_ARG_NONNULL(1); + +/** Destroys a an decoder state. + * @param[in] st OpusCustomDecoder*: State to be freed. + */ +OPUS_CUSTOM_EXPORT void opus_custom_decoder_destroy(OpusCustomDecoder *st); + +/** Decode an opus custom frame with floating point output + * @param [in] st OpusCustomDecoder*: Decoder state + * @param [in] data char*: Input payload. Use a NULL pointer to indicate packet loss + * @param [in] len int: Number of bytes in payload + * @param [out] pcm float*: Output signal (interleaved if 2 channels). length + * is frame_size*channels*sizeof(float) + * @param [in] frame_size Number of samples per channel of available space in *pcm. + * @returns Number of decoded samples or @ref opus_errorcodes + */ +OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT int opus_custom_decode_float( + OpusCustomDecoder *st, + const unsigned char *data, + int len, + float *pcm, + int frame_size +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + +/** Decode an opus custom frame + * @param [in] st OpusCustomDecoder*: Decoder state + * @param [in] data char*: Input payload. Use a NULL pointer to indicate packet loss + * @param [in] len int: Number of bytes in payload + * @param [out] pcm opus_int16*: Output signal (interleaved if 2 channels). length + * is frame_size*channels*sizeof(opus_int16) + * @param [in] frame_size Number of samples per channel of available space in *pcm. + * @returns Number of decoded samples or @ref opus_errorcodes + */ +OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT int opus_custom_decode( + OpusCustomDecoder *st, + const unsigned char *data, + int len, + opus_int16 *pcm, + int frame_size +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + +/** Perform a CTL function on an Opus custom decoder. + * + * Generally the request and subsequent arguments are generated + * by a convenience macro. + * @see opus_genericctls + */ +OPUS_CUSTOM_EXPORT int opus_custom_decoder_ctl(OpusCustomDecoder * OPUS_RESTRICT st, int request, ...) OPUS_ARG_NONNULL(1); + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* OPUS_CUSTOM_H */ diff --git a/components/codecs/inc/opus/opus_defines.h b/components/codecs/inc/opus/opus_defines.h new file mode 100644 index 00000000..d141418b --- /dev/null +++ b/components/codecs/inc/opus/opus_defines.h @@ -0,0 +1,799 @@ +/* Copyright (c) 2010-2011 Xiph.Org Foundation, Skype Limited + Written by Jean-Marc Valin and Koen Vos */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** + * @file opus_defines.h + * @brief Opus reference implementation constants + */ + +#ifndef OPUS_DEFINES_H +#define OPUS_DEFINES_H + +#include "opus_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup opus_errorcodes Error codes + * @{ + */ +/** No error @hideinitializer*/ +#define OPUS_OK 0 +/** One or more invalid/out of range arguments @hideinitializer*/ +#define OPUS_BAD_ARG -1 +/** Not enough bytes allocated in the buffer @hideinitializer*/ +#define OPUS_BUFFER_TOO_SMALL -2 +/** An internal error was detected @hideinitializer*/ +#define OPUS_INTERNAL_ERROR -3 +/** The compressed data passed is corrupted @hideinitializer*/ +#define OPUS_INVALID_PACKET -4 +/** Invalid/unsupported request number @hideinitializer*/ +#define OPUS_UNIMPLEMENTED -5 +/** An encoder or decoder structure is invalid or already freed @hideinitializer*/ +#define OPUS_INVALID_STATE -6 +/** Memory allocation has failed @hideinitializer*/ +#define OPUS_ALLOC_FAIL -7 +/**@}*/ + +/** @cond OPUS_INTERNAL_DOC */ +/**Export control for opus functions */ + +#ifndef OPUS_EXPORT +# if defined(WIN32) +# if defined(OPUS_BUILD) && defined(DLL_EXPORT) +# define OPUS_EXPORT __declspec(dllexport) +# else +# define OPUS_EXPORT +# endif +# elif defined(__GNUC__) && defined(OPUS_BUILD) +# define OPUS_EXPORT __attribute__ ((visibility ("default"))) +# else +# define OPUS_EXPORT +# endif +#endif + +# if !defined(OPUS_GNUC_PREREQ) +# if defined(__GNUC__)&&defined(__GNUC_MINOR__) +# define OPUS_GNUC_PREREQ(_maj,_min) \ + ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min)) +# else +# define OPUS_GNUC_PREREQ(_maj,_min) 0 +# endif +# endif + +#if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) ) +# if OPUS_GNUC_PREREQ(3,0) +# define OPUS_RESTRICT __restrict__ +# elif (defined(_MSC_VER) && _MSC_VER >= 1400) +# define OPUS_RESTRICT __restrict +# else +# define OPUS_RESTRICT +# endif +#else +# define OPUS_RESTRICT restrict +#endif + +#if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) ) +# if OPUS_GNUC_PREREQ(2,7) +# define OPUS_INLINE __inline__ +# elif (defined(_MSC_VER)) +# define OPUS_INLINE __inline +# else +# define OPUS_INLINE +# endif +#else +# define OPUS_INLINE inline +#endif + +/**Warning attributes for opus functions + * NONNULL is not used in OPUS_BUILD to avoid the compiler optimizing out + * some paranoid null checks. */ +#if defined(__GNUC__) && OPUS_GNUC_PREREQ(3, 4) +# define OPUS_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__)) +#else +# define OPUS_WARN_UNUSED_RESULT +#endif +#if !defined(OPUS_BUILD) && defined(__GNUC__) && OPUS_GNUC_PREREQ(3, 4) +# define OPUS_ARG_NONNULL(_x) __attribute__ ((__nonnull__(_x))) +#else +# define OPUS_ARG_NONNULL(_x) +#endif + +/** These are the actual Encoder CTL ID numbers. + * They should not be used directly by applications. + * In general, SETs should be even and GETs should be odd.*/ +#define OPUS_SET_APPLICATION_REQUEST 4000 +#define OPUS_GET_APPLICATION_REQUEST 4001 +#define OPUS_SET_BITRATE_REQUEST 4002 +#define OPUS_GET_BITRATE_REQUEST 4003 +#define OPUS_SET_MAX_BANDWIDTH_REQUEST 4004 +#define OPUS_GET_MAX_BANDWIDTH_REQUEST 4005 +#define OPUS_SET_VBR_REQUEST 4006 +#define OPUS_GET_VBR_REQUEST 4007 +#define OPUS_SET_BANDWIDTH_REQUEST 4008 +#define OPUS_GET_BANDWIDTH_REQUEST 4009 +#define OPUS_SET_COMPLEXITY_REQUEST 4010 +#define OPUS_GET_COMPLEXITY_REQUEST 4011 +#define OPUS_SET_INBAND_FEC_REQUEST 4012 +#define OPUS_GET_INBAND_FEC_REQUEST 4013 +#define OPUS_SET_PACKET_LOSS_PERC_REQUEST 4014 +#define OPUS_GET_PACKET_LOSS_PERC_REQUEST 4015 +#define OPUS_SET_DTX_REQUEST 4016 +#define OPUS_GET_DTX_REQUEST 4017 +#define OPUS_SET_VBR_CONSTRAINT_REQUEST 4020 +#define OPUS_GET_VBR_CONSTRAINT_REQUEST 4021 +#define OPUS_SET_FORCE_CHANNELS_REQUEST 4022 +#define OPUS_GET_FORCE_CHANNELS_REQUEST 4023 +#define OPUS_SET_SIGNAL_REQUEST 4024 +#define OPUS_GET_SIGNAL_REQUEST 4025 +#define OPUS_GET_LOOKAHEAD_REQUEST 4027 +/* #define OPUS_RESET_STATE 4028 */ +#define OPUS_GET_SAMPLE_RATE_REQUEST 4029 +#define OPUS_GET_FINAL_RANGE_REQUEST 4031 +#define OPUS_GET_PITCH_REQUEST 4033 +#define OPUS_SET_GAIN_REQUEST 4034 +#define OPUS_GET_GAIN_REQUEST 4045 /* Should have been 4035 */ +#define OPUS_SET_LSB_DEPTH_REQUEST 4036 +#define OPUS_GET_LSB_DEPTH_REQUEST 4037 +#define OPUS_GET_LAST_PACKET_DURATION_REQUEST 4039 +#define OPUS_SET_EXPERT_FRAME_DURATION_REQUEST 4040 +#define OPUS_GET_EXPERT_FRAME_DURATION_REQUEST 4041 +#define OPUS_SET_PREDICTION_DISABLED_REQUEST 4042 +#define OPUS_GET_PREDICTION_DISABLED_REQUEST 4043 +/* Don't use 4045, it's already taken by OPUS_GET_GAIN_REQUEST */ +#define OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST 4046 +#define OPUS_GET_PHASE_INVERSION_DISABLED_REQUEST 4047 +#define OPUS_GET_IN_DTX_REQUEST 4049 + +/** Defines for the presence of extended APIs. */ +#define OPUS_HAVE_OPUS_PROJECTION_H + +/* Macros to trigger compilation errors when the wrong types are provided to a CTL */ +#define __opus_check_int(x) (((void)((x) == (opus_int32)0)), (opus_int32)(x)) +#define __opus_check_int_ptr(ptr) ((ptr) + ((ptr) - (opus_int32*)(ptr))) +#define __opus_check_uint_ptr(ptr) ((ptr) + ((ptr) - (opus_uint32*)(ptr))) +#define __opus_check_val16_ptr(ptr) ((ptr) + ((ptr) - (opus_val16*)(ptr))) +/** @endcond */ + +/** @defgroup opus_ctlvalues Pre-defined values for CTL interface + * @see opus_genericctls, opus_encoderctls + * @{ + */ +/* Values for the various encoder CTLs */ +#define OPUS_AUTO -1000 /**opus_int32: Allowed values: 0-10, inclusive. + * + * @hideinitializer */ +#define OPUS_SET_COMPLEXITY(x) OPUS_SET_COMPLEXITY_REQUEST, __opus_check_int(x) +/** Gets the encoder's complexity configuration. + * @see OPUS_SET_COMPLEXITY + * @param[out] x opus_int32 *: Returns a value in the range 0-10, + * inclusive. + * @hideinitializer */ +#define OPUS_GET_COMPLEXITY(x) OPUS_GET_COMPLEXITY_REQUEST, __opus_check_int_ptr(x) + +/** Configures the bitrate in the encoder. + * Rates from 500 to 512000 bits per second are meaningful, as well as the + * special values #OPUS_AUTO and #OPUS_BITRATE_MAX. + * The value #OPUS_BITRATE_MAX can be used to cause the codec to use as much + * rate as it can, which is useful for controlling the rate by adjusting the + * output buffer size. + * @see OPUS_GET_BITRATE + * @param[in] x opus_int32: Bitrate in bits per second. The default + * is determined based on the number of + * channels and the input sampling rate. + * @hideinitializer */ +#define OPUS_SET_BITRATE(x) OPUS_SET_BITRATE_REQUEST, __opus_check_int(x) +/** Gets the encoder's bitrate configuration. + * @see OPUS_SET_BITRATE + * @param[out] x opus_int32 *: Returns the bitrate in bits per second. + * The default is determined based on the + * number of channels and the input + * sampling rate. + * @hideinitializer */ +#define OPUS_GET_BITRATE(x) OPUS_GET_BITRATE_REQUEST, __opus_check_int_ptr(x) + +/** Enables or disables variable bitrate (VBR) in the encoder. + * The configured bitrate may not be met exactly because frames must + * be an integer number of bytes in length. + * @see OPUS_GET_VBR + * @see OPUS_SET_VBR_CONSTRAINT + * @param[in] x opus_int32: Allowed values: + *
+ *
0
Hard CBR. For LPC/hybrid modes at very low bit-rate, this can + * cause noticeable quality degradation.
+ *
1
VBR (default). The exact type of VBR is controlled by + * #OPUS_SET_VBR_CONSTRAINT.
+ *
+ * @hideinitializer */ +#define OPUS_SET_VBR(x) OPUS_SET_VBR_REQUEST, __opus_check_int(x) +/** Determine if variable bitrate (VBR) is enabled in the encoder. + * @see OPUS_SET_VBR + * @see OPUS_GET_VBR_CONSTRAINT + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
0
Hard CBR.
+ *
1
VBR (default). The exact type of VBR may be retrieved via + * #OPUS_GET_VBR_CONSTRAINT.
+ *
+ * @hideinitializer */ +#define OPUS_GET_VBR(x) OPUS_GET_VBR_REQUEST, __opus_check_int_ptr(x) + +/** Enables or disables constrained VBR in the encoder. + * This setting is ignored when the encoder is in CBR mode. + * @warning Only the MDCT mode of Opus currently heeds the constraint. + * Speech mode ignores it completely, hybrid mode may fail to obey it + * if the LPC layer uses more bitrate than the constraint would have + * permitted. + * @see OPUS_GET_VBR_CONSTRAINT + * @see OPUS_SET_VBR + * @param[in] x opus_int32: Allowed values: + *
+ *
0
Unconstrained VBR.
+ *
1
Constrained VBR (default). This creates a maximum of one + * frame of buffering delay assuming a transport with a + * serialization speed of the nominal bitrate.
+ *
+ * @hideinitializer */ +#define OPUS_SET_VBR_CONSTRAINT(x) OPUS_SET_VBR_CONSTRAINT_REQUEST, __opus_check_int(x) +/** Determine if constrained VBR is enabled in the encoder. + * @see OPUS_SET_VBR_CONSTRAINT + * @see OPUS_GET_VBR + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
0
Unconstrained VBR.
+ *
1
Constrained VBR (default).
+ *
+ * @hideinitializer */ +#define OPUS_GET_VBR_CONSTRAINT(x) OPUS_GET_VBR_CONSTRAINT_REQUEST, __opus_check_int_ptr(x) + +/** Configures mono/stereo forcing in the encoder. + * This can force the encoder to produce packets encoded as either mono or + * stereo, regardless of the format of the input audio. This is useful when + * the caller knows that the input signal is currently a mono source embedded + * in a stereo stream. + * @see OPUS_GET_FORCE_CHANNELS + * @param[in] x opus_int32: Allowed values: + *
+ *
#OPUS_AUTO
Not forced (default)
+ *
1
Forced mono
+ *
2
Forced stereo
+ *
+ * @hideinitializer */ +#define OPUS_SET_FORCE_CHANNELS(x) OPUS_SET_FORCE_CHANNELS_REQUEST, __opus_check_int(x) +/** Gets the encoder's forced channel configuration. + * @see OPUS_SET_FORCE_CHANNELS + * @param[out] x opus_int32 *: + *
+ *
#OPUS_AUTO
Not forced (default)
+ *
1
Forced mono
+ *
2
Forced stereo
+ *
+ * @hideinitializer */ +#define OPUS_GET_FORCE_CHANNELS(x) OPUS_GET_FORCE_CHANNELS_REQUEST, __opus_check_int_ptr(x) + +/** Configures the maximum bandpass that the encoder will select automatically. + * Applications should normally use this instead of #OPUS_SET_BANDWIDTH + * (leaving that set to the default, #OPUS_AUTO). This allows the + * application to set an upper bound based on the type of input it is + * providing, but still gives the encoder the freedom to reduce the bandpass + * when the bitrate becomes too low, for better overall quality. + * @see OPUS_GET_MAX_BANDWIDTH + * @param[in] x opus_int32: Allowed values: + *
+ *
OPUS_BANDWIDTH_NARROWBAND
4 kHz passband
+ *
OPUS_BANDWIDTH_MEDIUMBAND
6 kHz passband
+ *
OPUS_BANDWIDTH_WIDEBAND
8 kHz passband
+ *
OPUS_BANDWIDTH_SUPERWIDEBAND
12 kHz passband
+ *
OPUS_BANDWIDTH_FULLBAND
20 kHz passband (default)
+ *
+ * @hideinitializer */ +#define OPUS_SET_MAX_BANDWIDTH(x) OPUS_SET_MAX_BANDWIDTH_REQUEST, __opus_check_int(x) + +/** Gets the encoder's configured maximum allowed bandpass. + * @see OPUS_SET_MAX_BANDWIDTH + * @param[out] x opus_int32 *: Allowed values: + *
+ *
#OPUS_BANDWIDTH_NARROWBAND
4 kHz passband
+ *
#OPUS_BANDWIDTH_MEDIUMBAND
6 kHz passband
+ *
#OPUS_BANDWIDTH_WIDEBAND
8 kHz passband
+ *
#OPUS_BANDWIDTH_SUPERWIDEBAND
12 kHz passband
+ *
#OPUS_BANDWIDTH_FULLBAND
20 kHz passband (default)
+ *
+ * @hideinitializer */ +#define OPUS_GET_MAX_BANDWIDTH(x) OPUS_GET_MAX_BANDWIDTH_REQUEST, __opus_check_int_ptr(x) + +/** Sets the encoder's bandpass to a specific value. + * This prevents the encoder from automatically selecting the bandpass based + * on the available bitrate. If an application knows the bandpass of the input + * audio it is providing, it should normally use #OPUS_SET_MAX_BANDWIDTH + * instead, which still gives the encoder the freedom to reduce the bandpass + * when the bitrate becomes too low, for better overall quality. + * @see OPUS_GET_BANDWIDTH + * @param[in] x opus_int32: Allowed values: + *
+ *
#OPUS_AUTO
(default)
+ *
#OPUS_BANDWIDTH_NARROWBAND
4 kHz passband
+ *
#OPUS_BANDWIDTH_MEDIUMBAND
6 kHz passband
+ *
#OPUS_BANDWIDTH_WIDEBAND
8 kHz passband
+ *
#OPUS_BANDWIDTH_SUPERWIDEBAND
12 kHz passband
+ *
#OPUS_BANDWIDTH_FULLBAND
20 kHz passband
+ *
+ * @hideinitializer */ +#define OPUS_SET_BANDWIDTH(x) OPUS_SET_BANDWIDTH_REQUEST, __opus_check_int(x) + +/** Configures the type of signal being encoded. + * This is a hint which helps the encoder's mode selection. + * @see OPUS_GET_SIGNAL + * @param[in] x opus_int32: Allowed values: + *
+ *
#OPUS_AUTO
(default)
+ *
#OPUS_SIGNAL_VOICE
Bias thresholds towards choosing LPC or Hybrid modes.
+ *
#OPUS_SIGNAL_MUSIC
Bias thresholds towards choosing MDCT modes.
+ *
+ * @hideinitializer */ +#define OPUS_SET_SIGNAL(x) OPUS_SET_SIGNAL_REQUEST, __opus_check_int(x) +/** Gets the encoder's configured signal type. + * @see OPUS_SET_SIGNAL + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
#OPUS_AUTO
(default)
+ *
#OPUS_SIGNAL_VOICE
Bias thresholds towards choosing LPC or Hybrid modes.
+ *
#OPUS_SIGNAL_MUSIC
Bias thresholds towards choosing MDCT modes.
+ *
+ * @hideinitializer */ +#define OPUS_GET_SIGNAL(x) OPUS_GET_SIGNAL_REQUEST, __opus_check_int_ptr(x) + + +/** Configures the encoder's intended application. + * The initial value is a mandatory argument to the encoder_create function. + * @see OPUS_GET_APPLICATION + * @param[in] x opus_int32: Returns one of the following values: + *
+ *
#OPUS_APPLICATION_VOIP
+ *
Process signal for improved speech intelligibility.
+ *
#OPUS_APPLICATION_AUDIO
+ *
Favor faithfulness to the original input.
+ *
#OPUS_APPLICATION_RESTRICTED_LOWDELAY
+ *
Configure the minimum possible coding delay by disabling certain modes + * of operation.
+ *
+ * @hideinitializer */ +#define OPUS_SET_APPLICATION(x) OPUS_SET_APPLICATION_REQUEST, __opus_check_int(x) +/** Gets the encoder's configured application. + * @see OPUS_SET_APPLICATION + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
#OPUS_APPLICATION_VOIP
+ *
Process signal for improved speech intelligibility.
+ *
#OPUS_APPLICATION_AUDIO
+ *
Favor faithfulness to the original input.
+ *
#OPUS_APPLICATION_RESTRICTED_LOWDELAY
+ *
Configure the minimum possible coding delay by disabling certain modes + * of operation.
+ *
+ * @hideinitializer */ +#define OPUS_GET_APPLICATION(x) OPUS_GET_APPLICATION_REQUEST, __opus_check_int_ptr(x) + +/** Gets the total samples of delay added by the entire codec. + * This can be queried by the encoder and then the provided number of samples can be + * skipped on from the start of the decoder's output to provide time aligned input + * and output. From the perspective of a decoding application the real data begins this many + * samples late. + * + * The decoder contribution to this delay is identical for all decoders, but the + * encoder portion of the delay may vary from implementation to implementation, + * version to version, or even depend on the encoder's initial configuration. + * Applications needing delay compensation should call this CTL rather than + * hard-coding a value. + * @param[out] x opus_int32 *: Number of lookahead samples + * @hideinitializer */ +#define OPUS_GET_LOOKAHEAD(x) OPUS_GET_LOOKAHEAD_REQUEST, __opus_check_int_ptr(x) + +/** Configures the encoder's use of inband forward error correction (FEC). + * @note This is only applicable to the LPC layer + * @see OPUS_GET_INBAND_FEC + * @param[in] x opus_int32: Allowed values: + *
+ *
0
Disable inband FEC (default).
+ *
1
Enable inband FEC.
+ *
+ * @hideinitializer */ +#define OPUS_SET_INBAND_FEC(x) OPUS_SET_INBAND_FEC_REQUEST, __opus_check_int(x) +/** Gets encoder's configured use of inband forward error correction. + * @see OPUS_SET_INBAND_FEC + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
0
Inband FEC disabled (default).
+ *
1
Inband FEC enabled.
+ *
+ * @hideinitializer */ +#define OPUS_GET_INBAND_FEC(x) OPUS_GET_INBAND_FEC_REQUEST, __opus_check_int_ptr(x) + +/** Configures the encoder's expected packet loss percentage. + * Higher values trigger progressively more loss resistant behavior in the encoder + * at the expense of quality at a given bitrate in the absence of packet loss, but + * greater quality under loss. + * @see OPUS_GET_PACKET_LOSS_PERC + * @param[in] x opus_int32: Loss percentage in the range 0-100, inclusive (default: 0). + * @hideinitializer */ +#define OPUS_SET_PACKET_LOSS_PERC(x) OPUS_SET_PACKET_LOSS_PERC_REQUEST, __opus_check_int(x) +/** Gets the encoder's configured packet loss percentage. + * @see OPUS_SET_PACKET_LOSS_PERC + * @param[out] x opus_int32 *: Returns the configured loss percentage + * in the range 0-100, inclusive (default: 0). + * @hideinitializer */ +#define OPUS_GET_PACKET_LOSS_PERC(x) OPUS_GET_PACKET_LOSS_PERC_REQUEST, __opus_check_int_ptr(x) + +/** Configures the encoder's use of discontinuous transmission (DTX). + * @note This is only applicable to the LPC layer + * @see OPUS_GET_DTX + * @param[in] x opus_int32: Allowed values: + *
+ *
0
Disable DTX (default).
+ *
1
Enabled DTX.
+ *
+ * @hideinitializer */ +#define OPUS_SET_DTX(x) OPUS_SET_DTX_REQUEST, __opus_check_int(x) +/** Gets encoder's configured use of discontinuous transmission. + * @see OPUS_SET_DTX + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
0
DTX disabled (default).
+ *
1
DTX enabled.
+ *
+ * @hideinitializer */ +#define OPUS_GET_DTX(x) OPUS_GET_DTX_REQUEST, __opus_check_int_ptr(x) +/** Configures the depth of signal being encoded. + * + * This is a hint which helps the encoder identify silence and near-silence. + * It represents the number of significant bits of linear intensity below + * which the signal contains ignorable quantization or other noise. + * + * For example, OPUS_SET_LSB_DEPTH(14) would be an appropriate setting + * for G.711 u-law input. OPUS_SET_LSB_DEPTH(16) would be appropriate + * for 16-bit linear pcm input with opus_encode_float(). + * + * When using opus_encode() instead of opus_encode_float(), or when libopus + * is compiled for fixed-point, the encoder uses the minimum of the value + * set here and the value 16. + * + * @see OPUS_GET_LSB_DEPTH + * @param[in] x opus_int32: Input precision in bits, between 8 and 24 + * (default: 24). + * @hideinitializer */ +#define OPUS_SET_LSB_DEPTH(x) OPUS_SET_LSB_DEPTH_REQUEST, __opus_check_int(x) +/** Gets the encoder's configured signal depth. + * @see OPUS_SET_LSB_DEPTH + * @param[out] x opus_int32 *: Input precision in bits, between 8 and + * 24 (default: 24). + * @hideinitializer */ +#define OPUS_GET_LSB_DEPTH(x) OPUS_GET_LSB_DEPTH_REQUEST, __opus_check_int_ptr(x) + +/** Configures the encoder's use of variable duration frames. + * When variable duration is enabled, the encoder is free to use a shorter frame + * size than the one requested in the opus_encode*() call. + * It is then the user's responsibility + * to verify how much audio was encoded by checking the ToC byte of the encoded + * packet. The part of the audio that was not encoded needs to be resent to the + * encoder for the next call. Do not use this option unless you really + * know what you are doing. + * @see OPUS_GET_EXPERT_FRAME_DURATION + * @param[in] x opus_int32: Allowed values: + *
+ *
OPUS_FRAMESIZE_ARG
Select frame size from the argument (default).
+ *
OPUS_FRAMESIZE_2_5_MS
Use 2.5 ms frames.
+ *
OPUS_FRAMESIZE_5_MS
Use 5 ms frames.
+ *
OPUS_FRAMESIZE_10_MS
Use 10 ms frames.
+ *
OPUS_FRAMESIZE_20_MS
Use 20 ms frames.
+ *
OPUS_FRAMESIZE_40_MS
Use 40 ms frames.
+ *
OPUS_FRAMESIZE_60_MS
Use 60 ms frames.
+ *
OPUS_FRAMESIZE_80_MS
Use 80 ms frames.
+ *
OPUS_FRAMESIZE_100_MS
Use 100 ms frames.
+ *
OPUS_FRAMESIZE_120_MS
Use 120 ms frames.
+ *
+ * @hideinitializer */ +#define OPUS_SET_EXPERT_FRAME_DURATION(x) OPUS_SET_EXPERT_FRAME_DURATION_REQUEST, __opus_check_int(x) +/** Gets the encoder's configured use of variable duration frames. + * @see OPUS_SET_EXPERT_FRAME_DURATION + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
OPUS_FRAMESIZE_ARG
Select frame size from the argument (default).
+ *
OPUS_FRAMESIZE_2_5_MS
Use 2.5 ms frames.
+ *
OPUS_FRAMESIZE_5_MS
Use 5 ms frames.
+ *
OPUS_FRAMESIZE_10_MS
Use 10 ms frames.
+ *
OPUS_FRAMESIZE_20_MS
Use 20 ms frames.
+ *
OPUS_FRAMESIZE_40_MS
Use 40 ms frames.
+ *
OPUS_FRAMESIZE_60_MS
Use 60 ms frames.
+ *
OPUS_FRAMESIZE_80_MS
Use 80 ms frames.
+ *
OPUS_FRAMESIZE_100_MS
Use 100 ms frames.
+ *
OPUS_FRAMESIZE_120_MS
Use 120 ms frames.
+ *
+ * @hideinitializer */ +#define OPUS_GET_EXPERT_FRAME_DURATION(x) OPUS_GET_EXPERT_FRAME_DURATION_REQUEST, __opus_check_int_ptr(x) + +/** If set to 1, disables almost all use of prediction, making frames almost + * completely independent. This reduces quality. + * @see OPUS_GET_PREDICTION_DISABLED + * @param[in] x opus_int32: Allowed values: + *
+ *
0
Enable prediction (default).
+ *
1
Disable prediction.
+ *
+ * @hideinitializer */ +#define OPUS_SET_PREDICTION_DISABLED(x) OPUS_SET_PREDICTION_DISABLED_REQUEST, __opus_check_int(x) +/** Gets the encoder's configured prediction status. + * @see OPUS_SET_PREDICTION_DISABLED + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
0
Prediction enabled (default).
+ *
1
Prediction disabled.
+ *
+ * @hideinitializer */ +#define OPUS_GET_PREDICTION_DISABLED(x) OPUS_GET_PREDICTION_DISABLED_REQUEST, __opus_check_int_ptr(x) + +/**@}*/ + +/** @defgroup opus_genericctls Generic CTLs + * + * These macros are used with the \c opus_decoder_ctl and + * \c opus_encoder_ctl calls to generate a particular + * request. + * + * When called on an \c OpusDecoder they apply to that + * particular decoder instance. When called on an + * \c OpusEncoder they apply to the corresponding setting + * on that encoder instance, if present. + * + * Some usage examples: + * + * @code + * int ret; + * opus_int32 pitch; + * ret = opus_decoder_ctl(dec_ctx, OPUS_GET_PITCH(&pitch)); + * if (ret == OPUS_OK) return ret; + * + * opus_encoder_ctl(enc_ctx, OPUS_RESET_STATE); + * opus_decoder_ctl(dec_ctx, OPUS_RESET_STATE); + * + * opus_int32 enc_bw, dec_bw; + * opus_encoder_ctl(enc_ctx, OPUS_GET_BANDWIDTH(&enc_bw)); + * opus_decoder_ctl(dec_ctx, OPUS_GET_BANDWIDTH(&dec_bw)); + * if (enc_bw != dec_bw) { + * printf("packet bandwidth mismatch!\n"); + * } + * @endcode + * + * @see opus_encoder, opus_decoder_ctl, opus_encoder_ctl, opus_decoderctls, opus_encoderctls + * @{ + */ + +/** Resets the codec state to be equivalent to a freshly initialized state. + * This should be called when switching streams in order to prevent + * the back to back decoding from giving different results from + * one at a time decoding. + * @hideinitializer */ +#define OPUS_RESET_STATE 4028 + +/** Gets the final state of the codec's entropy coder. + * This is used for testing purposes, + * The encoder and decoder state should be identical after coding a payload + * (assuming no data corruption or software bugs) + * + * @param[out] x opus_uint32 *: Entropy coder state + * + * @hideinitializer */ +#define OPUS_GET_FINAL_RANGE(x) OPUS_GET_FINAL_RANGE_REQUEST, __opus_check_uint_ptr(x) + +/** Gets the encoder's configured bandpass or the decoder's last bandpass. + * @see OPUS_SET_BANDWIDTH + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
#OPUS_AUTO
(default)
+ *
#OPUS_BANDWIDTH_NARROWBAND
4 kHz passband
+ *
#OPUS_BANDWIDTH_MEDIUMBAND
6 kHz passband
+ *
#OPUS_BANDWIDTH_WIDEBAND
8 kHz passband
+ *
#OPUS_BANDWIDTH_SUPERWIDEBAND
12 kHz passband
+ *
#OPUS_BANDWIDTH_FULLBAND
20 kHz passband
+ *
+ * @hideinitializer */ +#define OPUS_GET_BANDWIDTH(x) OPUS_GET_BANDWIDTH_REQUEST, __opus_check_int_ptr(x) + +/** Gets the sampling rate the encoder or decoder was initialized with. + * This simply returns the Fs value passed to opus_encoder_init() + * or opus_decoder_init(). + * @param[out] x opus_int32 *: Sampling rate of encoder or decoder. + * @hideinitializer + */ +#define OPUS_GET_SAMPLE_RATE(x) OPUS_GET_SAMPLE_RATE_REQUEST, __opus_check_int_ptr(x) + +/** If set to 1, disables the use of phase inversion for intensity stereo, + * improving the quality of mono downmixes, but slightly reducing normal + * stereo quality. Disabling phase inversion in the decoder does not comply + * with RFC 6716, although it does not cause any interoperability issue and + * is expected to become part of the Opus standard once RFC 6716 is updated + * by draft-ietf-codec-opus-update. + * @see OPUS_GET_PHASE_INVERSION_DISABLED + * @param[in] x opus_int32: Allowed values: + *
+ *
0
Enable phase inversion (default).
+ *
1
Disable phase inversion.
+ *
+ * @hideinitializer */ +#define OPUS_SET_PHASE_INVERSION_DISABLED(x) OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST, __opus_check_int(x) +/** Gets the encoder's configured phase inversion status. + * @see OPUS_SET_PHASE_INVERSION_DISABLED + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
0
Stereo phase inversion enabled (default).
+ *
1
Stereo phase inversion disabled.
+ *
+ * @hideinitializer */ +#define OPUS_GET_PHASE_INVERSION_DISABLED(x) OPUS_GET_PHASE_INVERSION_DISABLED_REQUEST, __opus_check_int_ptr(x) +/** Gets the DTX state of the encoder. + * Returns whether the last encoded frame was either a comfort noise update + * during DTX or not encoded because of DTX. + * @param[out] x opus_int32 *: Returns one of the following values: + *
+ *
0
The encoder is not in DTX.
+ *
1
The encoder is in DTX.
+ *
+ * @hideinitializer */ +#define OPUS_GET_IN_DTX(x) OPUS_GET_IN_DTX_REQUEST, __opus_check_int_ptr(x) + +/**@}*/ + +/** @defgroup opus_decoderctls Decoder related CTLs + * @see opus_genericctls, opus_encoderctls, opus_decoder + * @{ + */ + +/** Configures decoder gain adjustment. + * Scales the decoded output by a factor specified in Q8 dB units. + * This has a maximum range of -32768 to 32767 inclusive, and returns + * OPUS_BAD_ARG otherwise. The default is zero indicating no adjustment. + * This setting survives decoder reset. + * + * gain = pow(10, x/(20.0*256)) + * + * @param[in] x opus_int32: Amount to scale PCM signal by in Q8 dB units. + * @hideinitializer */ +#define OPUS_SET_GAIN(x) OPUS_SET_GAIN_REQUEST, __opus_check_int(x) +/** Gets the decoder's configured gain adjustment. @see OPUS_SET_GAIN + * + * @param[out] x opus_int32 *: Amount to scale PCM signal by in Q8 dB units. + * @hideinitializer */ +#define OPUS_GET_GAIN(x) OPUS_GET_GAIN_REQUEST, __opus_check_int_ptr(x) + +/** Gets the duration (in samples) of the last packet successfully decoded or concealed. + * @param[out] x opus_int32 *: Number of samples (at current sampling rate). + * @hideinitializer */ +#define OPUS_GET_LAST_PACKET_DURATION(x) OPUS_GET_LAST_PACKET_DURATION_REQUEST, __opus_check_int_ptr(x) + +/** Gets the pitch of the last decoded frame, if available. + * This can be used for any post-processing algorithm requiring the use of pitch, + * e.g. time stretching/shortening. If the last frame was not voiced, or if the + * pitch was not coded in the frame, then zero is returned. + * + * This CTL is only implemented for decoder instances. + * + * @param[out] x opus_int32 *: pitch period at 48 kHz (or 0 if not available) + * + * @hideinitializer */ +#define OPUS_GET_PITCH(x) OPUS_GET_PITCH_REQUEST, __opus_check_int_ptr(x) + +/**@}*/ + +/** @defgroup opus_libinfo Opus library information functions + * @{ + */ + +/** Converts an opus error code into a human readable string. + * + * @param[in] error int: Error number + * @returns Error string + */ +OPUS_EXPORT const char *opus_strerror(int error); + +/** Gets the libopus version string. + * + * Applications may look for the substring "-fixed" in the version string to + * determine whether they have a fixed-point or floating-point build at + * runtime. + * + * @returns Version string + */ +OPUS_EXPORT const char *opus_get_version_string(void); +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* OPUS_DEFINES_H */ diff --git a/components/codecs/inc/opus/opus_multistream.h b/components/codecs/inc/opus/opus_multistream.h new file mode 100644 index 00000000..babcee69 --- /dev/null +++ b/components/codecs/inc/opus/opus_multistream.h @@ -0,0 +1,660 @@ +/* Copyright (c) 2011 Xiph.Org Foundation + Written by Jean-Marc Valin */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** + * @file opus_multistream.h + * @brief Opus reference implementation multistream API + */ + +#ifndef OPUS_MULTISTREAM_H +#define OPUS_MULTISTREAM_H + +#include "opus.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @cond OPUS_INTERNAL_DOC */ + +/** Macros to trigger compilation errors when the wrong types are provided to a + * CTL. */ +/**@{*/ +#define __opus_check_encstate_ptr(ptr) ((ptr) + ((ptr) - (OpusEncoder**)(ptr))) +#define __opus_check_decstate_ptr(ptr) ((ptr) + ((ptr) - (OpusDecoder**)(ptr))) +/**@}*/ + +/** These are the actual encoder and decoder CTL ID numbers. + * They should not be used directly by applications. + * In general, SETs should be even and GETs should be odd.*/ +/**@{*/ +#define OPUS_MULTISTREAM_GET_ENCODER_STATE_REQUEST 5120 +#define OPUS_MULTISTREAM_GET_DECODER_STATE_REQUEST 5122 +/**@}*/ + +/** @endcond */ + +/** @defgroup opus_multistream_ctls Multistream specific encoder and decoder CTLs + * + * These are convenience macros that are specific to the + * opus_multistream_encoder_ctl() and opus_multistream_decoder_ctl() + * interface. + * The CTLs from @ref opus_genericctls, @ref opus_encoderctls, and + * @ref opus_decoderctls may be applied to a multistream encoder or decoder as + * well. + * In addition, you may retrieve the encoder or decoder state for an specific + * stream via #OPUS_MULTISTREAM_GET_ENCODER_STATE or + * #OPUS_MULTISTREAM_GET_DECODER_STATE and apply CTLs to it individually. + */ +/**@{*/ + +/** Gets the encoder state for an individual stream of a multistream encoder. + * @param[in] x opus_int32: The index of the stream whose encoder you + * wish to retrieve. + * This must be non-negative and less than + * the streams parameter used + * to initialize the encoder. + * @param[out] y OpusEncoder**: Returns a pointer to the given + * encoder state. + * @retval OPUS_BAD_ARG The index of the requested stream was out of range. + * @hideinitializer + */ +#define OPUS_MULTISTREAM_GET_ENCODER_STATE(x,y) OPUS_MULTISTREAM_GET_ENCODER_STATE_REQUEST, __opus_check_int(x), __opus_check_encstate_ptr(y) + +/** Gets the decoder state for an individual stream of a multistream decoder. + * @param[in] x opus_int32: The index of the stream whose decoder you + * wish to retrieve. + * This must be non-negative and less than + * the streams parameter used + * to initialize the decoder. + * @param[out] y OpusDecoder**: Returns a pointer to the given + * decoder state. + * @retval OPUS_BAD_ARG The index of the requested stream was out of range. + * @hideinitializer + */ +#define OPUS_MULTISTREAM_GET_DECODER_STATE(x,y) OPUS_MULTISTREAM_GET_DECODER_STATE_REQUEST, __opus_check_int(x), __opus_check_decstate_ptr(y) + +/**@}*/ + +/** @defgroup opus_multistream Opus Multistream API + * @{ + * + * The multistream API allows individual Opus streams to be combined into a + * single packet, enabling support for up to 255 channels. Unlike an + * elementary Opus stream, the encoder and decoder must negotiate the channel + * configuration before the decoder can successfully interpret the data in the + * packets produced by the encoder. Some basic information, such as packet + * duration, can be computed without any special negotiation. + * + * The format for multistream Opus packets is defined in + * RFC 7845 + * and is based on the self-delimited Opus framing described in Appendix B of + * RFC 6716. + * Normal Opus packets are just a degenerate case of multistream Opus packets, + * and can be encoded or decoded with the multistream API by setting + * streams to 1 when initializing the encoder or + * decoder. + * + * Multistream Opus streams can contain up to 255 elementary Opus streams. + * These may be either "uncoupled" or "coupled", indicating that the decoder + * is configured to decode them to either 1 or 2 channels, respectively. + * The streams are ordered so that all coupled streams appear at the + * beginning. + * + * A mapping table defines which decoded channel i + * should be used for each input/output (I/O) channel j. This table is + * typically provided as an unsigned char array. + * Let i = mapping[j] be the index for I/O channel j. + * If i < 2*coupled_streams, then I/O channel j is + * encoded as the left channel of stream (i/2) if i + * is even, or as the right channel of stream (i/2) if + * i is odd. Otherwise, I/O channel j is encoded as + * mono in stream (i - coupled_streams), unless it has the special + * value 255, in which case it is omitted from the encoding entirely (the + * decoder will reproduce it as silence). Each value i must either + * be the special value 255 or be less than streams + coupled_streams. + * + * The output channels specified by the encoder + * should use the + * Vorbis + * channel ordering. A decoder may wish to apply an additional permutation + * to the mapping the encoder used to achieve a different output channel + * order (e.g. for outputing in WAV order). + * + * Each multistream packet contains an Opus packet for each stream, and all of + * the Opus packets in a single multistream packet must have the same + * duration. Therefore the duration of a multistream packet can be extracted + * from the TOC sequence of the first stream, which is located at the + * beginning of the packet, just like an elementary Opus stream: + * + * @code + * int nb_samples; + * int nb_frames; + * nb_frames = opus_packet_get_nb_frames(data, len); + * if (nb_frames < 1) + * return nb_frames; + * nb_samples = opus_packet_get_samples_per_frame(data, 48000) * nb_frames; + * @endcode + * + * The general encoding and decoding process proceeds exactly the same as in + * the normal @ref opus_encoder and @ref opus_decoder APIs. + * See their documentation for an overview of how to use the corresponding + * multistream functions. + */ + +/** Opus multistream encoder state. + * This contains the complete state of a multistream Opus encoder. + * It is position independent and can be freely copied. + * @see opus_multistream_encoder_create + * @see opus_multistream_encoder_init + */ +typedef struct OpusMSEncoder OpusMSEncoder; + +/** Opus multistream decoder state. + * This contains the complete state of a multistream Opus decoder. + * It is position independent and can be freely copied. + * @see opus_multistream_decoder_create + * @see opus_multistream_decoder_init + */ +typedef struct OpusMSDecoder OpusMSDecoder; + +/**\name Multistream encoder functions */ +/**@{*/ + +/** Gets the size of an OpusMSEncoder structure. + * @param streams int: The total number of streams to encode from the + * input. + * This must be no more than 255. + * @param coupled_streams int: Number of coupled (2 channel) streams + * to encode. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * encoded channels (streams + + * coupled_streams) must be no + * more than 255. + * @returns The size in bytes on success, or a negative error code + * (see @ref opus_errorcodes) on error. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_encoder_get_size( + int streams, + int coupled_streams +); + +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_surround_encoder_get_size( + int channels, + int mapping_family +); + + +/** Allocates and initializes a multistream encoder state. + * Call opus_multistream_encoder_destroy() to release + * this object when finished. + * @param Fs opus_int32: Sampling rate of the input signal (in Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param channels int: Number of channels in the input signal. + * This must be at most 255. + * It may be greater than the number of + * coded channels (streams + + * coupled_streams). + * @param streams int: The total number of streams to encode from the + * input. + * This must be no more than the number of channels. + * @param coupled_streams int: Number of coupled (2 channel) streams + * to encode. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * encoded channels (streams + + * coupled_streams) must be no + * more than the number of input channels. + * @param[in] mapping const unsigned char[channels]: Mapping from + * encoded channels to input channels, as described in + * @ref opus_multistream. As an extra constraint, the + * multistream encoder does not allow encoding coupled + * streams for which one channel is unused since this + * is never a good idea. + * @param application int: The target encoder application. + * This must be one of the following: + *
+ *
#OPUS_APPLICATION_VOIP
+ *
Process signal for improved speech intelligibility.
+ *
#OPUS_APPLICATION_AUDIO
+ *
Favor faithfulness to the original input.
+ *
#OPUS_APPLICATION_RESTRICTED_LOWDELAY
+ *
Configure the minimum possible coding delay by disabling certain modes + * of operation.
+ *
+ * @param[out] error int *: Returns #OPUS_OK on success, or an error + * code (see @ref opus_errorcodes) on + * failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusMSEncoder *opus_multistream_encoder_create( + opus_int32 Fs, + int channels, + int streams, + int coupled_streams, + const unsigned char *mapping, + int application, + int *error +) OPUS_ARG_NONNULL(5); + +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusMSEncoder *opus_multistream_surround_encoder_create( + opus_int32 Fs, + int channels, + int mapping_family, + int *streams, + int *coupled_streams, + unsigned char *mapping, + int application, + int *error +) OPUS_ARG_NONNULL(4) OPUS_ARG_NONNULL(5) OPUS_ARG_NONNULL(6); + +/** Initialize a previously allocated multistream encoder state. + * The memory pointed to by \a st must be at least the size returned by + * opus_multistream_encoder_get_size(). + * This is intended for applications which use their own allocator instead of + * malloc. + * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL. + * @see opus_multistream_encoder_create + * @see opus_multistream_encoder_get_size + * @param st OpusMSEncoder*: Multistream encoder state to initialize. + * @param Fs opus_int32: Sampling rate of the input signal (in Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param channels int: Number of channels in the input signal. + * This must be at most 255. + * It may be greater than the number of + * coded channels (streams + + * coupled_streams). + * @param streams int: The total number of streams to encode from the + * input. + * This must be no more than the number of channels. + * @param coupled_streams int: Number of coupled (2 channel) streams + * to encode. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * encoded channels (streams + + * coupled_streams) must be no + * more than the number of input channels. + * @param[in] mapping const unsigned char[channels]: Mapping from + * encoded channels to input channels, as described in + * @ref opus_multistream. As an extra constraint, the + * multistream encoder does not allow encoding coupled + * streams for which one channel is unused since this + * is never a good idea. + * @param application int: The target encoder application. + * This must be one of the following: + *
+ *
#OPUS_APPLICATION_VOIP
+ *
Process signal for improved speech intelligibility.
+ *
#OPUS_APPLICATION_AUDIO
+ *
Favor faithfulness to the original input.
+ *
#OPUS_APPLICATION_RESTRICTED_LOWDELAY
+ *
Configure the minimum possible coding delay by disabling certain modes + * of operation.
+ *
+ * @returns #OPUS_OK on success, or an error code (see @ref opus_errorcodes) + * on failure. + */ +OPUS_EXPORT int opus_multistream_encoder_init( + OpusMSEncoder *st, + opus_int32 Fs, + int channels, + int streams, + int coupled_streams, + const unsigned char *mapping, + int application +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(6); + +OPUS_EXPORT int opus_multistream_surround_encoder_init( + OpusMSEncoder *st, + opus_int32 Fs, + int channels, + int mapping_family, + int *streams, + int *coupled_streams, + unsigned char *mapping, + int application +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(5) OPUS_ARG_NONNULL(6) OPUS_ARG_NONNULL(7); + +/** Encodes a multistream Opus frame. + * @param st OpusMSEncoder*: Multistream encoder state. + * @param[in] pcm const opus_int16*: The input signal as interleaved + * samples. + * This must contain + * frame_size*channels + * samples. + * @param frame_size int: Number of samples per channel in the input + * signal. + * This must be an Opus frame size for the + * encoder's sampling rate. + * For example, at 48 kHz the permitted values + * are 120, 240, 480, 960, 1920, and 2880. + * Passing in a duration of less than 10 ms + * (480 samples at 48 kHz) will prevent the + * encoder from using the LPC or hybrid modes. + * @param[out] data unsigned char*: Output payload. + * This must contain storage for at + * least \a max_data_bytes. + * @param [in] max_data_bytes opus_int32: Size of the allocated + * memory for the output + * payload. This may be + * used to impose an upper limit on + * the instant bitrate, but should + * not be used as the only bitrate + * control. Use #OPUS_SET_BITRATE to + * control the bitrate. + * @returns The length of the encoded packet (in bytes) on success or a + * negative error code (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_multistream_encode( + OpusMSEncoder *st, + const opus_int16 *pcm, + int frame_size, + unsigned char *data, + opus_int32 max_data_bytes +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); + +/** Encodes a multistream Opus frame from floating point input. + * @param st OpusMSEncoder*: Multistream encoder state. + * @param[in] pcm const float*: The input signal as interleaved + * samples with a normal range of + * +/-1.0. + * Samples with a range beyond +/-1.0 + * are supported but will be clipped by + * decoders using the integer API and + * should only be used if it is known + * that the far end supports extended + * dynamic range. + * This must contain + * frame_size*channels + * samples. + * @param frame_size int: Number of samples per channel in the input + * signal. + * This must be an Opus frame size for the + * encoder's sampling rate. + * For example, at 48 kHz the permitted values + * are 120, 240, 480, 960, 1920, and 2880. + * Passing in a duration of less than 10 ms + * (480 samples at 48 kHz) will prevent the + * encoder from using the LPC or hybrid modes. + * @param[out] data unsigned char*: Output payload. + * This must contain storage for at + * least \a max_data_bytes. + * @param [in] max_data_bytes opus_int32: Size of the allocated + * memory for the output + * payload. This may be + * used to impose an upper limit on + * the instant bitrate, but should + * not be used as the only bitrate + * control. Use #OPUS_SET_BITRATE to + * control the bitrate. + * @returns The length of the encoded packet (in bytes) on success or a + * negative error code (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_multistream_encode_float( + OpusMSEncoder *st, + const float *pcm, + int frame_size, + unsigned char *data, + opus_int32 max_data_bytes +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); + +/** Frees an OpusMSEncoder allocated by + * opus_multistream_encoder_create(). + * @param st OpusMSEncoder*: Multistream encoder state to be freed. + */ +OPUS_EXPORT void opus_multistream_encoder_destroy(OpusMSEncoder *st); + +/** Perform a CTL function on a multistream Opus encoder. + * + * Generally the request and subsequent arguments are generated by a + * convenience macro. + * @param st OpusMSEncoder*: Multistream encoder state. + * @param request This and all remaining parameters should be replaced by one + * of the convenience macros in @ref opus_genericctls, + * @ref opus_encoderctls, or @ref opus_multistream_ctls. + * @see opus_genericctls + * @see opus_encoderctls + * @see opus_multistream_ctls + */ +OPUS_EXPORT int opus_multistream_encoder_ctl(OpusMSEncoder *st, int request, ...) OPUS_ARG_NONNULL(1); + +/**@}*/ + +/**\name Multistream decoder functions */ +/**@{*/ + +/** Gets the size of an OpusMSDecoder structure. + * @param streams int: The total number of streams coded in the + * input. + * This must be no more than 255. + * @param coupled_streams int: Number streams to decode as coupled + * (2 channel) streams. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * coded channels (streams + + * coupled_streams) must be no + * more than 255. + * @returns The size in bytes on success, or a negative error code + * (see @ref opus_errorcodes) on error. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_decoder_get_size( + int streams, + int coupled_streams +); + +/** Allocates and initializes a multistream decoder state. + * Call opus_multistream_decoder_destroy() to release + * this object when finished. + * @param Fs opus_int32: Sampling rate to decode at (in Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param channels int: Number of channels to output. + * This must be at most 255. + * It may be different from the number of coded + * channels (streams + + * coupled_streams). + * @param streams int: The total number of streams coded in the + * input. + * This must be no more than 255. + * @param coupled_streams int: Number of streams to decode as coupled + * (2 channel) streams. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * coded channels (streams + + * coupled_streams) must be no + * more than 255. + * @param[in] mapping const unsigned char[channels]: Mapping from + * coded channels to output channels, as described in + * @ref opus_multistream. + * @param[out] error int *: Returns #OPUS_OK on success, or an error + * code (see @ref opus_errorcodes) on + * failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusMSDecoder *opus_multistream_decoder_create( + opus_int32 Fs, + int channels, + int streams, + int coupled_streams, + const unsigned char *mapping, + int *error +) OPUS_ARG_NONNULL(5); + +/** Intialize a previously allocated decoder state object. + * The memory pointed to by \a st must be at least the size returned by + * opus_multistream_encoder_get_size(). + * This is intended for applications which use their own allocator instead of + * malloc. + * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL. + * @see opus_multistream_decoder_create + * @see opus_multistream_deocder_get_size + * @param st OpusMSEncoder*: Multistream encoder state to initialize. + * @param Fs opus_int32: Sampling rate to decode at (in Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param channels int: Number of channels to output. + * This must be at most 255. + * It may be different from the number of coded + * channels (streams + + * coupled_streams). + * @param streams int: The total number of streams coded in the + * input. + * This must be no more than 255. + * @param coupled_streams int: Number of streams to decode as coupled + * (2 channel) streams. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * coded channels (streams + + * coupled_streams) must be no + * more than 255. + * @param[in] mapping const unsigned char[channels]: Mapping from + * coded channels to output channels, as described in + * @ref opus_multistream. + * @returns #OPUS_OK on success, or an error code (see @ref opus_errorcodes) + * on failure. + */ +OPUS_EXPORT int opus_multistream_decoder_init( + OpusMSDecoder *st, + opus_int32 Fs, + int channels, + int streams, + int coupled_streams, + const unsigned char *mapping +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(6); + +/** Decode a multistream Opus packet. + * @param st OpusMSDecoder*: Multistream decoder state. + * @param[in] data const unsigned char*: Input payload. + * Use a NULL + * pointer to indicate packet + * loss. + * @param len opus_int32: Number of bytes in payload. + * @param[out] pcm opus_int16*: Output signal, with interleaved + * samples. + * This must contain room for + * frame_size*channels + * samples. + * @param frame_size int: The number of samples per channel of + * available space in \a pcm. + * If this is less than the maximum packet duration + * (120 ms; 5760 for 48kHz), this function will not be capable + * of decoding some packets. In the case of PLC (data==NULL) + * or FEC (decode_fec=1), then frame_size needs to be exactly + * the duration of audio that is missing, otherwise the + * decoder will not be in the optimal state to decode the + * next incoming packet. For the PLC and FEC cases, frame_size + * must be a multiple of 2.5 ms. + * @param decode_fec int: Flag (0 or 1) to request that any in-band + * forward error correction data be decoded. + * If no such data is available, the frame is + * decoded as if it were lost. + * @returns Number of samples decoded on success or a negative error code + * (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_multistream_decode( + OpusMSDecoder *st, + const unsigned char *data, + opus_int32 len, + opus_int16 *pcm, + int frame_size, + int decode_fec +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + +/** Decode a multistream Opus packet with floating point output. + * @param st OpusMSDecoder*: Multistream decoder state. + * @param[in] data const unsigned char*: Input payload. + * Use a NULL + * pointer to indicate packet + * loss. + * @param len opus_int32: Number of bytes in payload. + * @param[out] pcm opus_int16*: Output signal, with interleaved + * samples. + * This must contain room for + * frame_size*channels + * samples. + * @param frame_size int: The number of samples per channel of + * available space in \a pcm. + * If this is less than the maximum packet duration + * (120 ms; 5760 for 48kHz), this function will not be capable + * of decoding some packets. In the case of PLC (data==NULL) + * or FEC (decode_fec=1), then frame_size needs to be exactly + * the duration of audio that is missing, otherwise the + * decoder will not be in the optimal state to decode the + * next incoming packet. For the PLC and FEC cases, frame_size + * must be a multiple of 2.5 ms. + * @param decode_fec int: Flag (0 or 1) to request that any in-band + * forward error correction data be decoded. + * If no such data is available, the frame is + * decoded as if it were lost. + * @returns Number of samples decoded on success or a negative error code + * (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_multistream_decode_float( + OpusMSDecoder *st, + const unsigned char *data, + opus_int32 len, + float *pcm, + int frame_size, + int decode_fec +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + +/** Perform a CTL function on a multistream Opus decoder. + * + * Generally the request and subsequent arguments are generated by a + * convenience macro. + * @param st OpusMSDecoder*: Multistream decoder state. + * @param request This and all remaining parameters should be replaced by one + * of the convenience macros in @ref opus_genericctls, + * @ref opus_decoderctls, or @ref opus_multistream_ctls. + * @see opus_genericctls + * @see opus_decoderctls + * @see opus_multistream_ctls + */ +OPUS_EXPORT int opus_multistream_decoder_ctl(OpusMSDecoder *st, int request, ...) OPUS_ARG_NONNULL(1); + +/** Frees an OpusMSDecoder allocated by + * opus_multistream_decoder_create(). + * @param st OpusMSDecoder: Multistream decoder state to be freed. + */ +OPUS_EXPORT void opus_multistream_decoder_destroy(OpusMSDecoder *st); + +/**@}*/ + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* OPUS_MULTISTREAM_H */ diff --git a/components/codecs/inc/opus/opus_projection.h b/components/codecs/inc/opus/opus_projection.h new file mode 100644 index 00000000..9dabf4e8 --- /dev/null +++ b/components/codecs/inc/opus/opus_projection.h @@ -0,0 +1,568 @@ +/* Copyright (c) 2017 Google Inc. + Written by Andrew Allen */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** + * @file opus_projection.h + * @brief Opus projection reference API + */ + +#ifndef OPUS_PROJECTION_H +#define OPUS_PROJECTION_H + +#include "opus_multistream.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @cond OPUS_INTERNAL_DOC */ + +/** These are the actual encoder and decoder CTL ID numbers. + * They should not be used directly by applications.c + * In general, SETs should be even and GETs should be odd.*/ +/**@{*/ +#define OPUS_PROJECTION_GET_DEMIXING_MATRIX_GAIN_REQUEST 6001 +#define OPUS_PROJECTION_GET_DEMIXING_MATRIX_SIZE_REQUEST 6003 +#define OPUS_PROJECTION_GET_DEMIXING_MATRIX_REQUEST 6005 +/**@}*/ + + +/** @endcond */ + +/** @defgroup opus_projection_ctls Projection specific encoder and decoder CTLs + * + * These are convenience macros that are specific to the + * opus_projection_encoder_ctl() and opus_projection_decoder_ctl() + * interface. + * The CTLs from @ref opus_genericctls, @ref opus_encoderctls, + * @ref opus_decoderctls, and @ref opus_multistream_ctls may be applied to a + * projection encoder or decoder as well. + */ +/**@{*/ + +/** Gets the gain (in dB. S7.8-format) of the demixing matrix from the encoder. + * @param[out] x opus_int32 *: Returns the gain (in dB. S7.8-format) + * of the demixing matrix. + * @hideinitializer + */ +#define OPUS_PROJECTION_GET_DEMIXING_MATRIX_GAIN(x) OPUS_PROJECTION_GET_DEMIXING_MATRIX_GAIN_REQUEST, __opus_check_int_ptr(x) + + +/** Gets the size in bytes of the demixing matrix from the encoder. + * @param[out] x opus_int32 *: Returns the size in bytes of the + * demixing matrix. + * @hideinitializer + */ +#define OPUS_PROJECTION_GET_DEMIXING_MATRIX_SIZE(x) OPUS_PROJECTION_GET_DEMIXING_MATRIX_SIZE_REQUEST, __opus_check_int_ptr(x) + + +/** Copies the demixing matrix to the supplied pointer location. + * @param[out] x unsigned char *: Returns the demixing matrix to the + * supplied pointer location. + * @param y opus_int32: The size in bytes of the reserved memory at the + * pointer location. + * @hideinitializer + */ +#define OPUS_PROJECTION_GET_DEMIXING_MATRIX(x,y) OPUS_PROJECTION_GET_DEMIXING_MATRIX_REQUEST, x, __opus_check_int(y) + + +/**@}*/ + +/** Opus projection encoder state. + * This contains the complete state of a projection Opus encoder. + * It is position independent and can be freely copied. + * @see opus_projection_ambisonics_encoder_create + */ +typedef struct OpusProjectionEncoder OpusProjectionEncoder; + + +/** Opus projection decoder state. + * This contains the complete state of a projection Opus decoder. + * It is position independent and can be freely copied. + * @see opus_projection_decoder_create + * @see opus_projection_decoder_init + */ +typedef struct OpusProjectionDecoder OpusProjectionDecoder; + + +/**\name Projection encoder functions */ +/**@{*/ + +/** Gets the size of an OpusProjectionEncoder structure. + * @param channels int: The total number of input channels to encode. + * This must be no more than 255. + * @param mapping_family int: The mapping family to use for selecting + * the appropriate projection. + * @returns The size in bytes on success, or a negative error code + * (see @ref opus_errorcodes) on error. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_projection_ambisonics_encoder_get_size( + int channels, + int mapping_family +); + + +/** Allocates and initializes a projection encoder state. + * Call opus_projection_encoder_destroy() to release + * this object when finished. + * @param Fs opus_int32: Sampling rate of the input signal (in Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param channels int: Number of channels in the input signal. + * This must be at most 255. + * It may be greater than the number of + * coded channels (streams + + * coupled_streams). + * @param mapping_family int: The mapping family to use for selecting + * the appropriate projection. + * @param[out] streams int *: The total number of streams that will + * be encoded from the input. + * @param[out] coupled_streams int *: Number of coupled (2 channel) + * streams that will be encoded from the input. + * @param application int: The target encoder application. + * This must be one of the following: + *
+ *
#OPUS_APPLICATION_VOIP
+ *
Process signal for improved speech intelligibility.
+ *
#OPUS_APPLICATION_AUDIO
+ *
Favor faithfulness to the original input.
+ *
#OPUS_APPLICATION_RESTRICTED_LOWDELAY
+ *
Configure the minimum possible coding delay by disabling certain modes + * of operation.
+ *
+ * @param[out] error int *: Returns #OPUS_OK on success, or an error + * code (see @ref opus_errorcodes) on + * failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusProjectionEncoder *opus_projection_ambisonics_encoder_create( + opus_int32 Fs, + int channels, + int mapping_family, + int *streams, + int *coupled_streams, + int application, + int *error +) OPUS_ARG_NONNULL(4) OPUS_ARG_NONNULL(5); + + +/** Initialize a previously allocated projection encoder state. + * The memory pointed to by \a st must be at least the size returned by + * opus_projection_ambisonics_encoder_get_size(). + * This is intended for applications which use their own allocator instead of + * malloc. + * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL. + * @see opus_projection_ambisonics_encoder_create + * @see opus_projection_ambisonics_encoder_get_size + * @param st OpusProjectionEncoder*: Projection encoder state to initialize. + * @param Fs opus_int32: Sampling rate of the input signal (in Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param channels int: Number of channels in the input signal. + * This must be at most 255. + * It may be greater than the number of + * coded channels (streams + + * coupled_streams). + * @param streams int: The total number of streams to encode from the + * input. + * This must be no more than the number of channels. + * @param coupled_streams int: Number of coupled (2 channel) streams + * to encode. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * encoded channels (streams + + * coupled_streams) must be no + * more than the number of input channels. + * @param application int: The target encoder application. + * This must be one of the following: + *
+ *
#OPUS_APPLICATION_VOIP
+ *
Process signal for improved speech intelligibility.
+ *
#OPUS_APPLICATION_AUDIO
+ *
Favor faithfulness to the original input.
+ *
#OPUS_APPLICATION_RESTRICTED_LOWDELAY
+ *
Configure the minimum possible coding delay by disabling certain modes + * of operation.
+ *
+ * @returns #OPUS_OK on success, or an error code (see @ref opus_errorcodes) + * on failure. + */ +OPUS_EXPORT int opus_projection_ambisonics_encoder_init( + OpusProjectionEncoder *st, + opus_int32 Fs, + int channels, + int mapping_family, + int *streams, + int *coupled_streams, + int application +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(5) OPUS_ARG_NONNULL(6); + + +/** Encodes a projection Opus frame. + * @param st OpusProjectionEncoder*: Projection encoder state. + * @param[in] pcm const opus_int16*: The input signal as interleaved + * samples. + * This must contain + * frame_size*channels + * samples. + * @param frame_size int: Number of samples per channel in the input + * signal. + * This must be an Opus frame size for the + * encoder's sampling rate. + * For example, at 48 kHz the permitted values + * are 120, 240, 480, 960, 1920, and 2880. + * Passing in a duration of less than 10 ms + * (480 samples at 48 kHz) will prevent the + * encoder from using the LPC or hybrid modes. + * @param[out] data unsigned char*: Output payload. + * This must contain storage for at + * least \a max_data_bytes. + * @param [in] max_data_bytes opus_int32: Size of the allocated + * memory for the output + * payload. This may be + * used to impose an upper limit on + * the instant bitrate, but should + * not be used as the only bitrate + * control. Use #OPUS_SET_BITRATE to + * control the bitrate. + * @returns The length of the encoded packet (in bytes) on success or a + * negative error code (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_projection_encode( + OpusProjectionEncoder *st, + const opus_int16 *pcm, + int frame_size, + unsigned char *data, + opus_int32 max_data_bytes +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); + + +/** Encodes a projection Opus frame from floating point input. + * @param st OpusProjectionEncoder*: Projection encoder state. + * @param[in] pcm const float*: The input signal as interleaved + * samples with a normal range of + * +/-1.0. + * Samples with a range beyond +/-1.0 + * are supported but will be clipped by + * decoders using the integer API and + * should only be used if it is known + * that the far end supports extended + * dynamic range. + * This must contain + * frame_size*channels + * samples. + * @param frame_size int: Number of samples per channel in the input + * signal. + * This must be an Opus frame size for the + * encoder's sampling rate. + * For example, at 48 kHz the permitted values + * are 120, 240, 480, 960, 1920, and 2880. + * Passing in a duration of less than 10 ms + * (480 samples at 48 kHz) will prevent the + * encoder from using the LPC or hybrid modes. + * @param[out] data unsigned char*: Output payload. + * This must contain storage for at + * least \a max_data_bytes. + * @param [in] max_data_bytes opus_int32: Size of the allocated + * memory for the output + * payload. This may be + * used to impose an upper limit on + * the instant bitrate, but should + * not be used as the only bitrate + * control. Use #OPUS_SET_BITRATE to + * control the bitrate. + * @returns The length of the encoded packet (in bytes) on success or a + * negative error code (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_projection_encode_float( + OpusProjectionEncoder *st, + const float *pcm, + int frame_size, + unsigned char *data, + opus_int32 max_data_bytes +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4); + + +/** Frees an OpusProjectionEncoder allocated by + * opus_projection_ambisonics_encoder_create(). + * @param st OpusProjectionEncoder*: Projection encoder state to be freed. + */ +OPUS_EXPORT void opus_projection_encoder_destroy(OpusProjectionEncoder *st); + + +/** Perform a CTL function on a projection Opus encoder. + * + * Generally the request and subsequent arguments are generated by a + * convenience macro. + * @param st OpusProjectionEncoder*: Projection encoder state. + * @param request This and all remaining parameters should be replaced by one + * of the convenience macros in @ref opus_genericctls, + * @ref opus_encoderctls, @ref opus_multistream_ctls, or + * @ref opus_projection_ctls + * @see opus_genericctls + * @see opus_encoderctls + * @see opus_multistream_ctls + * @see opus_projection_ctls + */ +OPUS_EXPORT int opus_projection_encoder_ctl(OpusProjectionEncoder *st, int request, ...) OPUS_ARG_NONNULL(1); + + +/**@}*/ + +/**\name Projection decoder functions */ +/**@{*/ + +/** Gets the size of an OpusProjectionDecoder structure. + * @param channels int: The total number of output channels. + * This must be no more than 255. + * @param streams int: The total number of streams coded in the + * input. + * This must be no more than 255. + * @param coupled_streams int: Number streams to decode as coupled + * (2 channel) streams. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * coded channels (streams + + * coupled_streams) must be no + * more than 255. + * @returns The size in bytes on success, or a negative error code + * (see @ref opus_errorcodes) on error. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_projection_decoder_get_size( + int channels, + int streams, + int coupled_streams +); + + +/** Allocates and initializes a projection decoder state. + * Call opus_projection_decoder_destroy() to release + * this object when finished. + * @param Fs opus_int32: Sampling rate to decode at (in Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param channels int: Number of channels to output. + * This must be at most 255. + * It may be different from the number of coded + * channels (streams + + * coupled_streams). + * @param streams int: The total number of streams coded in the + * input. + * This must be no more than 255. + * @param coupled_streams int: Number of streams to decode as coupled + * (2 channel) streams. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * coded channels (streams + + * coupled_streams) must be no + * more than 255. + * @param[in] demixing_matrix const unsigned char[demixing_matrix_size]: Demixing matrix + * that mapping from coded channels to output channels, + * as described in @ref opus_projection and + * @ref opus_projection_ctls. + * @param demixing_matrix_size opus_int32: The size in bytes of the + * demixing matrix, as + * described in @ref + * opus_projection_ctls. + * @param[out] error int *: Returns #OPUS_OK on success, or an error + * code (see @ref opus_errorcodes) on + * failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusProjectionDecoder *opus_projection_decoder_create( + opus_int32 Fs, + int channels, + int streams, + int coupled_streams, + unsigned char *demixing_matrix, + opus_int32 demixing_matrix_size, + int *error +) OPUS_ARG_NONNULL(5); + + +/** Intialize a previously allocated projection decoder state object. + * The memory pointed to by \a st must be at least the size returned by + * opus_projection_decoder_get_size(). + * This is intended for applications which use their own allocator instead of + * malloc. + * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL. + * @see opus_projection_decoder_create + * @see opus_projection_deocder_get_size + * @param st OpusProjectionDecoder*: Projection encoder state to initialize. + * @param Fs opus_int32: Sampling rate to decode at (in Hz). + * This must be one of 8000, 12000, 16000, + * 24000, or 48000. + * @param channels int: Number of channels to output. + * This must be at most 255. + * It may be different from the number of coded + * channels (streams + + * coupled_streams). + * @param streams int: The total number of streams coded in the + * input. + * This must be no more than 255. + * @param coupled_streams int: Number of streams to decode as coupled + * (2 channel) streams. + * This must be no larger than the total + * number of streams. + * Additionally, The total number of + * coded channels (streams + + * coupled_streams) must be no + * more than 255. + * @param[in] demixing_matrix const unsigned char[demixing_matrix_size]: Demixing matrix + * that mapping from coded channels to output channels, + * as described in @ref opus_projection and + * @ref opus_projection_ctls. + * @param demixing_matrix_size opus_int32: The size in bytes of the + * demixing matrix, as + * described in @ref + * opus_projection_ctls. + * @returns #OPUS_OK on success, or an error code (see @ref opus_errorcodes) + * on failure. + */ +OPUS_EXPORT int opus_projection_decoder_init( + OpusProjectionDecoder *st, + opus_int32 Fs, + int channels, + int streams, + int coupled_streams, + unsigned char *demixing_matrix, + opus_int32 demixing_matrix_size +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(6); + + +/** Decode a projection Opus packet. + * @param st OpusProjectionDecoder*: Projection decoder state. + * @param[in] data const unsigned char*: Input payload. + * Use a NULL + * pointer to indicate packet + * loss. + * @param len opus_int32: Number of bytes in payload. + * @param[out] pcm opus_int16*: Output signal, with interleaved + * samples. + * This must contain room for + * frame_size*channels + * samples. + * @param frame_size int: The number of samples per channel of + * available space in \a pcm. + * If this is less than the maximum packet duration + * (120 ms; 5760 for 48kHz), this function will not be capable + * of decoding some packets. In the case of PLC (data==NULL) + * or FEC (decode_fec=1), then frame_size needs to be exactly + * the duration of audio that is missing, otherwise the + * decoder will not be in the optimal state to decode the + * next incoming packet. For the PLC and FEC cases, frame_size + * must be a multiple of 2.5 ms. + * @param decode_fec int: Flag (0 or 1) to request that any in-band + * forward error correction data be decoded. + * If no such data is available, the frame is + * decoded as if it were lost. + * @returns Number of samples decoded on success or a negative error code + * (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_projection_decode( + OpusProjectionDecoder *st, + const unsigned char *data, + opus_int32 len, + opus_int16 *pcm, + int frame_size, + int decode_fec +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + + +/** Decode a projection Opus packet with floating point output. + * @param st OpusProjectionDecoder*: Projection decoder state. + * @param[in] data const unsigned char*: Input payload. + * Use a NULL + * pointer to indicate packet + * loss. + * @param len opus_int32: Number of bytes in payload. + * @param[out] pcm opus_int16*: Output signal, with interleaved + * samples. + * This must contain room for + * frame_size*channels + * samples. + * @param frame_size int: The number of samples per channel of + * available space in \a pcm. + * If this is less than the maximum packet duration + * (120 ms; 5760 for 48kHz), this function will not be capable + * of decoding some packets. In the case of PLC (data==NULL) + * or FEC (decode_fec=1), then frame_size needs to be exactly + * the duration of audio that is missing, otherwise the + * decoder will not be in the optimal state to decode the + * next incoming packet. For the PLC and FEC cases, frame_size + * must be a multiple of 2.5 ms. + * @param decode_fec int: Flag (0 or 1) to request that any in-band + * forward error correction data be decoded. + * If no such data is available, the frame is + * decoded as if it were lost. + * @returns Number of samples decoded on success or a negative error code + * (see @ref opus_errorcodes) on failure. + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_projection_decode_float( + OpusProjectionDecoder *st, + const unsigned char *data, + opus_int32 len, + float *pcm, + int frame_size, + int decode_fec +) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4); + + +/** Perform a CTL function on a projection Opus decoder. + * + * Generally the request and subsequent arguments are generated by a + * convenience macro. + * @param st OpusProjectionDecoder*: Projection decoder state. + * @param request This and all remaining parameters should be replaced by one + * of the convenience macros in @ref opus_genericctls, + * @ref opus_decoderctls, @ref opus_multistream_ctls, or + * @ref opus_projection_ctls. + * @see opus_genericctls + * @see opus_decoderctls + * @see opus_multistream_ctls + * @see opus_projection_ctls + */ +OPUS_EXPORT int opus_projection_decoder_ctl(OpusProjectionDecoder *st, int request, ...) OPUS_ARG_NONNULL(1); + + +/** Frees an OpusProjectionDecoder allocated by + * opus_projection_decoder_create(). + * @param st OpusProjectionDecoder: Projection decoder state to be freed. + */ +OPUS_EXPORT void opus_projection_decoder_destroy(OpusProjectionDecoder *st); + + +/**@}*/ + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif /* OPUS_PROJECTION_H */ diff --git a/components/codecs/inc/opus/opus_types.h b/components/codecs/inc/opus/opus_types.h new file mode 100644 index 00000000..7cf67558 --- /dev/null +++ b/components/codecs/inc/opus/opus_types.h @@ -0,0 +1,166 @@ +/* (C) COPYRIGHT 1994-2002 Xiph.Org Foundation */ +/* Modified by Jean-Marc Valin */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* opus_types.h based on ogg_types.h from libogg */ + +/** + @file opus_types.h + @brief Opus reference implementation types +*/ +#ifndef OPUS_TYPES_H +#define OPUS_TYPES_H + +#define opus_int int /* used for counters etc; at least 16 bits */ +#define opus_int64 long long +#define opus_int8 signed char + +#define opus_uint unsigned int /* used for counters etc; at least 16 bits */ +#define opus_uint64 unsigned long long +#define opus_uint8 unsigned char + +/* Use the real stdint.h if it's there (taken from Paul Hsieh's pstdint.h) */ +#if (defined(__STDC__) && __STDC__ && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_)) || defined (HAVE_STDINT_H)) +#include +# undef opus_int64 +# undef opus_int8 +# undef opus_uint64 +# undef opus_uint8 + typedef int8_t opus_int8; + typedef uint8_t opus_uint8; + typedef int16_t opus_int16; + typedef uint16_t opus_uint16; + typedef int32_t opus_int32; + typedef uint32_t opus_uint32; + typedef int64_t opus_int64; + typedef uint64_t opus_uint64; +#elif defined(_WIN32) + +# if defined(__CYGWIN__) +# include <_G_config.h> + typedef _G_int32_t opus_int32; + typedef _G_uint32_t opus_uint32; + typedef _G_int16 opus_int16; + typedef _G_uint16 opus_uint16; +# elif defined(__MINGW32__) + typedef short opus_int16; + typedef unsigned short opus_uint16; + typedef int opus_int32; + typedef unsigned int opus_uint32; +# elif defined(__MWERKS__) + typedef int opus_int32; + typedef unsigned int opus_uint32; + typedef short opus_int16; + typedef unsigned short opus_uint16; +# else + /* MSVC/Borland */ + typedef __int32 opus_int32; + typedef unsigned __int32 opus_uint32; + typedef __int16 opus_int16; + typedef unsigned __int16 opus_uint16; +# endif + +#elif defined(__MACOS__) + +# include + typedef SInt16 opus_int16; + typedef UInt16 opus_uint16; + typedef SInt32 opus_int32; + typedef UInt32 opus_uint32; + +#elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */ + +# include + typedef int16_t opus_int16; + typedef u_int16_t opus_uint16; + typedef int32_t opus_int32; + typedef u_int32_t opus_uint32; + +#elif defined(__BEOS__) + + /* Be */ +# include + typedef int16 opus_int16; + typedef u_int16 opus_uint16; + typedef int32_t opus_int32; + typedef u_int32_t opus_uint32; + +#elif defined (__EMX__) + + /* OS/2 GCC */ + typedef short opus_int16; + typedef unsigned short opus_uint16; + typedef int opus_int32; + typedef unsigned int opus_uint32; + +#elif defined (DJGPP) + + /* DJGPP */ + typedef short opus_int16; + typedef unsigned short opus_uint16; + typedef int opus_int32; + typedef unsigned int opus_uint32; + +#elif defined(R5900) + + /* PS2 EE */ + typedef int opus_int32; + typedef unsigned opus_uint32; + typedef short opus_int16; + typedef unsigned short opus_uint16; + +#elif defined(__SYMBIAN32__) + + /* Symbian GCC */ + typedef signed short opus_int16; + typedef unsigned short opus_uint16; + typedef signed int opus_int32; + typedef unsigned int opus_uint32; + +#elif defined(CONFIG_TI_C54X) || defined (CONFIG_TI_C55X) + + typedef short opus_int16; + typedef unsigned short opus_uint16; + typedef long opus_int32; + typedef unsigned long opus_uint32; + +#elif defined(CONFIG_TI_C6X) + + typedef short opus_int16; + typedef unsigned short opus_uint16; + typedef int opus_int32; + typedef unsigned int opus_uint32; + +#else + + /* Give up, take a reasonable guess */ + typedef short opus_int16; + typedef unsigned short opus_uint16; + typedef int opus_int32; + typedef unsigned int opus_uint32; + +#endif + +#endif /* OPUS_TYPES_H */ diff --git a/components/codecs/inc/opusfile/opusfile.h b/components/codecs/inc/opusfile/opusfile.h new file mode 100644 index 00000000..e3a3dc83 --- /dev/null +++ b/components/codecs/inc/opusfile/opusfile.h @@ -0,0 +1,2164 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE libopusfile SOFTWARE CODEC SOURCE CODE. * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE libopusfile SOURCE CODE IS (C) COPYRIGHT 1994-2012 * + * by the Xiph.Org Foundation and contributors http://www.xiph.org/ * + * * + ******************************************************************** + + function: stdio-based convenience library for opening/seeking/decoding + last mod: $Id: vorbisfile.h 17182 2010-04-29 03:48:32Z xiphmont $ + + ********************************************************************/ +#if !defined(_opusfile_h) +# define _opusfile_h (1) + +/**\mainpage + \section Introduction + + This is the documentation for the libopusfile C API. + + The libopusfile package provides a convenient high-level API for + decoding and basic manipulation of all Ogg Opus audio streams. + libopusfile is implemented as a layer on top of Xiph.Org's + reference + libogg + and + libopus + libraries. + + libopusfile provides several sets of built-in routines for + file/stream access, and may also use custom stream I/O routines provided by + the embedded environment. + There are built-in I/O routines provided for ANSI-compliant + stdio (FILE *), memory buffers, and URLs + (including URLs, plus optionally and URLs). + + \section Organization + + The main API is divided into several sections: + - \ref stream_open_close + - \ref stream_info + - \ref stream_decoding + - \ref stream_seeking + + Several additional sections are not tied to the main API. + - \ref stream_callbacks + - \ref header_info + - \ref error_codes + + \section Overview + + The libopusfile API always decodes files to 48 kHz. + The original sample rate is not preserved by the lossy compression, though + it is stored in the header to allow you to resample to it after decoding + (the libopusfile API does not currently provide a resampler, + but the + the + Speex resampler is a good choice if you need one). + In general, if you are playing back the audio, you should leave it at + 48 kHz, provided your audio hardware supports it. + When decoding to a file, it may be worth resampling back to the original + sample rate, so as not to surprise users who might not expect the sample + rate to change after encoding to Opus and decoding. + + Opus files can contain anywhere from 1 to 255 channels of audio. + The channel mappings for up to 8 channels are the same as the + Vorbis + mappings. + A special stereo API can convert everything to 2 channels, making it simple + to support multichannel files in an application which only has stereo + output. + Although the libopusfile ABI provides support for the theoretical + maximum number of channels, the current implementation does not support + files with more than 8 channels, as they do not have well-defined channel + mappings. + + Like all Ogg files, Opus files may be "chained". + That is, multiple Opus files may be combined into a single, longer file just + by concatenating the original files. + This is commonly done in internet radio streaming, as it allows the title + and artist to be updated each time the song changes, since each link in the + chain includes its own set of metadata. + + libopusfile fully supports chained files. + It will decode the first Opus stream found in each link of a chained file + (ignoring any other streams that might be concurrently multiplexed with it, + such as a video stream). + + The channel count can also change between links. + If your application is not prepared to deal with this, it can use the stereo + API to ensure the audio from all links will always get decoded into a + common format. + Since libopusfile always decodes to 48 kHz, you do not have to + worry about the sample rate changing between links (as was possible with + Vorbis). + This makes application support for chained files with libopusfile + very easy.*/ + +# if defined(__cplusplus) +extern "C" { +# endif + +# include +# include +# include +# include + +/**@cond PRIVATE*/ + +/*Enable special features for gcc and gcc-compatible compilers.*/ +# if !defined(OP_GNUC_PREREQ) +# if defined(__GNUC__)&&defined(__GNUC_MINOR__) +# define OP_GNUC_PREREQ(_maj,_min) \ + ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min)) +# else +# define OP_GNUC_PREREQ(_maj,_min) 0 +# endif +# endif + +# if OP_GNUC_PREREQ(4,0) +# pragma GCC visibility push(default) +# endif + +typedef struct OpusHead OpusHead; +typedef struct OpusTags OpusTags; +typedef struct OpusPictureTag OpusPictureTag; +typedef struct OpusServerInfo OpusServerInfo; +typedef struct OpusFileCallbacks OpusFileCallbacks; +typedef struct OggOpusFile OggOpusFile; + +/*Warning attributes for libopusfile functions.*/ +# if OP_GNUC_PREREQ(3,4) +# define OP_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) +# else +# define OP_WARN_UNUSED_RESULT +# endif +# if OP_GNUC_PREREQ(3,4) +# define OP_ARG_NONNULL(_x) __attribute__((__nonnull__(_x))) +# else +# define OP_ARG_NONNULL(_x) +# endif + +/**@endcond*/ + +/**\defgroup error_codes Error Codes*/ +/*@{*/ +/**\name List of possible error codes + Many of the functions in this library return a negative error code when a + function fails. + This list provides a brief explanation of the common errors. + See each individual function for more details on what a specific error code + means in that context.*/ +/*@{*/ + +/**A request did not succeed.*/ +#define OP_FALSE (-1) +/*Currently not used externally.*/ +#define OP_EOF (-2) +/**There was a hole in the page sequence numbers (e.g., a page was corrupt or + missing).*/ +#define OP_HOLE (-3) +/**An underlying read, seek, or tell operation failed when it should have + succeeded.*/ +#define OP_EREAD (-128) +/**A NULL pointer was passed where one was unexpected, or an + internal memory allocation failed, or an internal library error was + encountered.*/ +#define OP_EFAULT (-129) +/**The stream used a feature that is not implemented, such as an unsupported + channel family.*/ +#define OP_EIMPL (-130) +/**One or more parameters to a function were invalid.*/ +#define OP_EINVAL (-131) +/**A purported Ogg Opus stream did not begin with an Ogg page, a purported + header packet did not start with one of the required strings, "OpusHead" or + "OpusTags", or a link in a chained file was encountered that did not + contain any logical Opus streams.*/ +#define OP_ENOTFORMAT (-132) +/**A required header packet was not properly formatted, contained illegal + values, or was missing altogether.*/ +#define OP_EBADHEADER (-133) +/**The ID header contained an unrecognized version number.*/ +#define OP_EVERSION (-134) +/*Currently not used at all.*/ +#define OP_ENOTAUDIO (-135) +/**An audio packet failed to decode properly. + This is usually caused by a multistream Ogg packet where the durations of + the individual Opus packets contained in it are not all the same.*/ +#define OP_EBADPACKET (-136) +/**We failed to find data we had seen before, or the bitstream structure was + sufficiently malformed that seeking to the target destination was + impossible.*/ +#define OP_EBADLINK (-137) +/**An operation that requires seeking was requested on an unseekable stream.*/ +#define OP_ENOSEEK (-138) +/**The first or last granule position of a link failed basic validity checks.*/ +#define OP_EBADTIMESTAMP (-139) + +/*@}*/ +/*@}*/ + +/**\defgroup header_info Header Information*/ +/*@{*/ + +/**The maximum number of channels in an Ogg Opus stream.*/ +#define OPUS_CHANNEL_COUNT_MAX (255) + +/**Ogg Opus bitstream information. + This contains the basic playback parameters for a stream, and corresponds to + the initial ID header packet of an Ogg Opus stream.*/ +struct OpusHead{ + /**The Ogg Opus format version, in the range 0...255. + The top 4 bits represent a "major" version, and the bottom four bits + represent backwards-compatible "minor" revisions. + The current specification describes version 1. + This library will recognize versions up through 15 as backwards compatible + with the current specification. + An earlier draft of the specification described a version 0, but the only + difference between version 1 and version 0 is that version 0 did + not specify the semantics for handling the version field.*/ + int version; + /**The number of channels, in the range 1...255.*/ + int channel_count; + /**The number of samples that should be discarded from the beginning of the + stream.*/ + unsigned pre_skip; + /**The sampling rate of the original input. + All Opus audio is coded at 48 kHz, and should also be decoded at 48 kHz + for playback (unless the target hardware does not support this sampling + rate). + However, this field may be used to resample the audio back to the original + sampling rate, for example, when saving the output to a file.*/ + opus_uint32 input_sample_rate; + /**The gain to apply to the decoded output, in dB, as a Q8 value in the range + -32768...32767. + The libopusfile API will automatically apply this gain to the + decoded output before returning it, scaling it by + pow(10,output_gain/(20.0*256)). + You can adjust this behavior with op_set_gain_offset().*/ + int output_gain; + /**The channel mapping family, in the range 0...255. + Channel mapping family 0 covers mono or stereo in a single stream. + Channel mapping family 1 covers 1 to 8 channels in one or more streams, + using the Vorbis speaker assignments. + Channel mapping family 255 covers 1 to 255 channels in one or more + streams, but without any defined speaker assignment.*/ + int mapping_family; + /**The number of Opus streams in each Ogg packet, in the range 1...255.*/ + int stream_count; + /**The number of coupled Opus streams in each Ogg packet, in the range + 0...127. + This must satisfy 0 <= coupled_count <= stream_count and + coupled_count + stream_count <= 255. + The coupled streams appear first, before all uncoupled streams, in an Ogg + Opus packet.*/ + int coupled_count; + /**The mapping from coded stream channels to output channels. + Let index=mapping[k] be the value for channel k. + If index<2*coupled_count, then it refers to the left channel + from stream (index/2) if even, and the right channel from + stream (index/2) if odd. + Otherwise, it refers to the output of the uncoupled stream + (index-coupled_count).*/ + unsigned char mapping[OPUS_CHANNEL_COUNT_MAX]; +}; + +/**The metadata from an Ogg Opus stream. + + This structure holds the in-stream metadata corresponding to the 'comment' + header packet of an Ogg Opus stream. + The comment header is meant to be used much like someone jotting a quick + note on the label of a CD. + It should be a short, to the point text note that can be more than a couple + words, but not more than a short paragraph. + + The metadata is stored as a series of (tag, value) pairs, in length-encoded + string vectors, using the same format as Vorbis (without the final "framing + bit"), Theora, and Speex, except for the packet header. + The first occurrence of the '=' character delimits the tag and value. + A particular tag may occur more than once, and order is significant. + The character set encoding for the strings is always UTF-8, but the tag + names are limited to ASCII, and treated as case-insensitive. + See the Vorbis + comment header specification for details. + + In filling in this structure, libopusfile will null-terminate the + #user_comments strings for safety. + However, the bitstream format itself treats them as 8-bit clean vectors, + possibly containing NUL characters, so the #comment_lengths array should be + treated as their authoritative length. + + This structure is binary and source-compatible with a + vorbis_comment, and pointers to it may be freely cast to + vorbis_comment pointers, and vice versa. + It is provided as a separate type to avoid introducing a compile-time + dependency on the libvorbis headers.*/ +struct OpusTags{ + /**The array of comment string vectors.*/ + char **user_comments; + /**An array of the corresponding length of each vector, in bytes.*/ + int *comment_lengths; + /**The total number of comment streams.*/ + int comments; + /**The null-terminated vendor string. + This identifies the software used to encode the stream.*/ + char *vendor; +}; + +/**\name Picture tag image formats*/ +/*@{*/ + +/**The MIME type was not recognized, or the image data did not match the + declared MIME type.*/ +#define OP_PIC_FORMAT_UNKNOWN (-1) +/**The MIME type indicates the image data is really a URL.*/ +#define OP_PIC_FORMAT_URL (0) +/**The image is a JPEG.*/ +#define OP_PIC_FORMAT_JPEG (1) +/**The image is a PNG.*/ +#define OP_PIC_FORMAT_PNG (2) +/**The image is a GIF.*/ +#define OP_PIC_FORMAT_GIF (3) + +/*@}*/ + +/**The contents of a METADATA_BLOCK_PICTURE tag.*/ +struct OpusPictureTag{ + /**The picture type according to the ID3v2 APIC frame: +
    +
  1. Other
  2. +
  3. 32x32 pixels 'file icon' (PNG only)
  4. +
  5. Other file icon
  6. +
  7. Cover (front)
  8. +
  9. Cover (back)
  10. +
  11. Leaflet page
  12. +
  13. Media (e.g. label side of CD)
  14. +
  15. Lead artist/lead performer/soloist
  16. +
  17. Artist/performer
  18. +
  19. Conductor
  20. +
  21. Band/Orchestra
  22. +
  23. Composer
  24. +
  25. Lyricist/text writer
  26. +
  27. Recording Location
  28. +
  29. During recording
  30. +
  31. During performance
  32. +
  33. Movie/video screen capture
  34. +
  35. A bright colored fish
  36. +
  37. Illustration
  38. +
  39. Band/artist logotype
  40. +
  41. Publisher/Studio logotype
  42. +
+ Others are reserved and should not be used. + There may only be one each of picture type 1 and 2 in a file.*/ + opus_int32 type; + /**The MIME type of the picture, in printable ASCII characters 0x20-0x7E. + The MIME type may also be "-->" to signify that the data part + is a URL pointing to the picture instead of the picture data itself. + In this case, a terminating NUL is appended to the URL string in #data, + but #data_length is set to the length of the string excluding that + terminating NUL.*/ + char *mime_type; + /**The description of the picture, in UTF-8.*/ + char *description; + /**The width of the picture in pixels.*/ + opus_uint32 width; + /**The height of the picture in pixels.*/ + opus_uint32 height; + /**The color depth of the picture in bits-per-pixel (not + bits-per-channel).*/ + opus_uint32 depth; + /**For indexed-color pictures (e.g., GIF), the number of colors used, or 0 + for non-indexed pictures.*/ + opus_uint32 colors; + /**The length of the picture data in bytes.*/ + opus_uint32 data_length; + /**The binary picture data.*/ + unsigned char *data; + /**The format of the picture data, if known. + One of +
    +
  • #OP_PIC_FORMAT_UNKNOWN,
  • +
  • #OP_PIC_FORMAT_URL,
  • +
  • #OP_PIC_FORMAT_JPEG,
  • +
  • #OP_PIC_FORMAT_PNG, or
  • +
  • #OP_PIC_FORMAT_GIF.
  • +
*/ + int format; +}; + +/**\name Functions for manipulating header data + + These functions manipulate the #OpusHead and #OpusTags structures, + which describe the audio parameters and tag-value metadata, respectively. + These can be used to query the headers returned by libopusfile, or + to parse Opus headers from sources other than an Ogg Opus stream, provided + they use the same format.*/ +/*@{*/ + +/**Parses the contents of the ID header packet of an Ogg Opus stream. + \param[out] _head Returns the contents of the parsed packet. + The contents of this structure are untouched on error. + This may be NULL to merely test the header + for validity. + \param[in] _data The contents of the ID header packet. + \param _len The number of bytes of data in the ID header packet. + \return 0 on success or a negative value on error. + \retval #OP_ENOTFORMAT If the data does not start with the "OpusHead" + string. + \retval #OP_EVERSION If the version field signaled a version this library + does not know how to parse. + \retval #OP_EIMPL If the channel mapping family was 255, which general + purpose players should not attempt to play. + \retval #OP_EBADHEADER If the contents of the packet otherwise violate the + Ogg Opus specification: +
    +
  • Insufficient data,
  • +
  • Too much data for the known minor versions,
  • +
  • An unrecognized channel mapping family,
  • +
  • Zero channels or too many channels,
  • +
  • Zero coded streams,
  • +
  • Too many coupled streams, or
  • +
  • An invalid channel mapping index.
  • +
*/ +OP_WARN_UNUSED_RESULT int opus_head_parse(OpusHead *_head, + const unsigned char *_data,size_t _len) OP_ARG_NONNULL(2); + +/**Converts a granule position to a sample offset for a given Ogg Opus stream. + The sample offset is simply _gp-_head->pre_skip. + Granule position values smaller than OpusHead#pre_skip correspond to audio + that should never be played, and thus have no associated sample offset. + This function returns -1 for such values. + This function also correctly handles extremely large granule positions, + which may have wrapped around to a negative number when stored in a signed + ogg_int64_t value. + \param _head The #OpusHead information from the ID header of the stream. + \param _gp The granule position to convert. + \return The sample offset associated with the given granule position + (counting at a 48 kHz sampling rate), or the special value -1 on + error (i.e., the granule position was smaller than the pre-skip + amount).*/ +ogg_int64_t opus_granule_sample(const OpusHead *_head,ogg_int64_t _gp) + OP_ARG_NONNULL(1); + +/**Parses the contents of the 'comment' header packet of an Ogg Opus stream. + \param[out] _tags An uninitialized #OpusTags structure. + This returns the contents of the parsed packet. + The contents of this structure are untouched on error. + This may be NULL to merely test the header + for validity. + \param[in] _data The contents of the 'comment' header packet. + \param _len The number of bytes of data in the 'info' header packet. + \retval 0 Success. + \retval #OP_ENOTFORMAT If the data does not start with the "OpusTags" + string. + \retval #OP_EBADHEADER If the contents of the packet otherwise violate the + Ogg Opus specification. + \retval #OP_EFAULT If there wasn't enough memory to store the tags.*/ +OP_WARN_UNUSED_RESULT int opus_tags_parse(OpusTags *_tags, + const unsigned char *_data,size_t _len) OP_ARG_NONNULL(2); + +/**Performs a deep copy of an #OpusTags structure. + \param _dst The #OpusTags structure to copy into. + If this function fails, the contents of this structure remain + untouched. + \param _src The #OpusTags structure to copy from. + \retval 0 Success. + \retval #OP_EFAULT If there wasn't enough memory to copy the tags.*/ +int opus_tags_copy(OpusTags *_dst,const OpusTags *_src) OP_ARG_NONNULL(1); + +/**Initializes an #OpusTags structure. + This should be called on a freshly allocated #OpusTags structure before + attempting to use it. + \param _tags The #OpusTags structure to initialize.*/ +void opus_tags_init(OpusTags *_tags) OP_ARG_NONNULL(1); + +/**Add a (tag, value) pair to an initialized #OpusTags structure. + \note Neither opus_tags_add() nor opus_tags_add_comment() support values + containing embedded NULs, although the bitstream format does support them. + To add such tags, you will need to manipulate the #OpusTags structure + directly. + \param _tags The #OpusTags structure to add the (tag, value) pair to. + \param _tag A NUL-terminated, case-insensitive, ASCII string containing + the tag to add (without an '=' character). + \param _value A NUL-terminated UTF-8 containing the corresponding value. + \return 0 on success, or a negative value on failure. + \retval #OP_EFAULT An internal memory allocation failed.*/ +int opus_tags_add(OpusTags *_tags,const char *_tag,const char *_value) + OP_ARG_NONNULL(1) OP_ARG_NONNULL(2) OP_ARG_NONNULL(3); + +/**Add a comment to an initialized #OpusTags structure. + \note Neither opus_tags_add_comment() nor opus_tags_add() support comments + containing embedded NULs, although the bitstream format does support them. + To add such tags, you will need to manipulate the #OpusTags structure + directly. + \param _tags The #OpusTags structure to add the comment to. + \param _comment A NUL-terminated UTF-8 string containing the comment in + "TAG=value" form. + \return 0 on success, or a negative value on failure. + \retval #OP_EFAULT An internal memory allocation failed.*/ +int opus_tags_add_comment(OpusTags *_tags,const char *_comment) + OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/**Replace the binary suffix data at the end of the packet (if any). + \param _tags An initialized #OpusTags structure. + \param _data A buffer of binary data to append after the encoded user + comments. + The least significant bit of the first byte of this data must + be set (to ensure the data is preserved by other editors). + \param _len The number of bytes of binary data to append. + This may be zero to remove any existing binary suffix data. + \return 0 on success, or a negative value on error. + \retval #OP_EINVAL \a _len was negative, or \a _len was positive but + \a _data was NULL or the least significant + bit of the first byte was not set. + \retval #OP_EFAULT An internal memory allocation failed.*/ +int opus_tags_set_binary_suffix(OpusTags *_tags, + const unsigned char *_data,int _len) OP_ARG_NONNULL(1); + +/**Look up a comment value by its tag. + \param _tags An initialized #OpusTags structure. + \param _tag The tag to look up. + \param _count The instance of the tag. + The same tag can appear multiple times, each with a distinct + value, so an index is required to retrieve them all. + The order in which these values appear is significant and + should be preserved. + Use opus_tags_query_count() to get the legal range for the + \a _count parameter. + \return A pointer to the queried tag's value. + This points directly to data in the #OpusTags structure. + It should not be modified or freed by the application, and + modifications to the structure may invalidate the pointer. + \retval NULL If no matching tag is found.*/ +const char *opus_tags_query(const OpusTags *_tags,const char *_tag,int _count) + OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/**Look up the number of instances of a tag. + Call this first when querying for a specific tag and then iterate over the + number of instances with separate calls to opus_tags_query() to retrieve + all the values for that tag in order. + \param _tags An initialized #OpusTags structure. + \param _tag The tag to look up. + \return The number of instances of this particular tag.*/ +int opus_tags_query_count(const OpusTags *_tags,const char *_tag) + OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/**Retrieve the binary suffix data at the end of the packet (if any). + \param _tags An initialized #OpusTags structure. + \param[out] _len Returns the number of bytes of binary suffix data returned. + \return A pointer to the binary suffix data, or NULL if none + was present.*/ +const unsigned char *opus_tags_get_binary_suffix(const OpusTags *_tags, + int *_len) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/**Get the album gain from an R128_ALBUM_GAIN tag, if one was specified. + This searches for the first R128_ALBUM_GAIN tag with a valid signed, + 16-bit decimal integer value and returns the value. + This routine is exposed merely for convenience for applications which wish + to do something special with the album gain (i.e., display it). + If you simply wish to apply the album gain instead of the header gain, you + can use op_set_gain_offset() with an #OP_ALBUM_GAIN type and no offset. + \param _tags An initialized #OpusTags structure. + \param[out] _gain_q8 The album gain, in 1/256ths of a dB. + This will lie in the range [-32768,32767], and should + be applied in addition to the header gain. + On error, no value is returned, and the previous + contents remain unchanged. + \return 0 on success, or a negative value on error. + \retval #OP_FALSE There was no album gain available in the given tags.*/ +int opus_tags_get_album_gain(const OpusTags *_tags,int *_gain_q8) + OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/**Get the track gain from an R128_TRACK_GAIN tag, if one was specified. + This searches for the first R128_TRACK_GAIN tag with a valid signed, + 16-bit decimal integer value and returns the value. + This routine is exposed merely for convenience for applications which wish + to do something special with the track gain (i.e., display it). + If you simply wish to apply the track gain instead of the header gain, you + can use op_set_gain_offset() with an #OP_TRACK_GAIN type and no offset. + \param _tags An initialized #OpusTags structure. + \param[out] _gain_q8 The track gain, in 1/256ths of a dB. + This will lie in the range [-32768,32767], and should + be applied in addition to the header gain. + On error, no value is returned, and the previous + contents remain unchanged. + \return 0 on success, or a negative value on error. + \retval #OP_FALSE There was no track gain available in the given tags.*/ +int opus_tags_get_track_gain(const OpusTags *_tags,int *_gain_q8) + OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/**Clears the #OpusTags structure. + This should be called on an #OpusTags structure after it is no longer + needed. + It will free all memory used by the structure members. + \param _tags The #OpusTags structure to clear.*/ +void opus_tags_clear(OpusTags *_tags) OP_ARG_NONNULL(1); + +/**Check if \a _comment is an instance of a \a _tag_name tag. + \see opus_tagncompare + \param _tag_name A NUL-terminated, case-insensitive, ASCII string containing + the name of the tag to check for (without the terminating + '=' character). + \param _comment The comment string to check. + \return An integer less than, equal to, or greater than zero if \a _comment + is found respectively, to be less than, to match, or be greater + than a "tag=value" string whose tag matches \a _tag_name.*/ +int opus_tagcompare(const char *_tag_name,const char *_comment); + +/**Check if \a _comment is an instance of a \a _tag_name tag. + This version is slightly more efficient than opus_tagcompare() if the length + of the tag name is already known (e.g., because it is a constant). + \see opus_tagcompare + \param _tag_name A case-insensitive ASCII string containing the name of the + tag to check for (without the terminating '=' character). + \param _tag_len The number of characters in the tag name. + This must be non-negative. + \param _comment The comment string to check. + \return An integer less than, equal to, or greater than zero if \a _comment + is found respectively, to be less than, to match, or be greater + than a "tag=value" string whose tag matches the first \a _tag_len + characters of \a _tag_name.*/ +int opus_tagncompare(const char *_tag_name,int _tag_len,const char *_comment); + +/**Parse a single METADATA_BLOCK_PICTURE tag. + This decodes the BASE64-encoded content of the tag and returns a structure + with the MIME type, description, image parameters (if known), and the + compressed image data. + If the MIME type indicates the presence of an image format we recognize + (JPEG, PNG, or GIF) and the actual image data contains the magic signature + associated with that format, then the OpusPictureTag::format field will be + set to the corresponding format. + This is provided as a convenience to avoid requiring applications to parse + the MIME type and/or do their own format detection for the commonly used + formats. + In this case, we also attempt to extract the image parameters directly from + the image data (overriding any that were present in the tag, which the + specification says applications are not meant to rely on). + The application must still provide its own support for actually decoding the + image data and, if applicable, retrieving that data from URLs. + \param[out] _pic Returns the parsed picture data. + No sanitation is done on the type, MIME type, or + description fields, so these might return invalid values. + The contents of this structure are left unmodified on + failure. + \param _tag The METADATA_BLOCK_PICTURE tag contents. + The leading "METADATA_BLOCK_PICTURE=" portion is optional, + to allow the function to be used on either directly on the + values in OpusTags::user_comments or on the return value + of opus_tags_query(). + \return 0 on success or a negative value on error. + \retval #OP_ENOTFORMAT The METADATA_BLOCK_PICTURE contents were not valid. + \retval #OP_EFAULT There was not enough memory to store the picture tag + contents.*/ +OP_WARN_UNUSED_RESULT int opus_picture_tag_parse(OpusPictureTag *_pic, + const char *_tag) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/**Initializes an #OpusPictureTag structure. + This should be called on a freshly allocated #OpusPictureTag structure + before attempting to use it. + \param _pic The #OpusPictureTag structure to initialize.*/ +void opus_picture_tag_init(OpusPictureTag *_pic) OP_ARG_NONNULL(1); + +/**Clears the #OpusPictureTag structure. + This should be called on an #OpusPictureTag structure after it is no longer + needed. + It will free all memory used by the structure members. + \param _pic The #OpusPictureTag structure to clear.*/ +void opus_picture_tag_clear(OpusPictureTag *_pic) OP_ARG_NONNULL(1); + +/*@}*/ + +/*@}*/ + +/**\defgroup url_options URL Reading Options*/ +/*@{*/ +/**\name URL reading options + Options for op_url_stream_create() and associated functions. + These allow you to provide proxy configuration parameters, skip SSL + certificate checks, etc. + Options are processed in order, and if the same option is passed multiple + times, only the value specified by the last occurrence has an effect + (unless otherwise specified). + They may be expanded in the future.*/ +/*@{*/ + +/**@cond PRIVATE*/ + +/*These are the raw numbers used to define the request codes. + They should not be used directly.*/ +#define OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST (6464) +#define OP_HTTP_PROXY_HOST_REQUEST (6528) +#define OP_HTTP_PROXY_PORT_REQUEST (6592) +#define OP_HTTP_PROXY_USER_REQUEST (6656) +#define OP_HTTP_PROXY_PASS_REQUEST (6720) +#define OP_GET_SERVER_INFO_REQUEST (6784) + +#define OP_URL_OPT(_request) ((_request)+(char *)0) + +/*These macros trigger compilation errors or warnings if the wrong types are + provided to one of the URL options.*/ +#define OP_CHECK_INT(_x) ((void)((_x)==(opus_int32)0),(opus_int32)(_x)) +#define OP_CHECK_CONST_CHAR_PTR(_x) ((_x)+((_x)-(const char *)(_x))) +#define OP_CHECK_SERVER_INFO_PTR(_x) ((_x)+((_x)-(OpusServerInfo *)(_x))) + +/**@endcond*/ + +/**HTTP/Shoutcast/Icecast server information associated with a URL.*/ +struct OpusServerInfo{ + /**The name of the server (icy-name/ice-name). + This is NULL if there was no icy-name or + ice-name header.*/ + char *name; + /**A short description of the server (icy-description/ice-description). + This is NULL if there was no icy-description or + ice-description header.*/ + char *description; + /**The genre the server falls under (icy-genre/ice-genre). + This is NULL if there was no icy-genre or + ice-genre header.*/ + char *genre; + /**The homepage for the server (icy-url/ice-url). + This is NULL if there was no icy-url or + ice-url header.*/ + char *url; + /**The software used by the origin server (Server). + This is NULL if there was no Server header.*/ + char *server; + /**The media type of the entity sent to the recepient (Content-Type). + This is NULL if there was no Content-Type + header.*/ + char *content_type; + /**The nominal stream bitrate in kbps (icy-br/ice-bitrate). + This is -1 if there was no icy-br or + ice-bitrate header.*/ + opus_int32 bitrate_kbps; + /**Flag indicating whether the server is public (1) or not + (0) (icy-pub/ice-public). + This is -1 if there was no icy-pub or + ice-public header.*/ + int is_public; + /**Flag indicating whether the server is using HTTPS instead of HTTP. + This is 0 unless HTTPS is being used. + This may not match the protocol used in the original URL if there were + redirections.*/ + int is_ssl; +}; + +/**Initializes an #OpusServerInfo structure. + All fields are set as if the corresponding header was not available. + \param _info The #OpusServerInfo structure to initialize. + \note If you use this function, you must link against libopusurl.*/ +void opus_server_info_init(OpusServerInfo *_info) OP_ARG_NONNULL(1); + +/**Clears the #OpusServerInfo structure. + This should be called on an #OpusServerInfo structure after it is no longer + needed. + It will free all memory used by the structure members. + \param _info The #OpusServerInfo structure to clear. + \note If you use this function, you must link against libopusurl.*/ +void opus_server_info_clear(OpusServerInfo *_info) OP_ARG_NONNULL(1); + +/**Skip the certificate check when connecting via TLS/SSL (https). + \param _b opus_int32: Whether or not to skip the certificate + check. + The check will be skipped if \a _b is non-zero, and will not be + skipped if \a _b is zero. + \hideinitializer*/ +#define OP_SSL_SKIP_CERTIFICATE_CHECK(_b) \ + OP_URL_OPT(OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST),OP_CHECK_INT(_b) + +/**Proxy connections through the given host. + If no port is specified via #OP_HTTP_PROXY_PORT, the port number defaults + to 8080 (http-alt). + All proxy parameters are ignored for non-http and non-https URLs. + \param _host const char *: The proxy server hostname. + This may be NULL to disable the use of a proxy + server. + \hideinitializer*/ +#define OP_HTTP_PROXY_HOST(_host) \ + OP_URL_OPT(OP_HTTP_PROXY_HOST_REQUEST),OP_CHECK_CONST_CHAR_PTR(_host) + +/**Use the given port when proxying connections. + This option only has an effect if #OP_HTTP_PROXY_HOST is specified with a + non-NULL \a _host. + If this option is not provided, the proxy port number defaults to 8080 + (http-alt). + All proxy parameters are ignored for non-http and non-https URLs. + \param _port opus_int32: The proxy server port. + This must be in the range 0...65535 (inclusive), or the + URL function this is passed to will fail. + \hideinitializer*/ +#define OP_HTTP_PROXY_PORT(_port) \ + OP_URL_OPT(OP_HTTP_PROXY_PORT_REQUEST),OP_CHECK_INT(_port) + +/**Use the given user name for authentication when proxying connections. + All proxy parameters are ignored for non-http and non-https URLs. + \param _user const char *: The proxy server user name. + This may be NULL to disable proxy + authentication. + A non-NULL value only has an effect + if #OP_HTTP_PROXY_HOST and #OP_HTTP_PROXY_PASS + are also specified with non-NULL + arguments. + \hideinitializer*/ +#define OP_HTTP_PROXY_USER(_user) \ + OP_URL_OPT(OP_HTTP_PROXY_USER_REQUEST),OP_CHECK_CONST_CHAR_PTR(_user) + +/**Use the given password for authentication when proxying connections. + All proxy parameters are ignored for non-http and non-https URLs. + \param _pass const char *: The proxy server password. + This may be NULL to disable proxy + authentication. + A non-NULL value only has an effect + if #OP_HTTP_PROXY_HOST and #OP_HTTP_PROXY_USER + are also specified with non-NULL + arguments. + \hideinitializer*/ +#define OP_HTTP_PROXY_PASS(_pass) \ + OP_URL_OPT(OP_HTTP_PROXY_PASS_REQUEST),OP_CHECK_CONST_CHAR_PTR(_pass) + +/**Parse information about the streaming server (if any) and return it. + Very little validation is done. + In particular, OpusServerInfo::url may not be a valid URL, + OpusServerInfo::bitrate_kbps may not really be in kbps, and + OpusServerInfo::content_type may not be a valid MIME type. + The character set of the string fields is not specified anywhere, and should + not be assumed to be valid UTF-8. + \param _info OpusServerInfo *: Returns information about the server. + If there is any error opening the stream, the + contents of this structure remain + unmodified. + On success, fills in the structure with the + server information that was available, if + any. + After a successful return, the contents of + this structure should be freed by calling + opus_server_info_clear(). + \hideinitializer*/ +#define OP_GET_SERVER_INFO(_info) \ + OP_URL_OPT(OP_GET_SERVER_INFO_REQUEST),OP_CHECK_SERVER_INFO_PTR(_info) + +/*@}*/ +/*@}*/ + +/**\defgroup stream_callbacks Abstract Stream Reading Interface*/ +/*@{*/ +/**\name Functions for reading from streams + These functions define the interface used to read from and seek in a stream + of data. + A stream does not need to implement seeking, but the decoder will not be + able to seek if it does not do so. + These functions also include some convenience routines for working with + standard FILE pointers, complete streams stored in a single + block of memory, or URLs.*/ +/*@{*/ + +/**Reads up to \a _nbytes bytes of data from \a _stream. + \param _stream The stream to read from. + \param[out] _ptr The buffer to store the data in. + \param _nbytes The maximum number of bytes to read. + This function may return fewer, though it will not + return zero unless it reaches end-of-file. + \return The number of bytes successfully read, or a negative value on + error.*/ +typedef int (*op_read_func)(void *_stream,unsigned char *_ptr,int _nbytes); + +/**Sets the position indicator for \a _stream. + The new position, measured in bytes, is obtained by adding \a _offset + bytes to the position specified by \a _whence. + If \a _whence is set to SEEK_SET, SEEK_CUR, or + SEEK_END, the offset is relative to the start of the stream, + the current position indicator, or end-of-file, respectively. + \retval 0 Success. + \retval -1 Seeking is not supported or an error occurred. + errno need not be set.*/ +typedef int (*op_seek_func)(void *_stream,opus_int64 _offset,int _whence); + +/**Obtains the current value of the position indicator for \a _stream. + \return The current position indicator.*/ +typedef opus_int64 (*op_tell_func)(void *_stream); + +/**Closes the underlying stream. + \retval 0 Success. + \retval EOF An error occurred. + errno need not be set.*/ +typedef int (*op_close_func)(void *_stream); + +/**The callbacks used to access non-FILE stream resources. + The function prototypes are basically the same as for the stdio functions + fread(), fseek(), ftell(), and + fclose(). + The differences are that the FILE * arguments have been + replaced with a void *, which is to be used as a pointer to + whatever internal data these functions might need, that #seek and #tell + take and return 64-bit offsets, and that #seek must return -1 if + the stream is unseekable.*/ +struct OpusFileCallbacks{ + /**Used to read data from the stream. + This must not be NULL.*/ + op_read_func read; + /**Used to seek in the stream. + This may be NULL if seeking is not implemented.*/ + op_seek_func seek; + /**Used to return the current read position in the stream. + This may be NULL if seeking is not implemented.*/ + op_tell_func tell; + /**Used to close the stream when the decoder is freed. + This may be NULL to leave the stream open.*/ + op_close_func close; +}; + +/**Opens a stream with fopen() and fills in a set of callbacks + that can be used to access it. + This is useful to avoid writing your own portable 64-bit seeking wrappers, + and also avoids cross-module linking issues on Windows, where a + FILE * must be accessed by routines defined in the same module + that opened it. + \param[out] _cb The callbacks to use for this file. + If there is an error opening the file, nothing will be + filled in here. + \param _path The path to the file to open. + On Windows, this string must be UTF-8 (to allow access to + files whose names cannot be represented in the current + MBCS code page). + All other systems use the native character encoding. + \param _mode The mode to open the file in. + \return A stream handle to use with the callbacks, or NULL on + error.*/ +OP_WARN_UNUSED_RESULT void *op_fopen(OpusFileCallbacks *_cb, + const char *_path,const char *_mode) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2) + OP_ARG_NONNULL(3); + +/**Opens a stream with fdopen() and fills in a set of callbacks + that can be used to access it. + This is useful to avoid writing your own portable 64-bit seeking wrappers, + and also avoids cross-module linking issues on Windows, where a + FILE * must be accessed by routines defined in the same module + that opened it. + \param[out] _cb The callbacks to use for this file. + If there is an error opening the file, nothing will be + filled in here. + \param _fd The file descriptor to open. + \param _mode The mode to open the file in. + \return A stream handle to use with the callbacks, or NULL on + error.*/ +OP_WARN_UNUSED_RESULT void *op_fdopen(OpusFileCallbacks *_cb, + int _fd,const char *_mode) OP_ARG_NONNULL(1) OP_ARG_NONNULL(3); + +/**Opens a stream with freopen() and fills in a set of callbacks + that can be used to access it. + This is useful to avoid writing your own portable 64-bit seeking wrappers, + and also avoids cross-module linking issues on Windows, where a + FILE * must be accessed by routines defined in the same module + that opened it. + \param[out] _cb The callbacks to use for this file. + If there is an error opening the file, nothing will be + filled in here. + \param _path The path to the file to open. + On Windows, this string must be UTF-8 (to allow access + to files whose names cannot be represented in the + current MBCS code page). + All other systems use the native character encoding. + \param _mode The mode to open the file in. + \param _stream A stream previously returned by op_fopen(), op_fdopen(), + or op_freopen(). + \return A stream handle to use with the callbacks, or NULL on + error.*/ +OP_WARN_UNUSED_RESULT void *op_freopen(OpusFileCallbacks *_cb, + const char *_path,const char *_mode,void *_stream) OP_ARG_NONNULL(1) + OP_ARG_NONNULL(2) OP_ARG_NONNULL(3) OP_ARG_NONNULL(4); + +/**Creates a stream that reads from the given block of memory. + This block of memory must contain the complete stream to decode. + This is useful for caching small streams (e.g., sound effects) in RAM. + \param[out] _cb The callbacks to use for this stream. + If there is an error creating the stream, nothing will be + filled in here. + \param _data The block of memory to read from. + \param _size The size of the block of memory. + \return A stream handle to use with the callbacks, or NULL on + error.*/ +OP_WARN_UNUSED_RESULT void *op_mem_stream_create(OpusFileCallbacks *_cb, + const unsigned char *_data,size_t _size) OP_ARG_NONNULL(1); + +/**Creates a stream that reads from the given URL. + This function behaves identically to op_url_stream_create(), except that it + takes a va_list instead of a variable number of arguments. + It does not call the va_end macro, and because it invokes the + va_arg macro, the value of \a _ap is undefined after the call. + \note If you use this function, you must link against libopusurl. + \param[out] _cb The callbacks to use for this stream. + If there is an error creating the stream, nothing will + be filled in here. + \param _url The URL to read from. + Currently only the , , and + schemes are supported. + Both and may be disabled at compile + time, in which case opening such URLs will always fail. + Currently this only supports URIs. + IRIs should be converted to UTF-8 and URL-escaped, with + internationalized domain names encoded in punycode, + before passing them to this function. + \param[in,out] _ap A list of the \ref url_options "optional flags" to use. + This is a variable-length list of options terminated + with NULL. + \return A stream handle to use with the callbacks, or NULL on + error.*/ +OP_WARN_UNUSED_RESULT void *op_url_stream_vcreate(OpusFileCallbacks *_cb, + const char *_url,va_list _ap) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/**Creates a stream that reads from the given URL. + \note If you use this function, you must link against libopusurl. + \param[out] _cb The callbacks to use for this stream. + If there is an error creating the stream, nothing will be + filled in here. + \param _url The URL to read from. + Currently only the , , and schemes + are supported. + Both and may be disabled at compile time, + in which case opening such URLs will always fail. + Currently this only supports URIs. + IRIs should be converted to UTF-8 and URL-escaped, with + internationalized domain names encoded in punycode, before + passing them to this function. + \param ... The \ref url_options "optional flags" to use. + This is a variable-length list of options terminated with + NULL. + \return A stream handle to use with the callbacks, or NULL on + error.*/ +OP_WARN_UNUSED_RESULT void *op_url_stream_create(OpusFileCallbacks *_cb, + const char *_url,...) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); + +/*@}*/ +/*@}*/ + +/**\defgroup stream_open_close Opening and Closing*/ +/*@{*/ +/**\name Functions for opening and closing streams + + These functions allow you to test a stream to see if it is Opus, open it, + and close it. + Several flavors are provided for each of the built-in stream types, plus a + more general version which takes a set of application-provided callbacks.*/ +/*@{*/ + +/**Test to see if this is an Opus stream. + For good results, you will need at least 57 bytes (for a pure Opus-only + stream). + Something like 512 bytes will give more reliable results for multiplexed + streams. + This function is meant to be a quick-rejection filter. + Its purpose is not to guarantee that a stream is a valid Opus stream, but to + ensure that it looks enough like Opus that it isn't going to be recognized + as some other format (except possibly an Opus stream that is also + multiplexed with other codecs, such as video). + \param[out] _head The parsed ID header contents. + You may pass NULL if you do not need + this information. + If the function fails, the contents of this structure + remain untouched. + \param _initial_data An initial buffer of data from the start of the + stream. + \param _initial_bytes The number of bytes in \a _initial_data. + \return 0 if the data appears to be Opus, or a negative value on error. + \retval #OP_FALSE There was not enough data to tell if this was an Opus + stream or not. + \retval #OP_EFAULT An internal memory allocation failed. + \retval #OP_EIMPL The stream used a feature that is not implemented, + such as an unsupported channel family. + \retval #OP_ENOTFORMAT If the data did not contain a recognizable ID + header for an Opus stream. + \retval #OP_EVERSION If the version field signaled a version this library + does not know how to parse. + \retval #OP_EBADHEADER The ID header was not properly formatted or contained + illegal values.*/ +int op_test(OpusHead *_head, + const unsigned char *_initial_data,size_t _initial_bytes); + +/**Open a stream from the given file path. + \param _path The path to the file to open. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want the + failure code. + The failure code will be #OP_EFAULT if the file could not + be opened, or one of the other failure codes from + op_open_callbacks() otherwise. + \return A freshly opened \c OggOpusFile, or NULL on error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_open_file(const char *_path,int *_error) + OP_ARG_NONNULL(1); + +/**Open a stream from a memory buffer. + \param _data The memory buffer to open. + \param _size The number of bytes in the buffer. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want the + failure code. + See op_open_callbacks() for a full list of failure codes. + \return A freshly opened \c OggOpusFile, or NULL on error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_open_memory(const unsigned char *_data, + size_t _size,int *_error); + +/**Open a stream from a URL. + This function behaves identically to op_open_url(), except that it + takes a va_list instead of a variable number of arguments. + It does not call the va_end macro, and because it invokes the + va_arg macro, the value of \a _ap is undefined after the call. + \note If you use this function, you must link against libopusurl. + \param _url The URL to open. + Currently only the , , and + schemes are supported. + Both and may be disabled at compile + time, in which case opening such URLs will always + fail. + Currently this only supports URIs. + IRIs should be converted to UTF-8 and URL-escaped, + with internationalized domain names encoded in + punycode, before passing them to this function. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want + the failure code. + See op_open_callbacks() for a full list of failure + codes. + \param[in,out] _ap A list of the \ref url_options "optional flags" to + use. + This is a variable-length list of options terminated + with NULL. + \return A freshly opened \c OggOpusFile, or NULL on error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_vopen_url(const char *_url, + int *_error,va_list _ap) OP_ARG_NONNULL(1); + +/**Open a stream from a URL. + \note If you use this function, you must link against libopusurl. + \param _url The URL to open. + Currently only the , , and schemes + are supported. + Both and may be disabled at compile + time, in which case opening such URLs will always fail. + Currently this only supports URIs. + IRIs should be converted to UTF-8 and URL-escaped, with + internationalized domain names encoded in punycode, + before passing them to this function. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want the + failure code. + See op_open_callbacks() for a full list of failure codes. + \param ... The \ref url_options "optional flags" to use. + This is a variable-length list of options terminated with + NULL. + \return A freshly opened \c OggOpusFile, or NULL on error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_open_url(const char *_url, + int *_error,...) OP_ARG_NONNULL(1); + +/**Open a stream using the given set of callbacks to access it. + \param _stream The stream to read from (e.g., a FILE *). + This value will be passed verbatim as the first + argument to all of the callbacks. + \param _cb The callbacks with which to access the stream. + read() must + be implemented. + seek() and + tell() may + be NULL, or may always return -1 to + indicate a stream is unseekable, but if + seek() is + implemented and succeeds on a particular stream, then + tell() must + also. + close() may + be NULL, but if it is not, it will be + called when the \c OggOpusFile is destroyed by + op_free(). + It will not be called if op_open_callbacks() fails + with an error. + \param _initial_data An initial buffer of data from the start of the + stream. + Applications can read some number of bytes from the + start of the stream to help identify this as an Opus + stream, and then provide them here to allow the + stream to be opened, even if it is unseekable. + \param _initial_bytes The number of bytes in \a _initial_data. + If the stream is seekable, its current position (as + reported by + tell() + at the start of this function) must be equal to + \a _initial_bytes. + Otherwise, seeking to absolute positions will + generate inconsistent results. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want + the failure code. + The failure code will be one of +
+
#OP_EREAD
+
An underlying read, seek, or tell operation + failed when it should have succeeded, or we failed + to find data in the stream we had seen before.
+
#OP_EFAULT
+
There was a memory allocation failure, or an + internal library error.
+
#OP_EIMPL
+
The stream used a feature that is not + implemented, such as an unsupported channel + family.
+
#OP_EINVAL
+
seek() + was implemented and succeeded on this source, but + tell() + did not, or the starting position indicator was + not equal to \a _initial_bytes.
+
#OP_ENOTFORMAT
+
The stream contained a link that did not have + any logical Opus streams in it.
+
#OP_EBADHEADER
+
A required header packet was not properly + formatted, contained illegal values, or was missing + altogether.
+
#OP_EVERSION
+
An ID header contained an unrecognized version + number.
+
#OP_EBADLINK
+
We failed to find data we had seen before after + seeking.
+
#OP_EBADTIMESTAMP
+
The first or last timestamp in a link failed + basic validity checks.
+
+ \return A freshly opened \c OggOpusFile, or NULL on error. + libopusfile does not take ownership of the stream + if the call fails. + The calling application is responsible for closing the stream if + this call returns an error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_open_callbacks(void *_stream, + const OpusFileCallbacks *_cb,const unsigned char *_initial_data, + size_t _initial_bytes,int *_error) OP_ARG_NONNULL(2); + +/**Partially open a stream from the given file path. + \see op_test_callbacks + \param _path The path to the file to open. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want the + failure code. + The failure code will be #OP_EFAULT if the file could not + be opened, or one of the other failure codes from + op_open_callbacks() otherwise. + \return A partially opened \c OggOpusFile, or NULL on error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_test_file(const char *_path,int *_error) + OP_ARG_NONNULL(1); + +/**Partially open a stream from a memory buffer. + \see op_test_callbacks + \param _data The memory buffer to open. + \param _size The number of bytes in the buffer. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want the + failure code. + See op_open_callbacks() for a full list of failure codes. + \return A partially opened \c OggOpusFile, or NULL on error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_test_memory(const unsigned char *_data, + size_t _size,int *_error); + +/**Partially open a stream from a URL. + This function behaves identically to op_test_url(), except that it + takes a va_list instead of a variable number of arguments. + It does not call the va_end macro, and because it invokes the + va_arg macro, the value of \a _ap is undefined after the call. + \note If you use this function, you must link against libopusurl. + \see op_test_url + \see op_test_callbacks + \param _url The URL to open. + Currently only the , , and + schemes are supported. + Both and may be disabled at compile + time, in which case opening such URLs will always + fail. + Currently this only supports URIs. + IRIs should be converted to UTF-8 and URL-escaped, + with internationalized domain names encoded in + punycode, before passing them to this function. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want + the failure code. + See op_open_callbacks() for a full list of failure + codes. + \param[in,out] _ap A list of the \ref url_options "optional flags" to + use. + This is a variable-length list of options terminated + with NULL. + \return A partially opened \c OggOpusFile, or NULL on error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_vtest_url(const char *_url, + int *_error,va_list _ap) OP_ARG_NONNULL(1); + +/**Partially open a stream from a URL. + \note If you use this function, you must link against libopusurl. + \see op_test_callbacks + \param _url The URL to open. + Currently only the , , and + schemes are supported. + Both and may be disabled at compile + time, in which case opening such URLs will always fail. + Currently this only supports URIs. + IRIs should be converted to UTF-8 and URL-escaped, with + internationalized domain names encoded in punycode, + before passing them to this function. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want the + failure code. + See op_open_callbacks() for a full list of failure + codes. + \param ... The \ref url_options "optional flags" to use. + This is a variable-length list of options terminated + with NULL. + \return A partially opened \c OggOpusFile, or NULL on error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_test_url(const char *_url, + int *_error,...) OP_ARG_NONNULL(1); + +/**Partially open a stream using the given set of callbacks to access it. + This tests for Opusness and loads the headers for the first link. + It does not seek (although it tests for seekability). + You can query a partially open stream for the few pieces of basic + information returned by op_serialno(), op_channel_count(), op_head(), and + op_tags() (but only for the first link). + You may also determine if it is seekable via a call to op_seekable(). + You cannot read audio from the stream, seek, get the size or duration, + get information from links other than the first one, or even get the total + number of links until you finish opening the stream with op_test_open(). + If you do not need to do any of these things, you can dispose of it with + op_free() instead. + + This function is provided mostly to simplify porting existing code that used + libvorbisfile. + For new code, you are likely better off using op_test() instead, which + is less resource-intensive, requires less data to succeed, and imposes a + hard limit on the amount of data it examines (important for unseekable + streams, where all such data must be buffered until you are sure of the + stream type). + \param _stream The stream to read from (e.g., a FILE *). + This value will be passed verbatim as the first + argument to all of the callbacks. + \param _cb The callbacks with which to access the stream. + read() must + be implemented. + seek() and + tell() may + be NULL, or may always return -1 to + indicate a stream is unseekable, but if + seek() is + implemented and succeeds on a particular stream, then + tell() must + also. + close() may + be NULL, but if it is not, it will be + called when the \c OggOpusFile is destroyed by + op_free(). + It will not be called if op_open_callbacks() fails + with an error. + \param _initial_data An initial buffer of data from the start of the + stream. + Applications can read some number of bytes from the + start of the stream to help identify this as an Opus + stream, and then provide them here to allow the + stream to be tested more thoroughly, even if it is + unseekable. + \param _initial_bytes The number of bytes in \a _initial_data. + If the stream is seekable, its current position (as + reported by + tell() + at the start of this function) must be equal to + \a _initial_bytes. + Otherwise, seeking to absolute positions will + generate inconsistent results. + \param[out] _error Returns 0 on success, or a failure code on error. + You may pass in NULL if you don't want + the failure code. + See op_open_callbacks() for a full list of failure + codes. + \return A partially opened \c OggOpusFile, or NULL on error. + libopusfile does not take ownership of the stream + if the call fails. + The calling application is responsible for closing the stream if + this call returns an error.*/ +OP_WARN_UNUSED_RESULT OggOpusFile *op_test_callbacks(void *_stream, + const OpusFileCallbacks *_cb,const unsigned char *_initial_data, + size_t _initial_bytes,int *_error) OP_ARG_NONNULL(2); + +/**Finish opening a stream partially opened with op_test_callbacks() or one of + the associated convenience functions. + If this function fails, you are still responsible for freeing the + \c OggOpusFile with op_free(). + \param _of The \c OggOpusFile to finish opening. + \return 0 on success, or a negative value on error. + \retval #OP_EREAD An underlying read, seek, or tell operation failed + when it should have succeeded. + \retval #OP_EFAULT There was a memory allocation failure, or an + internal library error. + \retval #OP_EIMPL The stream used a feature that is not implemented, + such as an unsupported channel family. + \retval #OP_EINVAL The stream was not partially opened with + op_test_callbacks() or one of the associated + convenience functions. + \retval #OP_ENOTFORMAT The stream contained a link that did not have any + logical Opus streams in it. + \retval #OP_EBADHEADER A required header packet was not properly + formatted, contained illegal values, or was + missing altogether. + \retval #OP_EVERSION An ID header contained an unrecognized version + number. + \retval #OP_EBADLINK We failed to find data we had seen before after + seeking. + \retval #OP_EBADTIMESTAMP The first or last timestamp in a link failed basic + validity checks.*/ +int op_test_open(OggOpusFile *_of) OP_ARG_NONNULL(1); + +/**Release all memory used by an \c OggOpusFile. + \param _of The \c OggOpusFile to free.*/ +void op_free(OggOpusFile *_of); + +/*@}*/ +/*@}*/ + +/**\defgroup stream_info Stream Information*/ +/*@{*/ +/**\name Functions for obtaining information about streams + + These functions allow you to get basic information about a stream, including + seekability, the number of links (for chained streams), plus the size, + duration, bitrate, header parameters, and meta information for each link + (or, where available, the stream as a whole). + Some of these (size, duration) are only available for seekable streams. + You can also query the current stream position, link, and playback time, + and instantaneous bitrate during playback. + + Some of these functions may be used successfully on the partially open + streams returned by op_test_callbacks() or one of the associated + convenience functions. + Their documention will indicate so explicitly.*/ +/*@{*/ + +/**Returns whether or not the stream being read is seekable. + This is true if +
    +
  1. The seek() and + tell() callbacks are both + non-NULL,
  2. +
  3. The seek() callback was + successfully executed at least once, and
  4. +
  5. The tell() callback was + successfully able to report the position indicator afterwards.
  6. +
+ This function may be called on partially-opened streams. + \param _of The \c OggOpusFile whose seekable status is to be returned. + \return A non-zero value if seekable, and 0 if unseekable.*/ +int op_seekable(const OggOpusFile *_of) OP_ARG_NONNULL(1); + +/**Returns the number of links in this chained stream. + This function may be called on partially-opened streams, but it will always + return 1. + The actual number of links is not known until the stream is fully opened. + \param _of The \c OggOpusFile from which to retrieve the link count. + \return For fully-open seekable streams, this returns the total number of + links in the whole stream, which will be at least 1. + For partially-open or unseekable streams, this always returns 1.*/ +int op_link_count(const OggOpusFile *_of) OP_ARG_NONNULL(1); + +/**Get the serial number of the given link in a (possibly-chained) Ogg Opus + stream. + This function may be called on partially-opened streams, but it will always + return the serial number of the Opus stream in the first link. + \param _of The \c OggOpusFile from which to retrieve the serial number. + \param _li The index of the link whose serial number should be retrieved. + Use a negative number to get the serial number of the current + link. + \return The serial number of the given link. + If \a _li is greater than the total number of links, this returns + the serial number of the last link. + If the stream is not seekable, this always returns the serial number + of the current link.*/ +opus_uint32 op_serialno(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1); + +/**Get the channel count of the given link in a (possibly-chained) Ogg Opus + stream. + This is equivalent to op_head(_of,_li)->channel_count, but + is provided for convenience. + This function may be called on partially-opened streams, but it will always + return the channel count of the Opus stream in the first link. + \param _of The \c OggOpusFile from which to retrieve the channel count. + \param _li The index of the link whose channel count should be retrieved. + Use a negative number to get the channel count of the current + link. + \return The channel count of the given link. + If \a _li is greater than the total number of links, this returns + the channel count of the last link. + If the stream is not seekable, this always returns the channel count + of the current link.*/ +int op_channel_count(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1); + +/**Get the total (compressed) size of the stream, or of an individual link in + a (possibly-chained) Ogg Opus stream, including all headers and Ogg muxing + overhead. + \warning If the Opus stream (or link) is concurrently multiplexed with other + logical streams (e.g., video), this returns the size of the entire stream + (or link), not just the number of bytes in the first logical Opus stream. + Returning the latter would require scanning the entire file. + \param _of The \c OggOpusFile from which to retrieve the compressed size. + \param _li The index of the link whose compressed size should be computed. + Use a negative number to get the compressed size of the entire + stream. + \return The compressed size of the entire stream if \a _li is negative, the + compressed size of link \a _li if it is non-negative, or a negative + value on error. + The compressed size of the entire stream may be smaller than that + of the underlying stream if trailing garbage was detected in the + file. + \retval #OP_EINVAL The stream is not seekable (so we can't know the length), + \a _li wasn't less than the total number of links in + the stream, or the stream was only partially open.*/ +opus_int64 op_raw_total(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1); + +/**Get the total PCM length (number of samples at 48 kHz) of the stream, or of + an individual link in a (possibly-chained) Ogg Opus stream. + Users looking for op_time_total() should use op_pcm_total() + instead. + Because timestamps in Opus are fixed at 48 kHz, there is no need for a + separate function to convert this to seconds (and leaving it out avoids + introducing floating point to the API, for those that wish to avoid it). + \param _of The \c OggOpusFile from which to retrieve the PCM offset. + \param _li The index of the link whose PCM length should be computed. + Use a negative number to get the PCM length of the entire stream. + \return The PCM length of the entire stream if \a _li is negative, the PCM + length of link \a _li if it is non-negative, or a negative value on + error. + \retval #OP_EINVAL The stream is not seekable (so we can't know the length), + \a _li wasn't less than the total number of links in + the stream, or the stream was only partially open.*/ +ogg_int64_t op_pcm_total(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1); + +/**Get the ID header information for the given link in a (possibly chained) Ogg + Opus stream. + This function may be called on partially-opened streams, but it will always + return the ID header information of the Opus stream in the first link. + \param _of The \c OggOpusFile from which to retrieve the ID header + information. + \param _li The index of the link whose ID header information should be + retrieved. + Use a negative number to get the ID header information of the + current link. + For an unseekable stream, \a _li is ignored, and the ID header + information for the current link is always returned, if + available. + \return The contents of the ID header for the given link.*/ +const OpusHead *op_head(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1); + +/**Get the comment header information for the given link in a (possibly + chained) Ogg Opus stream. + This function may be called on partially-opened streams, but it will always + return the tags from the Opus stream in the first link. + \param _of The \c OggOpusFile from which to retrieve the comment header + information. + \param _li The index of the link whose comment header information should be + retrieved. + Use a negative number to get the comment header information of + the current link. + For an unseekable stream, \a _li is ignored, and the comment + header information for the current link is always returned, if + available. + \return The contents of the comment header for the given link, or + NULL if this is an unseekable stream that encountered + an invalid link.*/ +const OpusTags *op_tags(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1); + +/**Retrieve the index of the current link. + This is the link that produced the data most recently read by + op_read_float() or its associated functions, or, after a seek, the link + that the seek target landed in. + Reading more data may advance the link index (even on the first read after a + seek). + \param _of The \c OggOpusFile from which to retrieve the current link index. + \return The index of the current link on success, or a negative value on + failure. + For seekable streams, this is a number between 0 (inclusive) and the + value returned by op_link_count() (exclusive). + For unseekable streams, this value starts at 0 and increments by one + each time a new link is encountered (even though op_link_count() + always returns 1). + \retval #OP_EINVAL The stream was only partially open.*/ +int op_current_link(const OggOpusFile *_of) OP_ARG_NONNULL(1); + +/**Computes the bitrate of the stream, or of an individual link in a + (possibly-chained) Ogg Opus stream. + The stream must be seekable to compute the bitrate. + For unseekable streams, use op_bitrate_instant() to get periodic estimates. + \warning If the Opus stream (or link) is concurrently multiplexed with other + logical streams (e.g., video), this uses the size of the entire stream (or + link) to compute the bitrate, not just the number of bytes in the first + logical Opus stream. + Returning the latter requires scanning the entire file, but this may be done + by decoding the whole file and calling op_bitrate_instant() once at the + end. + Install a trivial decoding callback with op_set_decode_callback() if you + wish to skip actual decoding during this process. + \param _of The \c OggOpusFile from which to retrieve the bitrate. + \param _li The index of the link whose bitrate should be computed. + Use a negative number to get the bitrate of the whole stream. + \return The bitrate on success, or a negative value on error. + \retval #OP_EINVAL The stream was only partially open, the stream was not + seekable, or \a _li was larger than the number of + links.*/ +opus_int32 op_bitrate(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1); + +/**Compute the instantaneous bitrate, measured as the ratio of bits to playable + samples decoded since a) the last call to op_bitrate_instant(), b) the last + seek, or c) the start of playback, whichever was most recent. + This will spike somewhat after a seek or at the start/end of a chain + boundary, as pre-skip, pre-roll, and end-trimming causes samples to be + decoded but not played. + \param _of The \c OggOpusFile from which to retrieve the bitrate. + \return The bitrate, in bits per second, or a negative value on error. + \retval #OP_FALSE No data has been decoded since any of the events + described above. + \retval #OP_EINVAL The stream was only partially open.*/ +opus_int32 op_bitrate_instant(OggOpusFile *_of) OP_ARG_NONNULL(1); + +/**Obtain the current value of the position indicator for \a _of. + \param _of The \c OggOpusFile from which to retrieve the position indicator. + \return The byte position that is currently being read from. + \retval #OP_EINVAL The stream was only partially open.*/ +opus_int64 op_raw_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1); + +/**Obtain the PCM offset of the next sample to be read. + If the stream is not properly timestamped, this might not increment by the + proper amount between reads, or even return monotonically increasing + values. + \param _of The \c OggOpusFile from which to retrieve the PCM offset. + \return The PCM offset of the next sample to be read. + \retval #OP_EINVAL The stream was only partially open.*/ +ogg_int64_t op_pcm_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1); + +/*@}*/ +/*@}*/ + +/**\defgroup stream_seeking Seeking*/ +/*@{*/ +/**\name Functions for seeking in Opus streams + + These functions let you seek in Opus streams, if the underlying stream + support it. + Seeking is implemented for all built-in stream I/O routines, though some + individual streams may not be seekable (pipes, live HTTP streams, or HTTP + streams from a server that does not support Range requests). + + op_raw_seek() is the fastest: it is guaranteed to perform at most one + physical seek, but, since the target is a byte position, makes no guarantee + how close to a given time it will come. + op_pcm_seek() provides sample-accurate seeking. + The number of physical seeks it requires is still quite small (often 1 or + 2, even in highly variable bitrate streams). + + Seeking in Opus requires decoding some pre-roll amount before playback to + allow the internal state to converge (as if recovering from packet loss). + This is handled internally by libopusfile, but means there is + little extra overhead for decoding up to the exact position requested + (since it must decode some amount of audio anyway). + It also means that decoding after seeking may not return exactly the same + values as would be obtained by decoding the stream straight through. + However, such differences are expected to be smaller than the loss + introduced by Opus's lossy compression.*/ +/*@{*/ + +/**Seek to a byte offset relative to the compressed data. + This also scans packets to update the PCM cursor. + It will cross a logical bitstream boundary, but only if it can't get any + packets out of the tail of the link to which it seeks. + \param _of The \c OggOpusFile in which to seek. + \param _byte_offset The byte position to seek to. + This must be between 0 and #op_raw_total(\a _of,\c -1) + (inclusive). + \return 0 on success, or a negative error code on failure. + \retval #OP_EREAD The underlying seek operation failed. + \retval #OP_EINVAL The stream was only partially open, or the target was + outside the valid range for the stream. + \retval #OP_ENOSEEK This stream is not seekable. + \retval #OP_EBADLINK Failed to initialize a decoder for a stream for an + unknown reason.*/ +int op_raw_seek(OggOpusFile *_of,opus_int64 _byte_offset) OP_ARG_NONNULL(1); + +/**Seek to the specified PCM offset, such that decoding will begin at exactly + the requested position. + \param _of The \c OggOpusFile in which to seek. + \param _pcm_offset The PCM offset to seek to. + This is in samples at 48 kHz relative to the start of the + stream. + \return 0 on success, or a negative value on error. + \retval #OP_EREAD An underlying read or seek operation failed. + \retval #OP_EINVAL The stream was only partially open, or the target was + outside the valid range for the stream. + \retval #OP_ENOSEEK This stream is not seekable. + \retval #OP_EBADLINK We failed to find data we had seen before, or the + bitstream structure was sufficiently malformed that + seeking to the target destination was impossible.*/ +int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1); + +/*@}*/ +/*@}*/ + +/**\defgroup stream_decoding Decoding*/ +/*@{*/ +/**\name Functions for decoding audio data + + These functions retrieve actual decoded audio data from the stream. + The general functions, op_read() and op_read_float() return 16-bit or + floating-point output, both using native endian ordering. + The number of channels returned can change from link to link in a chained + stream. + There are special functions, op_read_stereo() and op_read_float_stereo(), + which always output two channels, to simplify applications which do not + wish to handle multichannel audio. + These downmix multichannel files to two channels, so they can always return + samples in the same format for every link in a chained file. + + If the rest of your audio processing chain can handle floating point, the + floating-point routines should be preferred, as they prevent clipping and + other issues which might be avoided entirely if, e.g., you scale down the + volume at some other stage. + However, if you intend to consume 16-bit samples directly, the conversion in + libopusfile provides noise-shaping dithering and, if compiled + against libopus 1.1 or later, soft-clipping prevention. + + libopusfile can also be configured at compile time to use the + fixed-point libopus API. + If so, libopusfile's floating-point API may also be disabled. + In that configuration, nothing in libopusfile will use any + floating-point operations, to simplify support on devices without an + adequate FPU. + + \warning HTTPS streams may be be vulnerable to truncation attacks if you do + not check the error return code from op_read_float() or its associated + functions. + If the remote peer does not close the connection gracefully (with a TLS + "close notify" message), these functions will return #OP_EREAD instead of 0 + when they reach the end of the file. + If you are reading from an URL (particularly if seeking is not + supported), you should make sure to check for this error and warn the user + appropriately.*/ +/*@{*/ + +/**Indicates that the decoding callback should produce signed 16-bit + native-endian output samples.*/ +#define OP_DEC_FORMAT_SHORT (7008) +/**Indicates that the decoding callback should produce 32-bit native-endian + float samples.*/ +#define OP_DEC_FORMAT_FLOAT (7040) + +/**Indicates that the decoding callback did not decode anything, and that + libopusfile should decode normally instead.*/ +#define OP_DEC_USE_DEFAULT (6720) + +/**Called to decode an Opus packet. + This should invoke the functional equivalent of opus_multistream_decode() or + opus_multistream_decode_float(), except that it returns 0 on success + instead of the number of decoded samples (which is known a priori). + \param _ctx The application-provided callback context. + \param _decoder The decoder to use to decode the packet. + \param[out] _pcm The buffer to decode into. + This will always have enough room for \a _nchannels of + \a _nsamples samples, which should be placed into this + buffer interleaved. + \param _op The packet to decode. + This will always have its granule position set to a valid + value. + \param _nsamples The number of samples expected from the packet. + \param _nchannels The number of channels expected from the packet. + \param _format The desired sample output format. + This is either #OP_DEC_FORMAT_SHORT or + #OP_DEC_FORMAT_FLOAT. + \param _li The index of the link from which this packet was decoded. + \return A non-negative value on success, or a negative value on error. + Any error codes should be the same as those returned by + opus_multistream_decode() or opus_multistream_decode_float(). + Success codes are as follows: + \retval 0 Decoding was successful. + The application has filled the buffer with + exactly \a _nsamples*\a + _nchannels samples in the requested + format. + \retval #OP_DEC_USE_DEFAULT No decoding was done. + libopusfile should do the decoding + by itself instead.*/ +typedef int (*op_decode_cb_func)(void *_ctx,OpusMSDecoder *_decoder,void *_pcm, + const ogg_packet *_op,int _nsamples,int _nchannels,int _format,int _li); + +/**Sets the packet decode callback function. + If set, this is called once for each packet that needs to be decoded. + This can be used by advanced applications to do additional processing on the + compressed or uncompressed data. + For example, an application might save the final entropy coder state for + debugging and testing purposes, or it might apply additional filters + before the downmixing, dithering, or soft-clipping performed by + libopusfile, so long as these filters do not introduce any + latency. + + A call to this function is no guarantee that the audio will eventually be + delivered to the application. + libopusfile may discard some or all of the decoded audio data + (i.e., at the beginning or end of a link, or after a seek), however the + callback is still required to provide all of it. + \param _of The \c OggOpusFile on which to set the decode callback. + \param _decode_cb The callback function to call. + This may be NULL to disable calling the + callback. + \param _ctx The application-provided context pointer to pass to the + callback on each call.*/ +void op_set_decode_callback(OggOpusFile *_of, + op_decode_cb_func _decode_cb,void *_ctx) OP_ARG_NONNULL(1); + +/**Gain offset type that indicates that the provided offset is relative to the + header gain. + This is the default.*/ +#define OP_HEADER_GAIN (0) + +/**Gain offset type that indicates that the provided offset is relative to the + R128_ALBUM_GAIN value (if any), in addition to the header gain.*/ +#define OP_ALBUM_GAIN (3007) + +/**Gain offset type that indicates that the provided offset is relative to the + R128_TRACK_GAIN value (if any), in addition to the header gain.*/ +#define OP_TRACK_GAIN (3008) + +/**Gain offset type that indicates that the provided offset should be used as + the gain directly, without applying any the header or track gains.*/ +#define OP_ABSOLUTE_GAIN (3009) + +/**Sets the gain to be used for decoded output. + By default, the gain in the header is applied with no additional offset. + The total gain (including header gain and/or track gain, if applicable, and + this offset), will be clamped to [-32768,32767]/256 dB. + This is more than enough to saturate or underflow 16-bit PCM. + \note The new gain will not be applied to any already buffered, decoded + output. + This means you cannot change it sample-by-sample, as at best it will be + updated packet-by-packet. + It is meant for setting a target volume level, rather than applying smooth + fades, etc. + \param _of The \c OggOpusFile on which to set the gain offset. + \param _gain_type One of #OP_HEADER_GAIN, #OP_ALBUM_GAIN, + #OP_TRACK_GAIN, or #OP_ABSOLUTE_GAIN. + \param _gain_offset_q8 The gain offset to apply, in 1/256ths of a dB. + \return 0 on success or a negative value on error. + \retval #OP_EINVAL The \a _gain_type was unrecognized.*/ +int op_set_gain_offset(OggOpusFile *_of, + int _gain_type,opus_int32 _gain_offset_q8) OP_ARG_NONNULL(1); + +/**Sets whether or not dithering is enabled for 16-bit decoding. + By default, when libopusfile is compiled to use floating-point + internally, calling op_read() or op_read_stereo() will first decode to + float, and then convert to fixed-point using noise-shaping dithering. + This flag can be used to disable that dithering. + When the application uses op_read_float() or op_read_float_stereo(), or when + the library has been compiled to decode directly to fixed point, this flag + has no effect. + \param _of The \c OggOpusFile on which to enable or disable dithering. + \param _enabled A non-zero value to enable dithering, or 0 to disable it.*/ +void op_set_dither_enabled(OggOpusFile *_of,int _enabled) OP_ARG_NONNULL(1); + +/**Reads more samples from the stream. + \note Although \a _buf_size must indicate the total number of values that + can be stored in \a _pcm, the return value is the number of samples + per channel. + This is done because +
    +
  1. The channel count cannot be known a priori (reading more samples might + advance us into the next link, with a different channel count), so + \a _buf_size cannot also be in units of samples per channel,
  2. +
  3. Returning the samples per channel matches the libopus API + as closely as we're able,
  4. +
  5. Returning the total number of values instead of samples per channel + would mean the caller would need a division to compute the samples per + channel, and might worry about the possibility of getting back samples + for some channels and not others, and
  6. +
  7. This approach is relatively fool-proof: if an application passes too + small a value to \a _buf_size, they will simply get fewer samples back, + and if they assume the return value is the total number of values, then + they will simply read too few (rather than reading too many and going + off the end of the buffer).
  8. +
+ \param _of The \c OggOpusFile from which to read. + \param[out] _pcm A buffer in which to store the output PCM samples, as + signed native-endian 16-bit values at 48 kHz + with a nominal range of [-32768,32767). + Multiple channels are interleaved using the + Vorbis + channel ordering. + This must have room for at least \a _buf_size values. + \param _buf_size The number of values that can be stored in \a _pcm. + It is recommended that this be large enough for at + least 120 ms of data at 48 kHz per channel (5760 + values per channel). + Smaller buffers will simply return less data, possibly + consuming more memory to buffer the data internally. + libopusfile may return less data than + requested. + If so, there is no guarantee that the remaining data + in \a _pcm will be unmodified. + \param[out] _li The index of the link this data was decoded from. + You may pass NULL if you do not need this + information. + If this function fails (returning a negative value), + this parameter is left unset. + \return The number of samples read per channel on success, or a negative + value on failure. + The channel count can be retrieved on success by calling + op_head(_of,*_li). + The number of samples returned may be 0 if the buffer was too small + to store even a single sample for all channels, or if end-of-file + was reached. + The list of possible failure codes follows. + Most of them can only be returned by unseekable, chained streams + that encounter a new link. + \retval #OP_HOLE There was a hole in the data, and some samples + may have been skipped. + Call this function again to continue decoding + past the hole. + \retval #OP_EREAD An underlying read operation failed. + This may signal a truncation attack from an + source. + \retval #OP_EFAULT An internal memory allocation failed. + \retval #OP_EIMPL An unseekable stream encountered a new link that + used a feature that is not implemented, such as + an unsupported channel family. + \retval #OP_EINVAL The stream was only partially open. + \retval #OP_ENOTFORMAT An unseekable stream encountered a new link that + did not have any logical Opus streams in it. + \retval #OP_EBADHEADER An unseekable stream encountered a new link with a + required header packet that was not properly + formatted, contained illegal values, or was + missing altogether. + \retval #OP_EVERSION An unseekable stream encountered a new link with + an ID header that contained an unrecognized + version number. + \retval #OP_EBADPACKET Failed to properly decode the next packet. + \retval #OP_EBADLINK We failed to find data we had seen before. + \retval #OP_EBADTIMESTAMP An unseekable stream encountered a new link with + a starting timestamp that failed basic validity + checks.*/ +OP_WARN_UNUSED_RESULT int op_read(OggOpusFile *_of, + opus_int16 *_pcm,int _buf_size,int *_li) OP_ARG_NONNULL(1); + +/**Reads more samples from the stream. + \note Although \a _buf_size must indicate the total number of values that + can be stored in \a _pcm, the return value is the number of samples + per channel. +
    +
  1. The channel count cannot be known a priori (reading more samples might + advance us into the next link, with a different channel count), so + \a _buf_size cannot also be in units of samples per channel,
  2. +
  3. Returning the samples per channel matches the libopus API + as closely as we're able,
  4. +
  5. Returning the total number of values instead of samples per channel + would mean the caller would need a division to compute the samples per + channel, and might worry about the possibility of getting back samples + for some channels and not others, and
  6. +
  7. This approach is relatively fool-proof: if an application passes too + small a value to \a _buf_size, they will simply get fewer samples back, + and if they assume the return value is the total number of values, then + they will simply read too few (rather than reading too many and going + off the end of the buffer).
  8. +
+ \param _of The \c OggOpusFile from which to read. + \param[out] _pcm A buffer in which to store the output PCM samples as + signed floats at 48 kHz with a nominal range of + [-1.0,1.0]. + Multiple channels are interleaved using the + Vorbis + channel ordering. + This must have room for at least \a _buf_size floats. + \param _buf_size The number of floats that can be stored in \a _pcm. + It is recommended that this be large enough for at + least 120 ms of data at 48 kHz per channel (5760 + samples per channel). + Smaller buffers will simply return less data, possibly + consuming more memory to buffer the data internally. + If less than \a _buf_size values are returned, + libopusfile makes no guarantee that the + remaining data in \a _pcm will be unmodified. + \param[out] _li The index of the link this data was decoded from. + You may pass NULL if you do not need this + information. + If this function fails (returning a negative value), + this parameter is left unset. + \return The number of samples read per channel on success, or a negative + value on failure. + The channel count can be retrieved on success by calling + op_head(_of,*_li). + The number of samples returned may be 0 if the buffer was too small + to store even a single sample for all channels, or if end-of-file + was reached. + The list of possible failure codes follows. + Most of them can only be returned by unseekable, chained streams + that encounter a new link. + \retval #OP_HOLE There was a hole in the data, and some samples + may have been skipped. + Call this function again to continue decoding + past the hole. + \retval #OP_EREAD An underlying read operation failed. + This may signal a truncation attack from an + source. + \retval #OP_EFAULT An internal memory allocation failed. + \retval #OP_EIMPL An unseekable stream encountered a new link that + used a feature that is not implemented, such as + an unsupported channel family. + \retval #OP_EINVAL The stream was only partially open. + \retval #OP_ENOTFORMAT An unseekable stream encountered a new link that + did not have any logical Opus streams in it. + \retval #OP_EBADHEADER An unseekable stream encountered a new link with a + required header packet that was not properly + formatted, contained illegal values, or was + missing altogether. + \retval #OP_EVERSION An unseekable stream encountered a new link with + an ID header that contained an unrecognized + version number. + \retval #OP_EBADPACKET Failed to properly decode the next packet. + \retval #OP_EBADLINK We failed to find data we had seen before. + \retval #OP_EBADTIMESTAMP An unseekable stream encountered a new link with + a starting timestamp that failed basic validity + checks.*/ +OP_WARN_UNUSED_RESULT int op_read_float(OggOpusFile *_of, + float *_pcm,int _buf_size,int *_li) OP_ARG_NONNULL(1); + +/**Reads more samples from the stream and downmixes to stereo, if necessary. + This function is intended for simple players that want a uniform output + format, even if the channel count changes between links in a chained + stream. + \note \a _buf_size indicates the total number of values that can be stored + in \a _pcm, while the return value is the number of samples per + channel, even though the channel count is known, for consistency with + op_read(). + \param _of The \c OggOpusFile from which to read. + \param[out] _pcm A buffer in which to store the output PCM samples, as + signed native-endian 16-bit values at 48 kHz + with a nominal range of [-32768,32767). + The left and right channels are interleaved in the + buffer. + This must have room for at least \a _buf_size values. + \param _buf_size The number of values that can be stored in \a _pcm. + It is recommended that this be large enough for at + least 120 ms of data at 48 kHz per channel (11520 + values total). + Smaller buffers will simply return less data, possibly + consuming more memory to buffer the data internally. + If less than \a _buf_size values are returned, + libopusfile makes no guarantee that the + remaining data in \a _pcm will be unmodified. + \return The number of samples read per channel on success, or a negative + value on failure. + The number of samples returned may be 0 if the buffer was too small + to store even a single sample for both channels, or if end-of-file + was reached. + The list of possible failure codes follows. + Most of them can only be returned by unseekable, chained streams + that encounter a new link. + \retval #OP_HOLE There was a hole in the data, and some samples + may have been skipped. + Call this function again to continue decoding + past the hole. + \retval #OP_EREAD An underlying read operation failed. + This may signal a truncation attack from an + source. + \retval #OP_EFAULT An internal memory allocation failed. + \retval #OP_EIMPL An unseekable stream encountered a new link that + used a feature that is not implemented, such as + an unsupported channel family. + \retval #OP_EINVAL The stream was only partially open. + \retval #OP_ENOTFORMAT An unseekable stream encountered a new link that + did not have any logical Opus streams in it. + \retval #OP_EBADHEADER An unseekable stream encountered a new link with a + required header packet that was not properly + formatted, contained illegal values, or was + missing altogether. + \retval #OP_EVERSION An unseekable stream encountered a new link with + an ID header that contained an unrecognized + version number. + \retval #OP_EBADPACKET Failed to properly decode the next packet. + \retval #OP_EBADLINK We failed to find data we had seen before. + \retval #OP_EBADTIMESTAMP An unseekable stream encountered a new link with + a starting timestamp that failed basic validity + checks.*/ +OP_WARN_UNUSED_RESULT int op_read_stereo(OggOpusFile *_of, + opus_int16 *_pcm,int _buf_size) OP_ARG_NONNULL(1); + +/**Reads more samples from the stream and downmixes to stereo, if necessary. + This function is intended for simple players that want a uniform output + format, even if the channel count changes between links in a chained + stream. + \note \a _buf_size indicates the total number of values that can be stored + in \a _pcm, while the return value is the number of samples per + channel, even though the channel count is known, for consistency with + op_read_float(). + \param _of The \c OggOpusFile from which to read. + \param[out] _pcm A buffer in which to store the output PCM samples, as + signed floats at 48 kHz with a nominal range of + [-1.0,1.0]. + The left and right channels are interleaved in the + buffer. + This must have room for at least \a _buf_size values. + \param _buf_size The number of values that can be stored in \a _pcm. + It is recommended that this be large enough for at + least 120 ms of data at 48 kHz per channel (11520 + values total). + Smaller buffers will simply return less data, possibly + consuming more memory to buffer the data internally. + If less than \a _buf_size values are returned, + libopusfile makes no guarantee that the + remaining data in \a _pcm will be unmodified. + \return The number of samples read per channel on success, or a negative + value on failure. + The number of samples returned may be 0 if the buffer was too small + to store even a single sample for both channels, or if end-of-file + was reached. + The list of possible failure codes follows. + Most of them can only be returned by unseekable, chained streams + that encounter a new link. + \retval #OP_HOLE There was a hole in the data, and some samples + may have been skipped. + Call this function again to continue decoding + past the hole. + \retval #OP_EREAD An underlying read operation failed. + This may signal a truncation attack from an + source. + \retval #OP_EFAULT An internal memory allocation failed. + \retval #OP_EIMPL An unseekable stream encountered a new link that + used a feature that is not implemented, such as + an unsupported channel family. + \retval #OP_EINVAL The stream was only partially open. + \retval #OP_ENOTFORMAT An unseekable stream encountered a new link that + that did not have any logical Opus streams in it. + \retval #OP_EBADHEADER An unseekable stream encountered a new link with a + required header packet that was not properly + formatted, contained illegal values, or was + missing altogether. + \retval #OP_EVERSION An unseekable stream encountered a new link with + an ID header that contained an unrecognized + version number. + \retval #OP_EBADPACKET Failed to properly decode the next packet. + \retval #OP_EBADLINK We failed to find data we had seen before. + \retval #OP_EBADTIMESTAMP An unseekable stream encountered a new link with + a starting timestamp that failed basic validity + checks.*/ +OP_WARN_UNUSED_RESULT int op_read_float_stereo(OggOpusFile *_of, + float *_pcm,int _buf_size) OP_ARG_NONNULL(1); + +/*@}*/ +/*@}*/ + +# if OP_GNUC_PREREQ(4,0) +# pragma GCC visibility pop +# endif + +# if defined(__cplusplus) +} +# endif + +#endif diff --git a/components/codecs/lib/libopus.a b/components/codecs/lib/libopus.a new file mode 100644 index 0000000000000000000000000000000000000000..c082f61a0085a5c0f1c34cb4d6dbe8b6413fa3ce GIT binary patch literal 893194 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
&><#WihB?&Bc$U)g8ZnUPt5hZ1vxR7 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

dj7 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 XZA)$2-G1yoGe$ISg&r5e6!^aYz0eG1 literal 0 HcmV?d00001 diff --git a/components/squeezelite/component.mk b/components/squeezelite/component.mk index 53a25b0c..9281a039 100644 --- a/components/squeezelite/component.mk +++ b/components/squeezelite/component.mk @@ -2,7 +2,7 @@ # "main" pseudo-component makefile. # # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) -CFLAGS += -O3 -DLINKALL -DLOOPBACK -DNO_FAAD -DRESAMPLE16 -DEMBEDDED -DTREMOR_ONLY -DBYTES_PER_FRAME=4 \ +CFLAGS += -O3 -DLINKALL -DLOOPBACK -DTAS575x -DNO_FAAD -DRESAMPLE16 -DEMBEDDED -DTREMOR_ONLY -DBYTES_PER_FRAME=4 \ -I$(COMPONENT_PATH)/../codecs/inc \ -I$(COMPONENT_PATH)/../codecs/inc/mad \ -I$(COMPONENT_PATH)/../codecs/inc/alac \ @@ -10,7 +10,9 @@ CFLAGS += -O3 -DLINKALL -DLOOPBACK -DNO_FAAD -DRESAMPLE16 -DEMBEDDED -DTREMOR_ON -I$(COMPONENT_PATH)/../codecs/inc/vorbis \ -I$(COMPONENT_PATH)/../codecs/inc/soxr \ -I$(COMPONENT_PATH)/../codecs/inc/resample16 \ - -I$(COMPONENT_PATH)/../tools + -I$(COMPONENT_PATH)/../tools \ + -I$(COMPONENT_PATH)/../codecs/inc/opus \ + -I$(COMPONENT_PATH)/../codecs/inc/opusfile # -I$(COMPONENT_PATH)/../codecs/inc/faad2 diff --git a/components/squeezelite/decode.c b/components/squeezelite/decode.c index d08e0f47..83e16ed9 100644 --- a/components/squeezelite/decode.c +++ b/components/squeezelite/decode.c @@ -180,6 +180,9 @@ void decode_init(log_level level, const char *include_codecs, const char *exclud if (!strstr(exclude_codecs, "ogg") && (!include_codecs || (order_codecs = strstr(include_codecs, "ogg")))) sort_codecs((include_codecs ? order_codecs - include_codecs : i), register_vorbis()); + + if (!strstr(exclude_codecs, "ops") && (!include_codecs || (order_codecs = strstr(include_codecs, "ops")))) + sort_codecs((include_codecs ? order_codecs - include_codecs : i), register_opus()); if (!strstr(exclude_codecs, "flac") && (!include_codecs || (order_codecs = strstr(include_codecs, "flac")))) sort_codecs((include_codecs ? order_codecs - include_codecs : i), register_flac()); diff --git a/components/squeezelite/main.c b/components/squeezelite/main.c index de63557d..9b1f8f1b 100644 --- a/components/squeezelite/main.c +++ b/components/squeezelite/main.c @@ -218,6 +218,9 @@ static void usage(const char *argv0) { #if USE_SSL " SSL" #endif +#if NO_SSLSYM + " NO_SSLSYM" +#endif #if LINKALL " LINKALL" #endif @@ -702,7 +705,7 @@ int main(int argc, char **argv) { signal(SIGHUP, sighandler); #endif -#if USE_SSL && !LINKALL +#if USE_SSL && !LINKALL && !NO_SSLSYM ssl_loaded = load_ssl_symbols(); #endif @@ -837,7 +840,7 @@ int main(int argc, char **argv) { } #endif -#if USE_SSL && !LINKALL +#if USE_SSL && !LINKALL && !NO_SSLSYM free_ssl_symbols(); #endif diff --git a/components/squeezelite/opus.c b/components/squeezelite/opus.c new file mode 100644 index 00000000..6751ab49 --- /dev/null +++ b/components/squeezelite/opus.c @@ -0,0 +1,317 @@ +/* + * Squeezelite - lightweight headless squeezebox emulator + * + * (c) Adrian Smith 2012-2015, triode1@btinternet.com + * Ralph Irving 2015-2017, ralph_irving@hotmail.com + * Philippe 2018-2019, philippe_44@outlook.com + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "squeezelite.h" + +/* +* with some low-end CPU, the decode call takes a fair bit of time and if the outputbuf is locked during that +* period, the output_thread (or equivalent) will be locked although there is plenty of samples available. +* Normally, with PRIO_INHERIT, that thread should increase decoder priority and get the lock quickly but it +* seems that when the streambuf has plenty of data, the decode thread grabs the CPU to much, even it the output +* thread has a higher priority. Using an interim buffer where opus decoder writes the output is not great from +* an efficiency (one extra memory copy) point of view, but it allows the lock to not be kept for too long +*/ +#define FRAME_BUF 2048 + +#if BYTES_PER_FRAME == 4 +#define ALIGN(n) (n) +#else +#define ALIGN(n) (n << 16) +#endif + +#include + +struct opus { + struct OggOpusFile *of; + bool opened; +#if FRAME_BUF + u8_t *write_buf; +#endif +#if !LINKALL + // opus symbols to be dynamically loaded + void (*op_free)(OggOpusFile *_of); + int (*op_read)(OggOpusFile *_of, opus_int16 *_pcm, int _buf_size, int *_li); + const OpusHead* (*op_head)(OggOpusFile *_of, int _li); + OggOpusFile* (*op_open_callbacks) (void *_source, OpusFileCallbacks *_cb, unsigned char *_initial_data, size_t _initial_bytes, int *_error); +#endif +}; + +static struct opus *u; + +extern log_level loglevel; + +extern struct buffer *streambuf; +extern struct buffer *outputbuf; +extern struct streamstate stream; +extern struct outputstate output; +extern struct decodestate decode; +extern struct processstate process; + +#define LOCK_S mutex_lock(streambuf->mutex) +#define UNLOCK_S mutex_unlock(streambuf->mutex) +#define LOCK_O mutex_lock(outputbuf->mutex) +#define UNLOCK_O mutex_unlock(outputbuf->mutex) +#if PROCESS +#define LOCK_O_direct if (decode.direct) mutex_lock(outputbuf->mutex) +#define UNLOCK_O_direct if (decode.direct) mutex_unlock(outputbuf->mutex) +#define LOCK_O_not_direct if (!decode.direct) mutex_lock(outputbuf->mutex) +#define UNLOCK_O_not_direct if (!decode.direct) mutex_unlock(outputbuf->mutex) +#define IF_DIRECT(x) if (decode.direct) { x } +#define IF_PROCESS(x) if (!decode.direct) { x } +#else +#define LOCK_O_direct mutex_lock(outputbuf->mutex) +#define UNLOCK_O_direct mutex_unlock(outputbuf->mutex) +#define LOCK_O_not_direct +#define UNLOCK_O_not_direct +#define IF_DIRECT(x) { x } +#define IF_PROCESS(x) +#endif + +#if LINKALL +#define OP(h, fn, ...) (op_ ## fn)(__VA_ARGS__) +#else +#define OP(h, fn, ...) (h)->op_ ## fn(__VA_ARGS__) +#endif + +// called with mutex locked within vorbis_decode to avoid locking O before S +static int _read_cb(void *datasource, char *ptr, int size) { + size_t bytes; + + LOCK_S; + + bytes = min(_buf_used(streambuf), _buf_cont_read(streambuf)); + bytes = min(bytes, size); + + memcpy(ptr, streambuf->readp, bytes); + _buf_inc_readp(streambuf, bytes); + + UNLOCK_S; + + return bytes; +} + +static decode_state opus_decompress(void) { + frames_t frames; + int n; + static int channels; + u8_t *write_buf; + + LOCK_S; + + if (stream.state <= DISCONNECT && !_buf_used(streambuf)) { + UNLOCK_S; + return DECODE_COMPLETE; + } + + UNLOCK_S; + + if (decode.new_stream) { + struct OpusFileCallbacks cbs; + const struct OpusHead *info; + int err; + + cbs.read = (op_read_func) _read_cb; + cbs.seek = NULL; cbs.tell = NULL; cbs.close = NULL; + + if ((u->of = OP(u, open_callbacks, streambuf, &cbs, NULL, 0, &err)) == NULL) { + LOG_WARN("open_callbacks error: %d", err); + return DECODE_COMPLETE; + } + + u->opened = true; + info = OP(u, head, u->of, -1); + + LOCK_O; + output.next_sample_rate = 48000; + IF_DSD( output.next_fmt = PCM; ) + output.track_start = outputbuf->writep; + if (output.fade_mode) _checkfade(true); + decode.new_stream = false; + UNLOCK_O; + + channels = info->channel_count; + + LOG_INFO("setting track_start"); + } + +#if !FRAME_BUF + LOCK_O_direct; +#endif + +#if FRAME_BUF + IF_DIRECT( + frames = min(_buf_space(outputbuf), _buf_cont_write(outputbuf)) / BYTES_PER_FRAME; + write_buf = u->write_buf; + ); +#else + IF_DIRECT( + frames = min(_buf_space(outputbuf), _buf_cont_write(outputbuf)) / BYTES_PER_FRAME; + write_buf = outputbuf->writep; + ); +#endif + IF_PROCESS( + frames = process.max_in_frames; + write_buf = process.inbuf; + ); + +#if FRAME_BUF + frames = min(frames, FRAME_BUF); +#endif + + // write the decoded frames into outputbuf then unpack them (they are 16 bits) + n = OP(u, read, u->of, (opus_int16*) write_buf, frames * channels, NULL); + +#if FRAME_BUF + LOCK_O_direct; +#endif + + if (n > 0) { + frames_t count; + s16_t *iptr; + ISAMPLE_T *optr; + + frames = n; + count = frames * channels; + + iptr = (s16_t *)write_buf + count; + optr = (ISAMPLE_T *) outputbuf->writep + frames * 2; + + if (channels == 2) { +#if BYTES_PER_FRAME == 4 + memcpy(outputbuf->writep, write_buf, frames * BYTES_PER_FRAME); +#else + while (count--) { + *--optr = *--iptr << 16; + } +#endif + } else if (channels == 1) { + while (count--) { + *--optr = ALIGN(*--iptr); + *--optr = ALIGN(*iptr); + } + } + + IF_DIRECT( + _buf_inc_writep(outputbuf, frames * BYTES_PER_FRAME); + ); + IF_PROCESS( + process.in_frames = frames; + ); + + LOG_SDEBUG("wrote %u frames", frames); + + } else if (n == 0) { + + LOG_INFO("end of stream"); + UNLOCK_O_direct; + return DECODE_COMPLETE; + + } else if (n == OP_HOLE) { + + // recoverable hole in stream, seen when skipping + LOG_DEBUG("hole in stream"); + + } else { + + LOG_INFO("op_read error: %d", n); + UNLOCK_O_direct; + return DECODE_COMPLETE; + } + + UNLOCK_O_direct; + + return DECODE_RUNNING; +} + + +static void opus_open(u8_t size, u8_t rate, u8_t chan, u8_t endianness) { + if (!u->of) { +#if FRAME_BUF + u->write_buf = malloc(FRAME_BUF * BYTES_PER_FRAME); +#endif + } + u->opened = false; +} + +static void opus_close(void) { + u->opened = false; + OP(u, free, u->of); +#if FRAME_BUF + free(u->write_buf); + u->write_buf = NULL; +#endif + u->of = NULL; +} + +static bool load_opus(void) { +#if !LINKALL + void *handle = dlopen(LIBOPUS, RTLD_NOW); + char *err; + + if (!handle) { + LOG_INFO("dlerror: %s", dlerror()); + return false; + } + + u->op_free = dlsym(handle, "op_free"); + u->op_read = dlsym(handle, "op_read"); + u->op_head = dlsym(handle, "op_head"); + u->op_open_callbacks = dlsym(handle, "op_open_callbacks"); + + if ((err = dlerror()) != NULL) { + LOG_INFO("dlerror: %s", err); + return false; + } + + LOG_INFO("loaded "LIBOPUS); +#endif + + return true; +} + +struct codec *register_opus(void) { + static struct codec ret = { + 'u', // id + "ops", // types + 4096, // min read + 20480, // min space + opus_open, // open + opus_close, // close + opus_decompress, // decode + }; + + u = malloc(sizeof(struct opus)); + if (!u) { + return NULL; + } + + u->of = NULL; + u->opened = false; + + if (!load_opus()) { + return NULL; + } + + LOG_INFO("using opus to decode ops"); + return &ret; +} + diff --git a/components/squeezelite/output.c b/components/squeezelite/output.c index 81318187..e79c5c6d 100644 --- a/components/squeezelite/output.c +++ b/components/squeezelite/output.c @@ -387,7 +387,7 @@ void output_init_common(log_level level, const char *device, unsigned output_buf output.supported_rates[i] = rates[i]; } } - else + else { #else { #endif diff --git a/components/squeezelite/output_i2s.c b/components/squeezelite/output_i2s.c index ef761535..63c4b9dd 100644 --- a/components/squeezelite/output_i2s.c +++ b/components/squeezelite/output_i2s.c @@ -131,9 +131,9 @@ static const struct tas575x_cmd_s tas575x_init_sequence[] = { static const i2c_config_t i2c_config = { .mode = I2C_MODE_MASTER, - .sda_io_num = 19, + .sda_io_num = 27, .sda_pullup_en = GPIO_PULLUP_ENABLE, - .scl_io_num = 18, + .scl_io_num = 26, .scl_pullup_en = GPIO_PULLUP_ENABLE, .master.clk_speed = 100000, }; diff --git a/components/squeezelite/slimproto.c b/components/squeezelite/slimproto.c index 79308ba0..e301d13e 100644 --- a/components/squeezelite/slimproto.c +++ b/components/squeezelite/slimproto.c @@ -122,7 +122,7 @@ static void sendHELO(bool reconnect, const char *fixed_cap, const char *var_cap, struct HELO_packet pkt; #if USE_SSL -#if !LINKALL +#if !LINKALL && !NO_SSLSYM if (ssl_loaded) base_cap = SSL_CAP "," BASE_CAP; else base_cap = BASE_CAP; #endif @@ -769,11 +769,6 @@ in_addr_t discover_server(char *default_server) { char *buf; struct pollfd pollinfo; unsigned port; - int attempts = 0; - -#if EMBEDDED - attempts = 5; -#endif int disc_sock = socket(AF_INET, SOCK_DGRAM, 0); @@ -810,7 +805,7 @@ in_addr_t discover_server(char *default_server) { server_addr(default_server, &s.sin_addr.s_addr, &port); } - } while (s.sin_addr.s_addr == 0 && running && (!attempts || --attempts)); + } while (s.sin_addr.s_addr == 0 && running); closesocket(disc_sock); @@ -895,7 +890,7 @@ void slimproto(log_level level, char *server, u8_t mac[6], const char *name, con new_server = 0; - while (running && slimproto_ip) { + while (running) { if (new_server) { previous_server = slimproto_ip; diff --git a/components/squeezelite/squeezelite.h b/components/squeezelite/squeezelite.h index 070dfaf9..9673e10e 100644 --- a/components/squeezelite/squeezelite.h +++ b/components/squeezelite/squeezelite.h @@ -180,6 +180,12 @@ #define USE_SSL 0 #endif +#if defined (NO_SSLSYM) +#undef NO_SSLSYM +#define NO_SSLSYM 1 +#else +#define NO_SSLSYM 0 +#endif #if !LINKALL @@ -190,6 +196,7 @@ #define LIBMAD "libmad.so.0" #define LIBMPG "libmpg123.so.0" #define LIBVORBIS "libvorbisfile.so.3" +#define LIBOPUS "libopusfile.so.0" #define LIBTREMOR "libvorbisidec.so.1" #define LIBFAAD "libfaad.so.2" #define LIBAVUTIL "libavutil.so.%d" @@ -205,6 +212,7 @@ #define LIBMPG "libmpg123.0.dylib" #define LIBVORBIS "libvorbisfile.3.dylib" #define LIBTREMOR "libvorbisidec.1.dylib" +#define LIBOPUS "libopusfile.0.dylib" #define LIBFAAD "libfaad.2.dylib" #define LIBAVUTIL "libavutil.%d.dylib" #define LIBAVCODEC "libavcodec.%d.dylib" @@ -217,6 +225,7 @@ #define LIBMAD "libmad-0.dll" #define LIBMPG "libmpg123-0.dll" #define LIBVORBIS "libvorbisfile.dll" +#define LIBOPUS "libopusfile-0.dll" #define LIBTREMOR "libvorbisidec.dll" #define LIBFAAD "libfaad2.dll" #define LIBAVUTIL "avutil-%d.dll" @@ -226,15 +235,17 @@ #endif #if FREEBSD -#define LIBFLAC "libFLAC.so.11" -#define LIBMAD "libmad.so.2" +#define LIBFLAC "libFLAC.so.8" +#define LIBMAD "libmad.so.0" #define LIBMPG "libmpg123.so.0" -#define LIBVORBIS "libvorbisfile.so.6" +#define LIBVORBIS "libvorbisfile.so.3" #define LIBTREMOR "libvorbisidec.so.1" +#define LIBOPUS "libopusfile.so.1" #define LIBFAAD "libfaad.so.2" #define LIBAVUTIL "libavutil.so.%d" #define LIBAVCODEC "libavcodec.so.%d" #define LIBAVFORMAT "libavformat.so.%d" +#define LIBSOXR "libsoxr.so.0" #endif #endif // !LINKALL @@ -773,6 +784,7 @@ struct codec *register_helixaac(void); struct codec *register_dsd(void); struct codec *register_alac(void); struct codec *register_ff(const char *codec); +struct codec *register_opus(void); //gpio.c #if GPIO @@ -799,7 +811,7 @@ void ir_close(void); #endif // sslsym.c -#if USE_SSL && !LINKALL +#if USE_SSL && !LINKALL && !NO_SSLSYM bool load_ssl_symbols(void); void free_ssl_symbols(void); bool ssl_loaded; diff --git a/components/squeezelite/stream.c b/components/squeezelite/stream.c index 547f8b6c..9561f339 100644 --- a/components/squeezelite/stream.c +++ b/components/squeezelite/stream.c @@ -377,7 +377,7 @@ void stream_init(log_level level, unsigned stream_buf_size) { } #if USE_SSL -#if !LINKALL +#if !LINKALL && !NO_SSLSYM if (ssl_loaded) { #endif SSL_library_init(); @@ -387,7 +387,7 @@ void stream_init(log_level level, unsigned stream_buf_size) { exit(0); } SSL_CTX_set_options(SSLctx, SSL_OP_NO_SSLv2); -#if !LINKALL +#if !LINKALL && !NO_SSLSYM } #endif ssl = NULL; diff --git a/components/squeezelite/vorbis.c b/components/squeezelite/vorbis.c index 39892fc6..f42fd068 100644 --- a/components/squeezelite/vorbis.c +++ b/components/squeezelite/vorbis.c @@ -113,15 +113,15 @@ static size_t _read_cb(void *ptr, size_t size, size_t nmemb, void *datasource) { size_t bytes; LOCK_S; - + bytes = min(_buf_used(streambuf), _buf_cont_read(streambuf)); bytes = min(bytes, size * nmemb); memcpy(ptr, streambuf->readp, bytes); _buf_inc_readp(streambuf, bytes); - + UNLOCK_S; - + return bytes / size; } @@ -137,7 +137,7 @@ static decode_state vorbis_decode(void) { u8_t *write_buf; LOCK_S; - + if (stream.state <= DISCONNECT && !_buf_used(streambuf)) { UNLOCK_S; return DECODE_COMPLETE; @@ -151,7 +151,7 @@ static decode_state vorbis_decode(void) { struct vorbis_info *info; cbs.read_func = _read_cb; - + if (TREMOR(v)) { cbs.seek_func = _seek_cb; cbs.close_func = _close_cb; cbs.tell_func = _tell_cb; } else { @@ -162,13 +162,13 @@ static decode_state vorbis_decode(void) { LOG_WARN("open_callbacks error: %d", err); return DECODE_COMPLETE; } - + v->opened = true; info = OV(v, info, v->vf, -1); - + LOG_INFO("setting track_start"); LOCK_O; - output.next_sample_rate = decode_newstream(info->rate, output.supported_rates); + output.next_sample_rate = decode_newstream(info->rate, output.supported_rates); IF_DSD( output.next_fmt = PCM; ) output.track_start = outputbuf->writep; if (output.fade_mode) _checkfade(true); @@ -186,15 +186,18 @@ static decode_state vorbis_decode(void) { #if !FRAME_BUF LOCK_O_direct; #endif - + +#if FRAME_BUF IF_DIRECT( frames = min(_buf_space(outputbuf), _buf_cont_write(outputbuf)) / BYTES_PER_FRAME; -#if FRAME_BUF write_buf = v->write_buf; -#else - write_buf = outputbuf->writep; -#endif ); +#else + IF_DIRECT( + frames = min(_buf_space(outputbuf), _buf_cont_write(outputbuf)) / BYTES_PER_FRAME; + write_buf = outputbuf->writep; + ); +#endif IF_PROCESS( frames = process.max_in_frames; write_buf = process.inbuf; @@ -244,7 +247,7 @@ static decode_state vorbis_decode(void) { while (count--) { *--optr = *--iptr << 16; } -#endif +#endif } else if (channels == 1) { while (count--) { *--optr = ALIGN(*--iptr); @@ -271,7 +274,7 @@ static decode_state vorbis_decode(void) { // recoverable hole in stream, seen when skipping LOG_DEBUG("hole in stream"); - + } else { LOG_INFO("ov_read error: %d", n); diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index e691c5ff..abff1554 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -113,6 +113,11 @@ menu "Squeezelite-ESP32" default 1 help Include alac library for alac decoding. + config INCLUDE_OPUS + bool "OPUS" + default 1 + help + Include opus library for opus decoding. endmenu menu "Audio Output"