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_);
|
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_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>()
|
||||||
|
@ -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, ¶m));
|
EXPECT_EQ(&external_encoder, rac.RentEncoderStack(&external_encoder, ¶m));
|
||||||
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"));
|
||||||
|
Reference in New Issue
Block a user