Regression test for issue where Opus DTX status was being forgotten.

BUG=webrtc:6020

Review-Url: https://codereview.webrtc.org/2177263002
Cr-Commit-Position: refs/heads/master@{#13539}
This commit is contained in:
ivoc
2016-07-27 04:53:47 -07:00
committed by Commit bot
parent f22d3c48fa
commit 85228d6af6
12 changed files with 92 additions and 80 deletions

View File

@ -48,6 +48,8 @@ class AudioCodingModuleImpl final : public AudioCodingModule {
void ModifyEncoder(
FunctionView<void(std::unique_ptr<AudioEncoder>*)> modifier) override;
void QueryEncoder(FunctionView<void(const AudioEncoder*)> query) override;
// Get current send codec.
rtc::Optional<CodecInst> SendCodec() const override;
@ -596,6 +598,12 @@ void AudioCodingModuleImpl::ModifyEncoder(
modifier(&encoder_stack_);
}
void AudioCodingModuleImpl::QueryEncoder(
FunctionView<void(const AudioEncoder*)> query) {
rtc::CritScope lock(&acm_crit_sect_);
query(encoder_stack_.get());
}
// Get current send codec.
rtc::Optional<CodecInst> AudioCodingModuleImpl::SendCodec() const {
rtc::CritScope lock(&acm_crit_sect_);

View File

@ -50,6 +50,10 @@ bool AudioEncoder::SetDtx(bool enable) {
return !enable;
}
bool AudioEncoder::GetDtx() const {
return false;
}
bool AudioEncoder::SetApplication(Application application) {
return false;
}

View File

@ -127,6 +127,10 @@ class AudioEncoder {
// supported).
virtual bool SetDtx(bool enable);
// Returns the status of codec-internal DTX. The default implementation always
// returns false.
virtual bool GetDtx() const;
// Sets the application mode. Returns true if the codec was able to comply.
// The default implementation just returns false.
enum class Application { kSpeech, kAudio };

View File

@ -152,6 +152,10 @@ bool AudioEncoderOpus::SetDtx(bool enable) {
return RecreateEncoderInstance(conf);
}
bool AudioEncoderOpus::GetDtx() const {
return config_.dtx_enabled;
}
bool AudioEncoderOpus::SetApplication(Application application) {
auto conf = config_;
switch (application) {

View File

@ -75,6 +75,7 @@ class AudioEncoderOpus final : public AudioEncoder {
// being inactive. During that, it still sends 2 packets (one for content, one
// for signaling) about every 400 ms.
bool SetDtx(bool enable) override;
bool GetDtx() const override;
bool SetApplication(Application application) override;
void SetMaxPlaybackRate(int frequency_hz) override;
@ -84,7 +85,6 @@ class AudioEncoderOpus final : public AudioEncoder {
// Getters for testing.
double packet_loss_rate() const { return packet_loss_rate_; }
ApplicationMode application() const { return config_.application; }
bool dtx_enabled() const { return config_.dtx_enabled; }
protected:
EncodedInfo EncodeImpl(uint32_t rtp_timestamp,

View File

@ -250,6 +250,10 @@ class AudioCodingModule {
virtual void ModifyEncoder(
FunctionView<void(std::unique_ptr<AudioEncoder>*)> modifier) = 0;
// |modifier| is called exactly once with one argument: a const pointer to the
// current encoder (which is null if there is no current encoder).
virtual void QueryEncoder(FunctionView<void(AudioEncoder const*)> query) = 0;
// Utility method for simply replacing the existing encoder with a new one.
void SetEncoder(std::unique_ptr<AudioEncoder> new_encoder) {
ModifyEncoder([&](std::unique_ptr<AudioEncoder>* encoder) {