xref: /aosp_15_r20/external/webrtc/media/engine/encoder_simulcast_proxy.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #include "media/engine/encoder_simulcast_proxy.h"
12*d9f75844SAndroid Build Coastguard Worker 
13*d9f75844SAndroid Build Coastguard Worker #include "api/video_codecs/video_encoder.h"
14*d9f75844SAndroid Build Coastguard Worker #include "media/engine/simulcast_encoder_adapter.h"
15*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/include/video_error_codes.h"
16*d9f75844SAndroid Build Coastguard Worker 
17*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
18*d9f75844SAndroid Build Coastguard Worker 
EncoderSimulcastProxy(VideoEncoderFactory * factory,const SdpVideoFormat & format)19*d9f75844SAndroid Build Coastguard Worker EncoderSimulcastProxy::EncoderSimulcastProxy(VideoEncoderFactory* factory,
20*d9f75844SAndroid Build Coastguard Worker                                              const SdpVideoFormat& format)
21*d9f75844SAndroid Build Coastguard Worker     : factory_(factory), video_format_(format), callback_(nullptr) {
22*d9f75844SAndroid Build Coastguard Worker   encoder_ = factory_->CreateVideoEncoder(format);
23*d9f75844SAndroid Build Coastguard Worker }
24*d9f75844SAndroid Build Coastguard Worker 
25*d9f75844SAndroid Build Coastguard Worker EncoderSimulcastProxy::~EncoderSimulcastProxy() = default;
26*d9f75844SAndroid Build Coastguard Worker 
Release()27*d9f75844SAndroid Build Coastguard Worker int EncoderSimulcastProxy::Release() {
28*d9f75844SAndroid Build Coastguard Worker   return encoder_->Release();
29*d9f75844SAndroid Build Coastguard Worker }
30*d9f75844SAndroid Build Coastguard Worker 
SetFecControllerOverride(FecControllerOverride * fec_controller_override)31*d9f75844SAndroid Build Coastguard Worker void EncoderSimulcastProxy::SetFecControllerOverride(
32*d9f75844SAndroid Build Coastguard Worker     FecControllerOverride* fec_controller_override) {
33*d9f75844SAndroid Build Coastguard Worker   encoder_->SetFecControllerOverride(fec_controller_override);
34*d9f75844SAndroid Build Coastguard Worker }
35*d9f75844SAndroid Build Coastguard Worker 
36*d9f75844SAndroid Build Coastguard Worker // TODO(eladalon): s/inst/codec_settings/g.
InitEncode(const VideoCodec * inst,const VideoEncoder::Settings & settings)37*d9f75844SAndroid Build Coastguard Worker int EncoderSimulcastProxy::InitEncode(const VideoCodec* inst,
38*d9f75844SAndroid Build Coastguard Worker                                       const VideoEncoder::Settings& settings) {
39*d9f75844SAndroid Build Coastguard Worker   int ret = encoder_->InitEncode(inst, settings);
40*d9f75844SAndroid Build Coastguard Worker   if (ret == WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED) {
41*d9f75844SAndroid Build Coastguard Worker     encoder_.reset(new SimulcastEncoderAdapter(factory_, video_format_));
42*d9f75844SAndroid Build Coastguard Worker     if (callback_) {
43*d9f75844SAndroid Build Coastguard Worker       encoder_->RegisterEncodeCompleteCallback(callback_);
44*d9f75844SAndroid Build Coastguard Worker     }
45*d9f75844SAndroid Build Coastguard Worker     ret = encoder_->InitEncode(inst, settings);
46*d9f75844SAndroid Build Coastguard Worker   }
47*d9f75844SAndroid Build Coastguard Worker   return ret;
48*d9f75844SAndroid Build Coastguard Worker }
49*d9f75844SAndroid Build Coastguard Worker 
Encode(const VideoFrame & input_image,const std::vector<VideoFrameType> * frame_types)50*d9f75844SAndroid Build Coastguard Worker int EncoderSimulcastProxy::Encode(
51*d9f75844SAndroid Build Coastguard Worker     const VideoFrame& input_image,
52*d9f75844SAndroid Build Coastguard Worker     const std::vector<VideoFrameType>* frame_types) {
53*d9f75844SAndroid Build Coastguard Worker   return encoder_->Encode(input_image, frame_types);
54*d9f75844SAndroid Build Coastguard Worker }
55*d9f75844SAndroid Build Coastguard Worker 
RegisterEncodeCompleteCallback(EncodedImageCallback * callback)56*d9f75844SAndroid Build Coastguard Worker int EncoderSimulcastProxy::RegisterEncodeCompleteCallback(
57*d9f75844SAndroid Build Coastguard Worker     EncodedImageCallback* callback) {
58*d9f75844SAndroid Build Coastguard Worker   callback_ = callback;
59*d9f75844SAndroid Build Coastguard Worker   return encoder_->RegisterEncodeCompleteCallback(callback);
60*d9f75844SAndroid Build Coastguard Worker }
61*d9f75844SAndroid Build Coastguard Worker 
SetRates(const RateControlParameters & parameters)62*d9f75844SAndroid Build Coastguard Worker void EncoderSimulcastProxy::SetRates(const RateControlParameters& parameters) {
63*d9f75844SAndroid Build Coastguard Worker   encoder_->SetRates(parameters);
64*d9f75844SAndroid Build Coastguard Worker }
65*d9f75844SAndroid Build Coastguard Worker 
OnPacketLossRateUpdate(float packet_loss_rate)66*d9f75844SAndroid Build Coastguard Worker void EncoderSimulcastProxy::OnPacketLossRateUpdate(float packet_loss_rate) {
67*d9f75844SAndroid Build Coastguard Worker   encoder_->OnPacketLossRateUpdate(packet_loss_rate);
68*d9f75844SAndroid Build Coastguard Worker }
69*d9f75844SAndroid Build Coastguard Worker 
OnRttUpdate(int64_t rtt_ms)70*d9f75844SAndroid Build Coastguard Worker void EncoderSimulcastProxy::OnRttUpdate(int64_t rtt_ms) {
71*d9f75844SAndroid Build Coastguard Worker   encoder_->OnRttUpdate(rtt_ms);
72*d9f75844SAndroid Build Coastguard Worker }
73*d9f75844SAndroid Build Coastguard Worker 
OnLossNotification(const LossNotification & loss_notification)74*d9f75844SAndroid Build Coastguard Worker void EncoderSimulcastProxy::OnLossNotification(
75*d9f75844SAndroid Build Coastguard Worker     const LossNotification& loss_notification) {
76*d9f75844SAndroid Build Coastguard Worker   encoder_->OnLossNotification(loss_notification);
77*d9f75844SAndroid Build Coastguard Worker }
78*d9f75844SAndroid Build Coastguard Worker 
GetEncoderInfo() const79*d9f75844SAndroid Build Coastguard Worker VideoEncoder::EncoderInfo EncoderSimulcastProxy::GetEncoderInfo() const {
80*d9f75844SAndroid Build Coastguard Worker   return encoder_->GetEncoderInfo();
81*d9f75844SAndroid Build Coastguard Worker }
82*d9f75844SAndroid Build Coastguard Worker 
83*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
84