Remove cricket::MediaType as a separate enum definition

Using constants and alias names to ensure that existing code compiles.
The part that is not backwards compatible is switch statements that
don't have default; they will react to the new value ANY.

Bug: webrtc:42222911
Change-Id: I83320381d8f1b0acbf1adba3ac5c04bcd17e3d6f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/381660
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Evan Shrubsole <eshr@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44164}
diff --git a/api/media_types.cc b/api/media_types.cc
index 850c8e2..9cd4532 100644
--- a/api/media_types.cc
+++ b/api/media_types.cc
@@ -14,7 +14,7 @@
 
 #include "rtc_base/checks.h"
 
-namespace cricket {
+namespace webrtc {
 
 const char kMediaTypeVideo[] = "video";
 const char kMediaTypeAudio[] = "audio";
@@ -22,13 +22,13 @@
 
 std::string MediaTypeToString(MediaType type) {
   switch (type) {
-    case MEDIA_TYPE_AUDIO:
+    case MediaType::AUDIO:
       return kMediaTypeAudio;
-    case MEDIA_TYPE_VIDEO:
+    case MediaType::VIDEO:
       return kMediaTypeVideo;
-    case MEDIA_TYPE_DATA:
+    case MediaType::DATA:
       return kMediaTypeData;
-    case MEDIA_TYPE_UNSUPPORTED:
+    default:
       // Unsupported media stores the m=<mediatype> differently.
       RTC_DCHECK_NOTREACHED();
       return "";
@@ -36,4 +36,4 @@
   RTC_CHECK_NOTREACHED();
 }
 
-}  // namespace cricket
+}  // namespace webrtc
diff --git a/api/media_types.h b/api/media_types.h
index 430bab5..339c263 100644
--- a/api/media_types.h
+++ b/api/media_types.h
@@ -17,7 +17,30 @@
 
 namespace webrtc {
 
-enum class MediaType { AUDIO, VIDEO, DATA, UNSUPPORTED, ANY };
+enum class MediaType {
+  AUDIO,
+  VIDEO,
+  DATA,
+  UNSUPPORTED,
+  ANY,
+  // Backwards compatibility values for cricket::MediaType users
+  // TODO: https://issues.webrtc.org/42222911 - deprecate and remove
+  MEDIA_TYPE_AUDIO = AUDIO,
+  MEDIA_TYPE_VIDEO = VIDEO,
+  MEDIA_TYPE_DATA = DATA,
+  MEDIA_TYPE_UNSUPPORTED = UNSUPPORTED,
+};
+
+RTC_EXPORT std::string MediaTypeToString(MediaType type);
+
+template <typename Sink>
+void AbslStringify(Sink& sink, MediaType type) {
+  sink.Append(MediaTypeToString(type));
+}
+
+extern const char kMediaTypeAudio[];
+extern const char kMediaTypeVideo[];
+extern const char kMediaTypeData[];
 
 }  // namespace webrtc
 
@@ -27,18 +50,18 @@
 
 namespace cricket {
 
-enum MediaType {
-  MEDIA_TYPE_AUDIO = static_cast<int>(webrtc::MediaType::AUDIO),
-  MEDIA_TYPE_VIDEO = static_cast<int>(webrtc::MediaType::VIDEO),
-  MEDIA_TYPE_DATA = static_cast<int>(webrtc::MediaType::DATA),
-  MEDIA_TYPE_UNSUPPORTED = static_cast<int>(webrtc::MediaType::UNSUPPORTED),
-};
+using MediaType = webrtc::MediaType;
+using webrtc::kMediaTypeAudio;
+using webrtc::kMediaTypeData;
+using webrtc::kMediaTypeVideo;
+using webrtc::MediaTypeToString;
 
-extern const char kMediaTypeAudio[];
-extern const char kMediaTypeVideo[];
-extern const char kMediaTypeData[];
-
-RTC_EXPORT std::string MediaTypeToString(MediaType type);
+// Backwards compatibility values for cricket::MediaType users
+// TODO: https://issues.webrtc.org/42222911 - deprecate and remove
+constexpr MediaType MEDIA_TYPE_AUDIO = webrtc::MediaType::AUDIO;
+constexpr MediaType MEDIA_TYPE_VIDEO = webrtc::MediaType::VIDEO;
+constexpr MediaType MEDIA_TYPE_DATA = webrtc::MediaType::DATA;
+constexpr MediaType MEDIA_TYPE_UNSUPPORTED = webrtc::MediaType::UNSUPPORTED;
 
 }  // namespace cricket
 
diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc
index 349e919..2d7a0b9 100644
--- a/audio/channel_receive.cc
+++ b/audio/channel_receive.cc
@@ -751,7 +751,7 @@
     char buf[1024];
     SimpleStringBuilder mime_type(buf);
     auto it = payload_type_map_.find(header.payloadType);
-    mime_type << MediaTypeToString(cricket::MEDIA_TYPE_AUDIO) << "/"
+    mime_type << cricket::MediaTypeToString(cricket::MEDIA_TYPE_AUDIO) << "/"
               << (it != payload_type_map_.end() ? it->second.name
                                                 : "x-unknown");
     frame_transformer_delegate_->Transform(payload_data, header, remote_ssrc_,
diff --git a/audio/channel_send.cc b/audio/channel_send.cc
index 75f512f..01cf8a6 100644
--- a/audio/channel_send.cc
+++ b/audio/channel_send.cc
@@ -385,7 +385,7 @@
     // is transformed, the delegate will call SendRtpAudio to send it.
     char buf[1024];
     SimpleStringBuilder mime_type(buf);
-    mime_type << MediaTypeToString(cricket::MEDIA_TYPE_AUDIO) << "/"
+    mime_type << cricket::MediaTypeToString(cricket::MEDIA_TYPE_AUDIO) << "/"
               << encoder_format_.name;
     frame_transformer_delegate_->Transform(
         frameType, payloadType, rtp_timestamp + rtp_rtcp_->StartTimestamp(),
diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc
index 849323c..2cb54d2 100644
--- a/pc/peer_connection_factory.cc
+++ b/pc/peer_connection_factory.cc
@@ -166,9 +166,7 @@
           GetDefaultEnabledRtpHeaderExtensions(media_engine()->video());
       return ToRtpCapabilities(cricket_codecs, extensions);
     }
-    case cricket::MEDIA_TYPE_DATA:
-      return RtpCapabilities();
-    case cricket::MEDIA_TYPE_UNSUPPORTED:
+    default:
       return RtpCapabilities();
   }
   RTC_DLOG(LS_ERROR) << "Got unexpected MediaType " << kind;
@@ -193,9 +191,7 @@
           GetDefaultEnabledRtpHeaderExtensions(media_engine()->video());
       return ToRtpCapabilities(cricket_codecs, extensions);
     }
-    case cricket::MEDIA_TYPE_DATA:
-      return RtpCapabilities();
-    case cricket::MEDIA_TYPE_UNSUPPORTED:
+    default:
       return RtpCapabilities();
   }
   RTC_DLOG(LS_ERROR) << "Got unexpected MediaType " << kind;
diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc
index 2aa66e7..61268c4 100644
--- a/pc/rtc_stats_collector_unittest.cc
+++ b/pc/rtc_stats_collector_unittest.cc
@@ -3222,8 +3222,7 @@
         return "A";
       case cricket::MEDIA_TYPE_VIDEO:
         return "V";
-      case cricket::MEDIA_TYPE_DATA:
-      case cricket::MEDIA_TYPE_UNSUPPORTED:
+      default:
         RTC_DCHECK_NOTREACHED();
         return "?";
     }
@@ -3235,8 +3234,7 @@
         return "audio";
       case cricket::MEDIA_TYPE_VIDEO:
         return "video";
-      case cricket::MEDIA_TYPE_DATA:
-      case cricket::MEDIA_TYPE_UNSUPPORTED:
+      default:
         RTC_DCHECK_NOTREACHED();
         return "";
     }
@@ -3285,7 +3283,7 @@
         return;
       }
       case cricket::MEDIA_TYPE_DATA:
-      case cricket::MEDIA_TYPE_UNSUPPORTED:
+      default:
         RTC_DCHECK_NOTREACHED();
     }
   }
diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc
index 13a5d39..8986e921 100644
--- a/pc/sdp_offer_answer.cc
+++ b/pc/sdp_offer_answer.cc
@@ -731,6 +731,9 @@
       return cricket::CN_DATA;
     case cricket::MEDIA_TYPE_UNSUPPORTED:
       return "not supported";
+    default:
+      // Fall through to RTC_CHECK_NOTREACHED
+      break;
   }
   RTC_DCHECK_NOTREACHED();
   return "";
diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc
index c4a24c3..ba47e75 100644
--- a/pc/webrtc_sdp.cc
+++ b/pc/webrtc_sdp.cc
@@ -43,7 +43,6 @@
 #include "media/base/rtp_utils.h"
 #include "media/base/stream_params.h"
 #include "media/sctp/sctp_transport_internal.h"
-#include "p2p/base/candidate_pair_interface.h"
 #include "p2p/base/ice_transport_internal.h"
 #include "p2p/base/p2p_constants.h"
 #include "p2p/base/port.h"
@@ -236,9 +235,9 @@
 static const char kConnectionNettype[] = "IN";
 static const char kConnectionIpv4Addrtype[] = "IP4";
 static const char kConnectionIpv6Addrtype[] = "IP6";
-static const char kMediaTypeVideo[] = "video";
-static const char kMediaTypeAudio[] = "audio";
-static const char kMediaTypeData[] = "application";
+static const char kSdpMediaTypeVideo[] = "video";
+static const char kSdpMediaTypeAudio[] = "audio";
+static const char kSdpMediaTypeData[] = "application";
 static const char kMediaPortRejected[] = "0";
 // draft-ietf-mmusic-trickle-ice-01
 // When no candidates have been gathered, set the connection
@@ -1414,14 +1413,14 @@
   std::string fmt;
   if (media_type == cricket::MEDIA_TYPE_AUDIO ||
       media_type == cricket::MEDIA_TYPE_VIDEO) {
-    type = media_type == cricket::MEDIA_TYPE_AUDIO ? kMediaTypeAudio
-                                                   : kMediaTypeVideo;
+    type = media_type == cricket::MEDIA_TYPE_AUDIO ? kSdpMediaTypeAudio
+                                                   : kSdpMediaTypeVideo;
     for (const cricket::Codec& codec : media_desc->codecs()) {
       fmt.append(" ");
       fmt.append(rtc::ToString(codec.id));
     }
   } else if (media_type == cricket::MEDIA_TYPE_DATA) {
-    type = kMediaTypeData;
+    type = kSdpMediaTypeData;
     const cricket::SctpDataContentDescription* sctp_data_desc =
         media_desc->as_sctp();
     if (sctp_data_desc) {
@@ -2717,21 +2716,23 @@
     bool bundle_only = false;
     int section_msid_signaling = cricket::kMsidSignalingNotUsed;
     absl::string_view media_type = fields[0];
-    if ((media_type == kMediaTypeVideo || media_type == kMediaTypeAudio) &&
+    if ((media_type == kSdpMediaTypeVideo ||
+         media_type == kSdpMediaTypeAudio) &&
         !cricket::IsRtpProtocol(protocol)) {
       return ParseFailed(*mline, "Unsupported protocol for media type", error);
     }
-    if (media_type == kMediaTypeVideo) {
+    if (media_type == kSdpMediaTypeVideo) {
       content = ParseContentDescription(
           message, cricket::MEDIA_TYPE_VIDEO, mline_index, protocol,
           payload_types, pos, &content_name, &bundle_only,
           &section_msid_signaling, &transport, candidates, error);
-    } else if (media_type == kMediaTypeAudio) {
+    } else if (media_type == kSdpMediaTypeAudio) {
       content = ParseContentDescription(
           message, cricket::MEDIA_TYPE_AUDIO, mline_index, protocol,
           payload_types, pos, &content_name, &bundle_only,
           &section_msid_signaling, &transport, candidates, error);
-    } else if (media_type == kMediaTypeData && cricket::IsDtlsSctp(protocol)) {
+    } else if (media_type == kSdpMediaTypeData &&
+               cricket::IsDtlsSctp(protocol)) {
       // The draft-03 format is:
       // m=application <port> DTLS/SCTP <sctp-port>...
       // use_sctpmap should be false.
diff --git a/sdk/android/src/jni/pc/media_stream_track.cc b/sdk/android/src/jni/pc/media_stream_track.cc
index 225b608..297bbf6 100644
--- a/sdk/android/src/jni/pc/media_stream_track.cc
+++ b/sdk/android/src/jni/pc/media_stream_track.cc
@@ -21,7 +21,7 @@
 ScopedJavaLocalRef<jobject> NativeToJavaMediaType(
     JNIEnv* jni,
     cricket::MediaType media_type) {
-  return Java_MediaType_fromNativeIndex(jni, media_type);
+  return Java_MediaType_fromNativeIndex(jni, static_cast<int>(media_type));
 }
 
 cricket::MediaType JavaToNativeMediaType(JNIEnv* jni,
diff --git a/sdk/objc/api/peerconnection/RTCRtpCodecCapability.mm b/sdk/objc/api/peerconnection/RTCRtpCodecCapability.mm
index f6f72e8..e972694 100644
--- a/sdk/objc/api/peerconnection/RTCRtpCodecCapability.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpCodecCapability.mm
@@ -47,10 +47,7 @@
       case cricket::MEDIA_TYPE_VIDEO:
         _kind = kRTCMediaStreamTrackKindVideo;
         break;
-      case cricket::MEDIA_TYPE_DATA:
-        RTC_DCHECK_NOTREACHED();
-        break;
-      case cricket::MEDIA_TYPE_UNSUPPORTED:
+      default:
         RTC_DCHECK_NOTREACHED();
         break;
     }
diff --git a/sdk/objc/api/peerconnection/RTCRtpCodecParameters.mm b/sdk/objc/api/peerconnection/RTCRtpCodecParameters.mm
index fa69c36..579607b 100644
--- a/sdk/objc/api/peerconnection/RTCRtpCodecParameters.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpCodecParameters.mm
@@ -59,10 +59,7 @@
       case cricket::MEDIA_TYPE_VIDEO:
         _kind = kRTCMediaStreamTrackKindVideo;
         break;
-      case cricket::MEDIA_TYPE_DATA:
-        RTC_DCHECK_NOTREACHED();
-        break;
-      case cricket::MEDIA_TYPE_UNSUPPORTED:
+      default:
         RTC_DCHECK_NOTREACHED();
         break;
     }
diff --git a/sdk/objc/api/peerconnection/RTCRtpReceiver.h b/sdk/objc/api/peerconnection/RTCRtpReceiver.h
index d0c79fe..2877a4c 100644
--- a/sdk/objc/api/peerconnection/RTCRtpReceiver.h
+++ b/sdk/objc/api/peerconnection/RTCRtpReceiver.h
@@ -22,6 +22,7 @@
   RTCRtpMediaTypeVideo,
   RTCRtpMediaTypeData,
   RTCRtpMediaTypeUnsupported,
+  RTCRtpMediaTypeAny,
 };
 
 @class RTC_OBJC_TYPE(RTCRtpReceiver);
diff --git a/sdk/objc/api/peerconnection/RTCRtpReceiver.mm b/sdk/objc/api/peerconnection/RTCRtpReceiver.mm
index bb5b01d..3f2dd10 100644
--- a/sdk/objc/api/peerconnection/RTCRtpReceiver.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpReceiver.mm
@@ -140,29 +140,33 @@
 }
 
 + (RTCRtpMediaType)mediaTypeForNativeMediaType:
-    (cricket::MediaType)nativeMediaType {
+    (webrtc::MediaType)nativeMediaType {
   switch (nativeMediaType) {
-    case cricket::MEDIA_TYPE_AUDIO:
+    case webrtc::MediaType::AUDIO:
       return RTCRtpMediaTypeAudio;
-    case cricket::MEDIA_TYPE_VIDEO:
+    case webrtc::MediaType::VIDEO:
       return RTCRtpMediaTypeVideo;
-    case cricket::MEDIA_TYPE_DATA:
+    case webrtc::MediaType::DATA:
       return RTCRtpMediaTypeData;
-    case cricket::MEDIA_TYPE_UNSUPPORTED:
+    case webrtc::MediaType::UNSUPPORTED:
       return RTCRtpMediaTypeUnsupported;
+    case webrtc::MediaType::ANY:
+      return RTCRtpMediaTypeAny;
   }
 }
 
-+ (cricket::MediaType)nativeMediaTypeForMediaType:(RTCRtpMediaType)mediaType {
++ (webrtc::MediaType)nativeMediaTypeForMediaType:(RTCRtpMediaType)mediaType {
   switch (mediaType) {
     case RTCRtpMediaTypeAudio:
-      return cricket::MEDIA_TYPE_AUDIO;
+      return webrtc::MediaType::AUDIO;
     case RTCRtpMediaTypeVideo:
-      return cricket::MEDIA_TYPE_VIDEO;
+      return webrtc::MediaType::VIDEO;
     case RTCRtpMediaTypeData:
-      return cricket::MEDIA_TYPE_DATA;
+      return webrtc::MediaType::DATA;
     case RTCRtpMediaTypeUnsupported:
-      return cricket::MEDIA_TYPE_UNSUPPORTED;
+      return webrtc::MediaType::UNSUPPORTED;
+    case RTCRtpMediaTypeAny:
+      return webrtc::MediaType::ANY;
   }
 }
 
@@ -176,6 +180,8 @@
       return @"DATA";
     case RTCRtpMediaTypeUnsupported:
       return @"UNSUPPORTED";
+    case RTCRtpMediaTypeAny:
+      return @"ANY";
   }
 }