This squashes together several input signals that were spread out through several calls into a single method and calling place: SetEncoderSettings(), invoked from ReconfigureEncoder(). This is added to the abstract interface. This makes the following methods obsolete which are removed: - SetEncoder(): The VideoEncoder was only used for GetEncoderInfo(); the VideoEncoder::EncoderInfo is now part of the EncoderSettings. - SetEncoderConfig(): The VideoEncoderConfig is part of EncoderSettings. The config is used for its codec_type and content_type enums. - SetCodecMaxFrameRate(): The max frame rate was the same as VideoCodec::maxFramerate. VideoCodec is now part of EncoderSettings. There may be some overlap in information between EncoderConfig and VideoCodec, but that is outside the scope of this CL, which only makes sure to bundle encoder settings-like information into one input signal. Bug: webrtc:11222 Change-Id: I67c49c49c0a859cb7d5051939a461593c695a789 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/166602 Reviewed-by: Erik Språng <sprang@webrtc.org> Reviewed-by: Evan Shrubsole <eshr@google.com> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Commit-Queue: Henrik Boström <hbos@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30332}
96 lines
4.1 KiB
C++
96 lines
4.1 KiB
C++
/*
|
|
* Copyright 2019 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_MODULE_INTERFACE_H_
|
|
#define CALL_ADAPTATION_RESOURCE_ADAPTATION_MODULE_INTERFACE_H_
|
|
|
|
#include "api/rtp_parameters.h"
|
|
#include "api/video_codecs/video_encoder.h"
|
|
#include "api/video_codecs/video_encoder_config.h"
|
|
#include "call/adaptation/video_source_restrictions.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// Information about an encoder available when reconfiguring the encoder.
|
|
class EncoderSettings {
|
|
public:
|
|
EncoderSettings(VideoEncoder::EncoderInfo encoder_info,
|
|
VideoEncoderConfig encoder_config,
|
|
VideoCodec video_codec);
|
|
|
|
// Encoder capabilities, implementation info, etc.
|
|
const VideoEncoder::EncoderInfo& encoder_info() const;
|
|
// Configuration parameters, ultimately coming from the API and negotiation.
|
|
const VideoEncoderConfig& encoder_config() const;
|
|
// Lower level config, heavily based on the VideoEncoderConfig.
|
|
const VideoCodec& video_codec() const;
|
|
|
|
private:
|
|
VideoEncoder::EncoderInfo encoder_info_;
|
|
VideoEncoderConfig encoder_config_;
|
|
VideoCodec video_codec_;
|
|
};
|
|
|
|
// The listener is responsible for carrying out the reconfiguration of the video
|
|
// source such that the VideoSourceRestrictions are fulfilled.
|
|
class ResourceAdaptationModuleListener {
|
|
public:
|
|
virtual ~ResourceAdaptationModuleListener();
|
|
|
|
// TODO(hbos): When we support the muli-stream use case, the arguments need to
|
|
// specify which video stream's source needs to be reconfigured.
|
|
virtual void OnVideoSourceRestrictionsUpdated(
|
|
VideoSourceRestrictions restrictions) = 0;
|
|
};
|
|
|
|
// Responsible for reconfiguring encoded streams based on resource consumption,
|
|
// such as scaling down resolution or frame rate when CPU is overused. This
|
|
// interface is meant to be injectable into VideoStreamEncoder.
|
|
//
|
|
// [UNDER CONSTRUCTION] This interface is work-in-progress. In the future it
|
|
// needs to be able to handle all the necessary input and output for resource
|
|
// adaptation decision making.
|
|
//
|
|
// TODO(https://crbug.com/webrtc/11222): Make this interface feature-complete so
|
|
// that a module (such as OveruseFrameDetectorResourceAdaptationModule) is fully
|
|
// operational through this abstract interface.
|
|
class ResourceAdaptationModuleInterface {
|
|
public:
|
|
virtual ~ResourceAdaptationModuleInterface();
|
|
|
|
// TODO(hbos): When input/output of the module is adequetly handled by this
|
|
// interface, these methods need to say which stream to start/stop, enabling
|
|
// multi-stream aware implementations of ResourceAdaptationModuleInterface. We
|
|
// don't want to do this before we have the right interfaces (e.g. if we pass
|
|
// in a VideoStreamEncoder here directly then have a dependency on a different
|
|
// build target). For the multi-stream use case we may consider making
|
|
// ResourceAdaptationModuleInterface reference counted.
|
|
virtual void StartResourceAdaptation(
|
|
ResourceAdaptationModuleListener* adaptation_listener) = 0;
|
|
virtual void StopResourceAdaptation() = 0;
|
|
|
|
// The following methods are callable whether or not adaption is started.
|
|
|
|
// Informs the module whether we have input video. By default, the module must
|
|
// assume the value is false.
|
|
virtual void SetHasInputVideo(bool has_input_video) = 0;
|
|
virtual void SetDegradationPreference(
|
|
DegradationPreference degradation_preference) = 0;
|
|
virtual void SetEncoderSettings(EncoderSettings encoder_settings) = 0;
|
|
// Removes all restrictions; the module will need to adapt all over again.
|
|
// TODO(hbos): It's not clear why anybody should be able to tell the module to
|
|
// reset like this; can we get rid of this method?
|
|
virtual void ResetVideoSourceRestrictions() = 0;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // CALL_ADAPTATION_RESOURCE_ADAPTATION_MODULE_INTERFACE_H_
|