/* * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef API_AUDIO_CODECS_OPUS_AUDIO_ENCODER_MULTI_CHANNEL_OPUS_CONFIG_H_ #define API_AUDIO_CODECS_OPUS_AUDIO_ENCODER_MULTI_CHANNEL_OPUS_CONFIG_H_ #include #include #include "absl/types/optional.h" #include "api/audio_codecs/opus/audio_encoder_opus_config.h" #include "rtc_base/system/rtc_export.h" namespace webrtc { struct RTC_EXPORT AudioEncoderMultiChannelOpusConfig { static constexpr int kDefaultFrameSizeMs = 20; // Opus API allows a min bitrate of 500bps, but Opus documentation suggests // bitrate should be in the range of 6000 to 510000, inclusive. static constexpr int kMinBitrateBps = 6000; static constexpr int kMaxBitrateBps = 510000; AudioEncoderMultiChannelOpusConfig(); AudioEncoderMultiChannelOpusConfig(const AudioEncoderMultiChannelOpusConfig&); ~AudioEncoderMultiChannelOpusConfig(); AudioEncoderMultiChannelOpusConfig& operator=( const AudioEncoderMultiChannelOpusConfig&); int frame_size_ms; size_t num_channels; enum class ApplicationMode { kVoip, kAudio }; ApplicationMode application; int bitrate_bps; bool fec_enabled; bool cbr_enabled; bool dtx_enabled; int max_playback_rate_hz; std::vector supported_frame_lengths_ms; int complexity; // Number of mono/stereo Opus streams. int num_streams; // Number of channel pairs coupled together, see RFC 7845 section // 5.1.1. Has to be less than the number of streams int coupled_streams; // Channel mapping table, defines the mapping from encoded streams to input // channels. See RFC 7845 section 5.1.1. std::vector channel_mapping; bool IsOk() const; }; } // namespace webrtc #endif // API_AUDIO_CODECS_OPUS_AUDIO_ENCODER_MULTI_CHANNEL_OPUS_CONFIG_H_