xref: /aosp_15_r20/external/webrtc/api/transport/goog_cc_factory.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "api/transport/goog_cc_factory.h"
12 
13 #include <memory>
14 #include <utility>
15 
16 #include "modules/congestion_controller/goog_cc/goog_cc_network_control.h"
17 
18 namespace webrtc {
GoogCcNetworkControllerFactory(RtcEventLog * event_log)19 GoogCcNetworkControllerFactory::GoogCcNetworkControllerFactory(
20     RtcEventLog* event_log)
21     : event_log_(event_log) {}
22 
GoogCcNetworkControllerFactory(NetworkStatePredictorFactoryInterface * network_state_predictor_factory)23 GoogCcNetworkControllerFactory::GoogCcNetworkControllerFactory(
24     NetworkStatePredictorFactoryInterface* network_state_predictor_factory) {
25   factory_config_.network_state_predictor_factory =
26       network_state_predictor_factory;
27 }
28 
GoogCcNetworkControllerFactory(GoogCcFactoryConfig config)29 GoogCcNetworkControllerFactory::GoogCcNetworkControllerFactory(
30     GoogCcFactoryConfig config)
31     : factory_config_(std::move(config)) {}
32 
33 std::unique_ptr<NetworkControllerInterface>
Create(NetworkControllerConfig config)34 GoogCcNetworkControllerFactory::Create(NetworkControllerConfig config) {
35   if (event_log_)
36     config.event_log = event_log_;
37   GoogCcConfig goog_cc_config;
38   goog_cc_config.feedback_only = factory_config_.feedback_only;
39   if (factory_config_.network_state_estimator_factory) {
40     RTC_DCHECK(config.key_value_config);
41     goog_cc_config.network_state_estimator =
42         factory_config_.network_state_estimator_factory->Create(
43             config.key_value_config);
44   }
45   if (factory_config_.network_state_predictor_factory) {
46     goog_cc_config.network_state_predictor =
47         factory_config_.network_state_predictor_factory
48             ->CreateNetworkStatePredictor();
49   }
50   return std::make_unique<GoogCcNetworkController>(config,
51                                                    std::move(goog_cc_config));
52 }
53 
GetProcessInterval() const54 TimeDelta GoogCcNetworkControllerFactory::GetProcessInterval() const {
55   const int64_t kUpdateIntervalMs = 25;
56   return TimeDelta::Millis(kUpdateIntervalMs);
57 }
58 
GoogCcFeedbackNetworkControllerFactory(RtcEventLog * event_log)59 GoogCcFeedbackNetworkControllerFactory::GoogCcFeedbackNetworkControllerFactory(
60     RtcEventLog* event_log)
61     : GoogCcNetworkControllerFactory(event_log) {
62   factory_config_.feedback_only = true;
63 }
64 
65 }  // namespace webrtc
66