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}
diff --git a/AUTHORS b/AUTHORS
index f4dd641..46587ac 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -106,6 +106,7 @@
 Pali Rohar
 Paul Kapustin <pkapustin@gmail.com>
 Peng Yu <yupeng323@gmail.com>
+Pete Makeev <guuud.morning@gmail.com>
 Philipp Hancke <philipp.hancke@googlemail.com>
 Piasy Xu <xz4215@gmail.com>
 Rafael Lopez Diez <rafalopezdiez@gmail.com>
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index bf65283..ecc2225 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -1449,6 +1449,7 @@
       voice_codec_info = engine()->encoder_factory_->QueryAudioEncoder(format);
       if (!voice_codec_info) {
         RTC_LOG(LS_WARNING) << "Unknown codec " << ToString(voice_codec);
+        send_codec_position++;
         continue;
       }
 
diff --git a/media/engine/webrtc_voice_engine_unittest.cc b/media/engine/webrtc_voice_engine_unittest.cc
index 8a208d7..fa027a7 100644
--- a/media/engine/webrtc_voice_engine_unittest.cc
+++ b/media/engine/webrtc_voice_engine_unittest.cc
@@ -117,6 +117,8 @@
     cricket::CreateAudioCodec(106, "telephone-event", 8000, 1);
 const cricket::Codec kTelephoneEventCodec2 =
     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 kSsrc1 = 1;
@@ -983,7 +985,7 @@
   EXPECT_TRUE(SetupChannel());
   cricket::AudioReceiverParameters parameters;
   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));
 }
 
@@ -1733,6 +1735,22 @@
   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
 // AudioSendStream.
 TEST_P(WebRtcVoiceEngineTestFake, DontRecreateSendStream) {