aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Oreland <jonaso@webrtc.org>2022-09-29 10:28:24 +0200
committerWebRTC LUCI CQ <webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-29 09:44:43 +0000
commit6c2dae21e9f80cc38d10ff282117de0dfcb46243 (patch)
tree0e86bf7d1fa71938dfbeb64fea8dfc44af19c779
parent5ed1752843d931c62d9ab01992a84da480c1b805 (diff)
downloadwebrtc-6c2dae21e9f80cc38d10ff282117de0dfcb46243.tar.gz
Move VideoEncoderConfig from api/ into video/config
This cl move VideoEncoderConfig from api/ to video/config. VideoStreamEncoderInterface and VideoStreamEncoderObserver are moved as collateral. brandt@ think that the reason these were in api/ in the first place had to downstream project. Functionality wise, this is a NOP, but it makes it easier to modify the encoder (config). Bug: webrtc:14451 Change-Id: I2610d815aeb186298498e7102cac773ecac8cd36 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/277002 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Artem Titov <titovartem@webrtc.org> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Commit-Queue: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#38242}
-rw-r--r--api/BUILD.gn1
-rw-r--r--api/test/video_quality_test_fixture.h2
-rw-r--r--api/video/BUILD.gn6
-rw-r--r--api/video_codecs/BUILD.gn2
-rw-r--r--api/video_codecs/video_encoder_config.h208
-rw-r--r--call/BUILD.gn3
-rw-r--r--call/adaptation/BUILD.gn5
-rw-r--r--call/adaptation/encoder_settings.h2
-rw-r--r--call/adaptation/resource_adaptation_processor.h2
-rw-r--r--call/adaptation/test/fake_frame_rate_provider.h2
-rw-r--r--call/adaptation/video_stream_adapter.h2
-rw-r--r--call/adaptation/video_stream_adapter_unittest.cc2
-rw-r--r--call/adaptation/video_stream_input_state_provider.h2
-rw-r--r--call/call_perf_tests.cc2
-rw-r--r--call/degraded_call.h2
-rw-r--r--call/video_send_stream.h2
-rw-r--r--media/BUILD.gn1
-rw-r--r--media/DEPS3
-rw-r--r--media/base/media_channel.h2
-rw-r--r--modules/video_coding/BUILD.gn2
-rw-r--r--modules/video_coding/DEPS1
-rw-r--r--modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc2
-rw-r--r--modules/video_coding/include/video_codec_initializer.h2
-rw-r--r--rtc_base/experiments/BUILD.gn2
-rw-r--r--rtc_base/experiments/DEPS5
-rw-r--r--rtc_base/experiments/rate_control_settings.h2
-rw-r--r--rtc_base/experiments/rate_control_settings_unittest.cc2
-rw-r--r--rtc_tools/BUILD.gn1
-rw-r--r--rtc_tools/rtp_generator/rtp_generator.cc2
-rw-r--r--rtc_tools/rtp_generator/rtp_generator.h2
-rw-r--r--test/BUILD.gn2
-rw-r--r--test/call_test.cc2
-rw-r--r--test/encoder_settings.h2
-rw-r--r--video/BUILD.gn30
-rw-r--r--video/adaptation/BUILD.gn2
-rw-r--r--video/adaptation/overuse_frame_detector.h2
-rw-r--r--video/adaptation/video_stream_encoder_resource_manager.h4
-rw-r--r--video/alignment_adjuster.h2
-rw-r--r--video/config/BUILD.gn29
-rw-r--r--video/config/encoder_stream_factory.h2
-rw-r--r--video/config/simulcast.h2
-rw-r--r--video/config/video_encoder_config.cc (renamed from api/video_codecs/video_encoder_config.cc)2
-rw-r--r--video/config/video_encoder_config.h196
-rw-r--r--video/cpu_scaling_tests.cc2
-rw-r--r--video/encoder_rtcp_feedback.h2
-rw-r--r--video/end_to_end_tests/extended_reports_tests.cc2
-rw-r--r--video/end_to_end_tests/multi_stream_tests.cc2
-rw-r--r--video/full_stack_tests.cc2
-rw-r--r--video/send_statistics_proxy.h4
-rw-r--r--video/send_statistics_proxy_unittest.cc2
-rw-r--r--video/test/mock_video_stream_encoder.h2
-rw-r--r--video/video_send_stream.h2
-rw-r--r--video/video_send_stream_impl.h4
-rw-r--r--video/video_stream_encoder.h4
-rw-r--r--video/video_stream_encoder_interface.h (renamed from api/video/video_stream_encoder_interface.h)8
-rw-r--r--video/video_stream_encoder_observer.h (renamed from api/video/video_stream_encoder_observer.h)9
56 files changed, 326 insertions, 270 deletions
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 5bf73961fb..c7bbff0c42 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -398,6 +398,7 @@ rtc_source_set("video_quality_test_fixture_api") {
"../call:rtp_interfaces",
"../test:test_common",
"../test:video_test_common",
+ "../video/config:encoder_config",
"transport:bitrate_settings",
"transport:network_control",
"video_codecs:video_codecs_api",
diff --git a/api/test/video_quality_test_fixture.h b/api/test/video_quality_test_fixture.h
index 08ae12b816..0aa23b17bf 100644
--- a/api/test/video_quality_test_fixture.h
+++ b/api/test/video_quality_test_fixture.h
@@ -24,8 +24,8 @@
#include "api/transport/network_control.h"
#include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_decoder_factory.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "api/video_codecs/video_encoder_factory.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/api/video/BUILD.gn b/api/video/BUILD.gn
index ee62abdcc5..db9078d8bb 100644
--- a/api/video/BUILD.gn
+++ b/api/video/BUILD.gn
@@ -304,11 +304,7 @@ rtc_library("video_adaptation") {
rtc_source_set("video_stream_encoder") {
visibility = [ "*" ]
- sources = [
- "video_stream_encoder_interface.h",
- "video_stream_encoder_observer.h",
- "video_stream_encoder_settings.h",
- ]
+ sources = [ "video_stream_encoder_settings.h" ]
deps = [
":video_adaptation",
diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn
index d6b7392b7f..386c46b1f9 100644
--- a/api/video_codecs/BUILD.gn
+++ b/api/video_codecs/BUILD.gn
@@ -58,8 +58,6 @@ rtc_library("video_codecs_api") {
"video_decoder_factory.h",
"video_encoder.cc",
"video_encoder.h",
- "video_encoder_config.cc",
- "video_encoder_config.h",
"video_encoder_factory.h",
"vp8_frame_buffer_controller.h",
"vp8_frame_config.cc",
diff --git a/api/video_codecs/video_encoder_config.h b/api/video_codecs/video_encoder_config.h
deleted file mode 100644
index 500ef6fdf2..0000000000
--- a/api/video_codecs/video_encoder_config.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright (c) 2013 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_VIDEO_CODECS_VIDEO_ENCODER_CONFIG_H_
-#define API_VIDEO_CODECS_VIDEO_ENCODER_CONFIG_H_
-
-#include <stddef.h>
-
-#include <string>
-#include <vector>
-
-#include "absl/types/optional.h"
-#include "api/scoped_refptr.h"
-#include "api/video/resolution.h"
-#include "api/video_codecs/scalability_mode.h"
-#include "api/video_codecs/sdp_video_format.h"
-#include "api/video_codecs/video_codec.h"
-#include "rtc_base/ref_count.h"
-
-namespace webrtc {
-
-// The `VideoStream` struct describes a simulcast layer, or "stream".
-struct VideoStream {
- VideoStream();
- ~VideoStream();
- VideoStream(const VideoStream& other);
- std::string ToString() const;
-
- // Width/Height in pixels.
- // This is the actual width and height used to configure encoder,
- // which might be less than `requested_resolution` due to adaptation
- // or due to the source providing smaller frames than requested.
- size_t width;
- size_t height;
-
- // Frame rate in fps.
- int max_framerate;
-
- // Bitrate, in bps, for the stream.
- int min_bitrate_bps;
- int target_bitrate_bps;
- int max_bitrate_bps;
-
- // Scaling factor applied to the stream size.
- // `width` and `height` values are already scaled down.
- double scale_resolution_down_by;
-
- // Maximum Quantization Parameter to use when encoding the stream.
- int max_qp;
-
- // Determines the number of temporal layers that the stream should be
- // encoded with. This value should be greater than zero.
- // TODO(brandtr): This class is used both for configuring the encoder
- // (meaning that this field _must_ be set), and for signaling the app-level
- // encoder settings (meaning that the field _may_ be set). We should separate
- // this and remove this optional instead.
- absl::optional<size_t> num_temporal_layers;
-
- // The priority of this stream, to be used when allocating resources
- // between multiple streams.
- absl::optional<double> bitrate_priority;
-
- absl::optional<ScalabilityMode> scalability_mode;
-
- // If this stream is enabled by the user, or not.
- bool active;
-
- // An optional user supplied max_frame_resolution
- // than can be set independently of (adapted) VideoSource.
- // This value is set from RtpEncodingParameters::requested_resolution
- // (i.e. used for signaling app-level settings).
- //
- // The actual encode resolution is in `width` and `height`,
- // which can be lower than requested_resolution,
- // e.g. if source only provides lower resolution or
- // if resource adaptation is active.
- absl::optional<Resolution> requested_resolution;
-};
-
-class VideoEncoderConfig {
- public:
- // These are reference counted to permit copying VideoEncoderConfig and be
- // kept alive until all encoder_specific_settings go out of scope.
- // TODO(kthelgason): Consider removing the need for copying VideoEncoderConfig
- // and use absl::optional for encoder_specific_settings instead.
- class EncoderSpecificSettings : public rtc::RefCountInterface {
- public:
- // TODO(pbos): Remove FillEncoderSpecificSettings as soon as VideoCodec is
- // not in use and encoder implementations ask for codec-specific structs
- // directly.
- void FillEncoderSpecificSettings(VideoCodec* codec_struct) const;
-
- virtual void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const;
- virtual void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const;
-
- private:
- ~EncoderSpecificSettings() override {}
- friend class VideoEncoderConfig;
- };
-
- class Vp8EncoderSpecificSettings : public EncoderSpecificSettings {
- public:
- explicit Vp8EncoderSpecificSettings(const VideoCodecVP8& specifics);
- void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const override;
-
- private:
- VideoCodecVP8 specifics_;
- };
-
- class Vp9EncoderSpecificSettings : public EncoderSpecificSettings {
- public:
- explicit Vp9EncoderSpecificSettings(const VideoCodecVP9& specifics);
- void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const override;
-
- private:
- VideoCodecVP9 specifics_;
- };
-
- enum class ContentType {
- kRealtimeVideo,
- kScreen,
- };
-
- class VideoStreamFactoryInterface : public rtc::RefCountInterface {
- public:
- // An implementation should return a std::vector<VideoStream> with the
- // wanted VideoStream settings for the given video resolution.
- // The size of the vector may not be larger than
- // `encoder_config.number_of_streams`.
- virtual std::vector<VideoStream> CreateEncoderStreams(
- int width,
- int height,
- const VideoEncoderConfig& encoder_config) = 0;
-
- protected:
- ~VideoStreamFactoryInterface() override {}
- };
-
- VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default;
- VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete;
-
- // Mostly used by tests. Avoid creating copies if you can.
- VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); }
-
- VideoEncoderConfig();
- VideoEncoderConfig(VideoEncoderConfig&&);
- ~VideoEncoderConfig();
- std::string ToString() const;
-
- // TODO(bugs.webrtc.org/6883): Consolidate on one of these.
- VideoCodecType codec_type;
- SdpVideoFormat video_format;
-
- // Note: This factory can be unset, and VideoStreamEncoder will
- // then use the EncoderStreamFactory. The factory is only set by
- // tests.
- rtc::scoped_refptr<VideoStreamFactoryInterface> video_stream_factory;
- std::vector<SpatialLayer> spatial_layers;
- ContentType content_type;
- bool frame_drop_enabled;
- rtc::scoped_refptr<const EncoderSpecificSettings> encoder_specific_settings;
-
- // Padding will be used up to this bitrate regardless of the bitrate produced
- // by the encoder. Padding above what's actually produced by the encoder helps
- // maintaining a higher bitrate estimate. Padding will however not be sent
- // unless the estimated bandwidth indicates that the link can handle it.
- int min_transmit_bitrate_bps;
- int max_bitrate_bps;
- // The bitrate priority used for all VideoStreams.
- double bitrate_priority;
-
- // The simulcast layer's configurations set by the application for this video
- // sender. These are modified by the video_stream_factory before being passed
- // down to lower layers for the video encoding.
- // `simulcast_layers` is also used for configuring non-simulcast (when there
- // is a single VideoStream).
- std::vector<VideoStream> simulcast_layers;
-
- // Max number of encoded VideoStreams to produce.
- size_t number_of_streams;
-
- // Legacy Google conference mode flag for simulcast screenshare
- bool legacy_conference_mode;
-
- // Indicates whether quality scaling can be used or not.
- bool is_quality_scaling_allowed;
-
- // Maximum Quantization Parameter.
- // This value is fed into EncoderStreamFactory that
- // apply it to all simulcast layers/spatial layers.
- int max_qp;
-
- private:
- // Access to the copy constructor is private to force use of the Copy()
- // method for those exceptional cases where we do use it.
- VideoEncoderConfig(const VideoEncoderConfig&);
-};
-
-} // namespace webrtc
-
-#endif // API_VIDEO_CODECS_VIDEO_ENCODER_CONFIG_H_
diff --git a/call/BUILD.gn b/call/BUILD.gn
index c56c557ecc..47d44c39bc 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -334,6 +334,7 @@ rtc_library("call") {
"../system_wrappers:metrics",
"../video",
"../video:decode_synchronizer",
+ "../video/config:encoder_config",
"adaptation:resource_adaptation",
]
absl_deps = [
@@ -384,6 +385,7 @@ rtc_library("video_stream_api") {
"../modules/rtp_rtcp:rtp_rtcp_format",
"../rtc_base:checks",
"../rtc_base:stringutils",
+ "../video/config:encoder_config",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
@@ -592,6 +594,7 @@ if (rtc_include_tests) {
"../test:test_support",
"../test:video_test_common",
"../video",
+ "../video/config:encoder_config",
"//testing/gtest",
]
absl_deps = [
diff --git a/call/adaptation/BUILD.gn b/call/adaptation/BUILD.gn
index c1952329f1..58fadc421d 100644
--- a/call/adaptation/BUILD.gn
+++ b/call/adaptation/BUILD.gn
@@ -54,6 +54,8 @@ rtc_library("resource_adaptation") {
"../../rtc_base/experiments:balanced_degradation_settings",
"../../rtc_base/synchronization:mutex",
"../../rtc_base/system:no_unique_address",
+ "../../video:video_stream_encoder_interface",
+ "../../video/config:encoder_config",
]
absl_deps = [
"//third_party/abseil-cpp/absl/algorithm:container",
@@ -95,6 +97,7 @@ if (rtc_include_tests) {
"../../test:rtc_expect_death",
"../../test:scoped_key_value_config",
"../../test:test_support",
+ "../../video/config:encoder_config",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
@@ -122,6 +125,8 @@ if (rtc_include_tests) {
"../../api/task_queue:task_queue",
"../../api/video:video_stream_encoder",
"../../test:test_support",
+ "../../video:video_stream_encoder_interface",
+ "../../video/config:encoder_config",
]
absl_deps = [
"//third_party/abseil-cpp/absl/strings",
diff --git a/call/adaptation/encoder_settings.h b/call/adaptation/encoder_settings.h
index ddb198a96e..30ce0a05bc 100644
--- a/call/adaptation/encoder_settings.h
+++ b/call/adaptation/encoder_settings.h
@@ -14,7 +14,7 @@
#include "absl/types/optional.h"
#include "api/video_codecs/video_codec.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/call/adaptation/resource_adaptation_processor.h b/call/adaptation/resource_adaptation_processor.h
index 6ad0ef82ea..db3b4c2506 100644
--- a/call/adaptation/resource_adaptation_processor.h
+++ b/call/adaptation/resource_adaptation_processor.h
@@ -25,12 +25,12 @@
#include "api/task_queue/task_queue_base.h"
#include "api/video/video_adaptation_counters.h"
#include "api/video/video_frame.h"
-#include "api/video/video_stream_encoder_observer.h"
#include "call/adaptation/resource_adaptation_processor_interface.h"
#include "call/adaptation/video_source_restrictions.h"
#include "call/adaptation/video_stream_adapter.h"
#include "call/adaptation/video_stream_input_state.h"
#include "call/adaptation/video_stream_input_state_provider.h"
+#include "video/video_stream_encoder_observer.h"
namespace webrtc {
diff --git a/call/adaptation/test/fake_frame_rate_provider.h b/call/adaptation/test/fake_frame_rate_provider.h
index 3638f478f3..61cbd19191 100644
--- a/call/adaptation/test/fake_frame_rate_provider.h
+++ b/call/adaptation/test/fake_frame_rate_provider.h
@@ -14,8 +14,8 @@
#include <string>
#include <vector>
-#include "api/video/video_stream_encoder_observer.h"
#include "test/gmock.h"
+#include "video/video_stream_encoder_observer.h"
namespace webrtc {
diff --git a/call/adaptation/video_stream_adapter.h b/call/adaptation/video_stream_adapter.h
index 92a5aec058..5c174178e4 100644
--- a/call/adaptation/video_stream_adapter.h
+++ b/call/adaptation/video_stream_adapter.h
@@ -21,7 +21,6 @@
#include "api/field_trials_view.h"
#include "api/rtp_parameters.h"
#include "api/video/video_adaptation_counters.h"
-#include "api/video/video_stream_encoder_observer.h"
#include "call/adaptation/adaptation_constraint.h"
#include "call/adaptation/degradation_preference_provider.h"
#include "call/adaptation/video_source_restrictions.h"
@@ -31,6 +30,7 @@
#include "rtc_base/experiments/balanced_degradation_settings.h"
#include "rtc_base/system/no_unique_address.h"
#include "rtc_base/thread_annotations.h"
+#include "video/video_stream_encoder_observer.h"
namespace webrtc {
diff --git a/call/adaptation/video_stream_adapter_unittest.cc b/call/adaptation/video_stream_adapter_unittest.cc
index 8f29194254..d4bc650856 100644
--- a/call/adaptation/video_stream_adapter_unittest.cc
+++ b/call/adaptation/video_stream_adapter_unittest.cc
@@ -18,7 +18,6 @@
#include "api/video/video_adaptation_reason.h"
#include "api/video_codecs/video_codec.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/adaptation/adaptation_constraint.h"
#include "call/adaptation/encoder_settings.h"
#include "call/adaptation/test/fake_frame_rate_provider.h"
@@ -31,6 +30,7 @@
#include "test/gtest.h"
#include "test/scoped_key_value_config.h"
#include "test/testsupport/rtc_expect_death.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/call/adaptation/video_stream_input_state_provider.h b/call/adaptation/video_stream_input_state_provider.h
index f4a3e0bfa0..81996e6eb9 100644
--- a/call/adaptation/video_stream_input_state_provider.h
+++ b/call/adaptation/video_stream_input_state_provider.h
@@ -11,10 +11,10 @@
#ifndef CALL_ADAPTATION_VIDEO_STREAM_INPUT_STATE_PROVIDER_H_
#define CALL_ADAPTATION_VIDEO_STREAM_INPUT_STATE_PROVIDER_H_
-#include "api/video/video_stream_encoder_observer.h"
#include "call/adaptation/encoder_settings.h"
#include "call/adaptation/video_stream_input_state.h"
#include "rtc_base/synchronization/mutex.h"
+#include "video/video_stream_encoder_observer.h"
namespace webrtc {
diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc
index 3d8041eb5f..402d69df0c 100644
--- a/call/call_perf_tests.cc
+++ b/call/call_perf_tests.cc
@@ -25,7 +25,6 @@
#include "api/video/builtin_video_bitrate_allocator_factory.h"
#include "api/video/video_bitrate_allocation.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/call.h"
#include "call/fake_network_pipe.h"
#include "call/simulated_network.h"
@@ -53,6 +52,7 @@
#include "test/rtp_rtcp_observer.h"
#include "test/testsupport/file_utils.h"
#include "test/video_encoder_proxy_factory.h"
+#include "video/config/video_encoder_config.h"
#include "video/transport_adapter.h"
using webrtc::test::DriftingClock;
diff --git a/call/degraded_call.h b/call/degraded_call.h
index 522302283a..dcdd4806e1 100644
--- a/call/degraded_call.h
+++ b/call/degraded_call.h
@@ -27,7 +27,6 @@
#include "api/rtp_headers.h"
#include "api/task_queue/pending_task_safety_flag.h"
#include "api/test/simulated_network.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/audio_receive_stream.h"
#include "call/audio_send_stream.h"
#include "call/call.h"
@@ -42,6 +41,7 @@
#include "rtc_base/network/sent_packet.h"
#include "rtc_base/task_queue.h"
#include "system_wrappers/include/clock.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
class DegradedCall : public Call, private PacketReceiver {
diff --git a/call/video_send_stream.h b/call/video_send_stream.h
index 1202a23666..01dc58456f 100644
--- a/call/video_send_stream.h
+++ b/call/video_send_stream.h
@@ -29,13 +29,13 @@
#include "api/video/video_sink_interface.h"
#include "api/video/video_source_interface.h"
#include "api/video/video_stream_encoder_settings.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/rtp_config.h"
#include "common_video/frame_counts.h"
#include "common_video/include/quality_limitation_reason.h"
#include "modules/rtp_rtcp/include/report_block_data.h"
#include "modules/rtp_rtcp/include/rtcp_statistics.h"
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 69f18c29f7..2f02f59545 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -98,6 +98,7 @@ rtc_library("rtc_media_base") {
"../rtc_base/system:rtc_export",
"../rtc_base/third_party/sigslot",
"../system_wrappers:field_trial",
+ "../video/config:encoder_config",
]
absl_deps = [
"//third_party/abseil-cpp/absl/algorithm:container",
diff --git a/media/DEPS b/media/DEPS
index 7ae46d0324..7fbbc0fd47 100644
--- a/media/DEPS
+++ b/media/DEPS
@@ -25,6 +25,9 @@ specific_include_rules = {
".*webrtc_video_engine\.h": [
"+video/config",
],
+ ".*media_channel\.h": [
+ "+video/config",
+ ],
".*webrtc_video_engine_unittest\.cc": [
"+video/config",
],
diff --git a/media/base/media_channel.h b/media/base/media_channel.h
index 986cb26261..967741085d 100644
--- a/media/base/media_channel.h
+++ b/media/base/media_channel.h
@@ -34,7 +34,6 @@
#include "api/video/video_sink_interface.h"
#include "api/video/video_source_interface.h"
#include "api/video/video_timing.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "call/video_receive_stream.h"
#include "common_video/include/quality_limitation_reason.h"
@@ -53,6 +52,7 @@
#include "rtc_base/socket.h"
#include "rtc_base/string_encode.h"
#include "rtc_base/strings/string_builder.h"
+#include "video/config/video_encoder_config.h"
namespace rtc {
class Timing;
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index b54b8bda91..bae021330b 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -295,6 +295,7 @@ rtc_library("video_coding") {
"../../system_wrappers",
"../../system_wrappers:field_trial",
"../../system_wrappers:metrics",
+ "../../video/config:encoder_config",
"../rtp_rtcp",
"../rtp_rtcp:rtp_rtcp_format",
"../rtp_rtcp:rtp_video_header",
@@ -989,6 +990,7 @@ if (rtc_include_tests) {
"../../test:test_support",
"../../test:video_test_common",
"../../test:video_test_support",
+ "../../video/config:encoder_config",
"../../video/config:streams_config",
]
absl_deps = [
diff --git a/modules/video_coding/DEPS b/modules/video_coding/DEPS
index 2aac37a1d4..d62707c2f9 100644
--- a/modules/video_coding/DEPS
+++ b/modules/video_coding/DEPS
@@ -7,6 +7,7 @@ include_rules = [
"+rtc_tools",
"+third_party/libyuv",
"+rtc_base/system/rtc_export.h",
+ "+video/config",
]
specific_include_rules = {
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 e30fe96800..e7028f6fe1 100644
--- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
+++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
@@ -37,7 +37,6 @@
#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"
@@ -61,6 +60,7 @@
#include "test/testsupport/frame_writer.h"
#include "test/video_codec_settings.h"
#include "video/config/simulcast.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace test {
diff --git a/modules/video_coding/include/video_codec_initializer.h b/modules/video_coding/include/video_codec_initializer.h
index e979f9c867..270c4dbcd1 100644
--- a/modules/video_coding/include/video_codec_initializer.h
+++ b/modules/video_coding/include/video_codec_initializer.h
@@ -15,7 +15,7 @@
#include <string>
#include <vector>
-#include "api/video_codecs/video_encoder_config.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/rtc_base/experiments/BUILD.gn b/rtc_base/experiments/BUILD.gn
index 2293540c42..ac542cc301 100644
--- a/rtc_base/experiments/BUILD.gn
+++ b/rtc_base/experiments/BUILD.gn
@@ -192,6 +192,7 @@ rtc_library("rate_control_settings") {
"../../api/units:data_size",
"../../api/video_codecs:video_codecs_api",
"../../system_wrappers:field_trial",
+ "../../video/config:encoder_config",
]
absl_deps = [
"//third_party/abseil-cpp/absl/strings",
@@ -289,6 +290,7 @@ if (rtc_include_tests && !build_with_chromium) {
"../../test:scoped_key_value_config",
"../../test:test_main",
"../../test:test_support",
+ "../../video/config:encoder_config",
]
absl_deps = [
"//third_party/abseil-cpp/absl/strings",
diff --git a/rtc_base/experiments/DEPS b/rtc_base/experiments/DEPS
index 8a9adf19f9..7c8dddef06 100644
--- a/rtc_base/experiments/DEPS
+++ b/rtc_base/experiments/DEPS
@@ -1,3 +1,8 @@
include_rules = [
"+system_wrappers",
]
+specific_include_rules = {
+ ".*rate_control_settings.*": [
+ "+video/config",
+ ],
+}
diff --git a/rtc_base/experiments/rate_control_settings.h b/rtc_base/experiments/rate_control_settings.h
index 656eeb6dc3..6aff70a686 100644
--- a/rtc_base/experiments/rate_control_settings.h
+++ b/rtc_base/experiments/rate_control_settings.h
@@ -15,8 +15,8 @@
#include "api/field_trials_view.h"
#include "api/units/data_size.h"
#include "api/video_codecs/video_codec.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "rtc_base/experiments/struct_parameters_parser.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/rtc_base/experiments/rate_control_settings_unittest.cc b/rtc_base/experiments/rate_control_settings_unittest.cc
index 1946f38fd4..79f19e15b5 100644
--- a/rtc_base/experiments/rate_control_settings_unittest.cc
+++ b/rtc_base/experiments/rate_control_settings_unittest.cc
@@ -11,9 +11,9 @@
#include "rtc_base/experiments/rate_control_settings.h"
#include "api/video_codecs/video_codec.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "test/field_trial.h"
#include "test/gtest.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index 9cf7790a08..9e6dd0f91e 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -218,6 +218,7 @@ if (!is_component_build) {
"../test:fileutils",
"../test:rtp_test_utils",
"../test:video_test_common",
+ "../video/config:encoder_config",
"../video/config:streams_config",
"//third_party/abseil-cpp/absl/flags:flag",
"//third_party/abseil-cpp/absl/flags:parse",
diff --git a/rtc_tools/rtp_generator/rtp_generator.cc b/rtc_tools/rtp_generator/rtp_generator.cc
index d93655ac5c..51f3c35796 100644
--- a/rtc_tools/rtp_generator/rtp_generator.cc
+++ b/rtc_tools/rtp_generator/rtp_generator.cc
@@ -19,13 +19,13 @@
#include "api/video_codecs/builtin_video_decoder_factory.h"
#include "api/video_codecs/builtin_video_encoder_factory.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "media/base/media_constants.h"
#include "rtc_base/strings/json.h"
#include "rtc_base/system/file_wrapper.h"
#include "rtc_base/thread.h"
#include "test/testsupport/file_utils.h"
#include "video/config/encoder_stream_factory.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace {
diff --git a/rtc_tools/rtp_generator/rtp_generator.h b/rtc_tools/rtp_generator/rtp_generator.h
index a317bf7278..9a56522c33 100644
--- a/rtc_tools/rtp_generator/rtp_generator.h
+++ b/rtc_tools/rtp_generator/rtp_generator.h
@@ -21,7 +21,6 @@
#include "api/task_queue/task_queue_factory.h"
#include "api/video/builtin_video_bitrate_allocator_factory.h"
#include "api/video_codecs/video_decoder_factory.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "call/call.h"
#include "call/rtp_config.h"
@@ -30,6 +29,7 @@
#include "test/frame_generator_capturer.h"
#include "test/rtp_file_reader.h"
#include "test/rtp_file_writer.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/test/BUILD.gn b/test/BUILD.gn
index df84de8dc9..5a891a72da 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -927,6 +927,7 @@ rtc_library("encoder_settings") {
"../call:video_stream_api",
"../rtc_base:checks",
"../rtc_base:refcount",
+ "../video/config:encoder_config",
]
}
@@ -1012,6 +1013,7 @@ rtc_library("test_common") {
"../rtc_base:timeutils",
"../system_wrappers",
"../system_wrappers:field_trial",
+ "../video/config:encoder_config",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
if (!is_android && !build_with_chromium) {
diff --git a/test/call_test.cc b/test/call_test.cc
index b0dca887f9..7e7c9bb674 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -19,7 +19,6 @@
#include "api/task_queue/task_queue_base.h"
#include "api/test/create_frame_generator.h"
#include "api/video/builtin_video_bitrate_allocator_factory.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/fake_network_pipe.h"
#include "call/simulated_network.h"
#include "modules/audio_mixer/audio_mixer_impl.h"
@@ -28,6 +27,7 @@
#include "rtc_base/task_queue_for_test.h"
#include "test/fake_encoder.h"
#include "test/testsupport/file_utils.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace test {
diff --git a/test/encoder_settings.h b/test/encoder_settings.h
index 01586cff05..01eb4fa773 100644
--- a/test/encoder_settings.h
+++ b/test/encoder_settings.h
@@ -15,9 +15,9 @@
#include <string>
#include <vector>
-#include "api/video_codecs/video_encoder_config.h"
#include "call/video_receive_stream.h"
#include "call/video_send_stream.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace test {
diff --git a/video/BUILD.gn b/video/BUILD.gn
index ac603f5e74..0f168d745b 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -8,6 +8,29 @@
import("../webrtc.gni")
+rtc_library("video_stream_encoder_interface") {
+ sources = [
+ "video_stream_encoder_interface.h",
+ "video_stream_encoder_observer.h",
+ ]
+ deps = [
+ "../api:fec_controller_api",
+ "../api:rtp_parameters",
+ "../api:scoped_refptr",
+ "../api/adaptation:resource_adaptation_api",
+ "../api/units:data_rate",
+ "../api/video:video_adaptation",
+ "../api/video:video_bitrate_allocation",
+ "../api/video:video_bitrate_allocator",
+ "../api/video:video_codec_constants",
+ "../api/video:video_frame",
+ "../api/video:video_layers_allocation",
+ "../api/video_codecs:video_codecs_api",
+ "../video/config:encoder_config",
+ ]
+ absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
rtc_library("video") {
sources = [
"buffered_frame_decryptor.cc",
@@ -59,6 +82,7 @@ rtc_library("video") {
":unique_timestamp_counter",
":video_stream_buffer_controller",
":video_stream_encoder_impl",
+ ":video_stream_encoder_interface",
"../api:array_view",
"../api:fec_controller_api",
"../api:field_trials_view",
@@ -136,6 +160,7 @@ rtc_library("video") {
"../system_wrappers",
"../system_wrappers:field_trial",
"../system_wrappers:metrics",
+ "../video/config:encoder_config",
"adaptation:video_adaptation",
]
absl_deps = [
@@ -377,6 +402,7 @@ rtc_library("video_stream_encoder_impl") {
deps = [
":frame_cadence_adapter",
+ ":video_stream_encoder_interface",
"../api:field_trials_view",
"../api:rtp_parameters",
"../api:sequence_checker",
@@ -434,6 +460,7 @@ rtc_library("video_stream_encoder_impl") {
"../system_wrappers:field_trial",
"../system_wrappers:metrics",
"adaptation:video_adaptation",
+ "config:encoder_config",
"config:streams_config",
]
absl_deps = [
@@ -456,6 +483,7 @@ if (rtc_include_tests) {
testonly = true
sources = [ "test/mock_video_stream_encoder.h" ]
deps = [
+ ":video_stream_encoder_interface",
"../api/video:video_stream_encoder",
"../test:test_support",
]
@@ -570,6 +598,7 @@ if (rtc_include_tests) {
"../test:fileutils",
"../test:test_common",
"../test:test_support",
+ "../video/config:encoder_config",
"//testing/gtest",
]
absl_deps = [
@@ -906,6 +935,7 @@ if (rtc_include_tests) {
"../test:video_test_common",
"../test/time_controller",
"adaptation:video_adaptation",
+ "config:encoder_config",
"config:streams_config",
]
absl_deps = [
diff --git a/video/adaptation/BUILD.gn b/video/adaptation/BUILD.gn
index aadf615fea..d206909853 100644
--- a/video/adaptation/BUILD.gn
+++ b/video/adaptation/BUILD.gn
@@ -67,6 +67,8 @@ rtc_library("video_adaptation") {
"../../rtc_base/task_utils:repeating_task",
"../../system_wrappers:field_trial",
"../../system_wrappers:system_wrappers",
+ "../../video:video_stream_encoder_interface",
+ "../../video/config:encoder_config",
]
absl_deps = [
"//third_party/abseil-cpp/absl/algorithm:container",
diff --git a/video/adaptation/overuse_frame_detector.h b/video/adaptation/overuse_frame_detector.h
index a7393fc8c7..4e1f6a83a4 100644
--- a/video/adaptation/overuse_frame_detector.h
+++ b/video/adaptation/overuse_frame_detector.h
@@ -18,12 +18,12 @@
#include "api/field_trials_view.h"
#include "api/sequence_checker.h"
#include "api/task_queue/task_queue_base.h"
-#include "api/video/video_stream_encoder_observer.h"
#include "rtc_base/experiments/field_trial_parser.h"
#include "rtc_base/numerics/exp_filter.h"
#include "rtc_base/system/no_unique_address.h"
#include "rtc_base/task_utils/repeating_task.h"
#include "rtc_base/thread_annotations.h"
+#include "video/video_stream_encoder_observer.h"
namespace webrtc {
diff --git a/video/adaptation/video_stream_encoder_resource_manager.h b/video/adaptation/video_stream_encoder_resource_manager.h
index 61660dd42b..e0de3f7d19 100644
--- a/video/adaptation/video_stream_encoder_resource_manager.h
+++ b/video/adaptation/video_stream_encoder_resource_manager.h
@@ -29,10 +29,8 @@
#include "api/video/video_adaptation_reason.h"
#include "api/video/video_frame.h"
#include "api/video/video_source_interface.h"
-#include "api/video/video_stream_encoder_observer.h"
#include "api/video_codecs/video_codec.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/adaptation/resource_adaptation_processor_interface.h"
#include "call/adaptation/video_stream_adapter.h"
#include "call/adaptation/video_stream_input_state_provider.h"
@@ -51,6 +49,8 @@
#include "video/adaptation/quality_rampup_experiment_helper.h"
#include "video/adaptation/quality_scaler_resource.h"
#include "video/adaptation/video_stream_encoder_resource.h"
+#include "video/config/video_encoder_config.h"
+#include "video/video_stream_encoder_observer.h"
namespace webrtc {
diff --git a/video/alignment_adjuster.h b/video/alignment_adjuster.h
index ea2a9a0bef..36ac062e91 100644
--- a/video/alignment_adjuster.h
+++ b/video/alignment_adjuster.h
@@ -12,7 +12,7 @@
#define VIDEO_ALIGNMENT_ADJUSTER_H_
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
diff --git a/video/config/BUILD.gn b/video/config/BUILD.gn
index be76be9b11..11871b8cbc 100644
--- a/video/config/BUILD.gn
+++ b/video/config/BUILD.gn
@@ -17,6 +17,7 @@ rtc_library("streams_config") {
]
deps = [
+ ":encoder_config",
"../../api:field_trials_view",
"../../api/transport:field_trial_based_config",
"../../api/units:data_rate",
@@ -40,6 +41,29 @@ rtc_library("streams_config") {
]
}
+rtc_library("encoder_config") {
+ sources = [
+ "video_encoder_config.cc",
+ "video_encoder_config.h",
+ ]
+
+ deps = [
+ "../../api:scoped_refptr",
+ "../../api/video:resolution",
+ "../../api/video_codecs:scalability_mode",
+ "../../api/video_codecs:video_codecs_api",
+ "../../rtc_base:checks",
+ "../../rtc_base:refcount",
+ "../../rtc_base:stringutils",
+ ]
+ absl_deps = [
+ "//third_party/abseil-cpp/absl/algorithm:container",
+ "//third_party/abseil-cpp/absl/memory",
+ "//third_party/abseil-cpp/absl/strings",
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
+}
+
if (rtc_include_tests) {
rtc_library("video_config_tests") {
testonly = true
@@ -66,8 +90,3 @@ if (rtc_include_tests) {
}
}
}
-
-rtc_library("encoder_config") {
- sources = [ "video_encoder_config.h" ]
- deps = [ "../../api/video_codecs:video_codecs_api" ]
-}
diff --git a/video/config/encoder_stream_factory.h b/video/config/encoder_stream_factory.h
index 971eed4983..7da4050116 100644
--- a/video/config/encoder_stream_factory.h
+++ b/video/config/encoder_stream_factory.h
@@ -15,7 +15,7 @@
#include "api/transport/field_trial_based_config.h"
#include "api/units/data_rate.h"
-#include "api/video_codecs/video_encoder_config.h"
+#include "video/config/video_encoder_config.h"
namespace cricket {
diff --git a/video/config/simulcast.h b/video/config/simulcast.h
index aa48058302..32af168bcd 100644
--- a/video/config/simulcast.h
+++ b/video/config/simulcast.h
@@ -17,7 +17,7 @@
#include "api/field_trials_view.h"
#include "api/units/data_rate.h"
-#include "api/video_codecs/video_encoder_config.h"
+#include "video/config/video_encoder_config.h"
namespace cricket {
diff --git a/api/video_codecs/video_encoder_config.cc b/video/config/video_encoder_config.cc
index fd4a68fc05..6ea2052138 100644
--- a/api/video_codecs/video_encoder_config.cc
+++ b/video/config/video_encoder_config.cc
@@ -7,7 +7,7 @@
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
-#include "api/video_codecs/video_encoder_config.h"
+#include "video/config/video_encoder_config.h"
#include <string>
diff --git a/video/config/video_encoder_config.h b/video/config/video_encoder_config.h
index d33dec1da7..41bdefad83 100644
--- a/video/config/video_encoder_config.h
+++ b/video/config/video_encoder_config.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2013 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
@@ -11,6 +11,198 @@
#ifndef VIDEO_CONFIG_VIDEO_ENCODER_CONFIG_H_
#define VIDEO_CONFIG_VIDEO_ENCODER_CONFIG_H_
-#include "api/video_codecs/video_encoder_config.h"
+#include <stddef.h>
+
+#include <string>
+#include <vector>
+
+#include "absl/types/optional.h"
+#include "api/scoped_refptr.h"
+#include "api/video/resolution.h"
+#include "api/video_codecs/scalability_mode.h"
+#include "api/video_codecs/sdp_video_format.h"
+#include "api/video_codecs/video_codec.h"
+#include "rtc_base/ref_count.h"
+
+namespace webrtc {
+
+// The `VideoStream` struct describes a simulcast layer, or "stream".
+struct VideoStream {
+ VideoStream();
+ ~VideoStream();
+ VideoStream(const VideoStream& other);
+ std::string ToString() const;
+
+ // Width/Height in pixels.
+ // This is the actual width and height used to configure encoder,
+ // which might be less than `requested_resolution` due to adaptation
+ // or due to the source providing smaller frames than requested.
+ size_t width;
+ size_t height;
+
+ // Frame rate in fps.
+ int max_framerate;
+
+ // Bitrate, in bps, for the stream.
+ int min_bitrate_bps;
+ int target_bitrate_bps;
+ int max_bitrate_bps;
+
+ // Scaling factor applied to the stream size.
+ // `width` and `height` values are already scaled down.
+ double scale_resolution_down_by;
+
+ // Maximum Quantization Parameter to use when encoding the stream.
+ int max_qp;
+
+ // Determines the number of temporal layers that the stream should be
+ // encoded with. This value should be greater than zero.
+ // TODO(brandtr): This class is used both for configuring the encoder
+ // (meaning that this field _must_ be set), and for signaling the app-level
+ // encoder settings (meaning that the field _may_ be set). We should separate
+ // this and remove this optional instead.
+ absl::optional<size_t> num_temporal_layers;
+
+ // The priority of this stream, to be used when allocating resources
+ // between multiple streams.
+ absl::optional<double> bitrate_priority;
+
+ absl::optional<ScalabilityMode> scalability_mode;
+
+ // If this stream is enabled by the user, or not.
+ bool active;
+
+ // An optional user supplied max_frame_resolution
+ // than can be set independently of (adapted) VideoSource.
+ // This value is set from RtpEncodingParameters::requested_resolution
+ // (i.e. used for signaling app-level settings).
+ //
+ // The actual encode resolution is in `width` and `height`,
+ // which can be lower than requested_resolution,
+ // e.g. if source only provides lower resolution or
+ // if resource adaptation is active.
+ absl::optional<Resolution> requested_resolution;
+};
+
+class VideoEncoderConfig {
+ public:
+ // These are reference counted to permit copying VideoEncoderConfig and be
+ // kept alive until all encoder_specific_settings go out of scope.
+ // TODO(kthelgason): Consider removing the need for copying VideoEncoderConfig
+ // and use absl::optional for encoder_specific_settings instead.
+ class EncoderSpecificSettings : public rtc::RefCountInterface {
+ public:
+ // TODO(pbos): Remove FillEncoderSpecificSettings as soon as VideoCodec is
+ // not in use and encoder implementations ask for codec-specific structs
+ // directly.
+ void FillEncoderSpecificSettings(VideoCodec* codec_struct) const;
+
+ virtual void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const;
+ virtual void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const;
+
+ private:
+ ~EncoderSpecificSettings() override {}
+ friend class VideoEncoderConfig;
+ };
+
+ class Vp8EncoderSpecificSettings : public EncoderSpecificSettings {
+ public:
+ explicit Vp8EncoderSpecificSettings(const VideoCodecVP8& specifics);
+ void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const override;
+
+ private:
+ VideoCodecVP8 specifics_;
+ };
+
+ class Vp9EncoderSpecificSettings : public EncoderSpecificSettings {
+ public:
+ explicit Vp9EncoderSpecificSettings(const VideoCodecVP9& specifics);
+ void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const override;
+
+ private:
+ VideoCodecVP9 specifics_;
+ };
+
+ enum class ContentType {
+ kRealtimeVideo,
+ kScreen,
+ };
+
+ class VideoStreamFactoryInterface : public rtc::RefCountInterface {
+ public:
+ // An implementation should return a std::vector<VideoStream> with the
+ // wanted VideoStream settings for the given video resolution.
+ // The size of the vector may not be larger than
+ // `encoder_config.number_of_streams`.
+ virtual std::vector<VideoStream> CreateEncoderStreams(
+ int width,
+ int height,
+ const VideoEncoderConfig& encoder_config) = 0;
+
+ protected:
+ ~VideoStreamFactoryInterface() override {}
+ };
+
+ VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default;
+ VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete;
+
+ // Mostly used by tests. Avoid creating copies if you can.
+ VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); }
+
+ VideoEncoderConfig();
+ VideoEncoderConfig(VideoEncoderConfig&&);
+ ~VideoEncoderConfig();
+ std::string ToString() const;
+
+ // TODO(bugs.webrtc.org/6883): Consolidate on one of these.
+ VideoCodecType codec_type;
+ SdpVideoFormat video_format;
+
+ // Note: This factory can be unset, and VideoStreamEncoder will
+ // then use the EncoderStreamFactory. The factory is only set by
+ // tests.
+ rtc::scoped_refptr<VideoStreamFactoryInterface> video_stream_factory;
+ std::vector<SpatialLayer> spatial_layers;
+ ContentType content_type;
+ bool frame_drop_enabled;
+ rtc::scoped_refptr<const EncoderSpecificSettings> encoder_specific_settings;
+
+ // Padding will be used up to this bitrate regardless of the bitrate produced
+ // by the encoder. Padding above what's actually produced by the encoder helps
+ // maintaining a higher bitrate estimate. Padding will however not be sent
+ // unless the estimated bandwidth indicates that the link can handle it.
+ int min_transmit_bitrate_bps;
+ int max_bitrate_bps;
+ // The bitrate priority used for all VideoStreams.
+ double bitrate_priority;
+
+ // The simulcast layer's configurations set by the application for this video
+ // sender. These are modified by the video_stream_factory before being passed
+ // down to lower layers for the video encoding.
+ // `simulcast_layers` is also used for configuring non-simulcast (when there
+ // is a single VideoStream).
+ std::vector<VideoStream> simulcast_layers;
+
+ // Max number of encoded VideoStreams to produce.
+ size_t number_of_streams;
+
+ // Legacy Google conference mode flag for simulcast screenshare
+ bool legacy_conference_mode;
+
+ // Indicates whether quality scaling can be used or not.
+ bool is_quality_scaling_allowed;
+
+ // Maximum Quantization Parameter.
+ // This value is fed into EncoderStreamFactory that
+ // apply it to all simulcast layers/spatial layers.
+ int max_qp;
+
+ private:
+ // Access to the copy constructor is private to force use of the Copy()
+ // method for those exceptional cases where we do use it.
+ VideoEncoderConfig(const VideoEncoderConfig&);
+};
+
+} // namespace webrtc
#endif // VIDEO_CONFIG_VIDEO_ENCODER_CONFIG_H_
diff --git a/video/cpu_scaling_tests.cc b/video/cpu_scaling_tests.cc
index 33e0e12807..b9f3a45e94 100644
--- a/video/cpu_scaling_tests.cc
+++ b/video/cpu_scaling_tests.cc
@@ -15,7 +15,6 @@
#include "api/video/video_frame.h"
#include "api/video/video_sink_interface.h"
#include "api/video/video_source_interface.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/video_receive_stream.h"
#include "call/video_send_stream.h"
#include "rtc_base/checks.h"
@@ -24,6 +23,7 @@
#include "test/field_trial.h"
#include "test/frame_generator_capturer.h"
#include "test/gtest.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace {
diff --git a/video/encoder_rtcp_feedback.h b/video/encoder_rtcp_feedback.h
index 2aadcc34e7..c66a94503e 100644
--- a/video/encoder_rtcp_feedback.h
+++ b/video/encoder_rtcp_feedback.h
@@ -16,11 +16,11 @@
#include "api/sequence_checker.h"
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
-#include "api/video/video_stream_encoder_interface.h"
#include "call/rtp_video_sender_interface.h"
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "rtc_base/system/no_unique_address.h"
#include "system_wrappers/include/clock.h"
+#include "video/video_stream_encoder_interface.h"
namespace webrtc {
diff --git a/video/end_to_end_tests/extended_reports_tests.cc b/video/end_to_end_tests/extended_reports_tests.cc
index 1b631ae5db..ee37bf96ce 100644
--- a/video/end_to_end_tests/extended_reports_tests.cc
+++ b/video/end_to_end_tests/extended_reports_tests.cc
@@ -21,7 +21,6 @@
#include "api/task_queue/task_queue_base.h"
#include "api/test/simulated_network.h"
#include "api/video_codecs/sdp_video_format.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/call.h"
#include "call/fake_network_pipe.h"
#include "call/rtp_config.h"
@@ -40,6 +39,7 @@
#include "test/gtest.h"
#include "test/rtcp_packet_parser.h"
#include "test/rtp_rtcp_observer.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace {
diff --git a/video/end_to_end_tests/multi_stream_tests.cc b/video/end_to_end_tests/multi_stream_tests.cc
index ff17fc127d..b997538d96 100644
--- a/video/end_to_end_tests/multi_stream_tests.cc
+++ b/video/end_to_end_tests/multi_stream_tests.cc
@@ -16,13 +16,13 @@
#include "api/video/video_frame.h"
#include "api/video/video_sink_interface.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/rtp_config.h"
#include "call/video_receive_stream.h"
#include "call/video_send_stream.h"
#include "rtc_base/event.h"
#include "test/frame_generator_capturer.h"
#include "test/gtest.h"
+#include "video/config/video_encoder_config.h"
#include "video/end_to_end_tests/multi_stream_tester.h"
namespace webrtc {
diff --git a/video/full_stack_tests.cc b/video/full_stack_tests.cc
index 3831fdfcef..cddf98343d 100644
--- a/video/full_stack_tests.cc
+++ b/video/full_stack_tests.cc
@@ -20,13 +20,13 @@
#include "api/test/video_quality_test_fixture.h"
#include "api/video_codecs/sdp_video_format.h"
#include "api/video_codecs/video_codec.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "api/video_codecs/vp9_profile.h"
#include "modules/video_coding/codecs/vp9/include/vp9.h"
#include "system_wrappers/include/field_trial.h"
#include "test/field_trial.h"
#include "test/gtest.h"
#include "test/testsupport/file_utils.h"
+#include "video/config/video_encoder_config.h"
#include "video/video_quality_test.h"
ABSL_FLAG(std::string,
diff --git a/video/send_statistics_proxy.h b/video/send_statistics_proxy.h
index a1319d8c7a..e1c653dc03 100644
--- a/video/send_statistics_proxy.h
+++ b/video/send_statistics_proxy.h
@@ -19,8 +19,6 @@
#include "api/field_trials_view.h"
#include "api/video/video_codec_constants.h"
-#include "api/video/video_stream_encoder_observer.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/video_send_stream.h"
#include "modules/include/module_common_types_public.h"
#include "modules/rtp_rtcp/include/report_block_data.h"
@@ -31,9 +29,11 @@
#include "rtc_base/synchronization/mutex.h"
#include "rtc_base/thread_annotations.h"
#include "system_wrappers/include/clock.h"
+#include "video/config/video_encoder_config.h"
#include "video/quality_limitation_reason_tracker.h"
#include "video/report_block_stats.h"
#include "video/stats_counter.h"
+#include "video/video_stream_encoder_observer.h"
namespace webrtc {
diff --git a/video/send_statistics_proxy_unittest.cc b/video/send_statistics_proxy_unittest.cc
index 8264065f4b..5a7c356f2e 100644
--- a/video/send_statistics_proxy_unittest.cc
+++ b/video/send_statistics_proxy_unittest.cc
@@ -22,11 +22,11 @@
#include "api/video/video_bitrate_allocation.h"
#include "api/video/video_codec_type.h"
#include "api/video_codecs/video_codec.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "rtc_base/fake_clock.h"
#include "system_wrappers/include/metrics.h"
#include "test/gtest.h"
#include "test/scoped_key_value_config.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
namespace {
diff --git a/video/test/mock_video_stream_encoder.h b/video/test/mock_video_stream_encoder.h
index 8ea87acc0f..ff246df253 100644
--- a/video/test/mock_video_stream_encoder.h
+++ b/video/test/mock_video_stream_encoder.h
@@ -12,8 +12,8 @@
#include <vector>
-#include "api/video/video_stream_encoder_interface.h"
#include "test/gmock.h"
+#include "video/video_stream_encoder_interface.h"
namespace webrtc {
diff --git a/video/video_send_stream.h b/video/video_send_stream.h
index d495133bfa..3fa8463868 100644
--- a/video/video_send_stream.h
+++ b/video/video_send_stream.h
@@ -19,7 +19,6 @@
#include "api/field_trials_view.h"
#include "api/sequence_checker.h"
#include "api/task_queue/pending_task_safety_flag.h"
-#include "api/video/video_stream_encoder_interface.h"
#include "call/bitrate_allocator.h"
#include "call/video_receive_stream.h"
#include "call/video_send_stream.h"
@@ -29,6 +28,7 @@
#include "video/send_delay_stats.h"
#include "video/send_statistics_proxy.h"
#include "video/video_send_stream_impl.h"
+#include "video/video_stream_encoder_interface.h"
namespace webrtc {
namespace test {
diff --git a/video/video_send_stream_impl.h b/video/video_send_stream_impl.h
index d6ce47f8c7..b738cd85e0 100644
--- a/video/video_send_stream_impl.h
+++ b/video/video_send_stream_impl.h
@@ -25,9 +25,7 @@
#include "api/video/encoded_image.h"
#include "api/video/video_bitrate_allocation.h"
#include "api/video/video_bitrate_allocator.h"
-#include "api/video/video_stream_encoder_interface.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
#include "call/bitrate_allocator.h"
#include "call/rtp_config.h"
#include "call/rtp_transport_controller_send_interface.h"
@@ -39,7 +37,9 @@
#include "rtc_base/system/no_unique_address.h"
#include "rtc_base/task_utils/repeating_task.h"
#include "rtc_base/thread_annotations.h"
+#include "video/config/video_encoder_config.h"
#include "video/send_statistics_proxy.h"
+#include "video/video_stream_encoder_interface.h"
namespace webrtc {
namespace internal {
diff --git a/video/video_stream_encoder.h b/video/video_stream_encoder.h
index c4c461f6fb..7a4fc324b1 100644
--- a/video/video_stream_encoder.h
+++ b/video/video_stream_encoder.h
@@ -26,8 +26,6 @@
#include "api/video/video_bitrate_allocator.h"
#include "api/video/video_rotation.h"
#include "api/video/video_sink_interface.h"
-#include "api/video/video_stream_encoder_interface.h"
-#include "api/video/video_stream_encoder_observer.h"
#include "api/video/video_stream_encoder_settings.h"
#include "api/video_codecs/video_codec.h"
#include "api/video_codecs/video_encoder.h"
@@ -50,6 +48,8 @@
#include "video/frame_cadence_adapter.h"
#include "video/frame_encode_metadata_writer.h"
#include "video/video_source_sink_controller.h"
+#include "video/video_stream_encoder_interface.h"
+#include "video/video_stream_encoder_observer.h"
namespace webrtc {
diff --git a/api/video/video_stream_encoder_interface.h b/video/video_stream_encoder_interface.h
index 44affa4c16..38f180d121 100644
--- a/api/video/video_stream_encoder_interface.h
+++ b/video/video_stream_encoder_interface.h
@@ -8,8 +8,8 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#ifndef API_VIDEO_VIDEO_STREAM_ENCODER_INTERFACE_H_
-#define API_VIDEO_VIDEO_STREAM_ENCODER_INTERFACE_H_
+#ifndef VIDEO_VIDEO_STREAM_ENCODER_INTERFACE_H_
+#define VIDEO_VIDEO_STREAM_ENCODER_INTERFACE_H_
#include <vector>
@@ -23,7 +23,7 @@
#include "api/video/video_sink_interface.h"
#include "api/video/video_source_interface.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
@@ -137,4 +137,4 @@ class VideoStreamEncoderInterface {
} // namespace webrtc
-#endif // API_VIDEO_VIDEO_STREAM_ENCODER_INTERFACE_H_
+#endif // VIDEO_VIDEO_STREAM_ENCODER_INTERFACE_H_
diff --git a/api/video/video_stream_encoder_observer.h b/video/video_stream_encoder_observer.h
index 01e1f661fe..32d8408a85 100644
--- a/api/video/video_stream_encoder_observer.h
+++ b/video/video_stream_encoder_observer.h
@@ -8,8 +8,8 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#ifndef API_VIDEO_VIDEO_STREAM_ENCODER_OBSERVER_H_
-#define API_VIDEO_VIDEO_STREAM_ENCODER_OBSERVER_H_
+#ifndef VIDEO_VIDEO_STREAM_ENCODER_OBSERVER_H_
+#define VIDEO_VIDEO_STREAM_ENCODER_OBSERVER_H_
#include <string>
#include <vector>
@@ -20,7 +20,7 @@
#include "api/video/video_bitrate_allocation.h"
#include "api/video/video_codec_constants.h"
#include "api/video_codecs/video_encoder.h"
-#include "api/video_codecs/video_encoder_config.h"
+#include "video/config/video_encoder_config.h"
namespace webrtc {
@@ -112,4 +112,5 @@ class VideoStreamEncoderObserver : public CpuOveruseMetricsObserver {
};
} // namespace webrtc
-#endif // API_VIDEO_VIDEO_STREAM_ENCODER_OBSERVER_H_
+
+#endif // VIDEO_VIDEO_STREAM_ENCODER_OBSERVER_H_