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 {
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;

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_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;

View File

@ -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

View File

@ -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

View File

@ -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))));
}
}

View File

@ -172,7 +172,8 @@ std::vector<VideoCodec> 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);

View File

@ -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);
}

View File

@ -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)) {

View File

@ -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<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()) {
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()]);

View File

@ -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<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()) {
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()]);

View File

@ -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);

View File

@ -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;
}

View File

@ -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();
}
}