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 <danilchap@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Emil Lundmark <lndmrk@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#34987}
This commit is contained in:
Sergey Silkin
2021-09-09 15:09:11 +02:00
committed by WebRTC LUCI CQ
parent 52b9e1ecfb
commit 6b19d8273b
13 changed files with 38 additions and 41 deletions

View File

@ -21,9 +21,9 @@ namespace webrtc {
namespace { namespace {
constexpr char kPayloadNameVp8[] = "VP8"; constexpr char kPayloadNameVp8[] = "VP8";
constexpr char kPayloadNameVp9[] = "VP9"; constexpr char kPayloadNameVp9[] = "VP9";
// TODO(bugs.webrtc.org/11042): Rename to AV1 when rtp payload format for av1 is constexpr char kPayloadNameAv1[] = "AV1";
// frozen. // TODO(bugs.webrtc.org/13166): Delete after all dependent projects updated.
constexpr char kPayloadNameAv1[] = "AV1X"; constexpr char kPayloadNameAv1x[] = "AV1X";
constexpr char kPayloadNameH264[] = "H264"; constexpr char kPayloadNameH264[] = "H264";
constexpr char kPayloadNameGeneric[] = "Generic"; constexpr char kPayloadNameGeneric[] = "Generic";
constexpr char kPayloadNameMultiplex[] = "Multiplex"; constexpr char kPayloadNameMultiplex[] = "Multiplex";
@ -128,7 +128,8 @@ VideoCodecType PayloadStringToCodecType(const std::string& name) {
return kVideoCodecVP8; return kVideoCodecVP8;
if (absl::EqualsIgnoreCase(name, kPayloadNameVp9)) if (absl::EqualsIgnoreCase(name, kPayloadNameVp9))
return kVideoCodecVP9; return kVideoCodecVP9;
if (absl::EqualsIgnoreCase(name, kPayloadNameAv1)) if (absl::EqualsIgnoreCase(name, kPayloadNameAv1) ||
absl::EqualsIgnoreCase(name, kPayloadNameAv1x))
return kVideoCodecAV1; return kVideoCodecAV1;
if (absl::EqualsIgnoreCase(name, kPayloadNameH264)) if (absl::EqualsIgnoreCase(name, kPayloadNameH264))
return kVideoCodecH264; return kVideoCodecH264;

View File

@ -96,7 +96,6 @@ public class PeerConnectionClient {
private static final String VIDEO_CODEC_H264_BASELINE = "H264 Baseline"; 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_H264_HIGH = "H264 High";
private static final String VIDEO_CODEC_AV1 = "AV1"; 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_OPUS = "opus";
private static final String AUDIO_CODEC_ISAC = "ISAC"; private static final String AUDIO_CODEC_ISAC = "ISAC";
private static final String VIDEO_CODEC_PARAM_START_BITRATE = "x-google-start-bitrate"; private static final String VIDEO_CODEC_PARAM_START_BITRATE = "x-google-start-bitrate";
@ -985,7 +984,7 @@ public class PeerConnectionClient {
case VIDEO_CODEC_VP9: case VIDEO_CODEC_VP9:
return VIDEO_CODEC_VP9; return VIDEO_CODEC_VP9;
case VIDEO_CODEC_AV1: case VIDEO_CODEC_AV1:
return VIDEO_CODEC_AV1_SDP_CODEC_NAME; return VIDEO_CODEC_AV1;
case VIDEO_CODEC_H264_HIGH: case VIDEO_CODEC_H264_HIGH:
case VIDEO_CODEC_H264_BASELINE: case VIDEO_CODEC_H264_BASELINE:
return VIDEO_CODEC_H264; return VIDEO_CODEC_H264;

View File

@ -99,7 +99,8 @@ const char kComfortNoiseCodecName[] = "CN";
const char kVp8CodecName[] = "VP8"; const char kVp8CodecName[] = "VP8";
const char kVp9CodecName[] = "VP9"; const char kVp9CodecName[] = "VP9";
const char kAv1CodecName[] = "AV1X"; const char kAv1CodecName[] = "AV1";
const char kAv1xCodecName[] = "AV1X";
const char kH264CodecName[] = "H264"; const char kH264CodecName[] = "H264";
// RFC 6184 RTP Payload Format for H.264 video // RFC 6184 RTP Payload Format for H.264 video

View File

@ -122,6 +122,8 @@ extern const char kComfortNoiseCodecName[];
RTC_EXPORT extern const char kVp8CodecName[]; RTC_EXPORT extern const char kVp8CodecName[];
RTC_EXPORT extern const char kVp9CodecName[]; RTC_EXPORT extern const char kVp9CodecName[];
RTC_EXPORT extern const char kAv1CodecName[]; 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[]; RTC_EXPORT extern const char kH264CodecName[];
// RFC 6184 RTP Payload Format for H.264 video // RFC 6184 RTP Payload Format for H.264 video

View File

@ -55,11 +55,13 @@ TEST(InternalDecoderFactory, Av1) {
InternalDecoderFactory factory; InternalDecoderFactory factory;
if (kIsLibaomAv1DecoderSupported) { if (kIsLibaomAv1DecoderSupported) {
EXPECT_THAT(factory.GetSupportedFormats(), EXPECT_THAT(factory.GetSupportedFormats(),
Contains(Field(&SdpVideoFormat::name, "AV1X"))); Contains(Field(&SdpVideoFormat::name, cricket::kAv1CodecName)));
EXPECT_TRUE(factory.CreateVideoDecoder(SdpVideoFormat("AV1X"))); EXPECT_TRUE(
factory.CreateVideoDecoder(SdpVideoFormat(cricket::kAv1CodecName)));
} else { } else {
EXPECT_THAT(factory.GetSupportedFormats(), EXPECT_THAT(
Not(Contains(Field(&SdpVideoFormat::name, "AV1X")))); factory.GetSupportedFormats(),
Not(Contains(Field(&SdpVideoFormat::name, cricket::kAv1CodecName))));
} }
} }

View File

@ -172,7 +172,8 @@ std::vector<VideoCodec> GetPayloadTypesAndDefaultCodecs(
VideoCodec codec(format); VideoCodec codec(format);
bool isCodecValidForLowerRange = bool isCodecValidForLowerRange =
absl::EqualsIgnoreCase(codec.name, kFlexfecCodecName) || 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) || bool isFecCodec = absl::EqualsIgnoreCase(codec.name, kUlpfecCodecName) ||
absl::EqualsIgnoreCase(codec.name, kFlexfecCodecName); absl::EqualsIgnoreCase(codec.name, kFlexfecCodecName);

View File

@ -1025,7 +1025,7 @@ TEST_P(PeerConnectionSignalingTest, ReceiveFlexFecReoffer) {
ASSERT_EQ(flexfec_it->id, 35); ASSERT_EQ(flexfec_it->id, 35);
auto av1_it = std::find_if( auto av1_it = std::find_if(
offer_codecs.begin(), offer_codecs.end(), 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()) { if (av1_it != offer_codecs.end()) {
ASSERT_NE(av1_it->id, 35); ASSERT_NE(av1_it->id, 35);
} }

View File

@ -94,7 +94,7 @@ public class HardwareVideoEncoderFactory implements VideoEncoderFactory {
return null; return null;
} }
VideoCodecMimeType type = VideoCodecMimeType.fromSdpCodecName(input.getName()); VideoCodecMimeType type = VideoCodecMimeType.valueOf(input.getName());
MediaCodecInfo info = findCodecForType(type); MediaCodecInfo info = findCodecForType(type);
if (info == null) { if (info == null) {
@ -142,7 +142,7 @@ public class HardwareVideoEncoderFactory implements VideoEncoderFactory {
VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) { VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) {
MediaCodecInfo codec = findCodecForType(type); MediaCodecInfo codec = findCodecForType(type);
if (codec != null) { 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 // TODO(sakal): Always add H264 HP once WebRTC correctly removes codecs that are not
// supported by the decoder. // supported by the decoder.
if (type == VideoCodecMimeType.H264 && isH264HighProfileSupported(codec)) { if (type == VideoCodecMimeType.H264 && isH264HighProfileSupported(codec)) {

View File

@ -21,14 +21,14 @@ public class SoftwareVideoDecoderFactory implements VideoDecoderFactory {
public VideoDecoder createDecoder(VideoCodecInfo codecInfo) { public VideoDecoder createDecoder(VideoCodecInfo codecInfo) {
String codecName = codecInfo.getName(); String codecName = codecInfo.getName();
if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.toSdpCodecName())) { if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.name())) {
return new LibvpxVp8Decoder(); return new LibvpxVp8Decoder();
} }
if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.toSdpCodecName()) if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.name())
&& LibvpxVp9Decoder.nativeIsSupported()) { && LibvpxVp9Decoder.nativeIsSupported()) {
return new LibvpxVp9Decoder(); return new LibvpxVp9Decoder();
} }
if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.toSdpCodecName()) if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.name())
&& LibaomAv1Decoder.nativeIsSupported()) { && LibaomAv1Decoder.nativeIsSupported()) {
return new LibaomAv1Decoder(); return new LibaomAv1Decoder();
} }
@ -44,12 +44,12 @@ public class SoftwareVideoDecoderFactory implements VideoDecoderFactory {
static VideoCodecInfo[] supportedCodecs() { static VideoCodecInfo[] supportedCodecs() {
List<VideoCodecInfo> codecs = new ArrayList<VideoCodecInfo>(); List<VideoCodecInfo> codecs = new ArrayList<VideoCodecInfo>();
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.toSdpCodecName(), new HashMap<>())); codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
if (LibvpxVp9Decoder.nativeIsSupported()) { if (LibvpxVp9Decoder.nativeIsSupported()) {
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.toSdpCodecName(), new HashMap<>())); codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
} }
if (LibaomAv1Decoder.nativeIsSupported()) { 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()]); return codecs.toArray(new VideoCodecInfo[codecs.size()]);

View File

@ -21,14 +21,14 @@ public class SoftwareVideoEncoderFactory implements VideoEncoderFactory {
public VideoEncoder createEncoder(VideoCodecInfo codecInfo) { public VideoEncoder createEncoder(VideoCodecInfo codecInfo) {
String codecName = codecInfo.getName(); String codecName = codecInfo.getName();
if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.toSdpCodecName())) { if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP8.name())) {
return new LibvpxVp8Encoder(); return new LibvpxVp8Encoder();
} }
if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.toSdpCodecName()) if (codecName.equalsIgnoreCase(VideoCodecMimeType.VP9.name())
&& LibvpxVp9Encoder.nativeIsSupported()) { && LibvpxVp9Encoder.nativeIsSupported()) {
return new LibvpxVp9Encoder(); return new LibvpxVp9Encoder();
} }
if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.toSdpCodecName()) if (codecName.equalsIgnoreCase(VideoCodecMimeType.AV1.name())
&& LibaomAv1Encoder.nativeIsSupported()) { && LibaomAv1Encoder.nativeIsSupported()) {
return new LibaomAv1Encoder(); return new LibaomAv1Encoder();
} }
@ -44,12 +44,12 @@ public class SoftwareVideoEncoderFactory implements VideoEncoderFactory {
static VideoCodecInfo[] supportedCodecs() { static VideoCodecInfo[] supportedCodecs() {
List<VideoCodecInfo> codecs = new ArrayList<VideoCodecInfo>(); List<VideoCodecInfo> codecs = new ArrayList<VideoCodecInfo>();
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.toSdpCodecName(), new HashMap<>())); codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
if (LibvpxVp9Encoder.nativeIsSupported()) { if (LibvpxVp9Encoder.nativeIsSupported()) {
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.toSdpCodecName(), new HashMap<>())); codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
} }
if (LibaomAv1Encoder.nativeIsSupported()) { 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()]); return codecs.toArray(new VideoCodecInfo[codecs.size()]);

View File

@ -73,7 +73,7 @@ public class DefaultVideoEncoderFactoryTest {
assertEquals(5, videoCodecs.length); assertEquals(5, videoCodecs.length);
assertEquals("VP8", videoCodecs[0].name); assertEquals("VP8", videoCodecs[0].name);
assertEquals("VP9", videoCodecs[1].name); assertEquals("VP9", videoCodecs[1].name);
assertEquals("AV1X", videoCodecs[2].name); assertEquals("AV1", videoCodecs[2].name);
assertEquals("H264", videoCodecs[3].name); assertEquals("H264", videoCodecs[3].name);
assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id")); assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id"));
assertEquals("H264", videoCodecs[4].name); assertEquals("H264", videoCodecs[4].name);
@ -89,7 +89,7 @@ public class DefaultVideoEncoderFactoryTest {
assertEquals(4, videoCodecs.length); assertEquals(4, videoCodecs.length);
assertEquals("VP8", videoCodecs[0].name); assertEquals("VP8", videoCodecs[0].name);
assertEquals("VP9", videoCodecs[1].name); assertEquals("VP9", videoCodecs[1].name);
assertEquals("AV1X", videoCodecs[2].name); assertEquals("AV1", videoCodecs[2].name);
assertEquals("H264", videoCodecs[3].name); assertEquals("H264", videoCodecs[3].name);
assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id")); assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id"));
} }
@ -103,7 +103,7 @@ public class DefaultVideoEncoderFactoryTest {
assertEquals(5, videoCodecs.length); assertEquals(5, videoCodecs.length);
assertEquals("VP8", videoCodecs[0].name); assertEquals("VP8", videoCodecs[0].name);
assertEquals("VP9", videoCodecs[1].name); assertEquals("VP9", videoCodecs[1].name);
assertEquals("AV1X", videoCodecs[2].name); assertEquals("AV1", videoCodecs[2].name);
assertEquals("H264", videoCodecs[3].name); assertEquals("H264", videoCodecs[3].name);
assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id")); assertEquals("42e01f", videoCodecs[3].params.get("profile-level-id"));
assertEquals("H264", videoCodecs[4].name); assertEquals("H264", videoCodecs[4].name);

View File

@ -46,7 +46,7 @@ class MediaCodecVideoDecoderFactory implements VideoDecoderFactory {
@Nullable @Nullable
@Override @Override
public VideoDecoder createDecoder(VideoCodecInfo codecType) { public VideoDecoder createDecoder(VideoCodecInfo codecType) {
VideoCodecMimeType type = VideoCodecMimeType.fromSdpCodecName(codecType.getName()); VideoCodecMimeType type = VideoCodecMimeType.valueOf(codecType.getName());
MediaCodecInfo info = findCodecForType(type); MediaCodecInfo info = findCodecForType(type);
if (info == null) { if (info == null) {
@ -68,7 +68,7 @@ class MediaCodecVideoDecoderFactory implements VideoDecoderFactory {
VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) { VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) {
MediaCodecInfo codec = findCodecForType(type); MediaCodecInfo codec = findCodecForType(type);
if (codec != null) { if (codec != null) {
String name = type.toSdpCodecName(); String name = type.name();
if (type == VideoCodecMimeType.H264 && isH264HighProfileSupported(codec)) { if (type == VideoCodecMimeType.H264 && isH264HighProfileSupported(codec)) {
supportedCodecInfos.add(new VideoCodecInfo( supportedCodecInfos.add(new VideoCodecInfo(
name, MediaCodecUtils.getCodecProperties(type, /* highProfile= */ true))); 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. // Returns true if the given MediaCodecInfo indicates a supported encoder for the given type.
private boolean isSupportedCodec(MediaCodecInfo info, VideoCodecMimeType type) { private boolean isSupportedCodec(MediaCodecInfo info, VideoCodecMimeType type) {
String name = info.getName();
if (!MediaCodecUtils.codecSupportsType(info, type)) { if (!MediaCodecUtils.codecSupportsType(info, type)) {
return false; return false;
} }

View File

@ -26,12 +26,4 @@ enum VideoCodecMimeType {
String mimeType() { String mimeType() {
return mimeType; return mimeType;
} }
static VideoCodecMimeType fromSdpCodecName(String codecName) {
return codecName.equals("AV1X") ? AV1 : valueOf(codecName);
}
String toSdpCodecName() {
return this == AV1 ? "AV1X" : name();
}
} }