From 37e9b378fd2e2f676bd9b1bd9c28a112a08126be Mon Sep 17 00:00:00 2001 From: Sergey Silkin Date: Fri, 19 Jan 2024 14:07:20 +0100 Subject: [PATCH] Use default H264 SDP parameters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We lost H264 [1] in https://webrtc-review.googlesource.com/c/src/+/327260 where we started using QueryCodecSupport which is sensetive to SDP parameters. Use CBP3.1, packetization_mode=1 (singlecast NALU) as defaults. [1] https://chromeperf.appspot.com/report?sid=1e12d661147889123ddeea4ef88a87bcdd38cf09cb23c13ee130770be695ac83&start_rev=41064&end_rev=41226 Bug: webrtc:14852, webrtc:15779 Change-Id: I69137ac847ae3a79238abcfe2a76dc2ba097a06d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/335081 Reviewed-by: Erik Språng Commit-Queue: Sergey Silkin Cr-Commit-Position: refs/heads/main@{#41576} --- .../codecs/test/video_codec_test.cc | 2 ++ test/BUILD.gn | 1 + test/video_codec_tester.cc | 20 +++++++++++++++---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/modules/video_coding/codecs/test/video_codec_test.cc b/modules/video_coding/codecs/test/video_codec_test.cc index fc6378d7c7..2ab1106a59 100644 --- a/modules/video_coding/codecs/test/video_codec_test.cc +++ b/modules/video_coding/codecs/test/video_codec_test.cc @@ -210,6 +210,8 @@ std::unique_ptr RunEncodeDecodeTest( RTC_LOG(LS_WARNING) << "No " << decoder_impl << " decoder for video format " << sdp_video_format.ToString() << ". Trying built-in decoder."; + // TODO(ssilkin): No H264 support in ffmpeg on ARM. Consider trying HW + // decoder. decoder_factory = CreateDecoderFactory("builtin"); if (!decoder_factory ->QueryCodecSupport(sdp_video_format, diff --git a/test/BUILD.gn b/test/BUILD.gn index dc703aaf9b..2a37b78c7c 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -1404,6 +1404,7 @@ rtc_library("video_codec_tester") { "../media:media_constants", "../modules/video_coding:video_codec_interface", "../modules/video_coding:video_coding_utility", + "../modules/video_coding:webrtc_h264", "../modules/video_coding:webrtc_vp9_helpers", "../modules/video_coding/codecs/av1:av1_svc_config", "../modules/video_coding/svc:scalability_mode_util", diff --git a/test/video_codec_tester.cc b/test/video_codec_tester.cc index 094cba6c0e..f5fdc07a6b 100644 --- a/test/video_codec_tester.cc +++ b/test/video_codec_tester.cc @@ -23,11 +23,13 @@ #include "api/video/video_bitrate_allocator.h" #include "api/video/video_codec_type.h" #include "api/video/video_frame.h" +#include "api/video_codecs/h264_profile_level_id.h" #include "api/video_codecs/simulcast_stream.h" #include "api/video_codecs/video_decoder.h" #include "api/video_codecs/video_encoder.h" #include "media/base/media_constants.h" #include "modules/video_coding/codecs/av1/av1_svc_config.h" +#include "modules/video_coding/codecs/h264/include/h264.h" #include "modules/video_coding/codecs/vp9/svc_config.h" #include "modules/video_coding/include/video_codec_interface.h" #include "modules/video_coding/include/video_error_codes.h" @@ -1448,14 +1450,24 @@ std::map VideoCodecTester::CreateEncodingSettings( } } + SdpVideoFormat sdp_video_format = SdpVideoFormat(codec_type); + if (codec_type == "H264") { + const std::string packetization_mode = + "1"; // H264PacketizationMode::SingleNalUnit + sdp_video_format.parameters = + CreateH264Format(H264Profile::kProfileConstrainedBaseline, + H264Level::kLevel3_1, packetization_mode, + /*add_scalability_modes=*/false) + .parameters; + } + std::map frames_settings; uint32_t timestamp_rtp = first_timestamp_rtp; for (int frame_num = 0; frame_num < num_frames; ++frame_num) { frames_settings.emplace( - timestamp_rtp, - EncodingSettings{.sdp_video_format = SdpVideoFormat(codec_type), - .scalability_mode = scalability_mode, - .layers_settings = layers_settings}); + timestamp_rtp, EncodingSettings{.sdp_video_format = sdp_video_format, + .scalability_mode = scalability_mode, + .layers_settings = layers_settings}); timestamp_rtp += k90kHz / Frequency::MilliHertz(1000 * framerate_fps); }