Add EnableMediaWithDefaults to replace SetMediaEngineDefaults

Update most of the webrtc tests to use EnableMediaWithDefaults instead of SetMediaEngineDefaults

Bug: webrtc:15574
Change-Id: I489a09e4ea3479dc26829ee0c1235e67bcbca7c7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/325485
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41059}
This commit is contained in:
Danil Chapovalov 2023-11-01 11:08:20 +01:00 committed by WebRTC LUCI CQ
parent efeeba0864
commit 554f7db01c
18 changed files with 141 additions and 64 deletions

View file

@ -50,6 +50,30 @@ rtc_source_set("enable_media") {
]
}
rtc_source_set("enable_media_with_defaults") {
visibility = [ "*" ]
allow_poison = [
"audio_codecs",
"default_task_queue",
"software_video_codecs",
]
sources = [
"enable_media_with_defaults.cc",
"enable_media_with_defaults.h",
]
deps = [
":enable_media",
":libjingle_peerconnection_api",
"../modules/audio_processing:api",
"../rtc_base/system:rtc_export",
"audio_codecs:builtin_audio_decoder_factory",
"audio_codecs:builtin_audio_encoder_factory",
"task_queue:default_task_queue_factory",
"video_codecs:builtin_video_decoder_factory",
"video_codecs:builtin_video_encoder_factory",
]
}
if (!build_with_chromium) {
rtc_library("create_peerconnection_factory") {
visibility = [ "*" ]

View file

@ -0,0 +1,46 @@
/*
* Copyright 2023 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 "api/enable_media_with_defaults.h"
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
#include "api/enable_media.h"
#include "api/task_queue/default_task_queue_factory.h"
#include "api/video_codecs/builtin_video_decoder_factory.h"
#include "api/video_codecs/builtin_video_encoder_factory.h"
#include "modules/audio_processing/include/audio_processing.h"
namespace webrtc {
void EnableMediaWithDefaults(PeerConnectionFactoryDependencies& deps) {
if (deps.task_queue_factory == nullptr) {
deps.task_queue_factory = CreateDefaultTaskQueueFactory();
}
if (deps.audio_encoder_factory == nullptr) {
deps.audio_encoder_factory = CreateBuiltinAudioEncoderFactory();
}
if (deps.audio_decoder_factory == nullptr) {
deps.audio_decoder_factory = CreateBuiltinAudioDecoderFactory();
}
if (deps.audio_processing == nullptr) {
deps.audio_processing = AudioProcessingBuilder().Create();
}
if (deps.video_encoder_factory == nullptr) {
deps.video_encoder_factory = CreateBuiltinVideoEncoderFactory();
}
if (deps.video_decoder_factory == nullptr) {
deps.video_decoder_factory = CreateBuiltinVideoDecoderFactory();
}
EnableMedia(deps);
}
} // namespace webrtc

View file

@ -0,0 +1,28 @@
/*
* Copyright 2023 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 API_ENABLE_MEDIA_WITH_DEFAULTS_H_
#define API_ENABLE_MEDIA_WITH_DEFAULTS_H_
#include "api/peer_connection_interface.h"
#include "rtc_base/system/rtc_export.h"
namespace webrtc {
// Fills unset media related dependencies in `deps` and enables media support
// for a PeerConnectionFactory created from `deps`.
// This function is located in its own build target as it pulls additional
// dependencies compared to `EnableMedia`, and thus may add extra binary size.
RTC_EXPORT void EnableMediaWithDefaults(
PeerConnectionFactoryDependencies& deps);
} // namespace webrtc
#endif // API_ENABLE_MEDIA_WITH_DEFAULTS_H_

View file

@ -47,6 +47,7 @@ if (is_android) {
deps = [
":generated_jni",
"../../api:enable_media_with_defaults",
"../../api:scoped_refptr",
"../../api:sequence_checker",
"../../rtc_base:ssl",
@ -56,7 +57,6 @@ if (is_android) {
"//api/task_queue:default_task_queue_factory",
"//media:rtc_audio_video",
"//media:rtc_internal_video_codecs",
"//media:rtc_media_engine_defaults",
"//modules/utility",
"//pc:libjingle_peerconnection",
"//sdk/android:native_api_base",

View file

@ -13,6 +13,7 @@
#include <memory>
#include <utility>
#include "api/enable_media_with_defaults.h"
#include "api/peer_connection_interface.h"
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/task_queue/default_task_queue_factory.h"
@ -20,7 +21,6 @@
#include "media/engine/internal_decoder_factory.h"
#include "media/engine/internal_encoder_factory.h"
#include "media/engine/webrtc_media_engine.h"
#include "media/engine/webrtc_media_engine_defaults.h"
#include "sdk/android/native_api/jni/java_types.h"
#include "sdk/android/native_api/video/wrapper.h"
@ -154,19 +154,14 @@ void AndroidCallClient::CreatePeerConnectionFactory() {
pcf_deps.worker_thread = worker_thread_.get();
pcf_deps.signaling_thread = signaling_thread_.get();
pcf_deps.task_queue_factory = webrtc::CreateDefaultTaskQueueFactory();
pcf_deps.call_factory = webrtc::CreateCallFactory();
pcf_deps.event_log_factory = std::make_unique<webrtc::RtcEventLogFactory>(
pcf_deps.task_queue_factory.get());
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = pcf_deps.task_queue_factory.get();
media_deps.video_encoder_factory =
pcf_deps.video_encoder_factory =
std::make_unique<webrtc::InternalEncoderFactory>();
media_deps.video_decoder_factory =
pcf_deps.video_decoder_factory =
std::make_unique<webrtc::InternalDecoderFactory>();
webrtc::SetMediaEngineDefaults(&media_deps);
pcf_deps.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
RTC_LOG(LS_INFO) << "Media engine created: " << pcf_deps.media_engine.get();
EnableMediaWithDefaults(pcf_deps);
pcf_ = CreateModularPeerConnectionFactory(std::move(pcf_deps));
RTC_LOG(LS_INFO) << "PeerConnectionFactory created: " << pcf_.get();

View file

@ -20,7 +20,7 @@
namespace webrtc {
void SetMediaEngineDefaults(cricket::MediaEngineDependencies* deps) {
void DeprecatedSetMediaEngineDefaults(cricket::MediaEngineDependencies* deps) {
RTC_DCHECK(deps);
if (deps->task_queue_factory == nullptr) {
static TaskQueueFactory* const task_queue_factory =

View file

@ -17,7 +17,13 @@
namespace webrtc {
// Sets required but null dependencies with default factories.
RTC_EXPORT void SetMediaEngineDefaults(cricket::MediaEngineDependencies* deps);
// Deprecated in favor of EnableMediaWithDefaults.
RTC_EXPORT void DeprecatedSetMediaEngineDefaults(
cricket::MediaEngineDependencies* deps);
[[deprecated("bugs.webrc.org/15574")]] inline void SetMediaEngineDefaults(
cricket::MediaEngineDependencies* deps) {
DeprecatedSetMediaEngineDefaults(deps);
}
} // namespace webrtc

View file

@ -324,7 +324,7 @@ TEST(WebRtcMediaEngineTest, FilterRtpExtensionsRemoveRedundantBwe3) {
TEST(WebRtcMediaEngineTest, Create) {
MediaEngineDependencies deps;
webrtc::SetMediaEngineDefaults(&deps);
webrtc::DeprecatedSetMediaEngineDefaults(&deps);
webrtc::test::ScopedKeyValueConfig trials;
deps.trials = &trials;

View file

@ -2416,6 +2416,7 @@ if (rtc_include_tests && !build_with_chromium) {
"../api:dtls_transport_interface",
"../api:dtmf_sender_interface",
"../api:enable_media",
"../api:enable_media_with_defaults",
"../api:fake_frame_decryptor",
"../api:fake_frame_encryptor",
"../api:field_trials_view",

View file

@ -16,13 +16,13 @@
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
#include "api/create_peerconnection_factory.h"
#include "api/enable_media_with_defaults.h"
#include "api/peer_connection_interface.h"
#include "api/stats/rtcstats_objects.h"
#include "api/task_queue/default_task_queue_factory.h"
#include "api/video_codecs/builtin_video_decoder_factory.h"
#include "api/video_codecs/builtin_video_encoder_factory.h"
#include "media/engine/webrtc_media_engine.h"
#include "media/engine/webrtc_media_engine_defaults.h"
#include "pc/peer_connection_wrapper.h"
#include "pc/session_description.h"
#include "pc/test/fake_audio_capture_module.h"
@ -81,13 +81,8 @@ class PeerConnectionFieldTrialTest : public ::testing::Test {
pcf_deps.signaling_thread = rtc::Thread::Current();
pcf_deps.trials = std::move(field_trials);
pcf_deps.task_queue_factory = CreateDefaultTaskQueueFactory();
pcf_deps.call_factory = webrtc::CreateCallFactory();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = pcf_deps.task_queue_factory.get();
media_deps.adm = FakeAudioCaptureModule::Create();
media_deps.trials = pcf_deps.trials.get();
webrtc::SetMediaEngineDefaults(&media_deps);
pcf_deps.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
pcf_deps.adm = FakeAudioCaptureModule::Create();
EnableMediaWithDefaults(pcf_deps);
pc_factory_ = CreateModularPeerConnectionFactory(std::move(pcf_deps));
// Allow ADAPTER_TYPE_LOOPBACK to create PeerConnections with loopback in

View file

@ -25,6 +25,7 @@
#include "api/call/call_factory_interface.h"
#include "api/create_peerconnection_factory.h"
#include "api/data_channel_interface.h"
#include "api/enable_media_with_defaults.h"
#include "api/jsep.h"
#include "api/media_stream_interface.h"
#include "api/media_types.h"
@ -53,7 +54,6 @@
#include "media/base/media_engine.h"
#include "media/base/stream_params.h"
#include "media/engine/webrtc_media_engine.h"
#include "media/engine/webrtc_media_engine_defaults.h"
#include "media/sctp/sctp_transport_internal.h"
#include "modules/audio_device/include/audio_device.h"
#include "modules/audio_processing/include/audio_processing.h"
@ -641,16 +641,10 @@ class PeerConnectionFactoryForTest : public webrtc::PeerConnectionFactory {
dependencies.signaling_thread = rtc::Thread::Current();
dependencies.task_queue_factory = CreateDefaultTaskQueueFactory();
dependencies.trials = std::make_unique<FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = dependencies.task_queue_factory.get();
// Use fake audio device module since we're only testing the interface
// level, and using a real one could make tests flaky when run in parallel.
media_deps.adm = FakeAudioCaptureModule::Create();
SetMediaEngineDefaults(&media_deps);
media_deps.trials = dependencies.trials.get();
dependencies.media_engine =
cricket::CreateMediaEngine(std::move(media_deps));
dependencies.call_factory = webrtc::CreateCallFactory();
dependencies.adm = FakeAudioCaptureModule::Create();
EnableMediaWithDefaults(dependencies);
dependencies.event_log_factory = std::make_unique<RtcEventLogFactory>(
dependencies.task_queue_factory.get());

View file

@ -21,6 +21,7 @@
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "api/call/call_factory_interface.h"
#include "api/enable_media_with_defaults.h"
#include "api/field_trials_view.h"
#include "api/jsep.h"
#include "api/media_stream_interface.h"
@ -40,7 +41,6 @@
#include "media/base/media_engine.h"
#include "media/base/stream_params.h"
#include "media/engine/webrtc_media_engine.h"
#include "media/engine/webrtc_media_engine_defaults.h"
#include "modules/audio_device/include/audio_device.h"
#include "p2p/base/p2p_constants.h"
#include "p2p/base/port_allocator.h"
@ -84,13 +84,8 @@ PeerConnectionFactoryDependencies CreatePeerConnectionFactoryDependencies() {
dependencies.signaling_thread = rtc::Thread::Current();
dependencies.task_queue_factory = CreateDefaultTaskQueueFactory();
dependencies.trials = std::make_unique<FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = dependencies.task_queue_factory.get();
media_deps.adm = FakeAudioCaptureModule::Create();
media_deps.trials = dependencies.trials.get();
SetMediaEngineDefaults(&media_deps);
dependencies.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
dependencies.call_factory = CreateCallFactory();
dependencies.adm = FakeAudioCaptureModule::Create();
EnableMediaWithDefaults(dependencies);
dependencies.sctp_factory = std::make_unique<FakeSctpTransportFactory>();
return dependencies;
}

View file

@ -786,7 +786,10 @@ class PeerConnectionIntegrationWrapper : public webrtc::PeerConnectionObserver,
media_deps.task_queue_factory =
pc_factory_dependencies.task_queue_factory.get();
media_deps.adm = fake_audio_capture_module_;
webrtc::SetMediaEngineDefaults(&media_deps);
// TODO(bugs.webrtc.org/15574): Migrate this test helper to use EnableMedia
// instead of creating media_engine directly. In particular ensure no tests
// rely on behaviour where call_factory is set, while media_engine is not.
webrtc::DeprecatedSetMediaEngineDefaults(&media_deps);
if (reset_encoder_factory) {
media_deps.video_encoder_factory.reset();

View file

@ -1632,6 +1632,7 @@ if (is_android) {
":native_test_jni_onload",
":opensles_audio_device_module",
":video_jni",
"../../api:enable_media_with_defaults",
"../../api:field_trials_view",
"../../api:scoped_refptr",
"../../api/rtc_event_log:rtc_event_log_factory",
@ -1642,7 +1643,6 @@ if (is_android) {
"../../media:rtc_audio_video",
"../../media:rtc_internal_video_codecs",
"../../media:rtc_media_base",
"../../media:rtc_media_engine_defaults",
"../../modules/audio_device",
"../../modules/audio_device:mock_audio_device",
"../../modules/audio_processing:api",

View file

@ -11,20 +11,20 @@
#include <memory>
#include "api/enable_media_with_defaults.h"
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/task_queue/default_task_queue_factory.h"
#include "media/base/media_engine.h"
#include "media/engine/internal_decoder_factory.h"
#include "media/engine/internal_encoder_factory.h"
#include "media/engine/webrtc_media_engine.h"
#include "media/engine/webrtc_media_engine_defaults.h"
#include "rtc_base/logging.h"
#include "rtc_base/physical_socket_server.h"
#include "rtc_base/thread.h"
#include "sdk/android/generated_native_unittests_jni/PeerConnectionFactoryInitializationHelper_jni.h"
#include "sdk/android/native_api/audio_device_module/audio_device_android.h"
#include "sdk/android/native_api/jni/jvm.h"
#include "sdk/android/native_api/jni/application_context_provider.h"
#include "sdk/android/native_api/jni/jvm.h"
#include "sdk/android/src/jni/jni_helpers.h"
#include "test/gtest.h"
@ -50,21 +50,15 @@ rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> CreateTestPCF(
pcf_deps.worker_thread = worker_thread;
pcf_deps.signaling_thread = signaling_thread;
pcf_deps.task_queue_factory = CreateDefaultTaskQueueFactory();
pcf_deps.call_factory = CreateCallFactory();
pcf_deps.event_log_factory =
std::make_unique<RtcEventLogFactory>(pcf_deps.task_queue_factory.get());
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = pcf_deps.task_queue_factory.get();
media_deps.adm =
CreateJavaAudioDeviceModule(jni, GetAppContext(jni).obj());
media_deps.video_encoder_factory =
pcf_deps.adm = CreateJavaAudioDeviceModule(jni, GetAppContext(jni).obj());
pcf_deps.video_encoder_factory =
std::make_unique<webrtc::InternalEncoderFactory>();
media_deps.video_decoder_factory =
pcf_deps.video_decoder_factory =
std::make_unique<webrtc::InternalDecoderFactory>();
SetMediaEngineDefaults(&media_deps);
pcf_deps.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
RTC_LOG(LS_INFO) << "Media engine created: " << pcf_deps.media_engine.get();
EnableMediaWithDefaults(pcf_deps);
auto factory = CreateModularPeerConnectionFactory(std::move(pcf_deps));
RTC_LOG(LS_INFO) << "PeerConnectionFactory created: " << factory.get();

View file

@ -117,6 +117,7 @@ if (rtc_include_tests && !build_with_chromium) {
":emulated_network",
"../:test_support",
"../../api:callfactory_api",
"../../api:enable_media_with_defaults",
"../../api:libjingle_peerconnection_api",
"../../api:scoped_refptr",
"../../api:simulated_network_api",
@ -125,7 +126,6 @@ if (rtc_include_tests && !build_with_chromium) {
"../../api/transport:field_trial_based_config",
"../../call:simulated_network",
"../../media:rtc_audio_video",
"../../media:rtc_media_engine_defaults",
"../../modules/audio_device:test_audio_device_module",
"../../p2p:rtc_p2p",
"../../pc:pc_test_utils",

View file

@ -11,7 +11,7 @@
#include <cstdint>
#include <memory>
#include "api/call/call_factory_interface.h"
#include "api/enable_media_with_defaults.h"
#include "api/peer_connection_interface.h"
#include "api/rtc_event_log/rtc_event_log_factory.h"
#include "api/scoped_refptr.h"
@ -19,7 +19,6 @@
#include "api/transport/field_trial_based_config.h"
#include "call/simulated_network.h"
#include "media/engine/webrtc_media_engine.h"
#include "media/engine/webrtc_media_engine_defaults.h"
#include "modules/audio_device/include/test_audio_device.h"
#include "p2p/base/basic_packet_socket_factory.h"
#include "p2p/client/basic_port_allocator.h"
@ -57,23 +56,18 @@ rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
rtc::Thread* network_thread) {
PeerConnectionFactoryDependencies pcf_deps;
pcf_deps.task_queue_factory = CreateDefaultTaskQueueFactory();
pcf_deps.call_factory = CreateCallFactory();
pcf_deps.event_log_factory =
std::make_unique<RtcEventLogFactory>(pcf_deps.task_queue_factory.get());
pcf_deps.network_thread = network_thread;
pcf_deps.signaling_thread = signaling_thread;
pcf_deps.trials = std::make_unique<FieldTrialBasedConfig>();
cricket::MediaEngineDependencies media_deps;
media_deps.task_queue_factory = pcf_deps.task_queue_factory.get();
media_deps.adm = TestAudioDeviceModule::Create(
media_deps.task_queue_factory,
pcf_deps.adm = TestAudioDeviceModule::Create(
pcf_deps.task_queue_factory.get(),
TestAudioDeviceModule::CreatePulsedNoiseCapturer(kMaxAptitude,
kSamplingFrequency),
TestAudioDeviceModule::CreateDiscardRenderer(kSamplingFrequency),
/*speed=*/1.f);
media_deps.trials = pcf_deps.trials.get();
SetMediaEngineDefaults(&media_deps);
pcf_deps.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
EnableMediaWithDefaults(pcf_deps);
return CreateModularPeerConnectionFactory(std::move(pcf_deps));
}

View file

@ -161,7 +161,9 @@ std::unique_ptr<cricket::MediaEngineInterface> CreateMediaEngine(
std::move(pcf_dependencies->video_decoder_factory);
media_deps.audio_encoder_factory = pcf_dependencies->audio_encoder_factory;
media_deps.audio_decoder_factory = pcf_dependencies->audio_decoder_factory;
webrtc::SetMediaEngineDefaults(&media_deps);
// TODO(bugs.webrtc.org/15574): Migrate to enabling media with EnableMedia
// kind of helper when TimeController aware test helper is implemented.
webrtc::DeprecatedSetMediaEngineDefaults(&media_deps);
RTC_DCHECK(pcf_dependencies->trials);
media_deps.trials = pcf_dependencies->trials.get();