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}
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(