Move AV1X-AV1 mapping to VideoCodecTypeMime

AV1X->AV1 mapping added to SdpVideoFormatToVideoCodecInfo in
https://webrtc-review.googlesource.com/c/src/+/215586 results in
discrepancy of codec name between SDP and VideoCodecInfo. That violates
VideoCodecInfo design and breaks downstream projects.

This CL moves the mapping from VideoCodecInfoToSdpVideoFormat and
SdpVideoFormatToVideoCodecInfo to VideoCodecTypeMime.

Bug: b/181690054
Change-Id: I2a76524c29b082241f2ec72a60a209ce9b0c7c5f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/221205
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Xavier Lepaul‎ <xalep@webrtc.org>
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34230}
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 0094c8e..be15a7d 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -234,6 +234,7 @@
       "src/java/org/webrtc/GlGenericDrawer.java",
       "src/java/org/webrtc/H264Utils.java",
       "src/java/org/webrtc/NV21Buffer.java",
+      "src/java/org/webrtc/VideoCodecMimeType.java",
       "src/java/org/webrtc/VideoDecoderWrapper.java",
       "src/java/org/webrtc/VideoEncoderWrapper.java",
       "src/java/org/webrtc/WrappedNativeI420Buffer.java",
@@ -403,7 +404,6 @@
       "src/java/org/webrtc/MediaCodecWrapperFactory.java",
       "src/java/org/webrtc/MediaCodecWrapperFactoryImpl.java",
       "src/java/org/webrtc/NV12Buffer.java",
-      "src/java/org/webrtc/VideoCodecMimeType.java",
     ]
 
     deps = [
diff --git a/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java b/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java
index 17ba76a..c9831c1 100644
--- a/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java
+++ b/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java
@@ -94,7 +94,7 @@
       return null;
     }
 
-    VideoCodecMimeType type = VideoCodecMimeType.valueOf(input.name);
+    VideoCodecMimeType type = VideoCodecMimeType.fromSdpCodecName(input.getName());
     MediaCodecInfo info = findCodecForType(type);
 
     if (info == null) {
@@ -142,7 +142,7 @@
              VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) {
       MediaCodecInfo codec = findCodecForType(type);
       if (codec != null) {
-        String name = type.name();
+        String name = type.toSdpCodecName();
         // TODO(sakal): Always add H264 HP once WebRTC correctly removes codecs that are not
         // supported by the decoder.
         if (type == VideoCodecMimeType.H264 && isH264HighProfileSupported(codec)) {
diff --git a/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java b/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java
index da11e87..0c9dcbe 100644
--- a/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java
+++ b/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java
@@ -25,14 +25,18 @@
 
   @Nullable
   @Override
-  public VideoDecoder createDecoder(VideoCodecInfo codecType) {
-    if (codecType.getName().equalsIgnoreCase("VP8")) {
+  public VideoDecoder createDecoder(VideoCodecInfo codecInfo) {
+    String codecName = codecInfo.getName();
+
+    if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.toSdpCodecName())) {
       return new LibvpxVp8Decoder();
     }
-    if (codecType.getName().equalsIgnoreCase("VP9") && LibvpxVp9Decoder.nativeIsSupported()) {
+    if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.toSdpCodecName())
+        && LibvpxVp9Decoder.nativeIsSupported()) {
       return new LibvpxVp9Decoder();
     }
-    if (codecType.getName().equalsIgnoreCase("AV1") && LibaomAv1Decoder.nativeIsSupported()) {
+    if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.toSdpCodecName())
+        && LibaomAv1Decoder.nativeIsSupported()) {
       return new LibaomAv1Decoder();
     }
 
@@ -47,12 +51,12 @@
   static VideoCodecInfo[] supportedCodecs() {
     List<VideoCodecInfo> codecs = new ArrayList<VideoCodecInfo>();
 
-    codecs.add(new VideoCodecInfo("VP8", new HashMap<>()));
+    codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.toSdpCodecName(), new HashMap<>()));
     if (LibvpxVp9Decoder.nativeIsSupported()) {
-      codecs.add(new VideoCodecInfo("VP9", new HashMap<>()));
+      codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.toSdpCodecName(), new HashMap<>()));
     }
     if (LibaomAv1Decoder.nativeIsSupported()) {
-      codecs.add(new VideoCodecInfo("AV1", new HashMap<>()));
+      codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.toSdpCodecName(), new HashMap<>()));
     }
 
     return codecs.toArray(new VideoCodecInfo[codecs.size()]);
diff --git a/sdk/android/api/org/webrtc/SoftwareVideoEncoderFactory.java b/sdk/android/api/org/webrtc/SoftwareVideoEncoderFactory.java
index 528adab..4de39dc 100644
--- a/sdk/android/api/org/webrtc/SoftwareVideoEncoderFactory.java
+++ b/sdk/android/api/org/webrtc/SoftwareVideoEncoderFactory.java
@@ -18,14 +18,18 @@
 public class SoftwareVideoEncoderFactory implements VideoEncoderFactory {
   @Nullable
   @Override
-  public VideoEncoder createEncoder(VideoCodecInfo info) {
-    if (info.name.equalsIgnoreCase("VP8")) {
+  public VideoEncoder createEncoder(VideoCodecInfo codecInfo) {
+    String codecName = codecInfo.getName();
+
+    if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.toSdpCodecName())) {
       return new LibvpxVp8Encoder();
     }
-    if (info.name.equalsIgnoreCase("VP9") && LibvpxVp9Encoder.nativeIsSupported()) {
+    if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.toSdpCodecName())
+        && LibvpxVp9Encoder.nativeIsSupported()) {
       return new LibvpxVp9Encoder();
     }
-    if (info.name.equalsIgnoreCase("AV1") && LibaomAv1Encoder.nativeIsSupported()) {
+    if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.toSdpCodecName())
+        && LibaomAv1Encoder.nativeIsSupported()) {
       return new LibaomAv1Encoder();
     }
 
@@ -40,12 +44,12 @@
   static VideoCodecInfo[] supportedCodecs() {
     List<VideoCodecInfo> codecs = new ArrayList<VideoCodecInfo>();
 
-    codecs.add(new VideoCodecInfo("VP8", new HashMap<>()));
+    codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.toSdpCodecName(), new HashMap<>()));
     if (LibvpxVp9Encoder.nativeIsSupported()) {
-      codecs.add(new VideoCodecInfo("VP9", new HashMap<>()));
+      codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.toSdpCodecName(), new HashMap<>()));
     }
     if (LibaomAv1Encoder.nativeIsSupported()) {
-      codecs.add(new VideoCodecInfo("AV1", new HashMap<>()));
+      codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.toSdpCodecName(), new HashMap<>()));
     }
 
     return codecs.toArray(new VideoCodecInfo[codecs.size()]);
diff --git a/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java b/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java
index 8ffacbe..8135e80 100644
--- a/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java
+++ b/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java
@@ -73,7 +73,7 @@
     assertEquals(5, videoCodecs.length);
     assertEquals("VP8", videoCodecs[0].name);
     assertEquals("VP9", videoCodecs[1].name);
-    assertEquals("AV1", videoCodecs[2].name);
+    assertEquals("AV1X", videoCodecs[2].name);
     assertEquals("H264", videoCodecs[3].name);
     assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id"));
     assertEquals("H264", videoCodecs[4].name);
@@ -89,7 +89,7 @@
     assertEquals(4, videoCodecs.length);
     assertEquals("VP8", videoCodecs[0].name);
     assertEquals("VP9", videoCodecs[1].name);
-    assertEquals("AV1", videoCodecs[2].name);
+    assertEquals("AV1X", videoCodecs[2].name);
     assertEquals("H264", videoCodecs[3].name);
     assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id"));
   }
@@ -103,7 +103,7 @@
     assertEquals(5, videoCodecs.length);
     assertEquals("VP8", videoCodecs[0].name);
     assertEquals("VP9", videoCodecs[1].name);
-    assertEquals("AV1", videoCodecs[2].name);
+    assertEquals("AV1X", videoCodecs[2].name);
     assertEquals("H264", videoCodecs[3].name);
     assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id"));
     assertEquals("H264", videoCodecs[4].name);
diff --git a/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java b/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java
index bd446fb..5a1d63e 100644
--- a/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java
+++ b/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java
@@ -46,7 +46,7 @@
   @Nullable
   @Override
   public VideoDecoder createDecoder(VideoCodecInfo codecType) {
-    VideoCodecMimeType type = VideoCodecMimeType.valueOf(codecType.getName());
+    VideoCodecMimeType type = VideoCodecMimeType.fromSdpCodecName(codecType.getName());
     MediaCodecInfo info = findCodecForType(type);
 
     if (info == null) {
@@ -68,7 +68,7 @@
              VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) {
       MediaCodecInfo codec = findCodecForType(type);
       if (codec != null) {
-        String name = type.name();
+        String name = type.toSdpCodecName();
         if (type == VideoCodecMimeType.H264 && isH264HighProfileSupported(codec)) {
           supportedCodecInfos.add(new VideoCodecInfo(
               name, MediaCodecUtils.getCodecProperties(type, /* highProfile= */ true)));
diff --git a/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java b/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java
index 26a0309..93a9286 100644
--- a/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java
+++ b/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java
@@ -26,4 +26,12 @@
   String mimeType() {
     return mimeType;
   }
+
+  static VideoCodecMimeType fromSdpCodecName(String codecName) {
+    return codecName.equals("AV1X") ? AV1 : valueOf(codecName);
+  }
+
+  String toSdpCodecName() {
+    return this == AV1 ? "AV1X" : name();
+  }
 }
diff --git a/sdk/android/src/jni/video_codec_info.cc b/sdk/android/src/jni/video_codec_info.cc
index 8c86b7c..a218a1d 100644
--- a/sdk/android/src/jni/video_codec_info.cc
+++ b/sdk/android/src/jni/video_codec_info.cc
@@ -19,33 +19,18 @@
 
 SdpVideoFormat VideoCodecInfoToSdpVideoFormat(JNIEnv* jni,
                                               const JavaRef<jobject>& j_info) {
-  std::string codecName =
-      JavaToNativeString(jni, Java_VideoCodecInfo_getName(jni, j_info));
-  std::string sdpCodecName;
-  if (codecName == "AV1") {
-    // TODO(yyaroshevich): Undo mapping once AV1 sdp name is standardized
-    sdpCodecName = "AV1X";
-  } else {
-    sdpCodecName = codecName;
-  }
   return SdpVideoFormat(
-      sdpCodecName,
+      JavaToNativeString(jni, Java_VideoCodecInfo_getName(jni, j_info)),
       JavaToNativeStringMap(jni, Java_VideoCodecInfo_getParams(jni, j_info)));
 }
 
 ScopedJavaLocalRef<jobject> SdpVideoFormatToVideoCodecInfo(
     JNIEnv* jni,
     const SdpVideoFormat& format) {
-  std::string codecName;
-  if (format.name == "AV1X" || format.name == "AV1") {
-    codecName = "AV1";
-  } else {
-    codecName = format.name;
-  }
   ScopedJavaLocalRef<jobject> j_params =
       NativeToJavaStringMap(jni, format.parameters);
   return Java_VideoCodecInfo_Constructor(
-      jni, NativeToJavaString(jni, codecName), j_params);
+      jni, NativeToJavaString(jni, format.name), j_params);
 }
 
 }  // namespace jni