Reland "Start supporting H264 packetization mode 0."

This is a reland of 3409cfa378e75c0c08d900e0848147929249a62b

Needed to change RtpVideoStreamReceiver to stop deregistering a payload
type if two payload types refer to the same codec (which now happens,
with the packetization mode 0/1 payload types). It's not clear why this
was being done in the first place.

Original change's description:
> Start supporting H264 packetization mode 0.
>
> The work was already done to support it, but it wasn't being negotiated
> in SDP.
>
> This means we'll now see 8 H264 payload types instead of 4; one for each
> combination of BP/CBP profiles, packetization modes 0/1, and RTX/non-RTX.
> This could be problematic in the future, since we're starting to run
> out of dynamic payload types (using 25 of 32).
>
> Bug: chromium:600254
> Change-Id: Ief2340db77c796f12980445b547b87e939170fae
> Reviewed-on: https://webrtc-review.googlesource.com/77264
> Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#23372}

Bug: chromium:600254
Change-Id: Ice1acc05acd1543d9b46e918de2bba0694d86259
Reviewed-on: https://webrtc-review.googlesource.com/78399
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23494}
diff --git a/modules/rtp_rtcp/include/rtp_payload_registry.h b/modules/rtp_rtcp/include/rtp_payload_registry.h
index 928d158..056e8fb 100644
--- a/modules/rtp_rtcp/include/rtp_payload_registry.h
+++ b/modules/rtp_rtcp/include/rtp_payload_registry.h
@@ -41,11 +41,6 @@
 
   int32_t DeRegisterReceivePayload(int8_t payload_type);
 
-  int32_t ReceivePayloadType(const SdpAudioFormat& audio_format,
-                             int8_t* payload_type) const;
-  int32_t ReceivePayloadType(const VideoCodec& video_codec,
-                             int8_t* payload_type) const;
-
   int GetPayloadTypeFrequency(uint8_t payload_type) const;
 
   rtc::Optional<RtpUtility::Payload> PayloadTypeToPayload(
diff --git a/modules/rtp_rtcp/source/rtp_payload_registry.cc b/modules/rtp_rtcp/source/rtp_payload_registry.cc
index 46a4ec1..357fb5a 100644
--- a/modules/rtp_rtcp/source/rtp_payload_registry.cc
+++ b/modules/rtp_rtcp/source/rtp_payload_registry.cc
@@ -226,35 +226,6 @@
   }
 }
 
-int32_t RTPPayloadRegistry::ReceivePayloadType(
-    const SdpAudioFormat& audio_format,
-    int8_t* payload_type) const {
-  assert(payload_type);
-  rtc::CritScope cs(&crit_sect_);
-
-  for (const auto& it : payload_type_map_) {
-    if (PayloadIsCompatible(it.second, audio_format)) {
-      *payload_type = it.first;
-      return 0;
-    }
-  }
-  return -1;
-}
-
-int32_t RTPPayloadRegistry::ReceivePayloadType(const VideoCodec& video_codec,
-                                               int8_t* payload_type) const {
-  assert(payload_type);
-  rtc::CritScope cs(&crit_sect_);
-
-  for (const auto& it : payload_type_map_) {
-    if (PayloadIsCompatible(it.second, video_codec)) {
-      *payload_type = it.first;
-      return 0;
-    }
-  }
-  return -1;
-}
-
 int RTPPayloadRegistry::GetPayloadTypeFrequency(
     uint8_t payload_type) const {
   const auto payload = PayloadTypeToPayload(payload_type);
diff --git a/modules/video_coding/codecs/h264/h264.cc b/modules/video_coding/codecs/h264/h264.cc
index 7771b13..4408fab 100644
--- a/modules/video_coding/codecs/h264/h264.cc
+++ b/modules/video_coding/codecs/h264/h264.cc
@@ -40,14 +40,17 @@
 #endif
 }
 
-SdpVideoFormat CreateH264Format(H264::Profile profile, H264::Level level) {
+SdpVideoFormat CreateH264Format(H264::Profile profile,
+                                H264::Level level,
+                                const std::string& packetization_mode) {
   const rtc::Optional<std::string> profile_string =
       H264::ProfileLevelIdToString(H264::ProfileLevelId(profile, level));
   RTC_CHECK(profile_string);
-  return SdpVideoFormat(cricket::kH264CodecName,
-                        {{cricket::kH264FmtpProfileLevelId, *profile_string},
-                         {cricket::kH264FmtpLevelAsymmetryAllowed, "1"},
-                         {cricket::kH264FmtpPacketizationMode, "1"}});
+  return SdpVideoFormat(
+      cricket::kH264CodecName,
+      {{cricket::kH264FmtpProfileLevelId, *profile_string},
+       {cricket::kH264FmtpLevelAsymmetryAllowed, "1"},
+       {cricket::kH264FmtpPacketizationMode, packetization_mode}});
 }
 
 }  // namespace
@@ -67,8 +70,15 @@
   // decoder for that profile is required to be able to decode CBP. This means
   // we can encode and send CBP even though we negotiated a potentially
   // higher profile. See the H264 spec for more information.
-  return {CreateH264Format(H264::kProfileBaseline, H264::kLevel3_1),
-          CreateH264Format(H264::kProfileConstrainedBaseline, H264::kLevel3_1)};
+  //
+  // We support both packetization modes 0 (mandatory) and 1 (optional,
+  // preferred).
+  return {
+      CreateH264Format(H264::kProfileBaseline, H264::kLevel3_1, "1"),
+      CreateH264Format(H264::kProfileBaseline, H264::kLevel3_1, "0"),
+      CreateH264Format(H264::kProfileConstrainedBaseline, H264::kLevel3_1, "1"),
+      CreateH264Format(H264::kProfileConstrainedBaseline, H264::kLevel3_1,
+                       "0")};
 }
 
 std::unique_ptr<H264Encoder> H264Encoder::Create(
diff --git a/video/rtp_video_stream_receiver.cc b/video/rtp_video_stream_receiver.cc
index f7a919c..589b0da 100644
--- a/video/rtp_video_stream_receiver.cc
+++ b/video/rtp_video_stream_receiver.cc
@@ -171,15 +171,6 @@
     const VideoCodec& video_codec,
     const std::map<std::string, std::string>& codec_params) {
   pt_codec_params_.insert(make_pair(video_codec.plType, codec_params));
-  return AddReceiveCodec(video_codec);
-}
-
-bool RtpVideoStreamReceiver::AddReceiveCodec(const VideoCodec& video_codec) {
-  int8_t old_pltype = -1;
-  if (rtp_payload_registry_.ReceivePayloadType(video_codec, &old_pltype) !=
-      -1) {
-    rtp_payload_registry_.DeRegisterReceivePayload(old_pltype);
-  }
   return rtp_payload_registry_.RegisterReceivePayload(video_codec) == 0;
 }
 
diff --git a/video/rtp_video_stream_receiver.h b/video/rtp_video_stream_receiver.h
index 3c1e539..4c8a4f2 100644
--- a/video/rtp_video_stream_receiver.h
+++ b/video/rtp_video_stream_receiver.h
@@ -140,7 +140,6 @@
   void RemoveSecondarySink(const RtpPacketSinkInterface* sink);
 
  private:
-  bool AddReceiveCodec(const VideoCodec& video_codec);
   void ReceivePacket(const uint8_t* packet,
                      size_t packet_length,
                      const RTPHeader& header);