From 6b19d8273bb718833b562def87f92b9f0becb39e Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Thu, 9 Sep 2021 15:09:11 +0200 Subject: [PATCH] Replace AV1X with AV1 * Replace "AV1X" with "AV1"; * Keep mapping of "AV1X" payload name to kVideoCodecAv1 to not break support of injectable "AV1X". Bug: webrtc:13166 Change-Id: I9a50481209209f3857bbf28f4ed529ee6972377e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/231560 Reviewed-by: Danil Chapovalov Reviewed-by: Per Kjellander Reviewed-by: Emil Lundmark Reviewed-by: Philip Eliasson Commit-Queue: Sergey Silkin Cr-Commit-Position: refs/heads/main@{#34987} --- api/video_codecs/video_codec.cc | 9 +++++---- .../src/org/appspot/apprtc/PeerConnectionClient.java | 3 +-- media/base/media_constants.cc | 3 ++- media/base/media_constants.h | 2 ++ media/engine/internal_decoder_factory_unittest.cc | 10 ++++++---- media/engine/webrtc_video_engine.cc | 3 ++- pc/peer_connection_signaling_unittest.cc | 2 +- .../api/org/webrtc/HardwareVideoEncoderFactory.java | 4 ++-- .../api/org/webrtc/SoftwareVideoDecoderFactory.java | 12 ++++++------ .../api/org/webrtc/SoftwareVideoEncoderFactory.java | 12 ++++++------ .../org/webrtc/DefaultVideoEncoderFactoryTest.java | 6 +++--- .../org/webrtc/MediaCodecVideoDecoderFactory.java | 5 ++--- .../src/java/org/webrtc/VideoCodecMimeType.java | 8 -------- 13 files changed, 38 insertions(+), 41 deletions(-) diff --git a/api/video_codecs/video_codec.cc b/api/video_codecs/video_codec.cc index d05eb456fc..e96a63a95a 100644 --- a/api/video_codecs/video_codec.cc +++ b/api/video_codecs/video_codec.cc @@ -21,9 +21,9 @@ namespace webrtc { namespace { constexpr char kPayloadNameVp8[] = "VP8"; constexpr char kPayloadNameVp9[] = "VP9"; -// TODO(bugs.webrtc.org/11042): Rename to AV1 when rtp payload format for av1 is -// frozen. -constexpr char kPayloadNameAv1[] = "AV1X"; +constexpr char kPayloadNameAv1[] = "AV1"; +// TODO(bugs.webrtc.org/13166): Delete after all dependent projects updated. +constexpr char kPayloadNameAv1x[] = "AV1X"; constexpr char kPayloadNameH264[] = "H264"; constexpr char kPayloadNameGeneric[] = "Generic"; constexpr char kPayloadNameMultiplex[] = "Multiplex"; @@ -128,7 +128,8 @@ VideoCodecType PayloadStringToCodecType(const std::string& name) { return kVideoCodecVP8; if (absl::EqualsIgnoreCase(name, kPayloadNameVp9)) return kVideoCodecVP9; - if (absl::EqualsIgnoreCase(name, kPayloadNameAv1)) + if (absl::EqualsIgnoreCase(name, kPayloadNameAv1) || + absl::EqualsIgnoreCase(name, kPayloadNameAv1x)) return kVideoCodecAV1; if (absl::EqualsIgnoreCase(name, kPayloadNameH264)) return kVideoCodecH264; diff --git a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java index c5e9059b74..2872d0bb80 100644 --- a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java +++ b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java @@ -96,7 +96,6 @@ public class PeerConnectionClient { private static final String VIDEO_CODEC_H264_BASELINE = "H264 Baseline"; private static final String VIDEO_CODEC_H264_HIGH = "H264 High"; private static final String VIDEO_CODEC_AV1 = "AV1"; - private static final String VIDEO_CODEC_AV1_SDP_CODEC_NAME = "AV1X"; private static final String AUDIO_CODEC_OPUS = "opus"; private static final String AUDIO_CODEC_ISAC = "ISAC"; private static final String VIDEO_CODEC_PARAM_START_BITRATE = "x-google-start-bitrate"; @@ -985,7 +984,7 @@ public class PeerConnectionClient { case VIDEO_CODEC_VP9: return VIDEO_CODEC_VP9; case VIDEO_CODEC_AV1: - return VIDEO_CODEC_AV1_SDP_CODEC_NAME; + return VIDEO_CODEC_AV1; case VIDEO_CODEC_H264_HIGH: case VIDEO_CODEC_H264_BASELINE: return VIDEO_CODEC_H264; diff --git a/media/base/media_constants.cc b/media/base/media_constants.cc index 17a8a83bd0..4e1fd1f09a 100644 --- a/media/base/media_constants.cc +++ b/media/base/media_constants.cc @@ -99,7 +99,8 @@ const char kComfortNoiseCodecName[] = "CN"; const char kVp8CodecName[] = "VP8"; const char kVp9CodecName[] = "VP9"; -const char kAv1CodecName[] = "AV1X"; +const char kAv1CodecName[] = "AV1"; +const char kAv1xCodecName[] = "AV1X"; const char kH264CodecName[] = "H264"; // RFC 6184 RTP Payload Format for H.264 video diff --git a/media/base/media_constants.h b/media/base/media_constants.h index 1f471e7dd7..617ba44975 100644 --- a/media/base/media_constants.h +++ b/media/base/media_constants.h @@ -122,6 +122,8 @@ extern const char kComfortNoiseCodecName[]; RTC_EXPORT extern const char kVp8CodecName[]; RTC_EXPORT extern const char kVp9CodecName[]; RTC_EXPORT extern const char kAv1CodecName[]; +// TODO(bugs.webrtc.org/13166): Delete after all dependent projects updated. +RTC_EXPORT extern const char kAv1xCodecName[]; RTC_EXPORT extern const char kH264CodecName[]; // RFC 6184 RTP Payload Format for H.264 video diff --git a/media/engine/internal_decoder_factory_unittest.cc b/media/engine/internal_decoder_factory_unittest.cc index a2a69211b9..9d3acee452 100644 --- a/media/engine/internal_decoder_factory_unittest.cc +++ b/media/engine/internal_decoder_factory_unittest.cc @@ -55,11 +55,13 @@ TEST(InternalDecoderFactory, Av1) { InternalDecoderFactory factory; if (kIsLibaomAv1DecoderSupported) { EXPECT_THAT(factory.GetSupportedFormats(), - Contains(Field(&SdpVideoFormat::name, "AV1X"))); - EXPECT_TRUE(factory.CreateVideoDecoder(SdpVideoFormat("AV1X"))); + Contains(Field(&SdpVideoFormat::name, cricket::kAv1CodecName))); + EXPECT_TRUE( + factory.CreateVideoDecoder(SdpVideoFormat(cricket::kAv1CodecName))); } else { - EXPECT_THAT(factory.GetSupportedFormats(), - Not(Contains(Field(&SdpVideoFormat::name, "AV1X")))); + EXPECT_THAT( + factory.GetSupportedFormats(), + Not(Contains(Field(&SdpVideoFormat::name, cricket::kAv1CodecName)))); } } diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index b7c998393d..dc50a8ebfb 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -172,7 +172,8 @@ std::vector GetPayloadTypesAndDefaultCodecs( VideoCodec codec(format); bool isCodecValidForLowerRange = absl::EqualsIgnoreCase(codec.name, kFlexfecCodecName) || - absl::EqualsIgnoreCase(codec.name, kAv1CodecName); + absl::EqualsIgnoreCase(codec.name, kAv1CodecName) || + absl::EqualsIgnoreCase(codec.name, kAv1xCodecName); bool isFecCodec = absl::EqualsIgnoreCase(codec.name, kUlpfecCodecName) || absl::EqualsIgnoreCase(codec.name, kFlexfecCodecName); diff --git a/pc/peer_connection_signaling_unittest.cc b/pc/peer_connection_signaling_unittest.cc index d20dc706cb..13b54d995d 100644 --- a/pc/peer_connection_signaling_unittest.cc +++ b/pc/peer_connection_signaling_unittest.cc @@ -1025,7 +1025,7 @@ TEST_P(PeerConnectionSignalingTest, ReceiveFlexFecReoffer) { ASSERT_EQ(flexfec_it->id, 35); auto av1_it = std::find_if( offer_codecs.begin(), offer_codecs.end(), - [](const cricket::Codec& codec) { return codec.name == "AV1X"; }); + [](const cricket::Codec& codec) { return codec.name == "AV1"; }); if (av1_it != offer_codecs.end()) { ASSERT_NE(av1_it->id, 35); } diff --git a/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java b/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java index f2cde8f7ba..9cd4aa2d37 100644 --- a/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java +++ b/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java @@ -94,7 +94,7 @@ public class HardwareVideoEncoderFactory implements VideoEncoderFactory { return null; } - VideoCodecMimeType type = VideoCodecMimeType.fromSdpCodecName(input.getName()); + VideoCodecMimeType type = VideoCodecMimeType.valueOf(input.getName()); MediaCodecInfo info = findCodecForType(type); if (info == null) { @@ -142,7 +142,7 @@ public class HardwareVideoEncoderFactory implements VideoEncoderFactory { VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) { MediaCodecInfo codec = findCodecForType(type); if (codec != null) { - String name = type.toSdpCodecName(); + String name = type.name(); // 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 e767aeeeac..ebcf204320 100644 --- a/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java +++ b/sdk/android/api/org/webrtc/SoftwareVideoDecoderFactory.java @@ -21,14 +21,14 @@ public class SoftwareVideoDecoderFactory implements VideoDecoderFactory { public VideoDecoder createDecoder(VideoCodecInfo codecInfo) { String codecName = codecInfo.getName(); - if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.toSdpCodecName())) { + if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.name())) { return new LibvpxVp8Decoder(); } - if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.toSdpCodecName()) + if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.name()) && LibvpxVp9Decoder.nativeIsSupported()) { return new LibvpxVp9Decoder(); } - if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.toSdpCodecName()) + if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.name()) && LibaomAv1Decoder.nativeIsSupported()) { return new LibaomAv1Decoder(); } @@ -44,12 +44,12 @@ public class SoftwareVideoDecoderFactory implements VideoDecoderFactory { static VideoCodecInfo[] supportedCodecs() { List codecs = new ArrayList(); - codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.toSdpCodecName(), new HashMap<>())); + codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>())); if (LibvpxVp9Decoder.nativeIsSupported()) { - codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.toSdpCodecName(), new HashMap<>())); + codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>())); } if (LibaomAv1Decoder.nativeIsSupported()) { - codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.toSdpCodecName(), new HashMap<>())); + codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), 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 6074be2e72..1e3e181b3e 100644 --- a/sdk/android/api/org/webrtc/SoftwareVideoEncoderFactory.java +++ b/sdk/android/api/org/webrtc/SoftwareVideoEncoderFactory.java @@ -21,14 +21,14 @@ public class SoftwareVideoEncoderFactory implements VideoEncoderFactory { public VideoEncoder createEncoder(VideoCodecInfo codecInfo) { String codecName = codecInfo.getName(); - if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.toSdpCodecName())) { + if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.name())) { return new LibvpxVp8Encoder(); } - if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.toSdpCodecName()) + if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.name()) && LibvpxVp9Encoder.nativeIsSupported()) { return new LibvpxVp9Encoder(); } - if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.toSdpCodecName()) + if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.name()) && LibaomAv1Encoder.nativeIsSupported()) { return new LibaomAv1Encoder(); } @@ -44,12 +44,12 @@ public class SoftwareVideoEncoderFactory implements VideoEncoderFactory { static VideoCodecInfo[] supportedCodecs() { List codecs = new ArrayList(); - codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.toSdpCodecName(), new HashMap<>())); + codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>())); if (LibvpxVp9Encoder.nativeIsSupported()) { - codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.toSdpCodecName(), new HashMap<>())); + codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>())); } if (LibaomAv1Encoder.nativeIsSupported()) { - codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.toSdpCodecName(), new HashMap<>())); + codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), 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 4ec0d94c34..197a5bc664 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/DefaultVideoEncoderFactoryTest.java @@ -73,7 +73,7 @@ public class DefaultVideoEncoderFactoryTest { assertEquals(5, videoCodecs.length); assertEquals("VP8", videoCodecs[0].name); assertEquals("VP9", videoCodecs[1].name); - assertEquals("AV1X", videoCodecs[2].name); + assertEquals("AV1", 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 @@ public class DefaultVideoEncoderFactoryTest { assertEquals(4, videoCodecs.length); assertEquals("VP8", videoCodecs[0].name); assertEquals("VP9", videoCodecs[1].name); - assertEquals("AV1X", videoCodecs[2].name); + assertEquals("AV1", videoCodecs[2].name); assertEquals("H264", videoCodecs[3].name); assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id")); } @@ -103,7 +103,7 @@ public class DefaultVideoEncoderFactoryTest { assertEquals(5, videoCodecs.length); assertEquals("VP8", videoCodecs[0].name); assertEquals("VP9", videoCodecs[1].name); - assertEquals("AV1X", videoCodecs[2].name); + assertEquals("AV1", 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 9410c4c1a1..4ee8b1aad1 100644 --- a/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java +++ b/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java @@ -46,7 +46,7 @@ class MediaCodecVideoDecoderFactory implements VideoDecoderFactory { @Nullable @Override public VideoDecoder createDecoder(VideoCodecInfo codecType) { - VideoCodecMimeType type = VideoCodecMimeType.fromSdpCodecName(codecType.getName()); + VideoCodecMimeType type = VideoCodecMimeType.valueOf(codecType.getName()); MediaCodecInfo info = findCodecForType(type); if (info == null) { @@ -68,7 +68,7 @@ class MediaCodecVideoDecoderFactory implements VideoDecoderFactory { VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) { MediaCodecInfo codec = findCodecForType(type); if (codec != null) { - String name = type.toSdpCodecName(); + String name = type.name(); if (type == VideoCodecMimeType.H264 && isH264HighProfileSupported(codec)) { supportedCodecInfos.add(new VideoCodecInfo( name, MediaCodecUtils.getCodecProperties(type, /* highProfile= */ true))); @@ -110,7 +110,6 @@ class MediaCodecVideoDecoderFactory implements VideoDecoderFactory { // Returns true if the given MediaCodecInfo indicates a supported encoder for the given type. private boolean isSupportedCodec(MediaCodecInfo info, VideoCodecMimeType type) { - String name = info.getName(); if (!MediaCodecUtils.codecSupportsType(info, type)) { return false; } diff --git a/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java b/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java index 93a9286165..26a030919d 100644 --- a/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java +++ b/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java @@ -26,12 +26,4 @@ enum VideoCodecMimeType { String mimeType() { return mimeType; } - - static VideoCodecMimeType fromSdpCodecName(String codecName) { - return codecName.equals("AV1X") ? AV1 : valueOf(codecName); - } - - String toSdpCodecName() { - return this == AV1 ? "AV1X" : name(); - } }