Add new members to AudioEncoderOpus::Config
Adding fec_enabled and max_playback_rate_hz.
BUG=3926
COAUTHOR:kwiberg@webrtc.org
R=minyue@webrtc.org, tina.legrand@webrtc.org
TBR=kwiberg@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/39659004
Cr-Commit-Position: refs/heads/master@{#8207}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8207 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
index d912fd7..e37e8f6 100644
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
@@ -23,7 +23,6 @@
// We always encode at 48 kHz.
const int kSampleRateHz = 48000;
-
int16_t ClampInt16(size_t x) {
return static_cast<int16_t>(
std::min(x, static_cast<size_t>(std::numeric_limits<int16_t>::max())));
@@ -41,13 +40,15 @@
num_channels(1),
payload_type(120),
application(kVoip),
- bitrate_bps(64000) {
+ bitrate_bps(64000),
+ fec_enabled(false),
+ max_playback_rate_hz(48000) {
}
bool AudioEncoderOpus::Config::IsOk() const {
if (frame_size_ms <= 0 || frame_size_ms % 10 != 0)
return false;
- if (num_channels <= 0)
+ if (num_channels != 1 && num_channels != 2)
return false;
if (bitrate_bps < kMinBitrateBps || bitrate_bps > kMaxBitrateBps)
return false;
@@ -67,6 +68,13 @@
input_buffer_.reserve(num_10ms_frames_per_packet_ * samples_per_10ms_frame_);
CHECK_EQ(0, WebRtcOpus_EncoderCreate(&inst_, num_channels_, application_));
SetTargetBitrate(config.bitrate_bps);
+ if (config.fec_enabled) {
+ CHECK_EQ(0, WebRtcOpus_EnableFec(inst_));
+ } else {
+ CHECK_EQ(0, WebRtcOpus_DisableFec(inst_));
+ }
+ CHECK_EQ(0,
+ WebRtcOpus_SetMaxPlaybackRate(inst_, config.max_playback_rate_hz));
}
AudioEncoderOpus::~AudioEncoderOpus() {
diff --git a/webrtc/modules/audio_coding/codecs/opus/interface/audio_encoder_opus.h b/webrtc/modules/audio_coding/codecs/opus/interface/audio_encoder_opus.h
index c39af12..477ee8f 100644
--- a/webrtc/modules/audio_coding/codecs/opus/interface/audio_encoder_opus.h
+++ b/webrtc/modules/audio_coding/codecs/opus/interface/audio_encoder_opus.h
@@ -18,7 +18,10 @@
namespace webrtc {
-class AudioEncoderOpus : public AudioEncoder {
+// NOTE: This class has neither ThreadChecker, nor locks. The owner of an
+// AudioEncoderOpus object must ensure that it is not accessed concurrently.
+
+class AudioEncoderOpus final : public AudioEncoder {
public:
enum ApplicationMode {
kVoip = 0,
@@ -33,6 +36,8 @@
int payload_type;
ApplicationMode application;
int bitrate_bps;
+ bool fec_enabled;
+ int max_playback_rate_hz;
};
explicit AudioEncoderOpus(const Config& config);