From 14d01508beba6458e266fd3930e6b1c8f2bd9326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Mon, 9 May 2022 14:35:09 +0200 Subject: [PATCH] Move VP8 SupportsScalabilityMode utility to its own build target MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Intended to let Vp8TemporalLayersFactory (an api/ target) reuse this function, without depending on the codec implementation, and without introducing a dependency cycle with the webrtc_vp8 build target. Bug: webrtc:11607 Change-Id: I671422e994e1005da8c7d768e8dd8ff795553e51 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/261308 Commit-Queue: Niels Moller Reviewed-by: Åsa Persson Cr-Commit-Position: refs/heads/main@{#36816} --- api/video_codecs/BUILD.gn | 5 +++- ...oder_factory_template_libvpx_vp8_adapter.h | 3 ++- media/BUILD.gn | 1 + media/engine/internal_encoder_factory.cc | 3 ++- modules/video_coding/BUILD.gn | 9 ++++++- modules/video_coding/codecs/vp8/include/vp8.h | 2 -- .../codecs/vp8/libvpx_vp8_encoder.cc | 12 --------- .../codecs/vp8/vp8_scalability.cc | 26 +++++++++++++++++++ .../video_coding/codecs/vp8/vp8_scalability.h | 22 ++++++++++++++++ 9 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 modules/video_coding/codecs/vp8/vp8_scalability.cc create mode 100644 modules/video_coding/codecs/vp8/vp8_scalability.h diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn index ed532916ec..8ca9f7afcd 100644 --- a/api/video_codecs/BUILD.gn +++ b/api/video_codecs/BUILD.gn @@ -136,7 +136,10 @@ rtc_source_set("video_encoder_factory_template_libvpx_vp8_adapter") { allow_poison = [ "software_video_codecs" ] public = [ "video_encoder_factory_template_libvpx_vp8_adapter.h" ] - deps = [ "../../modules/video_coding:webrtc_vp8" ] + deps = [ + "../../modules/video_coding:webrtc_vp8", + "../../modules/video_coding:webrtc_vp8_scalability", + ] } rtc_source_set("video_encoder_factory_template_libvpx_vp9_adapter") { diff --git a/api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h b/api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h index 7bbf1fdd63..c00c6d1250 100644 --- a/api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h +++ b/api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h @@ -15,6 +15,7 @@ #include #include "modules/video_coding/codecs/vp8/include/vp8.h" +#include "modules/video_coding/codecs/vp8/vp8_scalability.h" namespace webrtc { struct LibvpxVp8EncoderTemplateAdapter { @@ -28,7 +29,7 @@ struct LibvpxVp8EncoderTemplateAdapter { } static bool IsScalabilityModeSupported(ScalabilityMode scalability_mode) { - return VP8Encoder::SupportsScalabilityMode(scalability_mode); + return VP8SupportsScalabilityMode(scalability_mode); } }; } // namespace webrtc diff --git a/media/BUILD.gn b/media/BUILD.gn index 0350c0ad8e..5079b7f396 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -214,6 +214,7 @@ rtc_library("rtc_internal_video_codecs") { "../modules/video_coding:webrtc_h264", "../modules/video_coding:webrtc_multiplex", "../modules/video_coding:webrtc_vp8", + "../modules/video_coding:webrtc_vp8_scalability", "../modules/video_coding:webrtc_vp9", "../modules/video_coding/codecs/av1:av1_svc_config", "../modules/video_coding/codecs/av1:libaom_av1_decoder", diff --git a/media/engine/internal_encoder_factory.cc b/media/engine/internal_encoder_factory.cc index 765434e718..03d51a5526 100644 --- a/media/engine/internal_encoder_factory.cc +++ b/media/engine/internal_encoder_factory.cc @@ -20,6 +20,7 @@ #include "modules/video_coding/codecs/av1/libaom_av1_encoder_supported.h" #include "modules/video_coding/codecs/h264/include/h264.h" #include "modules/video_coding/codecs/vp8/include/vp8.h" +#include "modules/video_coding/codecs/vp8/vp8_scalability.h" #include "modules/video_coding/codecs/vp9/include/vp9.h" #include "modules/video_coding/svc/scalability_mode_util.h" #include "rtc_base/logging.h" @@ -73,7 +74,7 @@ VideoEncoderFactory::CodecSupport InternalEncoderFactory::QueryCodecSupport( return kUnsupported; } if (absl::EqualsIgnoreCase(format.name, cricket::kVp8CodecName)) { - if (!VP8Encoder::SupportsScalabilityMode(*scalability_mode)) { + if (!VP8SupportsScalabilityMode(*scalability_mode)) { return kUnsupported; } } else if (absl::EqualsIgnoreCase(format.name, cricket::kVp9CodecName)) { diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index 3acc95000f..cd19bdfe84 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -662,7 +662,6 @@ rtc_library("webrtc_vp8") { "../../api/video:encoded_image", "../../api/video:video_frame", "../../api/video:video_rtp_headers", - "../../api/video_codecs:scalability_mode", "../../api/video_codecs:video_codecs_api", "../../api/video_codecs:vp8_temporal_layers_factory", "../../common_video", @@ -689,6 +688,14 @@ rtc_library("webrtc_vp8") { } } +rtc_source_set("webrtc_vp8_scalability") { + sources = [ + "codecs/vp8/vp8_scalability.cc", + "codecs/vp8/vp8_scalability.h", + ] + deps = [ "../../api/video_codecs:scalability_mode" ] +} + rtc_library("webrtc_vp8_temporal_layers") { visibility = [ "*" ] sources = [ diff --git a/modules/video_coding/codecs/vp8/include/vp8.h b/modules/video_coding/codecs/vp8/include/vp8.h index 7e81238eb9..d05c3a68d1 100644 --- a/modules/video_coding/codecs/vp8/include/vp8.h +++ b/modules/video_coding/codecs/vp8/include/vp8.h @@ -15,7 +15,6 @@ #include #include "absl/base/attributes.h" -#include "api/video_codecs/scalability_mode.h" #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/vp8_frame_buffer_controller.h" #include "modules/video_coding/include/video_codec_interface.h" @@ -40,7 +39,6 @@ class VP8Encoder { static std::unique_ptr Create(); static std::unique_ptr Create(Settings settings); - static bool SupportsScalabilityMode(ScalabilityMode scalability_mode); ABSL_DEPRECATED("") static std::unique_ptr Create( diff --git a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc index f7ebfe19e9..24c85024f0 100644 --- a/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc +++ b/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc @@ -49,9 +49,6 @@ constexpr char kVP8IosMaxNumberOfThreadFieldTrial[] = constexpr char kVP8IosMaxNumberOfThreadFieldTrialParameter[] = "max_thread"; #endif -constexpr ScalabilityMode kSupportedScalabilityModes[] = { - ScalabilityMode::kL1T1, ScalabilityMode::kL1T2, ScalabilityMode::kL1T3}; - constexpr char kVp8ForcePartitionResilience[] = "WebRTC-VP8-ForcePartitionResilience"; @@ -233,15 +230,6 @@ std::unique_ptr VP8Encoder::Create( std::move(settings)); } -bool VP8Encoder::SupportsScalabilityMode(ScalabilityMode scalability_mode) { - for (const auto& entry : kSupportedScalabilityModes) { - if (entry == scalability_mode) { - return true; - } - } - return false; -} - vpx_enc_frame_flags_t LibvpxVp8Encoder::EncodeFlags( const Vp8FrameConfig& references) { RTC_DCHECK(!references.drop_frame); diff --git a/modules/video_coding/codecs/vp8/vp8_scalability.cc b/modules/video_coding/codecs/vp8/vp8_scalability.cc new file mode 100644 index 0000000000..df15be0127 --- /dev/null +++ b/modules/video_coding/codecs/vp8/vp8_scalability.cc @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "modules/video_coding/codecs/vp8/vp8_scalability.h" + +namespace webrtc { + +bool VP8SupportsScalabilityMode(ScalabilityMode scalability_mode) { + constexpr ScalabilityMode kSupportedScalabilityModes[] = { + ScalabilityMode::kL1T1, ScalabilityMode::kL1T2, ScalabilityMode::kL1T3}; + for (const auto& entry : kSupportedScalabilityModes) { + if (entry == scalability_mode) { + return true; + } + } + return false; +} + +} // namespace webrtc diff --git a/modules/video_coding/codecs/vp8/vp8_scalability.h b/modules/video_coding/codecs/vp8/vp8_scalability.h new file mode 100644 index 0000000000..11f018a564 --- /dev/null +++ b/modules/video_coding/codecs/vp8/vp8_scalability.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef MODULES_VIDEO_CODING_CODECS_VP8_VP8_SCALABILITY_H_ +#define MODULES_VIDEO_CODING_CODECS_VP8_VP8_SCALABILITY_H_ + +#include "api/video_codecs/scalability_mode.h" + +namespace webrtc { + +bool VP8SupportsScalabilityMode(ScalabilityMode scalability_mode); + +} // namespace webrtc + +#endif // MODULES_VIDEO_CODING_CODECS_VP8_VP8_SCALABILITY_H_