From 46b43e007296737751aea10685f92ddf4df63e0d Mon Sep 17 00:00:00 2001 From: Sergio Garcia Murillo Date: Wed, 19 Jun 2024 15:33:21 +0200 Subject: [PATCH] Update support for missing HIGH profiles and 1080p MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The High and ConstrainedHigh profiles are missing from the decoder capabilities. Also level 3.1 doesn't allow 1080p Bug: webrtc:347724928 Change-Id: I3f33468327d2aaf352fc80f69d2ee31481bafcb5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/355001 Reviewed-by: Sergey Silkin Reviewed-by: Åsa Persson Commit-Queue: Sergey Silkin Cr-Commit-Position: refs/heads/main@{#42528} --- modules/video_coding/codecs/h264/h264.cc | 26 ++++++++++++------- .../test/videocodec_test_fixture_impl.cc | 2 +- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/modules/video_coding/codecs/h264/h264.cc b/modules/video_coding/codecs/h264/h264.cc index 60142c88c1..b2deda5ea8 100644 --- a/modules/video_coding/codecs/h264/h264.cc +++ b/modules/video_coding/codecs/h264/h264.cc @@ -90,17 +90,17 @@ std::vector SupportedH264Codecs(bool add_scalability_modes) { // // We support both packetization modes 0 (mandatory) and 1 (optional, // preferred). - return {CreateH264Format(H264Profile::kProfileBaseline, H264Level::kLevel3_1, + return {CreateH264Format(H264Profile::kProfileBaseline, H264Level::kLevel4_2, "1", add_scalability_modes), - CreateH264Format(H264Profile::kProfileBaseline, H264Level::kLevel3_1, + CreateH264Format(H264Profile::kProfileBaseline, H264Level::kLevel4_2, "0", add_scalability_modes), CreateH264Format(H264Profile::kProfileConstrainedBaseline, - H264Level::kLevel3_1, "1", add_scalability_modes), + H264Level::kLevel4_2, "1", add_scalability_modes), CreateH264Format(H264Profile::kProfileConstrainedBaseline, - H264Level::kLevel3_1, "0", add_scalability_modes), - CreateH264Format(H264Profile::kProfileMain, H264Level::kLevel3_1, "1", + H264Level::kLevel4_2, "0", add_scalability_modes), + CreateH264Format(H264Profile::kProfileMain, H264Level::kLevel4_2, "1", add_scalability_modes), - CreateH264Format(H264Profile::kProfileMain, H264Level::kLevel3_1, "0", + CreateH264Format(H264Profile::kProfileMain, H264Level::kLevel4_2, "0", add_scalability_modes)}; } @@ -111,12 +111,18 @@ std::vector SupportedH264DecoderCodecs() { std::vector supportedCodecs = SupportedH264Codecs(); - // OpenH264 doesn't yet support High Predictive 4:4:4 encoding but it does - // support decoding. supportedCodecs.push_back(CreateH264Format( - H264Profile::kProfilePredictiveHigh444, H264Level::kLevel3_1, "1")); + H264Profile::kProfileConstrainedHigh, H264Level::kLevel4_2, "1")); supportedCodecs.push_back(CreateH264Format( - H264Profile::kProfilePredictiveHigh444, H264Level::kLevel3_1, "0")); + H264Profile::kProfileConstrainedHigh, H264Level::kLevel4_2, "0")); + supportedCodecs.push_back( + CreateH264Format(H264Profile::kProfileHigh, H264Level::kLevel4_2, "1")); + supportedCodecs.push_back( + CreateH264Format(H264Profile::kProfileHigh, H264Level::kLevel4_2, "0")); + supportedCodecs.push_back(CreateH264Format( + H264Profile::kProfilePredictiveHigh444, H264Level::kLevel4_2, "1")); + supportedCodecs.push_back(CreateH264Format( + H264Profile::kProfilePredictiveHigh444, H264Level::kLevel4_2, "0")); return supportedCodecs; } diff --git a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc index 9c708263a7..82bc6e37f9 100644 --- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc +++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc @@ -173,7 +173,7 @@ SdpVideoFormat CreateSdpVideoFormat( CodecParameterMap codec_params = { {cricket::kH264FmtpProfileLevelId, *H264ProfileLevelIdToString(H264ProfileLevelId( - config.h264_codec_settings.profile, H264Level::kLevel3_1))}, + config.h264_codec_settings.profile, H264Level::kLevel4_2))}, {cricket::kH264FmtpPacketizationMode, packetization_mode}, {cricket::kH264FmtpLevelAsymmetryAllowed, "1"}};