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:
kwiberg
2015-11-25 01:25:06 -08:00
committed by Commit bot
parent 989b4abcf3
commit 9cd5c8ca79
3 changed files with 17 additions and 22 deletions

View File

@ -173,10 +173,6 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) {
rent_a_codec_.RentEncoderStack(enc, &codec_stack_params_); rent_a_codec_.RentEncoderStack(enc, &codec_stack_params_);
RTC_DCHECK(CurrentEncoder()); 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; send_codec_inst_ = send_codec;
return 0; return 0;
} }
@ -202,10 +198,6 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) {
send_codec_inst_.rate = send_codec.rate; 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; return 0;
} }
@ -222,16 +214,6 @@ void CodecManager::RegisterEncoder(AudioEncoder* external_speech_encoder) {
static const char kName[] = "external"; static const char kName[] = "external";
memcpy(send_codec_inst_.plname, kName, sizeof(kName)); 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_); rent_a_codec_.RentEncoderStack(external_speech_encoder, &codec_stack_params_);
} }

View File

@ -253,6 +253,16 @@ AudioEncoder* RentACodec::RentEncoderStack(AudioEncoder* speech_encoder,
StackParameters* param) { StackParameters* param) {
RTC_DCHECK(speech_encoder); 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 pt = [&speech_encoder](const std::map<int, int>& m) {
auto it = m.find(speech_encoder->SampleRateHz()); auto it = m.find(speech_encoder->SampleRateHz());
return it == m.end() ? rtc::Optional<int>() return it == m.end() ? rtc::Optional<int>()

View File

@ -101,18 +101,20 @@ TEST_F(RentACodecTestF, VerifyCngFrames) {
} }
TEST(RentACodecTest, ExternalEncoder) { TEST(RentACodecTest, ExternalEncoder) {
const int kSampleRateHz = 8000;
MockAudioEncoder external_encoder; 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 rac;
RentACodec::StackParameters param; RentACodec::StackParameters param;
EXPECT_EQ(&external_encoder, rac.RentEncoderStack(&external_encoder, &param)); EXPECT_EQ(&external_encoder, rac.RentEncoderStack(&external_encoder, &param));
const int kSampleRateHz = 8000;
const int kPacketSizeSamples = kSampleRateHz / 100; const int kPacketSizeSamples = kSampleRateHz / 100;
int16_t audio[kPacketSizeSamples] = {0}; int16_t audio[kPacketSizeSamples] = {0};
uint8_t encoded[kPacketSizeSamples]; uint8_t encoded[kPacketSizeSamples];
AudioEncoder::EncodedInfo info; AudioEncoder::EncodedInfo info;
EXPECT_CALL(external_encoder, SampleRateHz())
.WillRepeatedly(Return(kSampleRateHz));
EXPECT_CALL(external_encoder, NumChannels()).WillRepeatedly(Return(1));
{ {
::testing::InSequence s; ::testing::InSequence s;
@ -160,6 +162,7 @@ void TestCngAndRedResetSpeechEncoder(bool use_cng, bool use_red) {
EXPECT_CALL(speech_encoder, Max10MsFramesInAPacket()) EXPECT_CALL(speech_encoder, Max10MsFramesInAPacket())
.WillRepeatedly(Return(2)); .WillRepeatedly(Return(2));
EXPECT_CALL(speech_encoder, SampleRateHz()).WillRepeatedly(Return(8000)); EXPECT_CALL(speech_encoder, SampleRateHz()).WillRepeatedly(Return(8000));
EXPECT_CALL(speech_encoder, SetFec(false)).WillRepeatedly(Return(true));
{ {
::testing::InSequence s; ::testing::InSequence s;
EXPECT_CALL(speech_encoder, Mark("disabled")); EXPECT_CALL(speech_encoder, Mark("disabled"));