| Index: webrtc/modules/video_coding/main/source/generic_encoder.cc
|
| diff --git a/webrtc/modules/video_coding/main/source/generic_encoder.cc b/webrtc/modules/video_coding/main/source/generic_encoder.cc
|
| index dbb1c17ff9e671425c3e69d0b5b94aa318f579ce..e3ae0dd44b4da377a1a854d7d45a1ad237e67c8e 100644
|
| --- a/webrtc/modules/video_coding/main/source/generic_encoder.cc
|
| +++ b/webrtc/modules/video_coding/main/source/generic_encoder.cc
|
| @@ -94,12 +94,10 @@ VCMGenericEncoder::VCMGenericEncoder(VideoEncoder* encoder,
|
| : encoder_(encoder),
|
| rate_observer_(rate_observer),
|
| vcm_encoded_frame_callback_(nullptr),
|
| - bit_rate_(0),
|
| - frame_rate_(0),
|
| + encoder_params_({0, 0, 0, 0}),
|
| internal_source_(internalSource),
|
| rotation_(kVideoRotation_0),
|
| - is_screenshare_(false) {
|
| -}
|
| + is_screenshare_(false) {}
|
|
|
| VCMGenericEncoder::~VCMGenericEncoder()
|
| {
|
| @@ -108,9 +106,8 @@ VCMGenericEncoder::~VCMGenericEncoder()
|
| int32_t VCMGenericEncoder::Release()
|
| {
|
| {
|
| - rtc::CritScope lock(&rates_lock_);
|
| - bit_rate_ = 0;
|
| - frame_rate_ = 0;
|
| + rtc::CritScope lock(¶ms_lock_);
|
| + encoder_params_ = {0, 0, 0, 0};
|
| vcm_encoded_frame_callback_ = nullptr;
|
| }
|
|
|
| @@ -123,9 +120,9 @@ VCMGenericEncoder::InitEncode(const VideoCodec* settings,
|
| size_t maxPayloadSize)
|
| {
|
| {
|
| - rtc::CritScope lock(&rates_lock_);
|
| - bit_rate_ = settings->startBitrate * 1000;
|
| - frame_rate_ = settings->maxFramerate;
|
| + rtc::CritScope lock(¶ms_lock_);
|
| + encoder_params_.target_bitrate = settings->startBitrate * 1000;
|
| + encoder_params_.input_frame_rate = settings->maxFramerate;
|
| }
|
|
|
| is_screenshare_ = settings->mode == VideoCodecMode::kScreensharing;
|
| @@ -162,54 +159,34 @@ int32_t VCMGenericEncoder::Encode(const VideoFrame& inputFrame,
|
| return result;
|
| }
|
|
|
| -int32_t
|
| -VCMGenericEncoder::SetChannelParameters(int32_t packetLoss, int64_t rtt)
|
| -{
|
| - return encoder_->SetChannelParameters(packetLoss, rtt);
|
| -}
|
| -
|
| -int32_t
|
| -VCMGenericEncoder::SetRates(uint32_t newBitRate, uint32_t frameRate)
|
| -{
|
| - uint32_t target_bitrate_kbps = (newBitRate + 500) / 1000;
|
| - int32_t ret = encoder_->SetRates(target_bitrate_kbps, frameRate);
|
| - if (ret < 0)
|
| - {
|
| - return ret;
|
| - }
|
| -
|
| - {
|
| - rtc::CritScope lock(&rates_lock_);
|
| - bit_rate_ = newBitRate;
|
| - frame_rate_ = frameRate;
|
| - }
|
| -
|
| - if (rate_observer_ != nullptr)
|
| - rate_observer_->OnSetRates(newBitRate, frameRate);
|
| - return VCM_OK;
|
| -}
|
| -
|
| -int32_t
|
| -VCMGenericEncoder::CodecConfigParameters(uint8_t* buffer, int32_t size)
|
| -{
|
| - int32_t ret = encoder_->CodecConfigParameters(buffer, size);
|
| - if (ret < 0)
|
| - {
|
| - return ret;
|
| +void VCMGenericEncoder::SetEncoderParameters(const EncoderParameters& params) {
|
| + bool channel_parameters_have_changed;
|
| + bool rates_have_changed;
|
| + {
|
| + rtc::CritScope lock(¶ms_lock_);
|
| + channel_parameters_have_changed =
|
| + params.loss_rate != encoder_params_.loss_rate ||
|
| + params.rtt != encoder_params_.rtt;
|
| + rates_have_changed =
|
| + params.target_bitrate != encoder_params_.target_bitrate ||
|
| + params.input_frame_rate != encoder_params_.input_frame_rate;
|
| + encoder_params_ = params;
|
| + }
|
| + if (channel_parameters_have_changed)
|
| + encoder_->SetChannelParameters(params.loss_rate, params.rtt);
|
| + if (rates_have_changed) {
|
| + uint32_t target_bitrate_kbps = (params.target_bitrate + 500) / 1000;
|
| + encoder_->SetRates(target_bitrate_kbps, params.input_frame_rate);
|
| + if (rate_observer_ != nullptr) {
|
| + rate_observer_->OnSetRates(params.target_bitrate,
|
| + params.input_frame_rate);
|
| }
|
| - return ret;
|
| -}
|
| -
|
| -uint32_t VCMGenericEncoder::BitRate() const
|
| -{
|
| - rtc::CritScope lock(&rates_lock_);
|
| - return bit_rate_;
|
| + }
|
| }
|
|
|
| -uint32_t VCMGenericEncoder::FrameRate() const
|
| -{
|
| - rtc::CritScope lock(&rates_lock_);
|
| - return frame_rate_;
|
| +EncoderParameters VCMGenericEncoder::GetEncoderParameters() const {
|
| + rtc::CritScope lock(¶ms_lock_);
|
| + return encoder_params_;
|
| }
|
|
|
| int32_t
|
|
|