Move the FEC enabling logic from CodecManager to Rent-A-Codec
BUG=webrtc:5028 Review URL: https://codereview.webrtc.org/1476743002 Cr-Commit-Position: refs/heads/master@{#10785}
This commit is contained in:
@ -173,10 +173,6 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) {
|
||||
rent_a_codec_.RentEncoderStack(enc, &codec_stack_params_);
|
||||
RTC_DCHECK(CurrentEncoder());
|
||||
|
||||
codec_stack_params_.use_codec_fec =
|
||||
codec_stack_params_.use_codec_fec &&
|
||||
enc->SetFec(codec_stack_params_.use_codec_fec);
|
||||
|
||||
send_codec_inst_ = send_codec;
|
||||
return 0;
|
||||
}
|
||||
@ -202,10 +198,6 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) {
|
||||
send_codec_inst_.rate = send_codec.rate;
|
||||
}
|
||||
|
||||
codec_stack_params_.use_codec_fec =
|
||||
codec_stack_params_.use_codec_fec &&
|
||||
CurrentEncoder()->SetFec(codec_stack_params_.use_codec_fec);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -222,16 +214,6 @@ void CodecManager::RegisterEncoder(AudioEncoder* external_speech_encoder) {
|
||||
static const char kName[] = "external";
|
||||
memcpy(send_codec_inst_.plname, kName, sizeof(kName));
|
||||
|
||||
if (codec_stack_params_.use_codec_fec) {
|
||||
// Switch FEC on. On failure, remember that FEC is off.
|
||||
if (!external_speech_encoder->SetFec(true))
|
||||
codec_stack_params_.use_codec_fec = false;
|
||||
} else {
|
||||
// Switch FEC off. This shouldn't fail.
|
||||
const bool success = external_speech_encoder->SetFec(false);
|
||||
RTC_DCHECK(success);
|
||||
}
|
||||
|
||||
rent_a_codec_.RentEncoderStack(external_speech_encoder, &codec_stack_params_);
|
||||
}
|
||||
|
||||
|
@ -253,6 +253,16 @@ AudioEncoder* RentACodec::RentEncoderStack(AudioEncoder* speech_encoder,
|
||||
StackParameters* param) {
|
||||
RTC_DCHECK(speech_encoder);
|
||||
|
||||
if (param->use_codec_fec) {
|
||||
// Switch FEC on. On failure, remember that FEC is off.
|
||||
if (!speech_encoder->SetFec(true))
|
||||
param->use_codec_fec = false;
|
||||
} else {
|
||||
// Switch FEC off. This shouldn't fail.
|
||||
const bool success = speech_encoder->SetFec(false);
|
||||
RTC_DCHECK(success);
|
||||
}
|
||||
|
||||
auto pt = [&speech_encoder](const std::map<int, int>& m) {
|
||||
auto it = m.find(speech_encoder->SampleRateHz());
|
||||
return it == m.end() ? rtc::Optional<int>()
|
||||
|
@ -101,18 +101,20 @@ TEST_F(RentACodecTestF, VerifyCngFrames) {
|
||||
}
|
||||
|
||||
TEST(RentACodecTest, ExternalEncoder) {
|
||||
const int kSampleRateHz = 8000;
|
||||
MockAudioEncoder external_encoder;
|
||||
EXPECT_CALL(external_encoder, SampleRateHz())
|
||||
.WillRepeatedly(Return(kSampleRateHz));
|
||||
EXPECT_CALL(external_encoder, NumChannels()).WillRepeatedly(Return(1));
|
||||
EXPECT_CALL(external_encoder, SetFec(false)).WillRepeatedly(Return(true));
|
||||
|
||||
RentACodec rac;
|
||||
RentACodec::StackParameters param;
|
||||
EXPECT_EQ(&external_encoder, rac.RentEncoderStack(&external_encoder, ¶m));
|
||||
const int kSampleRateHz = 8000;
|
||||
const int kPacketSizeSamples = kSampleRateHz / 100;
|
||||
int16_t audio[kPacketSizeSamples] = {0};
|
||||
uint8_t encoded[kPacketSizeSamples];
|
||||
AudioEncoder::EncodedInfo info;
|
||||
EXPECT_CALL(external_encoder, SampleRateHz())
|
||||
.WillRepeatedly(Return(kSampleRateHz));
|
||||
EXPECT_CALL(external_encoder, NumChannels()).WillRepeatedly(Return(1));
|
||||
|
||||
{
|
||||
::testing::InSequence s;
|
||||
@ -160,6 +162,7 @@ void TestCngAndRedResetSpeechEncoder(bool use_cng, bool use_red) {
|
||||
EXPECT_CALL(speech_encoder, Max10MsFramesInAPacket())
|
||||
.WillRepeatedly(Return(2));
|
||||
EXPECT_CALL(speech_encoder, SampleRateHz()).WillRepeatedly(Return(8000));
|
||||
EXPECT_CALL(speech_encoder, SetFec(false)).WillRepeatedly(Return(true));
|
||||
{
|
||||
::testing::InSequence s;
|
||||
EXPECT_CALL(speech_encoder, Mark("disabled"));
|
||||
|
Reference in New Issue
Block a user