summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/call/adaptation/video_stream_input_state_provider.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/call/adaptation/video_stream_input_state_provider.cc')
-rw-r--r--third_party/libwebrtc/call/adaptation/video_stream_input_state_provider.cc54
1 files changed, 54 insertions, 0 deletions
diff --git a/third_party/libwebrtc/call/adaptation/video_stream_input_state_provider.cc b/third_party/libwebrtc/call/adaptation/video_stream_input_state_provider.cc
new file mode 100644
index 0000000000..3261af39ea
--- /dev/null
+++ b/third_party/libwebrtc/call/adaptation/video_stream_input_state_provider.cc
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2020 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 "call/adaptation/video_stream_input_state_provider.h"
+
+#include "call/adaptation/video_stream_adapter.h"
+
+namespace webrtc {
+
+VideoStreamInputStateProvider::VideoStreamInputStateProvider(
+ VideoStreamEncoderObserver* frame_rate_provider)
+ : frame_rate_provider_(frame_rate_provider) {}
+
+VideoStreamInputStateProvider::~VideoStreamInputStateProvider() {}
+
+void VideoStreamInputStateProvider::OnHasInputChanged(bool has_input) {
+ MutexLock lock(&mutex_);
+ input_state_.set_has_input(has_input);
+}
+
+void VideoStreamInputStateProvider::OnFrameSizeObserved(int frame_size_pixels) {
+ RTC_DCHECK_GT(frame_size_pixels, 0);
+ MutexLock lock(&mutex_);
+ input_state_.set_frame_size_pixels(frame_size_pixels);
+}
+
+void VideoStreamInputStateProvider::OnEncoderSettingsChanged(
+ EncoderSettings encoder_settings) {
+ MutexLock lock(&mutex_);
+ input_state_.set_video_codec_type(
+ encoder_settings.encoder_config().codec_type);
+ input_state_.set_min_pixels_per_frame(
+ encoder_settings.encoder_info().scaling_settings.min_pixels_per_frame);
+ input_state_.set_single_active_stream_pixels(
+ VideoStreamAdapter::GetSingleActiveLayerPixels(
+ encoder_settings.video_codec()));
+}
+
+VideoStreamInputState VideoStreamInputStateProvider::InputState() {
+ // GetInputFrameRate() is thread-safe.
+ int input_fps = frame_rate_provider_->GetInputFrameRate();
+ MutexLock lock(&mutex_);
+ input_state_.set_frames_per_second(input_fps);
+ return input_state_;
+}
+
+} // namespace webrtc