Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1285)

Unified Diff: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h

Issue 2947563002: Revert of Opus implementation of the AudioEncoderFactoryTemplate API (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h
diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h
index 93895c21db2a8af16b4b286e4d96b27fa61f5f41..a1a4d7069b7a14cdcf374e14c272cf19ef0c9151 100644
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h
@@ -18,7 +18,6 @@
#include "webrtc/api/audio_codecs/audio_encoder.h"
#include "webrtc/api/audio_codecs/audio_format.h"
-#include "webrtc/api/audio_codecs/opus/audio_encoder_opus_config.h"
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/optional.h"
#include "webrtc/base/protobuf_utils.h"
@@ -32,31 +31,70 @@
struct CodecInst;
-class AudioEncoderOpusImpl final : public AudioEncoder {
+class AudioEncoderOpus final : public AudioEncoder {
public:
- static AudioEncoderOpusConfig CreateConfig(const CodecInst& codec_inst);
- static rtc::Optional<AudioEncoderOpusConfig> SdpToConfig(
- const SdpAudioFormat& format);
+ enum ApplicationMode {
+ kVoip = 0,
+ kAudio = 1,
+ };
- // Returns empty if the current bitrate falls within the hysteresis window,
- // defined by complexity_threshold_bps +/- complexity_threshold_window_bps.
- // Otherwise, returns the current complexity depending on whether the current
- // bitrate is above or below complexity_threshold_bps.
- static rtc::Optional<int> GetNewComplexity(
- const AudioEncoderOpusConfig& config);
+ struct Config {
+ Config();
+ Config(const Config&);
+ ~Config();
+ Config& operator=(const Config&);
+
+ bool IsOk() const;
+ int GetBitrateBps() const;
+ // Returns empty if the current bitrate falls within the hysteresis window,
+ // defined by complexity_threshold_bps +/- complexity_threshold_window_bps.
+ // Otherwise, returns the current complexity depending on whether the
+ // current bitrate is above or below complexity_threshold_bps.
+ rtc::Optional<int> GetNewComplexity() const;
+
+ static constexpr int kDefaultFrameSizeMs = 20;
+ int frame_size_ms = kDefaultFrameSizeMs;
+ size_t num_channels = 1;
+ int payload_type = 120;
+ ApplicationMode application = kVoip;
+ rtc::Optional<int> bitrate_bps; // Unset means to use default value.
+ bool fec_enabled = false;
+ bool cbr_enabled = false;
+ int max_playback_rate_hz = 48000;
+ int complexity = kDefaultComplexity;
+ // This value may change in the struct's constructor.
+ int low_rate_complexity = kDefaultComplexity;
+ // low_rate_complexity is used when the bitrate is below this threshold.
+ int complexity_threshold_bps = 12500;
+ int complexity_threshold_window_bps = 1500;
+ bool dtx_enabled = false;
+ std::vector<int> supported_frame_lengths_ms;
+ int uplink_bandwidth_update_interval_ms = 200;
+
+ private:
+#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) || defined(WEBRTC_ARCH_ARM)
+ // If we are on Android, iOS and/or ARM, use a lower complexity setting as
+ // default, to save encoder complexity.
+ static const int kDefaultComplexity = 5;
+#else
+ static const int kDefaultComplexity = 9;
+#endif
+ };
+
+ static Config CreateConfig(int payload_type, const SdpAudioFormat& format);
+ static Config CreateConfig(const CodecInst& codec_inst);
using AudioNetworkAdaptorCreator =
std::function<std::unique_ptr<AudioNetworkAdaptor>(const std::string&,
RtcEventLog*)>;
- AudioEncoderOpusImpl(
- const AudioEncoderOpusConfig& config,
- int payload_type,
+ AudioEncoderOpus(
+ const Config& config,
AudioNetworkAdaptorCreator&& audio_network_adaptor_creator = nullptr,
std::unique_ptr<SmoothingFilter> bitrate_smoother = nullptr);
- explicit AudioEncoderOpusImpl(const CodecInst& codec_inst);
- AudioEncoderOpusImpl(int payload_type, const SdpAudioFormat& format);
- ~AudioEncoderOpusImpl() override;
+ explicit AudioEncoderOpus(const CodecInst& codec_inst);
+ AudioEncoderOpus(int payload_type, const SdpAudioFormat& format);
+ ~AudioEncoderOpus() override;
// Static interface for use by BuiltinAudioEncoderFactory.
static constexpr const char* GetPayloadName() { return "opus"; }
@@ -100,9 +138,7 @@
// Getters for testing.
float packet_loss_rate() const { return packet_loss_rate_; }
- AudioEncoderOpusConfig::ApplicationMode application() const {
- return config_.application;
- }
+ ApplicationMode application() const { return config_.application; }
bool fec_enabled() const { return config_.fec_enabled; }
size_t num_channels_to_encode() const { return num_channels_to_encode_; }
int next_frame_length_ms() const { return next_frame_length_ms_; }
@@ -118,7 +154,7 @@
size_t Num10msFramesPerPacket() const;
size_t SamplesPer10msFrame() const;
size_t SufficientOutputBufferSize() const;
- bool RecreateEncoderInstance(const AudioEncoderOpusConfig& config);
+ bool RecreateEncoderInstance(const Config& config);
void SetFrameLength(int frame_length_ms);
void SetNumChannelsToEncode(size_t num_channels_to_encode);
void SetProjectedPacketLossRate(float fraction);
@@ -134,8 +170,7 @@
void MaybeUpdateUplinkBandwidth();
- AudioEncoderOpusConfig config_;
- const int payload_type_;
+ Config config_;
const bool send_side_bwe_with_overhead_;
float packet_loss_rate_;
std::vector<int16_t> input_buffer_;
@@ -151,7 +186,7 @@
const std::unique_ptr<SmoothingFilter> bitrate_smoother_;
rtc::Optional<int64_t> bitrate_smoother_last_update_time_;
- RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderOpusImpl);
+ RTC_DISALLOW_COPY_AND_ASSIGN(AudioEncoderOpus);
};
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698