2020-01-07 10:15:04 +01:00
|
|
|
/*
|
2020-03-10 19:08:05 +01:00
|
|
|
* Copyright 2020 The WebRTC Project Authors. All rights reserved.
|
2020-01-07 10:15:04 +01:00
|
|
|
*
|
|
|
|
|
* 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.
|
|
|
|
|
*/
|
|
|
|
|
|
2020-03-10 19:08:05 +01:00
|
|
|
#ifndef CALL_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|
|
|
|
|
#define CALL_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|
2020-01-07 10:15:04 +01:00
|
|
|
|
2020-06-11 10:45:29 +02:00
|
|
|
#include <map>
|
2020-06-11 12:07:14 +02:00
|
|
|
#include <vector>
|
2020-06-11 10:45:29 +02:00
|
|
|
|
2020-01-21 17:45:35 +01:00
|
|
|
#include "absl/types/optional.h"
|
2020-06-03 09:24:06 +02:00
|
|
|
#include "api/adaptation/resource.h"
|
2020-01-16 13:55:29 +01:00
|
|
|
#include "api/rtp_parameters.h"
|
2020-05-11 16:29:22 +02:00
|
|
|
#include "api/scoped_refptr.h"
|
2020-06-03 09:21:34 +02:00
|
|
|
#include "api/task_queue/task_queue_base.h"
|
2020-04-17 15:31:48 +02:00
|
|
|
#include "api/video/video_adaptation_counters.h"
|
2020-01-22 16:16:04 +01:00
|
|
|
#include "api/video/video_frame.h"
|
2020-06-02 13:02:36 +02:00
|
|
|
#include "call/adaptation/adaptation_constraint.h"
|
|
|
|
|
#include "call/adaptation/adaptation_listener.h"
|
2020-03-06 13:32:03 +01:00
|
|
|
#include "call/adaptation/encoder_settings.h"
|
2020-01-13 11:27:18 +01:00
|
|
|
#include "call/adaptation/video_source_restrictions.h"
|
2020-01-10 15:44:01 +01:00
|
|
|
|
2020-01-07 10:15:04 +01:00
|
|
|
namespace webrtc {
|
|
|
|
|
|
2020-01-10 15:44:01 +01:00
|
|
|
// The listener is responsible for carrying out the reconfiguration of the video
|
|
|
|
|
// source such that the VideoSourceRestrictions are fulfilled.
|
2020-06-02 13:02:36 +02:00
|
|
|
class VideoSourceRestrictionsListener {
|
2020-01-10 15:44:01 +01:00
|
|
|
public:
|
2020-06-02 13:02:36 +02:00
|
|
|
virtual ~VideoSourceRestrictionsListener();
|
2020-01-10 15:44:01 +01:00
|
|
|
|
2020-04-17 15:31:48 +02:00
|
|
|
// The |restrictions| are filtered by degradation preference but not the
|
|
|
|
|
// |adaptation_counters|, which are currently only reported for legacy stats
|
|
|
|
|
// calculation purposes.
|
2020-01-10 15:44:01 +01:00
|
|
|
virtual void OnVideoSourceRestrictionsUpdated(
|
2020-04-17 15:31:48 +02:00
|
|
|
VideoSourceRestrictions restrictions,
|
|
|
|
|
const VideoAdaptationCounters& adaptation_counters,
|
2020-05-11 16:29:22 +02:00
|
|
|
rtc::scoped_refptr<Resource> reason) = 0;
|
2020-06-11 10:45:29 +02:00
|
|
|
|
|
|
|
|
// The limitations on a resource were changed. This does not mean the current
|
|
|
|
|
// video restrictions have changed.
|
|
|
|
|
virtual void OnResourceLimitationChanged(
|
|
|
|
|
rtc::scoped_refptr<Resource> resource,
|
|
|
|
|
const std::map<rtc::scoped_refptr<Resource>, VideoAdaptationCounters>&
|
|
|
|
|
resource_limitations) {}
|
2020-01-10 15:44:01 +01:00
|
|
|
};
|
|
|
|
|
|
2020-05-11 16:29:22 +02:00
|
|
|
// The Resource Adaptation Processor is responsible for reacting to resource
|
|
|
|
|
// usage measurements (e.g. overusing or underusing CPU). When a resource is
|
|
|
|
|
// overused the Processor is responsible for performing mitigations in order to
|
|
|
|
|
// consume less resources.
|
2020-03-10 19:08:05 +01:00
|
|
|
class ResourceAdaptationProcessorInterface {
|
2020-01-07 10:15:04 +01:00
|
|
|
public:
|
2020-03-10 19:08:05 +01:00
|
|
|
virtual ~ResourceAdaptationProcessorInterface();
|
2020-01-07 10:15:04 +01:00
|
|
|
|
2020-06-03 09:21:34 +02:00
|
|
|
virtual void SetResourceAdaptationQueue(
|
|
|
|
|
TaskQueueBase* resource_adaptation_queue) = 0;
|
2020-05-11 16:29:22 +02:00
|
|
|
|
2020-04-17 18:36:19 +02:00
|
|
|
virtual DegradationPreference degradation_preference() const = 0;
|
|
|
|
|
// Reinterprets "balanced + screenshare" as "maintain-resolution".
|
|
|
|
|
// TODO(hbos): Don't do this. This is not what "balanced" means. If the
|
|
|
|
|
// application wants to maintain resolution it should set that degradation
|
|
|
|
|
// preference rather than depend on non-standard behaviors.
|
|
|
|
|
virtual DegradationPreference effective_degradation_preference() const = 0;
|
|
|
|
|
|
|
|
|
|
// Starts or stops listening to resources, effectively enabling or disabling
|
|
|
|
|
// processing.
|
|
|
|
|
// TODO(https://crbug.com/webrtc/11172): Automatically register and unregister
|
|
|
|
|
// with AddResource() and RemoveResource() instead. When the processor is
|
|
|
|
|
// multi-stream aware, stream-specific resouces will get added and removed
|
|
|
|
|
// over time.
|
2020-06-02 13:02:36 +02:00
|
|
|
virtual void AddRestrictionsListener(
|
|
|
|
|
VideoSourceRestrictionsListener* restrictions_listener) = 0;
|
|
|
|
|
virtual void RemoveRestrictionsListener(
|
|
|
|
|
VideoSourceRestrictionsListener* restrictions_listener) = 0;
|
2020-05-11 16:29:22 +02:00
|
|
|
virtual void AddResource(rtc::scoped_refptr<Resource> resource) = 0;
|
2020-06-11 12:07:14 +02:00
|
|
|
virtual std::vector<rtc::scoped_refptr<Resource>> GetResources() const = 0;
|
2020-05-11 16:29:22 +02:00
|
|
|
virtual void RemoveResource(rtc::scoped_refptr<Resource> resource) = 0;
|
2020-06-02 13:02:36 +02:00
|
|
|
virtual void AddAdaptationConstraint(
|
|
|
|
|
AdaptationConstraint* adaptation_constraint) = 0;
|
|
|
|
|
virtual void RemoveAdaptationConstraint(
|
|
|
|
|
AdaptationConstraint* adaptation_constraint) = 0;
|
|
|
|
|
virtual void AddAdaptationListener(
|
|
|
|
|
AdaptationListener* adaptation_listener) = 0;
|
|
|
|
|
virtual void RemoveAdaptationListener(
|
|
|
|
|
AdaptationListener* adaptation_listener) = 0;
|
2020-04-17 18:36:19 +02:00
|
|
|
|
2020-01-16 13:55:29 +01:00
|
|
|
virtual void SetDegradationPreference(
|
|
|
|
|
DegradationPreference degradation_preference) = 0;
|
2020-04-17 18:36:19 +02:00
|
|
|
virtual void SetIsScreenshare(bool is_screenshare) = 0;
|
|
|
|
|
virtual void ResetVideoSourceRestrictions() = 0;
|
2020-04-30 10:13:29 +02:00
|
|
|
|
|
|
|
|
// May trigger one or more adaptations. It is meant to reduce resolution -
|
|
|
|
|
// useful if a frame was dropped due to its size - however, the implementation
|
|
|
|
|
// may not guarantee this (see resource_adaptation_processor.h).
|
|
|
|
|
// TODO(hbos): This is only part of the interface for backwards-compatiblity
|
|
|
|
|
// reasons. Can we replace this by something which actually satisfies the
|
|
|
|
|
// resolution constraints or get rid of it altogether?
|
|
|
|
|
virtual void TriggerAdaptationDueToFrameDroppedDueToSize(
|
2020-05-11 16:29:22 +02:00
|
|
|
rtc::scoped_refptr<Resource> reason_resource) = 0;
|
2020-01-07 10:15:04 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace webrtc
|
|
|
|
|
|
2020-03-10 19:08:05 +01:00
|
|
|
#endif // CALL_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|