mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00

Some of the state that's managed in VideoStreamEncoder, is updated and accessed on the encoder queue, but a method that's used for testing only (GetAdaptationResources()), represents a race between PostTask operations that update state and checking for said state on the worker thread. This CL removes Wait() operations related to adaptation resources from the common path and puts one in the test path instead. Bug: webrtc:13612 Change-Id: Ie3e018e815e24951bc0634ed70de17eaf336a508 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/249220 Reviewed-by: Henrik Boström <hbos@webrtc.org> Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35797}
67 lines
2.6 KiB
C++
67 lines
2.6 KiB
C++
/*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef CALL_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|
|
#define CALL_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
#include "absl/types/optional.h"
|
|
#include "api/adaptation/resource.h"
|
|
#include "api/rtp_parameters.h"
|
|
#include "api/scoped_refptr.h"
|
|
#include "api/task_queue/task_queue_base.h"
|
|
#include "api/video/video_adaptation_counters.h"
|
|
#include "api/video/video_frame.h"
|
|
#include "call/adaptation/adaptation_constraint.h"
|
|
#include "call/adaptation/encoder_settings.h"
|
|
#include "call/adaptation/video_source_restrictions.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class ResourceLimitationsListener {
|
|
public:
|
|
virtual ~ResourceLimitationsListener();
|
|
|
|
// 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) = 0;
|
|
};
|
|
|
|
// 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.
|
|
class ResourceAdaptationProcessorInterface {
|
|
public:
|
|
virtual ~ResourceAdaptationProcessorInterface();
|
|
|
|
virtual void AddResourceLimitationsListener(
|
|
ResourceLimitationsListener* limitations_listener) = 0;
|
|
virtual void RemoveResourceLimitationsListener(
|
|
ResourceLimitationsListener* limitations_listener) = 0;
|
|
// Starts or stops listening to resources, effectively enabling or disabling
|
|
// processing. May be called from anywhere.
|
|
// 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.
|
|
virtual void AddResource(rtc::scoped_refptr<Resource> resource) = 0;
|
|
virtual std::vector<rtc::scoped_refptr<Resource>> GetResources() const = 0;
|
|
virtual void RemoveResource(rtc::scoped_refptr<Resource> resource) = 0;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // CALL_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|