Reduces locking in RtpSenderVideo.

This CL removes some unnecessary locking, since we are already
serialized by the lock in VideoStreamEncoder. A simple RaceChecker is
used to verify this.

We also remove the usage of RegisterPayloadType() and replace it with
a parameter in SendVideo instead. This way we are prepared for removing
the payload type map and lock entirely. Some usage still exists
downstream and needs to be removed before cleaning this up.

Bug: webrtc:10809
Change-Id: Ie90163f15d11c8843f3beaf9a0df0dd2a1fd5ce6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/154700
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29372}
diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc
index a88cc2c..c8196b6 100644
--- a/call/rtp_video_sender.cc
+++ b/call/rtp_video_sender.cc
@@ -16,6 +16,7 @@
 #include <utility>
 
 #include "absl/algorithm/container.h"
+#include "absl/strings/match.h"
 #include "api/array_view.h"
 #include "api/transport/field_trial_based_config.h"
 #include "call/rtp_transport_controller_send_interface.h"
@@ -205,6 +206,22 @@
   // rate here.
   return packet_rate.RoundUpTo(Frequency::hertz(1)) * overhead_per_packet;
 }
+
+absl::optional<VideoCodecType> GetVideoCodecType(const RtpConfig& config) {
+  absl::optional<VideoCodecType> video_type;
+  if (!config.raw_payload) {
+    if (absl::EqualsIgnoreCase(config.payload_name, "VP8")) {
+      video_type = kVideoCodecVP8;
+    } else if (absl::EqualsIgnoreCase(config.payload_name, "VP9")) {
+      video_type = kVideoCodecVP9;
+    } else if (absl::EqualsIgnoreCase(config.payload_name, "H264")) {
+      video_type = kVideoCodecH264;
+    } else {
+      video_type = kVideoCodecGeneric;
+    }
+  }
+  return video_type;
+}
 }  // namespace
 
 RtpVideoSender::RtpVideoSender(
@@ -255,6 +272,7 @@
                                  frame_encryptor,
                                  crypto_options)),
       rtp_config_(rtp_config),
+      codec_type_(GetVideoCodecType(rtp_config)),
       transport_(transport),
       transport_overhead_bytes_per_packet_(0),
       overhead_bytes_per_packet_(0),
@@ -319,9 +337,6 @@
     stream.rtp_rtcp->SetMaxRtpPacketSize(rtp_config_.max_packet_size);
     stream.rtp_rtcp->RegisterSendPayloadFrequency(rtp_config_.payload_type,
                                                   kVideoPayloadTypeFrequency);
-    stream.sender_video->RegisterPayloadType(rtp_config_.payload_type,
-                                             rtp_config_.payload_name,
-                                             rtp_config_.raw_payload);
   }
   // Currently, both ULPFEC and FlexFEC use the same FEC rate calculation logic,
   // so enable that logic if either of those FEC schemes are enabled.
@@ -432,8 +447,8 @@
   }
 
   bool send_result = rtp_streams_[stream_index].sender_video->SendVideo(
-      encoded_image._frameType, rtp_config_.payload_type, rtp_timestamp,
-      encoded_image.capture_time_ms_, encoded_image.data(),
+      encoded_image._frameType, rtp_config_.payload_type, codec_type_,
+      rtp_timestamp, encoded_image.capture_time_ms_, encoded_image.data(),
       encoded_image.size(), fragmentation, &rtp_video_header,
       expected_retransmission_time_ms);
   if (frame_count_observer_) {