Add field trials for configuring Opus encoder packet loss rate.

Add options to:
1. Bypass optimization (use reported packet loss).
2. Set a maximum value.
3. Set a coefficient.

Bug: webrtc:9866
Change-Id: I3fef43e5186a4f0f50fda3506e445860518cfbd7
Reviewed-on: https://webrtc-review.googlesource.com/c/105304
Commit-Queue: Jakob Ivarsson‎ <jakobi@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25161}
This commit is contained in:
Jakob Ivarsson
2018-10-15 09:54:46 +02:00
committed by Commit Bot
parent fcebe0e1ca
commit 83bd37cda4
3 changed files with 141 additions and 10 deletions

View File

@ -34,6 +34,26 @@ struct CodecInst;
class AudioEncoderOpusImpl final : public AudioEncoder {
public:
class NewPacketLossRateOptimizer {
public:
NewPacketLossRateOptimizer(float min_packet_loss_rate = 0.01,
float max_packet_loss_rate = 0.2,
float slope = 1.0);
float OptimizePacketLossRate(float packet_loss_rate) const;
// Getters for testing.
float min_packet_loss_rate() const { return min_packet_loss_rate_; };
float max_packet_loss_rate() const { return max_packet_loss_rate_; };
float slope() const { return slope_; };
private:
const float min_packet_loss_rate_;
const float max_packet_loss_rate_;
const float slope_;
RTC_DISALLOW_COPY_AND_ASSIGN(NewPacketLossRateOptimizer);
};
static AudioEncoderOpusConfig CreateConfig(const CodecInst& codec_inst);
// Returns empty if the current bitrate falls within the hysteresis window,
@ -110,6 +130,9 @@ class AudioEncoderOpusImpl final : public AudioEncoder {
// Getters for testing.
float packet_loss_rate() const { return packet_loss_rate_; }
NewPacketLossRateOptimizer* new_packet_loss_optimizer() const {
return new_packet_loss_optimizer_.get();
}
AudioEncoderOpusConfig::ApplicationMode application() const {
return config_.application;
}
@ -159,6 +182,7 @@ class AudioEncoderOpusImpl final : public AudioEncoder {
bool bitrate_changed_;
float packet_loss_rate_;
const float min_packet_loss_rate_;
const std::unique_ptr<NewPacketLossRateOptimizer> new_packet_loss_optimizer_;
std::vector<int16_t> input_buffer_;
OpusEncInst* inst_;
uint32_t first_timestamp_in_buffer_;