diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml
index d7f5ce8b57..21d974602f 100644
--- a/.github/workflows/quality.yml
+++ b/.github/workflows/quality.yml
@@ -21,7 +21,7 @@ jobs:
- name: Run code quality check suite
run: ./tools/check/check_code_quality.sh
-# Knit for all the modules (https://github.com/Kotlin/kotlinx-knit)
+ # Knit for all the modules (https://github.com/Kotlin/kotlinx-knit)
knit:
name: Knit
runs-on: ubuntu-latest
@@ -31,7 +31,7 @@ jobs:
run: |
./gradlew knit
-# ktlint for all the modules
+ # ktlint for all the modules
ktlint:
name: Kotlin Linter
runs-on: ubuntu-latest
@@ -104,7 +104,7 @@ jobs:
comment_id: ${{ steps.fc.outputs.comment-id }}
})
-# Gradle dependency analysis using https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin
+ # Gradle dependency analysis using https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin
dependency-analysis:
name: Dependency analysis
runs-on: ubuntu-latest
@@ -123,7 +123,7 @@ jobs:
name: dependency-analysis
path: build/reports/dependency-check-report.html
-# Lint for main module
+ # Lint for main module
android-lint:
name: Android Linter
runs-on: ubuntu-latest
@@ -151,7 +151,7 @@ jobs:
path: |
vector/build/reports/*.*
-# Lint for Gplay and Fdroid release APK
+ # Lint for Gplay and Fdroid release APK
apk-lint:
name: Lint APK (${{ matrix.target }})
runs-on: ubuntu-latest
@@ -203,3 +203,26 @@ jobs:
name: detekt-report
path: |
*/build/reports/detekt/detekt.html
+
+ towncrier:
+ name: Towncrier check
+ runs-on: ubuntu-latest
+ if: github.event_name == 'pull_request' && github.head_ref == 'develop'
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up Python 3.8
+ uses: actions/setup-python@v4
+ with:
+ python-version: 3.8
+ - name: Install towncrier
+ run: |
+ python3 -m pip install towncrier
+ - name: Run towncrier
+ # Fetch the pull request' base branch so towncrier will be able to
+ # compare the current branch with the base branch.
+ # Source: https://github.com/actions/checkout/#fetch-all-branches.
+ run: |
+ git fetch --no-tags origin +refs/heads/${BASE_BRANCH}:refs/remotes/origin/${BASE_BRANCH}
+ towncrier check --compare-with origin/${BASE_BRANCH}
+ env:
+ BASE_BRANCH: ${{ github.base_ref }}
diff --git a/dependencies.gradle b/dependencies.gradle
index acd5ad892b..87031dec37 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -96,6 +96,9 @@ ext.libs = [
'flipper' : "com.facebook.flipper:flipper:$flipper",
'flipperNetworkPlugin' : "com.facebook.flipper:flipper-network-plugin:$flipper",
],
+ element : [
+ 'opusencoder' : "io.element.android:opusencoder:1.0.3",
+ ],
squareup : [
'moshi' : "com.squareup.moshi:moshi:$moshi",
'moshiKt' : "com.squareup.moshi:moshi-kotlin:$moshi",
diff --git a/dependencies_groups.gradle b/dependencies_groups.gradle
index b785c7f50b..e89c69a594 100644
--- a/dependencies_groups.gradle
+++ b/dependencies_groups.gradle
@@ -124,6 +124,7 @@ ext.groups = [
'commons-logging',
'info.picocli',
'io.arrow-kt',
+ 'io.element.android',
'io.github.detekt.sarif4k',
'io.github.microutils',
'io.github.reactivecircus.flowbinding',
diff --git a/library/opusencoder/.gitignore b/library/opusencoder/.gitignore
deleted file mode 100644
index ff535c85f5..0000000000
--- a/library/opusencoder/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-*.iml
-.gradle
-/local.properties
-/.idea
-.DS_Store
-/build
-/captures
-*.cxx
-app/.cxx/*
-.externalNativeBuild
\ No newline at end of file
diff --git a/library/opusencoder/build.gradle b/library/opusencoder/build.gradle
deleted file mode 100644
index a825bb98bc..0000000000
--- a/library/opusencoder/build.gradle
+++ /dev/null
@@ -1,40 +0,0 @@
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-
-android {
- ndkVersion "21.3.6528147"
-
- compileSdkVersion 31
-
- buildToolsVersion "31.0.0"
-
- defaultConfig {
- minSdkVersion 18
- targetSdkVersion 31
- versionCode 1
- versionName "1.0"
-
- externalNativeBuild {
- ndk {
- abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
- }
- }
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
- }
-
- externalNativeBuild {
- cmake {
- path "src/main/cpp/CMakeLists.txt"
- }
- }
-}
-
-dependencies {
- implementation libs.androidx.annotation
-}
diff --git a/library/opusencoder/src/main/AndroidManifest.xml b/library/opusencoder/src/main/AndroidManifest.xml
deleted file mode 100644
index 4dd3413820..0000000000
--- a/library/opusencoder/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/library/opusencoder/src/main/cpp/CMakeLists.txt b/library/opusencoder/src/main/cpp/CMakeLists.txt
deleted file mode 100644
index c261af8b90..0000000000
--- a/library/opusencoder/src/main/cpp/CMakeLists.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-# For more information about using CMake with Android Studio, read the
-# documentation: https://d.android.com/studio/projects/add-native-code.html
-
-# Sets the minimum version of CMake required to build the native library.
-
-cmake_minimum_required(VERSION 3.4.1)
-set(CMAKE_CXX_STANDARD 14)
-
-# Creates and names a library, sets it as either STATIC
-# or SHARED, and provides the relative paths to its source code.
-# You can define multiple libraries, and CMake builds them for you.
-# Gradle automatically packages shared libraries with your APK.
-
-set(distribution_OPUS_DIR ${CMAKE_SOURCE_DIR}/opus)
-
-add_library(lib_opus SHARED IMPORTED)
-set_target_properties(lib_opus PROPERTIES IMPORTED_LOCATION
- ${distribution_OPUS_DIR}/libs/${ANDROID_ABI}/libopus.so)
-
-add_library(lib_opusenc SHARED IMPORTED)
-set_target_properties(lib_opusenc PROPERTIES IMPORTED_LOCATION
- ${distribution_OPUS_DIR}/libs/${ANDROID_ABI}/libopusenc.so)
-
-add_library( # Sets the name of the library.
- opuscodec
-
- # Sets the library as a shared library.
- SHARED
-
- # Provides a relative path to your source file(s).
- codec/CodecOggOpus.cpp
- opuscodec.cpp)
-
-target_include_directories(opuscodec PRIVATE
- ${distribution_OPUS_DIR}/include)
-
-# Searches for a specified prebuilt library and stores the path as a
-# variable. Because CMake includes system libraries in the search path by
-# default, you only need to specify the name of the public NDK library
-# you want to add. CMake verifies that the library exists before
-# completing its build.
-
-find_library( # Sets the name of the path variable.
- log-lib
-
- # Specifies the name of the NDK library that
- # you want CMake to locate.
- log )
-
-# Specifies libraries CMake should link to your target library. You
-# can link multiple libraries, such as libraries you define in this
-# build script, prebuilt third-party libraries, or system libraries.
-
-target_link_libraries( # Specifies the target library.
- opuscodec
- android
- lib_opusenc
- lib_opus
- # Links the target library to the log library
- # included in the NDK.
- ${log-lib} )
diff --git a/library/opusencoder/src/main/cpp/codec/CodecOggOpus.cpp b/library/opusencoder/src/main/cpp/codec/CodecOggOpus.cpp
deleted file mode 100644
index d167c69cbf..0000000000
--- a/library/opusencoder/src/main/cpp/codec/CodecOggOpus.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "CodecOggOpus.h"
-#include "../utils/Logger.h"
-
-int ret;
-
-int CodecOggOpus::encoderInit(char* filePath, int sampleRate) {
- // Create default, empty comment header
- comments = ope_comments_create();
- // Mono audio
- int numChannels = 1;
- // Channel Mapping Family 0, used for mono/stereo streams
- int family = 0;
- // Create encoder to encode PCM chunks and write the result to a file with the OggOpus framing
- encoder = ope_encoder_create_file(filePath, comments, sampleRate, numChannels, family, &ret);
- if (ret != OPE_OK) {
- LOGE(TAG, "Creation of OggOpusEnc failed.");
- return ret;
- }
- return OPE_OK;
-}
-
-int CodecOggOpus::setBitrate(int bitrate) {
- ret = ope_encoder_ctl(encoder, OPUS_SET_BITRATE_REQUEST, bitrate);
- if (ret != OPE_OK) {
- LOGE(TAG, "Could not set bitrate.");
- return ret;
- }
- return OPE_OK;
-}
-
-int CodecOggOpus::writeFrame(short* frame, int samplesPerChannel) {
- // Encode the raw PCM-16 buffer to Opus and write it to the ogg file
- return ope_encoder_write(encoder, frame, samplesPerChannel);
-}
-
-void CodecOggOpus::encoderRelease() {
- // Finish any pending encode/write operations
- ope_encoder_drain(encoder);
- // De-init the encoder instance
- ope_encoder_destroy(encoder);
- // De-init the comment header struct
- ope_comments_destroy(comments);
-}
-
-CodecOggOpus::~CodecOggOpus() {
- encoderRelease();
-}
diff --git a/library/opusencoder/src/main/cpp/codec/CodecOggOpus.h b/library/opusencoder/src/main/cpp/codec/CodecOggOpus.h
deleted file mode 100644
index f1035434c5..0000000000
--- a/library/opusencoder/src/main/cpp/codec/CodecOggOpus.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ELEMENT_ANDROID_CODECOGGOPUS_H
-#define ELEMENT_ANDROID_CODECOGGOPUS_H
-
-#include
-/**
- * This class is a wrapper around libopusenc, used to encode and write Opus frames into an Ogg file.
- *
- * The usual flow would be:
- *
- * 1. Use encoderInit to initialize the internal encoder with the sample rate and the path to write the encoded frames to.
- * 2. (Optional) set the bitrate to use.
- * 3. While recording, read PCM-16 chunks from the recorder, feed them to the encoder using writeFrame.
- * 4. When finished, call encoderRelease to free some resources.
- */
-class CodecOggOpus {
-
-private:
- const char *TAG = "CodecOggOpus";
-
- OggOpusEnc* encoder;
- OggOpusComments* comments;
-
-public:
- int encoderInit(char* filePath, int sampleRate);
-
- int setBitrate(int bitrate);
-
- int writeFrame(short *frame, int samplesPerChannel);
-
- void encoderRelease();
-
- ~CodecOggOpus();
-};
-
-
-#endif //ELEMENT_ANDROID_CODECOGGOPUS_H
diff --git a/library/opusencoder/src/main/cpp/opus/include/opus.h b/library/opusencoder/src/main/cpp/opus/include/opus.h
deleted file mode 100644
index d282f21d25..0000000000
--- a/library/opusencoder/src/main/cpp/opus/include/opus.h
+++ /dev/null
@@ -1,981 +0,0 @@
-/* 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
- *
- * - audio_frame is the audio data in opus_int16 (or float for opus_encode_float())
- * - frame_size is the duration of the frame in samples (per channel)
- * - packet is the byte array to which the compressed data is written
- * - max_packet is the maximum number of bytes that can be written in the packet (4000 bytes is recommended).
- * Do not use max_packet to control VBR target bitrate, instead use the #OPUS_SET_BITRATE CTL.
- *
- *
- * 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/library/opusencoder/src/main/cpp/opus/include/opus_custom.h b/library/opusencoder/src/main/cpp/opus/include/opus_custom.h
deleted file mode 100644
index 41f36bf2fb..0000000000
--- a/library/opusencoder/src/main/cpp/opus/include/opus_custom.h
+++ /dev/null
@@ -1,342 +0,0 @@
-/* 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/library/opusencoder/src/main/cpp/opus/include/opus_defines.h b/library/opusencoder/src/main/cpp/opus/include/opus_defines.h
deleted file mode 100644
index fbf5d0eb74..0000000000
--- a/library/opusencoder/src/main/cpp/opus/include/opus_defines.h
+++ /dev/null
@@ -1,788 +0,0 @@
-/* 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
-
-/** 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)
-
-/**@}*/
-
-/** @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/library/opusencoder/src/main/cpp/opus/include/opus_multistream.h b/library/opusencoder/src/main/cpp/opus/include/opus_multistream.h
deleted file mode 100644
index babcee6905..0000000000
--- a/library/opusencoder/src/main/cpp/opus/include/opus_multistream.h
+++ /dev/null
@@ -1,660 +0,0 @@
-/* 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/library/opusencoder/src/main/cpp/opus/include/opus_projection.h b/library/opusencoder/src/main/cpp/opus/include/opus_projection.h
deleted file mode 100644
index 9dabf4e85c..0000000000
--- a/library/opusencoder/src/main/cpp/opus/include/opus_projection.h
+++ /dev/null
@@ -1,568 +0,0 @@
-/* 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/library/opusencoder/src/main/cpp/opus/include/opus_types.h b/library/opusencoder/src/main/cpp/opus/include/opus_types.h
deleted file mode 100644
index 7cf675580f..0000000000
--- a/library/opusencoder/src/main/cpp/opus/include/opus_types.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/* (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/library/opusencoder/src/main/cpp/opus/include/opusenc.h b/library/opusencoder/src/main/cpp/opus/include/opusenc.h
deleted file mode 100644
index ca1a5efe8e..0000000000
--- a/library/opusencoder/src/main/cpp/opus/include/opusenc.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/* Copyright (c) 2017 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.
-*/
-
-#if !defined(_opusenc_h)
-# define _opusenc_h (1)
-
-/**\mainpage
- \section Introduction
-
- This is the documentation for the libopusenc C API.
-
- The libopusenc package provides a convenient high-level API for
- encoding Ogg Opus files.
-
- \section Organization
-
- The main API is divided into several sections:
- - \ref encoding
- - \ref comments
- - \ref encoder_ctl
- - \ref callbacks
- - \ref error_codes
-
- \section Overview
-
- The libopusfile API provides an easy way to encode Ogg Opus files using
- libopus.
-*/
-
-# if defined(__cplusplus)
-extern "C" {
-# endif
-
-#include
-
-#ifndef OPE_EXPORT
-# if defined(WIN32)
-# if defined(OPE_BUILD) && defined(DLL_EXPORT)
-# define OPE_EXPORT __declspec(dllexport)
-# else
-# define OPE_EXPORT
-# endif
-# elif defined(__GNUC__) && defined(OPE_BUILD)
-# define OPE_EXPORT __attribute__ ((visibility ("default")))
-# else
-# define OPE_EXPORT
-# endif
-#endif
-
-/**\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.*/
-/*@{*/
-
-
-/* Bump this when we change the API. */
-/** API version for this header. Can be used to check for features at compile time. */
-#define OPE_API_VERSION 0
-
-#define OPE_OK 0
-/* Based on the relevant libopus code minus 10. */
-#define OPE_BAD_ARG -11
-#define OPE_INTERNAL_ERROR -13
-#define OPE_UNIMPLEMENTED -15
-#define OPE_ALLOC_FAIL -17
-
-/* Specific to libopusenc. */
-#define OPE_CANNOT_OPEN -30
-#define OPE_TOO_LATE -31
-#define OPE_UNRECOVERABLE -32
-#define OPE_INVALID_PICTURE -33
-#define OPE_INVALID_ICON -34
-/*@}*/
-/*@}*/
-
-
-/* These are the "raw" request values -- they should usually not be used. */
-#define OPE_SET_DECISION_DELAY_REQUEST 14000
-#define OPE_GET_DECISION_DELAY_REQUEST 14001
-#define OPE_SET_MUXING_DELAY_REQUEST 14002
-#define OPE_GET_MUXING_DELAY_REQUEST 14003
-#define OPE_SET_COMMENT_PADDING_REQUEST 14004
-#define OPE_GET_COMMENT_PADDING_REQUEST 14005
-#define OPE_SET_SERIALNO_REQUEST 14006
-#define OPE_GET_SERIALNO_REQUEST 14007
-#define OPE_SET_PACKET_CALLBACK_REQUEST 14008
-/*#define OPE_GET_PACKET_CALLBACK_REQUEST 14009*/
-#define OPE_SET_HEADER_GAIN_REQUEST 14010
-#define OPE_GET_HEADER_GAIN_REQUEST 14011
-
-/**\defgroup encoder_ctl Encoding Options*/
-/*@{*/
-
-/**\name Control parameters
-
- Macros for setting encoder options.*/
-/*@{*/
-
-#define OPE_SET_DECISION_DELAY(x) OPE_SET_DECISION_DELAY_REQUEST, __opus_check_int(x)
-#define OPE_GET_DECISION_DELAY(x) OPE_GET_DECISION_DELAY_REQUEST, __opus_check_int_ptr(x)
-#define OPE_SET_MUXING_DELAY(x) OPE_SET_MUXING_DELAY_REQUEST, __opus_check_int(x)
-#define OPE_GET_MUXING_DELAY(x) OPE_GET_MUXING_DELAY_REQUEST, __opus_check_int_ptr(x)
-#define OPE_SET_COMMENT_PADDING(x) OPE_SET_COMMENT_PADDING_REQUEST, __opus_check_int(x)
-#define OPE_GET_COMMENT_PADDING(x) OPE_GET_COMMENT_PADDING_REQUEST, __opus_check_int_ptr(x)
-#define OPE_SET_SERIALNO(x) OPE_SET_SERIALNO_REQUEST, __opus_check_int(x)
-#define OPE_GET_SERIALNO(x) OPE_GET_SERIALNO_REQUEST, __opus_check_int_ptr(x)
-/* FIXME: Add type-checking macros to these. */
-#define OPE_SET_PACKET_CALLBACK(x,u) OPE_SET_PACKET_CALLBACK_REQUEST, (x), (u)
-/*#define OPE_GET_PACKET_CALLBACK(x,u) OPE_GET_PACKET_CALLBACK_REQUEST, (x), (u)*/
-#define OPE_SET_HEADER_GAIN(x,u) OPE_SET_HEADER_GAIN_REQUEST, __opus_check_int(x)
-#define OPE_GET_HEADER_GAIN(x,u) OPE_GET_HEADER_GAIN_REQUEST, __opus_check_int_ptr(x)
-/*@}*/
-/*@}*/
-
-/**\defgroup callbacks Callback Functions */
-/*@{*/
-
-/**\name Callback functions
-
- These are the callbacks that can be implemented for an encoder.*/
-/*@{*/
-
-/** Called for writing a page. */
-typedef int (*ope_write_func)(void *user_data, const unsigned char *ptr, opus_int32 len);
-
-/** Called for closing a stream. */
-typedef int (*ope_close_func)(void *user_data);
-
-/** Called on every packet encoded (including header). */
-typedef int (*ope_packet_func)(void *user_data, const unsigned char *packet_ptr, opus_int32 packet_len, opus_uint32 flags);
-
-/** Callback functions for accessing the stream. */
-typedef struct {
- /** Callback for writing to the stream. */
- ope_write_func write;
- /** Callback for closing the stream. */
- ope_close_func close;
-} OpusEncCallbacks;
-/*@}*/
-/*@}*/
-
-/** Opaque comments struct. */
-typedef struct OggOpusComments OggOpusComments;
-
-/** Opaque encoder struct. */
-typedef struct OggOpusEnc OggOpusEnc;
-
-/**\defgroup comments Comments Handling */
-/*@{*/
-
-/**\name Functions for handling comments
-
- These functions make it possible to add comments and pictures to Ogg Opus files.*/
-/*@{*/
-
-/** Create a new comments object.
- \return Newly-created comments object. */
-OPE_EXPORT OggOpusComments *ope_comments_create(void);
-
-/** Create a deep copy of a comments object.
- \param comments Comments object to copy
- \return Deep copy of input. */
-OPE_EXPORT OggOpusComments *ope_comments_copy(OggOpusComments *comments);
-
-/** Destroys a comments object.
- \param comments Comments object to destroy*/
-OPE_EXPORT void ope_comments_destroy(OggOpusComments *comments);
-
-/** Add a comment.
- \param[in,out] comments Where to add the comments
- \param tag Tag for the comment (must not contain = char)
- \param val Value for the tag
- \return Error code
- */
-OPE_EXPORT int ope_comments_add(OggOpusComments *comments, const char *tag, const char *val);
-
-/** Add a comment as a single tag=value string.
- \param[in,out] comments Where to add the comments
- \param tag_and_val string of the form tag=value (must contain = char)
- \return Error code
- */
-OPE_EXPORT int ope_comments_add_string(OggOpusComments *comments, const char *tag_and_val);
-
-/** Add a picture.
- \param[in,out] comments Where to add the comments
- \param filename File name for the picture
- \param picture_type Type of picture (-1 for default)
- \param description Description (NULL means no comment)
- \return Error code
- */
-OPE_EXPORT int ope_comments_add_picture(OggOpusComments *comments, const char *filename, int picture_type, const char *description);
-
-/*@}*/
-/*@}*/
-
-/**\defgroup encoding Encoding */
-/*@{*/
-
-/**\name Functions for encoding Ogg Opus files
-
- These functions make it possible to encode Ogg Opus files.*/
-/*@{*/
-
-/** Create a new OggOpus file.
- \param path Path where to create the file
- \param comments Comments associated with the stream
- \param rate Input sampling rate (48 kHz is faster)
- \param channels Number of channels
- \param family Mapping family (0 for mono/stereo, 1 for surround)
- \param[out] error Error code (NULL if no error is to be returned)
- \return Newly-created encoder.
- */
-OPE_EXPORT OggOpusEnc *ope_encoder_create_file(const char *path, OggOpusComments *comments, opus_int32 rate, int channels, int family, int *error);
-
-/** Create a new OggOpus stream to be handled using callbacks
- \param callbacks Callback functions
- \param user_data Pointer to be associated with the stream and passed to the callbacks
- \param comments Comments associated with the stream
- \param rate Input sampling rate (48 kHz is faster)
- \param channels Number of channels
- \param family Mapping family (0 for mono/stereo, 1 for surround)
- \param[out] error Error code (NULL if no error is to be returned)
- \return Newly-created encoder.
- */
-OPE_EXPORT OggOpusEnc *ope_encoder_create_callbacks(const OpusEncCallbacks *callbacks, void *user_data,
- OggOpusComments *comments, opus_int32 rate, int channels, int family, int *error);
-
-/** Create a new OggOpus stream to be used along with.ope_encoder_get_page().
- This is mostly useful for muxing with other streams.
- \param comments Comments associated with the stream
- \param rate Input sampling rate (48 kHz is faster)
- \param channels Number of channels
- \param family Mapping family (0 for mono/stereo, 1 for surround)
- \param[out] error Error code (NULL if no error is to be returned)
- \return Newly-created encoder.
- */
-OPE_EXPORT OggOpusEnc *ope_encoder_create_pull(OggOpusComments *comments, opus_int32 rate, int channels, int family, int *error);
-
-/** Add/encode any number of float samples to the stream.
- \param[in,out] enc Encoder
- \param pcm Floating-point PCM values in the +/-1 range (interleaved if multiple channels)
- \param samples_per_channel Number of samples for each channel
- \return Error code*/
-OPE_EXPORT int ope_encoder_write_float(OggOpusEnc *enc, const float *pcm, int samples_per_channel);
-
-/** Add/encode any number of 16-bit linear samples to the stream.
- \param[in,out] enc Encoder
- \param pcm Linear 16-bit PCM values in the [-32768,32767] range (interleaved if multiple channels)
- \param samples_per_channel Number of samples for each channel
- \return Error code*/
-OPE_EXPORT int ope_encoder_write(OggOpusEnc *enc, const opus_int16 *pcm, int samples_per_channel);
-
-/** Get the next page from the stream (only if using ope_encoder_create_pull()).
- \param[in,out] enc Encoder
- \param[out] page Next available encoded page
- \param[out] len Size (in bytes) of the page returned
- \param flush If non-zero, forces a flush of the page (if any data avaiable)
- \return 1 if there is a page available, 0 if not. */
-OPE_EXPORT int ope_encoder_get_page(OggOpusEnc *enc, unsigned char **page, opus_int32 *len, int flush);
-
-/** Finalizes the stream, but does not deallocate the object.
- \param[in,out] enc Encoder
- \return Error code
- */
-OPE_EXPORT int ope_encoder_drain(OggOpusEnc *enc);
-
-/** Deallocates the obect. Make sure to ope_drain() first.
- \param[in,out] enc Encoder
- */
-OPE_EXPORT void ope_encoder_destroy(OggOpusEnc *enc);
-
-/** Ends the stream and create a new stream within the same file.
- \param[in,out] enc Encoder
- \param comments Comments associated with the stream
- \return Error code
- */
-OPE_EXPORT int ope_encoder_chain_current(OggOpusEnc *enc, OggOpusComments *comments);
-
-/** Ends the stream and create a new file.
- \param[in,out] enc Encoder
- \param path Path where to write the new file
- \param comments Comments associated with the stream
- \return Error code
- */
-OPE_EXPORT int ope_encoder_continue_new_file(OggOpusEnc *enc, const char *path, OggOpusComments *comments);
-
-/** Ends the stream and create a new file (callback-based).
- \param[in,out] enc Encoder
- \param user_data Pointer to be associated with the new stream and passed to the callbacks
- \param comments Comments associated with the stream
- \return Error code
- */
-OPE_EXPORT int ope_encoder_continue_new_callbacks(OggOpusEnc *enc, void *user_data, OggOpusComments *comments);
-
-/** Write out the header now rather than wait for audio to begin.
- \param[in,out] enc Encoder
- \return Error code
- */
-OPE_EXPORT int ope_encoder_flush_header(OggOpusEnc *enc);
-
-/** Sets encoder options.
- \param[in,out] enc Encoder
- \param request Use a request macro
- \return Error code
- */
-OPE_EXPORT int ope_encoder_ctl(OggOpusEnc *enc, int request, ...);
-
-/** Converts a libopusenc error code into a human readable string.
- *
- * @param error Error number
- * @returns Error string
- */
-OPE_EXPORT const char *ope_strerror(int error);
-
-/** Returns a string representing the version of libopusenc being used at run time.
- \return A string describing the version of this library */
-OPE_EXPORT const char *ope_get_version_string(void);
-
-/** ABI version for this header. Can be used to check for features at run time.
- \return An integer representing the ABI version */
-OPE_EXPORT int ope_get_abi_version(void);
-
-/*@}*/
-/*@}*/
-
-# if defined(__cplusplus)
-}
-# endif
-
-#endif
diff --git a/library/opusencoder/src/main/cpp/opus/libs/arm64-v8a/libopus.so b/library/opusencoder/src/main/cpp/opus/libs/arm64-v8a/libopus.so
deleted file mode 100755
index 466c1df13a..0000000000
Binary files a/library/opusencoder/src/main/cpp/opus/libs/arm64-v8a/libopus.so and /dev/null differ
diff --git a/library/opusencoder/src/main/cpp/opus/libs/arm64-v8a/libopusenc.so b/library/opusencoder/src/main/cpp/opus/libs/arm64-v8a/libopusenc.so
deleted file mode 100755
index 9389efd919..0000000000
Binary files a/library/opusencoder/src/main/cpp/opus/libs/arm64-v8a/libopusenc.so and /dev/null differ
diff --git a/library/opusencoder/src/main/cpp/opus/libs/armeabi-v7a/libopus.so b/library/opusencoder/src/main/cpp/opus/libs/armeabi-v7a/libopus.so
deleted file mode 100755
index d4bb6d427e..0000000000
Binary files a/library/opusencoder/src/main/cpp/opus/libs/armeabi-v7a/libopus.so and /dev/null differ
diff --git a/library/opusencoder/src/main/cpp/opus/libs/armeabi-v7a/libopusenc.so b/library/opusencoder/src/main/cpp/opus/libs/armeabi-v7a/libopusenc.so
deleted file mode 100755
index 655f296d90..0000000000
Binary files a/library/opusencoder/src/main/cpp/opus/libs/armeabi-v7a/libopusenc.so and /dev/null differ
diff --git a/library/opusencoder/src/main/cpp/opus/libs/x86/libopus.so b/library/opusencoder/src/main/cpp/opus/libs/x86/libopus.so
deleted file mode 100755
index 0acf14474b..0000000000
Binary files a/library/opusencoder/src/main/cpp/opus/libs/x86/libopus.so and /dev/null differ
diff --git a/library/opusencoder/src/main/cpp/opus/libs/x86/libopusenc.so b/library/opusencoder/src/main/cpp/opus/libs/x86/libopusenc.so
deleted file mode 100755
index f862ea15f7..0000000000
Binary files a/library/opusencoder/src/main/cpp/opus/libs/x86/libopusenc.so and /dev/null differ
diff --git a/library/opusencoder/src/main/cpp/opus/libs/x86_64/libopus.so b/library/opusencoder/src/main/cpp/opus/libs/x86_64/libopus.so
deleted file mode 100755
index 1480c8c586..0000000000
Binary files a/library/opusencoder/src/main/cpp/opus/libs/x86_64/libopus.so and /dev/null differ
diff --git a/library/opusencoder/src/main/cpp/opus/libs/x86_64/libopusenc.so b/library/opusencoder/src/main/cpp/opus/libs/x86_64/libopusenc.so
deleted file mode 100755
index f744374fe0..0000000000
Binary files a/library/opusencoder/src/main/cpp/opus/libs/x86_64/libopusenc.so and /dev/null differ
diff --git a/library/opusencoder/src/main/cpp/opuscodec.cpp b/library/opusencoder/src/main/cpp/opuscodec.cpp
deleted file mode 100644
index 51bd656c5d..0000000000
--- a/library/opusencoder/src/main/cpp/opuscodec.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include
-#include "codec/CodecOggOpus.h"
-
-CodecOggOpus oggCodec;
-
-extern "C"
-JNIEXPORT jint JNICALL Java_im_vector_opusencoder_OggOpusEncoder_init(JNIEnv *env, jobject thiz, jstring file_path, jint sample_rate) {
- char *path = (char*) env->GetStringUTFChars(file_path, 0);
- return oggCodec.encoderInit(path, sample_rate);
-}
-
-extern "C"
-JNIEXPORT jint JNICALL Java_im_vector_opusencoder_OggOpusEncoder_writeFrame(JNIEnv *env, jobject thiz, jshortArray shorts, jint samples_per_channel) {
- jshort *nativeShorts = env->GetShortArrayElements(shorts, 0);
- return oggCodec.writeFrame((short *) nativeShorts, samples_per_channel);
-}
-
-extern "C"
-JNIEXPORT jint JNICALL Java_im_vector_opusencoder_OggOpusEncoder_setBitrate(JNIEnv *env, jobject thiz, jint bitrate) {
- return oggCodec.setBitrate(bitrate);
-}
-
-extern "C"
-JNIEXPORT void JNICALL Java_im_vector_opusencoder_OggOpusEncoder_encoderRelease(JNIEnv *env, jobject thiz) {
- oggCodec.encoderRelease();
-}
diff --git a/library/opusencoder/src/main/cpp/utils/Logger.h b/library/opusencoder/src/main/cpp/utils/Logger.h
deleted file mode 100644
index 9efdc51d41..0000000000
--- a/library/opusencoder/src/main/cpp/utils/Logger.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef ANDROIDOPUSENCODER_LOGGER_H
-#define ANDROIDOPUSENCODER_LOGGER_H
-#include
-
-
-#define LOGE(tag, ...) __android_log_print(ANDROID_LOG_ERROR, tag, __VA_ARGS__)
-#define LOGW(tag, ...) __android_log_print(ANDROID_LOG_WARN, tag, __VA_ARGS__)
-#define LOGI(tag, ...) __android_log_print(ANDROID_LOG_INFO, tag, __VA_ARGS__)
-#define LOGD(tag, ...) __android_log_print(ANDROID_LOG_DEBUG, tag, __VA_ARGS__)
-
-#endif //ANDROIDOPUSENCODER_LOGGER_H
diff --git a/library/opusencoder/src/main/java/im/vector/opusencoder/OggOpusEncoder.kt b/library/opusencoder/src/main/java/im/vector/opusencoder/OggOpusEncoder.kt
deleted file mode 100644
index 8af11f8516..0000000000
--- a/library/opusencoder/src/main/java/im/vector/opusencoder/OggOpusEncoder.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package im.vector.opusencoder
-
-import android.util.Log
-import androidx.annotation.IntRange
-import im.vector.opusencoder.configuration.SampleRate
-
-/**
- * JNI bridge to CodecOggOpus in the native opuscodec library.
- */
-class OggOpusEncoder {
-
- companion object {
-
- private const val TAG = "OggOpusEncoder"
-
- init {
- try {
- System.loadLibrary("opuscodec")
- } catch (e: Exception) {
- Log.e(TAG, "Couldn't load opus library: $e")
- }
- }
- }
-
- fun init(filePath: String, sampleRate: SampleRate): Int {
- return init(filePath, sampleRate.value)
- }
- private external fun init(filePath: String, sampleRate: Int): Int
-
- external fun setBitrate(@IntRange(from = 500, to = 512000) bitrate: Int): Int
-
- fun encode(shorts: ShortArray, samplesPerChannel: Int): Int {
- return writeFrame(shorts, samplesPerChannel)
- }
- private external fun writeFrame(shorts: ShortArray, samplesPerChannel: Int): Int
-
- fun release() {
- encoderRelease()
- }
- private external fun encoderRelease()
-}
diff --git a/library/opusencoder/src/main/java/im/vector/opusencoder/configuration/SampleRate.kt b/library/opusencoder/src/main/java/im/vector/opusencoder/configuration/SampleRate.kt
deleted file mode 100644
index e1a8f10725..0000000000
--- a/library/opusencoder/src/main/java/im/vector/opusencoder/configuration/SampleRate.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package im.vector.opusencoder.configuration
-
-/**
- * Sampling rate of the input signal in Hz.
- */
-sealed class SampleRate private constructor(val value: Int) {
- object Rate8khz : SampleRate(8000)
- object Rate12kHz : SampleRate(12000)
- object Rate16kHz : SampleRate(16000)
- object Rate24KHz : SampleRate(24000)
- object Rate48kHz : SampleRate(48000)
-}
diff --git a/settings.gradle b/settings.gradle
index 0f537ed48a..782d2caf4a 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -8,4 +8,3 @@ include ':library:attachment-viewer'
include ':library:diff-match-patch'
include ':library:multipicker'
include ':matrix-sdk-android-flow'
-include ':library:opusencoder'
diff --git a/vector/build.gradle b/vector/build.gradle
index dd160f9574..3ca843309b 100644
--- a/vector/build.gradle
+++ b/vector/build.gradle
@@ -342,8 +342,6 @@ android {
}
dependencies {
- implementation project(':library:opusencoder')
-
implementation project(":vector-config")
implementation project(":matrix-sdk-android")
implementation project(":matrix-sdk-android-flow")
@@ -381,6 +379,8 @@ dependencies {
implementation libs.androidx.datastorepreferences
+ // Opus Encoder
+ implementation libs.element.opusencoder
// Log
implementation libs.jakewharton.timber
diff --git a/vector/src/androidTest/java/im/vector/app/features/voice/VoiceRecorderProviderTests.kt b/vector/src/androidTest/java/im/vector/app/features/voice/VoiceRecorderProviderTests.kt
index c7105b613f..61f745178c 100644
--- a/vector/src/androidTest/java/im/vector/app/features/voice/VoiceRecorderProviderTests.kt
+++ b/vector/src/androidTest/java/im/vector/app/features/voice/VoiceRecorderProviderTests.kt
@@ -19,6 +19,7 @@ package im.vector.app.features.voice
import android.os.Build
import androidx.test.platform.app.InstrumentationRegistry
import im.vector.app.AndroidVersionTestOverrider
+import im.vector.app.features.DefaultVectorFeatures
import org.amshove.kluent.shouldBeInstanceOf
import org.junit.After
import org.junit.Test
@@ -26,7 +27,7 @@ import org.junit.Test
class VoiceRecorderProviderTests {
private val context = InstrumentationRegistry.getInstrumentation().targetContext
- private val provider = VoiceRecorderProvider(context)
+ private val provider = VoiceRecorderProvider(context, DefaultVectorFeatures())
@After
fun tearDown() {
diff --git a/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt b/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
index 5506c2497c..9533e93ed1 100644
--- a/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
+++ b/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
@@ -70,6 +70,11 @@ class DebugFeaturesStateFactory @Inject constructor(
key = DebugFeatureKeys.allowExternalUnifiedPushDistributors,
factory = VectorFeatures::allowExternalUnifiedPushDistributors
),
+ createBooleanFeature(
+ label = "Force usage of OpusEncoder library",
+ key = DebugFeatureKeys.forceUsageOfOpusEncoder,
+ factory = VectorFeatures::forceUsageOfOpusEncoder
+ ),
createBooleanFeature(
label = "Start DM on first message",
key = DebugFeatureKeys.startDmOnFirstMsg,
diff --git a/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt b/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
index 7f74737719..1b178b5f48 100644
--- a/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
+++ b/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
@@ -66,6 +66,9 @@ class DebugVectorFeatures(
override fun isScreenSharingEnabled(): Boolean = read(DebugFeatureKeys.screenSharing)
?: vectorFeatures.isScreenSharingEnabled()
+ override fun forceUsageOfOpusEncoder(): Boolean = read(DebugFeatureKeys.forceUsageOfOpusEncoder)
+ ?: vectorFeatures.forceUsageOfOpusEncoder()
+
override fun shouldStartDmOnFirstMessage(): Boolean = read(DebugFeatureKeys.startDmOnFirstMsg)
?: vectorFeatures.shouldStartDmOnFirstMessage()
@@ -126,5 +129,6 @@ object DebugFeatureKeys {
val allowExternalUnifiedPushDistributors = booleanPreferencesKey("allow-external-unified-push-distributors")
val liveLocationSharing = booleanPreferencesKey("live-location-sharing")
val screenSharing = booleanPreferencesKey("screen-sharing")
+ val forceUsageOfOpusEncoder = booleanPreferencesKey("force-usage-of-opus-encoder")
val startDmOnFirstMsg = booleanPreferencesKey("start-dm-on-first-msg")
}
diff --git a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt
index ad49916a07..eaacb0498e 100644
--- a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt
+++ b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt
@@ -30,6 +30,7 @@ interface VectorFeatures {
fun isOnboardingCombinedLoginEnabled(): Boolean
fun allowExternalUnifiedPushDistributors(): Boolean
fun isScreenSharingEnabled(): Boolean
+ fun forceUsageOfOpusEncoder(): Boolean
fun shouldStartDmOnFirstMessage(): Boolean
enum class OnboardingVariant {
@@ -49,5 +50,6 @@ class DefaultVectorFeatures : VectorFeatures {
override fun isOnboardingCombinedLoginEnabled() = false
override fun allowExternalUnifiedPushDistributors(): Boolean = Config.ALLOW_EXTERNAL_UNIFIED_PUSH_DISTRIBUTORS
override fun isScreenSharingEnabled(): Boolean = true
+ override fun forceUsageOfOpusEncoder(): Boolean = false
override fun shouldStartDmOnFirstMessage(): Boolean = false
}
diff --git a/vector/src/main/java/im/vector/app/features/voice/VoiceRecorderL.kt b/vector/src/main/java/im/vector/app/features/voice/VoiceRecorderL.kt
index f0eed41637..c8eeb45635 100644
--- a/vector/src/main/java/im/vector/app/features/voice/VoiceRecorderL.kt
+++ b/vector/src/main/java/im/vector/app/features/voice/VoiceRecorderL.kt
@@ -23,8 +23,8 @@ import android.media.MediaRecorder
import android.media.audiofx.AutomaticGainControl
import android.media.audiofx.NoiseSuppressor
import android.os.Build
-import im.vector.opusencoder.OggOpusEncoder
-import im.vector.opusencoder.configuration.SampleRate
+import io.element.android.opusencoder.OggOpusEncoder
+import io.element.android.opusencoder.configuration.SampleRate
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.isActive
diff --git a/vector/src/main/java/im/vector/app/features/voice/VoiceRecorderProvider.kt b/vector/src/main/java/im/vector/app/features/voice/VoiceRecorderProvider.kt
index d24e7fcc8c..28693ca287 100644
--- a/vector/src/main/java/im/vector/app/features/voice/VoiceRecorderProvider.kt
+++ b/vector/src/main/java/im/vector/app/features/voice/VoiceRecorderProvider.kt
@@ -18,14 +18,16 @@ package im.vector.app.features.voice
import android.content.Context
import android.os.Build
+import im.vector.app.features.VectorFeatures
import kotlinx.coroutines.Dispatchers
import javax.inject.Inject
class VoiceRecorderProvider @Inject constructor(
private val context: Context,
+ private val vectorFeatures: VectorFeatures,
) {
fun provideVoiceRecorder(): VoiceRecorder {
- return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && vectorFeatures.forceUsageOfOpusEncoder().not()) {
VoiceRecorderQ(context)
} else {
VoiceRecorderL(context, Dispatchers.IO)