diff --git a/api/video_codecs/video_decoder_factory_template_open_h264_adapter.h b/api/video_codecs/video_decoder_factory_template_open_h264_adapter.h index 615ff68348..2746bde132 100644 --- a/api/video_codecs/video_decoder_factory_template_open_h264_adapter.h +++ b/api/video_codecs/video_decoder_factory_template_open_h264_adapter.h @@ -18,19 +18,27 @@ namespace webrtc { // TODO(bugs.webrtc.org/13573): When OpenH264 is no longer a conditional build -// target remove this #ifdef. -#if defined(WEBRTC_USE_H264) +// target remove #ifdefs. struct OpenH264DecoderTemplateAdapter { static std::vector SupportedFormats() { +#if defined(WEBRTC_USE_H264) + return SupportedH264DecoderCodecs(); +#else + return {}; +#endif } static std::unique_ptr CreateDecoder( const SdpVideoFormat& format) { +#if defined(WEBRTC_USE_H264) + return H264Decoder::Create(); +#else + return nullptr; +#endif } }; -#endif // defined(WEBRTC_USE_H264) } // namespace webrtc #endif // API_VIDEO_CODECS_VIDEO_DECODER_FACTORY_TEMPLATE_OPEN_H264_ADAPTER_H_ diff --git a/api/video_codecs/video_encoder_factory_template_open_h264_adapter.h b/api/video_codecs/video_encoder_factory_template_open_h264_adapter.h index 5a9742a694..0830460cdb 100644 --- a/api/video_codecs/video_encoder_factory_template_open_h264_adapter.h +++ b/api/video_codecs/video_encoder_factory_template_open_h264_adapter.h @@ -18,23 +18,33 @@ namespace webrtc { // TODO(bugs.webrtc.org/13573): When OpenH264 is no longer a conditional build -// target remove this #ifdef. -#if defined(WEBRTC_USE_H264) +// target remove #ifdefs. struct OpenH264EncoderTemplateAdapter { static std::vector SupportedFormats() { +#if defined(WEBRTC_USE_H264) return SupportedH264Codecs(/*add_scalability_modes=*/true); +#else + return {}; +#endif } static std::unique_ptr CreateEncoder( const SdpVideoFormat& format) { +#if defined(WEBRTC_USE_H264) return H264Encoder::Create(cricket::VideoCodec(format)); +#else + return nullptr; +#endif } static bool IsScalabilityModeSupported(ScalabilityMode scalability_mode) { +#if defined(WEBRTC_USE_H264) return H264Encoder::SupportsScalabilityMode(scalability_mode); +#else + return false; +#endif } }; -#endif // defined(WEBRTC_USE_H264) } // namespace webrtc #endif // API_VIDEO_CODECS_VIDEO_ENCODER_FACTORY_TEMPLATE_OPEN_H264_ADAPTER_H_ diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index 2d6ddb33e5..a72e6347fd 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -929,10 +929,19 @@ if (rtc_include_tests) { "../../api/transport:field_trial_based_config", "../../api/video:video_bitrate_allocation", "../../api/video_codecs:video_codecs_api", + "../../api/video_codecs:video_decoder_factory_template", + "../../api/video_codecs:video_decoder_factory_template_dav1d_adapter", + "../../api/video_codecs:video_decoder_factory_template_libvpx_vp8_adapter", + "../../api/video_codecs:video_decoder_factory_template_libvpx_vp9_adapter", + "../../api/video_codecs:video_decoder_factory_template_open_h264_adapter", + "../../api/video_codecs:video_encoder_factory_template", + "../../api/video_codecs:video_encoder_factory_template_libaom_av1_adapter", + "../../api/video_codecs:video_encoder_factory_template_libvpx_vp8_adapter", + "../../api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter", + "../../api/video_codecs:video_encoder_factory_template_open_h264_adapter", "../../call:video_stream_api", "../../common_video", "../../media:rtc_audio_video", - "../../media:rtc_internal_video_codecs", "../../media:rtc_media_base", "../../rtc_base:checks", "../../rtc_base:logging", 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 e2b5ebf301..a73ea0f204 100644 --- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc +++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc @@ -29,11 +29,20 @@ #include "api/video_codecs/sdp_video_format.h" #include "api/video_codecs/video_codec.h" #include "api/video_codecs/video_decoder.h" +#include "api/video_codecs/video_decoder_factory_template.h" +#include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h" +#include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h" +#include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_adapter.h" +#include "api/video_codecs/video_decoder_factory_template_open_h264_adapter.h" #include "api/video_codecs/video_encoder_config.h" +#include "api/video_codecs/video_encoder_factory.h" +#include "api/video_codecs/video_encoder_factory_template.h" +#include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.h" +#include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h" +#include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h" +#include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "common_video/h264/h264_common.h" #include "media/base/media_constants.h" -#include "media/engine/internal_decoder_factory.h" -#include "media/engine/internal_encoder_factory.h" #include "media/engine/simulcast.h" #include "modules/video_coding/codecs/h264/include/h264_globals.h" #include "modules/video_coding/codecs/vp9/svc_config.h" @@ -157,9 +166,12 @@ SdpVideoFormat CreateSdpVideoFormat( {cricket::kH264FmtpProfileLevelId, *H264ProfileLevelIdToString(H264ProfileLevelId( config.h264_codec_settings.profile, H264Level::kLevel3_1))}, - {cricket::kH264FmtpPacketizationMode, packetization_mode}}; + {cricket::kH264FmtpPacketizationMode, packetization_mode}, + {cricket::kH264FmtpLevelAsymmetryAllowed, "1"}}; return SdpVideoFormat(config.codec_name, codec_params); + } else if (config.codec_settings.codecType == kVideoCodecVP9) { + return SdpVideoFormat(config.codec_name, {{"profile-id", "0"}}); } return SdpVideoFormat(config.codec_name); @@ -406,8 +418,16 @@ class VideoCodecTestFixtureImpl::CpuProcessTime final { }; VideoCodecTestFixtureImpl::VideoCodecTestFixtureImpl(Config config) - : encoder_factory_(std::make_unique()), - decoder_factory_(std::make_unique()), + : encoder_factory_(std::make_unique>()), + decoder_factory_(std::make_unique>()), config_(config) {} VideoCodecTestFixtureImpl::VideoCodecTestFixtureImpl(