mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-16 23:30:48 +01:00

Currently if encoder initialization fails WebRTC doesn't send any video. This CL adds functionality that changes encoder type in such case and restores the video. If encoder selector is available we switch to encoder it recommends. Otherwise, VP8 is used as the default fallback encoder. Bug: webrtc:13572 Change-Id: Ifcdf707a575711f5ff81f9451caf30140c9171dc Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/246960 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35761}
60 lines
2.1 KiB
C++
60 lines
2.1 KiB
C++
/*
|
|
* Copyright (c) 2018 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_VIDEO_STREAM_ENCODER_SETTINGS_H_
|
|
#define API_VIDEO_VIDEO_STREAM_ENCODER_SETTINGS_H_
|
|
|
|
#include <string>
|
|
|
|
#include "api/video/video_bitrate_allocator_factory.h"
|
|
#include "api/video_codecs/video_encoder.h"
|
|
#include "api/video_codecs/video_encoder_factory.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class EncoderSwitchRequestCallback {
|
|
public:
|
|
virtual ~EncoderSwitchRequestCallback() {}
|
|
|
|
// Requests switch to next negotiated encoder.
|
|
virtual void RequestEncoderFallback() = 0;
|
|
|
|
// Requests switch to a specific encoder. If the encoder is not available and
|
|
// `allow_default_fallback` is `true` the default fallback is invoked.
|
|
virtual void RequestEncoderSwitch(const SdpVideoFormat& format,
|
|
bool allow_default_fallback) = 0;
|
|
};
|
|
|
|
struct VideoStreamEncoderSettings {
|
|
explicit VideoStreamEncoderSettings(
|
|
const VideoEncoder::Capabilities& capabilities)
|
|
: capabilities(capabilities) {}
|
|
|
|
// Enables the new method to estimate the cpu load from encoding, used for
|
|
// cpu adaptation.
|
|
bool experiment_cpu_load_estimator = false;
|
|
|
|
// Ownership stays with WebrtcVideoEngine (delegated from PeerConnection).
|
|
VideoEncoderFactory* encoder_factory = nullptr;
|
|
|
|
// Requests the WebRtcVideoChannel to perform a codec switch.
|
|
EncoderSwitchRequestCallback* encoder_switch_request_callback = nullptr;
|
|
|
|
// Ownership stays with WebrtcVideoEngine (delegated from PeerConnection).
|
|
VideoBitrateAllocatorFactory* bitrate_allocator_factory = nullptr;
|
|
|
|
// Negotiated capabilities which the VideoEncoder may expect the other
|
|
// side to use.
|
|
VideoEncoder::Capabilities capabilities;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // API_VIDEO_VIDEO_STREAM_ENCODER_SETTINGS_H_
|