| Index: webrtc/modules/video_coding/main/source/video_sender.cc
|
| diff --git a/webrtc/modules/video_coding/main/source/video_sender.cc b/webrtc/modules/video_coding/main/source/video_sender.cc
|
| index 8694f5c84efcfc8457100de2bb8857120d2e11d1..fd5cb1e0305e1218510e3fcfe7a2ff7987ff1d5c 100644
|
| --- a/webrtc/modules/video_coding/main/source/video_sender.cc
|
| +++ b/webrtc/modules/video_coding/main/source/video_sender.cc
|
| @@ -30,7 +30,6 @@ VideoSender::VideoSender(Clock* clock,
|
| VCMQMSettingsCallback* qm_settings_callback)
|
| : clock_(clock),
|
| process_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
|
| - _sendCritSect(CriticalSectionWrapper::CreateCriticalSection()),
|
| _encoder(nullptr),
|
| _encodedFrameCallback(post_encode_callback),
|
| _nextFrameTypes(1, kVideoFrameDelta),
|
| @@ -51,9 +50,7 @@ VideoSender::VideoSender(Clock* clock,
|
| main_thread_.DetachFromThread();
|
| }
|
|
|
| -VideoSender::~VideoSender() {
|
| - delete _sendCritSect;
|
| -}
|
| +VideoSender::~VideoSender() {}
|
|
|
| int32_t VideoSender::Process() {
|
| int32_t returnValue = VCM_OK;
|
| @@ -88,7 +85,7 @@ int32_t VideoSender::RegisterSendCodec(const VideoCodec* sendCodec,
|
| uint32_t numberOfCores,
|
| uint32_t maxPayloadSize) {
|
| DCHECK(main_thread_.CalledOnValidThread());
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| if (sendCodec == nullptr) {
|
| return VCM_PARAMETER_ERROR;
|
| }
|
| @@ -141,7 +138,7 @@ const VideoCodec& VideoSender::GetSendCodec() const {
|
| }
|
|
|
| int32_t VideoSender::SendCodecBlocking(VideoCodec* currentSendCodec) const {
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| if (currentSendCodec == nullptr) {
|
| return VCM_PARAMETER_ERROR;
|
| }
|
| @@ -149,7 +146,7 @@ int32_t VideoSender::SendCodecBlocking(VideoCodec* currentSendCodec) const {
|
| }
|
|
|
| VideoCodecType VideoSender::SendCodecBlocking() const {
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| return _codecDataBase.SendCodec();
|
| }
|
|
|
| @@ -160,7 +157,7 @@ int32_t VideoSender::RegisterExternalEncoder(VideoEncoder* externalEncoder,
|
| bool internalSource /*= false*/) {
|
| DCHECK(main_thread_.CalledOnValidThread());
|
|
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
|
|
| if (externalEncoder == nullptr) {
|
| bool wasSendCodec = false;
|
| @@ -180,7 +177,7 @@ int32_t VideoSender::RegisterExternalEncoder(VideoEncoder* externalEncoder,
|
| // Get codec config parameters
|
| int32_t VideoSender::CodecConfigParameters(uint8_t* buffer,
|
| int32_t size) const {
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| if (_encoder != nullptr) {
|
| return _encoder->CodecConfigParameters(buffer, size);
|
| }
|
| @@ -238,37 +235,24 @@ int32_t VideoSender::SetChannelParameters(uint32_t target_bitrate,
|
| return VCM_OK;
|
| }
|
|
|
| -int32_t VideoSender::UpdateEncoderParameters() {
|
| - EncoderParameters params;
|
| - {
|
| - rtc::CritScope cs(¶ms_lock_);
|
| - params = encoder_params_;
|
| - encoder_params_.updated = false;
|
| - }
|
| -
|
| +void VideoSender::SetEncoderParameters(EncoderParameters params) {
|
| if (!params.updated || params.target_bitrate == 0)
|
| - return VCM_OK;
|
| -
|
| - CriticalSectionScoped sendCs(_sendCritSect);
|
| - int32_t ret = VCM_UNINITIALIZED;
|
| - static_assert(VCM_UNINITIALIZED < 0, "VCM_UNINITIALIZED must be negative.");
|
| + return;
|
|
|
| if (params.input_frame_rate == 0) {
|
| // No frame rate estimate available, use default.
|
| params.input_frame_rate = current_codec_.maxFramerate;
|
| }
|
| if (_encoder != nullptr) {
|
| - ret = _encoder->SetChannelParameters(params.loss_rate, params.rtt);
|
| - if (ret >= 0) {
|
| - ret = _encoder->SetRates(params.target_bitrate, params.input_frame_rate);
|
| - }
|
| + _encoder->SetChannelParameters(params.loss_rate, params.rtt);
|
| + _encoder->SetRates(params.target_bitrate, params.input_frame_rate);
|
| }
|
| - return ret;
|
| + return;
|
| }
|
|
|
| int32_t VideoSender::RegisterTransportCallback(
|
| VCMPacketizationCallback* transport) {
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| _encodedFrameCallback.SetMediaOpt(&_mediaOpt);
|
| _encodedFrameCallback.SetTransportCallback(transport);
|
| return VCM_OK;
|
| @@ -297,7 +281,7 @@ int32_t VideoSender::RegisterProtectionCallback(
|
|
|
| // Enable or disable a video protection method.
|
| void VideoSender::SetVideoProtection(VCMVideoProtection videoProtection) {
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| switch (videoProtection) {
|
| case kProtectionNone:
|
| _mediaOpt.SetProtectionMethod(media_optimization::kNone);
|
| @@ -317,8 +301,14 @@ void VideoSender::SetVideoProtection(VCMVideoProtection videoProtection) {
|
| int32_t VideoSender::AddVideoFrame(const VideoFrame& videoFrame,
|
| const VideoContentMetrics* contentMetrics,
|
| const CodecSpecificInfo* codecSpecificInfo) {
|
| - UpdateEncoderParameters();
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + EncoderParameters encoder_params;
|
| + {
|
| + rtc::CritScope lock(¶ms_lock_);
|
| + encoder_params = encoder_params_;
|
| + encoder_params_.updated = false;
|
| + }
|
| + rtc::CritScope lock(&send_crit_);
|
| + SetEncoderParameters(encoder_params);
|
| if (_encoder == nullptr) {
|
| return VCM_UNINITIALIZED;
|
| }
|
| @@ -362,7 +352,7 @@ int32_t VideoSender::AddVideoFrame(const VideoFrame& videoFrame,
|
| }
|
|
|
| int32_t VideoSender::IntraFrameRequest(int stream_index) {
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| if (stream_index < 0 ||
|
| static_cast<unsigned int>(stream_index) >= _nextFrameTypes.size()) {
|
| return -1;
|
| @@ -379,7 +369,7 @@ int32_t VideoSender::IntraFrameRequest(int stream_index) {
|
| }
|
|
|
| int32_t VideoSender::EnableFrameDropper(bool enable) {
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| frame_dropper_enabled_ = enable;
|
| _mediaOpt.EnableFrameDropper(enable);
|
| return VCM_OK;
|
| @@ -400,7 +390,7 @@ void VideoSender::SuspendBelowMinBitrate() {
|
| }
|
|
|
| bool VideoSender::VideoSuspended() const {
|
| - CriticalSectionScoped cs(_sendCritSect);
|
| + rtc::CritScope lock(&send_crit_);
|
| return _mediaOpt.IsVideoSuspended();
|
| }
|
| } // namespace vcm
|
|
|