Fixed counting of index 'send_codec_position'

For-loop has a 'continue' statement that skips increment of the index.
Added such an increment before 'continue' for the index to keep up with
the for-loop.

I guess current implementation will bug on codecs sequence like:
'red, unknown, opus'
since the subsequent for-loop (the 'red_codec' one) will not be able to
find 'opus'.
Seems like adding second increment statement is the easiest way to fix it.

Bug: None
Change-Id: Iab9cc66cf569458af9fd9ba5b938d83186c78c73
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/369700
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43488}
This commit is contained in:
Pete Makeev 2024-12-02 17:06:05 +03:00 committed by WebRTC LUCI CQ
parent 94f2b91f11
commit 45f58d7fcc
3 changed files with 21 additions and 1 deletions

View File

@ -106,6 +106,7 @@ Olivier Crête <olivier.crete@ocrete.ca>
Pali Rohar Pali Rohar
Paul Kapustin <pkapustin@gmail.com> Paul Kapustin <pkapustin@gmail.com>
Peng Yu <yupeng323@gmail.com> Peng Yu <yupeng323@gmail.com>
Pete Makeev <guuud.morning@gmail.com>
Philipp Hancke <philipp.hancke@googlemail.com> Philipp Hancke <philipp.hancke@googlemail.com>
Piasy Xu <xz4215@gmail.com> Piasy Xu <xz4215@gmail.com>
Rafael Lopez Diez <rafalopezdiez@gmail.com> Rafael Lopez Diez <rafalopezdiez@gmail.com>

View File

@ -1449,6 +1449,7 @@ bool WebRtcVoiceSendChannel::SetSendCodecs(
voice_codec_info = engine()->encoder_factory_->QueryAudioEncoder(format); voice_codec_info = engine()->encoder_factory_->QueryAudioEncoder(format);
if (!voice_codec_info) { if (!voice_codec_info) {
RTC_LOG(LS_WARNING) << "Unknown codec " << ToString(voice_codec); RTC_LOG(LS_WARNING) << "Unknown codec " << ToString(voice_codec);
send_codec_position++;
continue; continue;
} }

View File

@ -117,6 +117,8 @@ const cricket::Codec kTelephoneEventCodec1 =
cricket::CreateAudioCodec(106, "telephone-event", 8000, 1); cricket::CreateAudioCodec(106, "telephone-event", 8000, 1);
const cricket::Codec kTelephoneEventCodec2 = const cricket::Codec kTelephoneEventCodec2 =
cricket::CreateAudioCodec(107, "telephone-event", 32000, 1); cricket::CreateAudioCodec(107, "telephone-event", 32000, 1);
const cricket::Codec kUnknownCodec =
cricket::CreateAudioCodec(127, "XYZ", 32000, 1);
const uint32_t kSsrc0 = 0; const uint32_t kSsrc0 = 0;
const uint32_t kSsrc1 = 1; const uint32_t kSsrc1 = 1;
@ -983,7 +985,7 @@ TEST_P(WebRtcVoiceEngineTestFake, SetRecvCodecsUnsupportedCodec) {
EXPECT_TRUE(SetupChannel()); EXPECT_TRUE(SetupChannel());
cricket::AudioReceiverParameters parameters; cricket::AudioReceiverParameters parameters;
parameters.codecs.push_back(kOpusCodec); parameters.codecs.push_back(kOpusCodec);
parameters.codecs.push_back(cricket::CreateAudioCodec(127, "XYZ", 32000, 1)); parameters.codecs.push_back(kUnknownCodec);
EXPECT_FALSE(receive_channel_->SetReceiverParameters(parameters)); EXPECT_FALSE(receive_channel_->SetReceiverParameters(parameters));
} }
@ -1733,6 +1735,22 @@ TEST_P(WebRtcVoiceEngineTestFake, SetSendCodecsRedFmtpAmountOfRedundancy) {
EXPECT_EQ(std::nullopt, send_codec_spec3.red_payload_type); EXPECT_EQ(std::nullopt, send_codec_spec3.red_payload_type);
} }
// Test that we use Opus/Red by default if an unknown codec
// is before RED and Opus.
TEST_P(WebRtcVoiceEngineTestFake, SetSendCodecRedWithUnknownCodec) {
EXPECT_TRUE(SetupSendStream());
cricket::AudioSenderParameter parameters;
parameters.codecs.push_back(kUnknownCodec);
parameters.codecs.push_back(kRed48000Codec);
parameters.codecs.back().params[""] = "111/111";
parameters.codecs.push_back(kOpusCodec);
SetSenderParameters(parameters);
const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
EXPECT_EQ(111, send_codec_spec.payload_type);
EXPECT_STRCASEEQ("opus", send_codec_spec.format.name.c_str());
EXPECT_EQ(112, send_codec_spec.red_payload_type);
}
// Test that WebRtcVoiceEngine reconfigures, rather than recreates its // Test that WebRtcVoiceEngine reconfigures, rather than recreates its
// AudioSendStream. // AudioSendStream.
TEST_P(WebRtcVoiceEngineTestFake, DontRecreateSendStream) { TEST_P(WebRtcVoiceEngineTestFake, DontRecreateSendStream) {