webrtc_m130/media/engine/encoder_simulcast_proxy.cc
Elad Alon fb20afd38c Pass notifications of RTT, PLR and LossNotification RTCP through EncoderSimulcastProxy
LibvpxVp8Encoder is held by EncoderSimulcastProxy. Make EncoderSimulcastProxy
pass on notifications of RTT, PLR and LossNotification RTCP messages
onwards to the encoder it holds.

Bug: webrtc:10501
Change-Id: Id6c9a0a9fe09a0868e28c5d7ff94d4a71f3d6332
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/132221
Commit-Queue: Elad Alon <eladalon@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27546}
2019-04-10 16:12:57 +00:00

82 lines
2.7 KiB
C++

/*
* Copyright (c) 2017 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.
*/
#include "media/engine/encoder_simulcast_proxy.h"
#include "media/engine/simulcast_encoder_adapter.h"
#include "modules/video_coding/include/video_error_codes.h"
namespace webrtc {
EncoderSimulcastProxy::EncoderSimulcastProxy(VideoEncoderFactory* factory,
const SdpVideoFormat& format)
: factory_(factory), video_format_(format), callback_(nullptr) {
encoder_ = factory_->CreateVideoEncoder(format);
}
EncoderSimulcastProxy::EncoderSimulcastProxy(VideoEncoderFactory* factory)
: EncoderSimulcastProxy(factory, SdpVideoFormat("VP8")) {}
EncoderSimulcastProxy::~EncoderSimulcastProxy() {}
int EncoderSimulcastProxy::Release() {
return encoder_->Release();
}
int EncoderSimulcastProxy::InitEncode(const VideoCodec* inst,
int number_of_cores,
size_t max_payload_size) {
int ret = encoder_->InitEncode(inst, number_of_cores, max_payload_size);
if (ret == WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED) {
encoder_.reset(new SimulcastEncoderAdapter(factory_, video_format_));
if (callback_) {
encoder_->RegisterEncodeCompleteCallback(callback_);
}
ret = encoder_->InitEncode(inst, number_of_cores, max_payload_size);
}
return ret;
}
int EncoderSimulcastProxy::Encode(
const VideoFrame& input_image,
const std::vector<VideoFrameType>* frame_types) {
return encoder_->Encode(input_image, frame_types);
}
int EncoderSimulcastProxy::RegisterEncodeCompleteCallback(
EncodedImageCallback* callback) {
callback_ = callback;
return encoder_->RegisterEncodeCompleteCallback(callback);
}
int EncoderSimulcastProxy::SetRateAllocation(
const VideoBitrateAllocation& bitrate,
uint32_t new_framerate) {
return encoder_->SetRateAllocation(bitrate, new_framerate);
}
void EncoderSimulcastProxy::OnPacketLossRateUpdate(float packet_loss_rate) {
return encoder_->OnPacketLossRateUpdate(packet_loss_rate);
}
void EncoderSimulcastProxy::OnRttUpdate(int64_t rtt_ms) {
return encoder_->OnRttUpdate(rtt_ms);
}
void EncoderSimulcastProxy::OnLossNotification(
const LossNotification& loss_notification) {
encoder_->OnLossNotification(loss_notification);
}
VideoEncoder::EncoderInfo EncoderSimulcastProxy::GetEncoderInfo() const {
return encoder_->GetEncoderInfo();
}
} // namespace webrtc