| Index: webrtc/video_engine/vie_encoder.cc
|
| diff --git a/webrtc/video_engine/vie_encoder.cc b/webrtc/video_engine/vie_encoder.cc
|
| index f73f0606bcf08a775db71ae83eff8e718dcc8608..cc4783f55bc4c0e20b34fefbe2ae5c289b1ad1ed 100644
|
| --- a/webrtc/video_engine/vie_encoder.cc
|
| +++ b/webrtc/video_engine/vie_encoder.cc
|
| @@ -104,7 +104,9 @@ class ViEBitrateObserver : public BitrateObserver {
|
|
|
| ViEEncoder::ViEEncoder(int32_t channel_id,
|
| uint32_t number_of_cores,
|
| - ProcessThread& module_process_thread,
|
| + ProcessThread* module_process_thread,
|
| + SendStatisticsProxy* stats_proxy,
|
| + I420FrameCallback* pre_encode_callback,
|
| PacedSender* pacer,
|
| BitrateAllocator* bitrate_allocator)
|
| : channel_id_(channel_id),
|
| @@ -115,8 +117,9 @@ ViEEncoder::ViEEncoder(int32_t channel_id,
|
| this,
|
| qm_callback_.get())),
|
| send_payload_router_(NULL),
|
| - callback_cs_(CriticalSectionWrapper::CreateCriticalSection()),
|
| data_cs_(CriticalSectionWrapper::CreateCriticalSection()),
|
| + stats_proxy_(stats_proxy),
|
| + pre_encode_callback_(pre_encode_callback),
|
| pacer_(pacer),
|
| bitrate_allocator_(bitrate_allocator),
|
| time_of_last_frame_activity_ms_(0),
|
| @@ -129,16 +132,13 @@ ViEEncoder::ViEEncoder(int32_t channel_id,
|
| encoder_paused_and_dropped_frame_(false),
|
| fec_enabled_(false),
|
| nack_enabled_(false),
|
| - codec_observer_(NULL),
|
| module_process_thread_(module_process_thread),
|
| has_received_sli_(false),
|
| picture_id_sli_(0),
|
| has_received_rpsi_(false),
|
| picture_id_rpsi_(0),
|
| video_suspended_(false),
|
| - pre_encode_callback_(NULL),
|
| - start_ms_(Clock::GetRealTimeClock()->TimeInMilliseconds()),
|
| - send_statistics_proxy_(NULL) {
|
| + start_ms_(Clock::GetRealTimeClock()->TimeInMilliseconds()) {
|
| bitrate_observer_.reset(new ViEBitrateObserver(this));
|
| }
|
|
|
| @@ -164,14 +164,14 @@ void ViEEncoder::StartThreadsAndSetSharedMembers(
|
|
|
| send_payload_router_ = send_payload_router;
|
| vcm_->RegisterProtectionCallback(vcm_protection_callback);
|
| - module_process_thread_.RegisterModule(vcm_.get());
|
| + module_process_thread_->RegisterModule(vcm_.get());
|
| }
|
|
|
| void ViEEncoder::StopThreadsAndRemoveSharedMembers() {
|
| if (bitrate_allocator_)
|
| bitrate_allocator_->RemoveBitrateObserver(bitrate_observer_.get());
|
| - module_process_thread_.DeRegisterModule(vcm_.get());
|
| - module_process_thread_.DeRegisterModule(vpm_.get());
|
| + module_process_thread_->DeRegisterModule(vcm_.get());
|
| + module_process_thread_->DeRegisterModule(vpm_.get());
|
| }
|
|
|
| ViEEncoder::~ViEEncoder() {
|
| @@ -449,16 +449,13 @@ void ViEEncoder::DeliverFrame(VideoFrame video_frame) {
|
| // If we haven't resampled the frame and we have a FrameCallback, we need to
|
| // make a deep copy of |video_frame|.
|
| VideoFrame copied_frame;
|
| - {
|
| - CriticalSectionScoped cs(callback_cs_.get());
|
| - if (pre_encode_callback_) {
|
| - // If the frame was not resampled or scaled => use copy of original.
|
| - if (decimated_frame == NULL) {
|
| - copied_frame.CopyFrame(video_frame);
|
| - decimated_frame = &copied_frame;
|
| - }
|
| - pre_encode_callback_->FrameCallback(decimated_frame);
|
| + if (pre_encode_callback_) {
|
| + // If the frame was not resampled or scaled => use copy of original.
|
| + if (decimated_frame == NULL) {
|
| + copied_frame.CopyFrame(video_frame);
|
| + decimated_frame = &copied_frame;
|
| }
|
| + pre_encode_callback_->FrameCallback(decimated_frame);
|
| }
|
|
|
| // If the frame was not resampled, scaled, or touched by FrameCallback => use
|
| @@ -577,9 +574,8 @@ void ViEEncoder::SetSenderBufferingMode(int target_delay_ms) {
|
| }
|
|
|
| void ViEEncoder::OnSetRates(uint32_t bitrate_bps, int framerate) {
|
| - CriticalSectionScoped cs(callback_cs_.get());
|
| - if (send_statistics_proxy_ != nullptr)
|
| - send_statistics_proxy_->OnSetRates(bitrate_bps, framerate);
|
| + if (stats_proxy_)
|
| + stats_proxy_->OnSetRates(bitrate_bps, framerate);
|
| }
|
|
|
| int32_t ViEEncoder::SendData(
|
| @@ -594,11 +590,8 @@ int32_t ViEEncoder::SendData(
|
| time_of_last_frame_activity_ms_ = TickTime::MillisecondTimestamp();
|
| }
|
|
|
| - {
|
| - CriticalSectionScoped cs(callback_cs_.get());
|
| - if (send_statistics_proxy_ != NULL)
|
| - send_statistics_proxy_->OnSendEncodedImage(encoded_image, rtp_video_hdr);
|
| - }
|
| + if (stats_proxy_ != NULL)
|
| + stats_proxy_->OnSendEncodedImage(encoded_image, rtp_video_hdr);
|
|
|
| return send_payload_router_->RoutePayload(
|
| VCMEncodedFrame::ConvertFrameType(encoded_image._frameType), payload_type,
|
| @@ -609,20 +602,8 @@ int32_t ViEEncoder::SendData(
|
|
|
| int32_t ViEEncoder::SendStatistics(const uint32_t bit_rate,
|
| const uint32_t frame_rate) {
|
| - CriticalSectionScoped cs(callback_cs_.get());
|
| - if (codec_observer_) {
|
| - codec_observer_->OutgoingRate(channel_id_, frame_rate, bit_rate);
|
| - }
|
| - return 0;
|
| -}
|
| -
|
| -int32_t ViEEncoder::RegisterCodecObserver(ViEEncoderObserver* observer) {
|
| - CriticalSectionScoped cs(callback_cs_.get());
|
| - if (observer && codec_observer_) {
|
| - LOG_F(LS_ERROR) << "Observer already set.";
|
| - return -1;
|
| - }
|
| - codec_observer_ = observer;
|
| + if (stats_proxy_)
|
| + stats_proxy_->OnOutgoingRate(frame_rate, bit_rate);
|
| return 0;
|
| }
|
|
|
| @@ -743,14 +724,12 @@ void ViEEncoder::OnNetworkChanged(uint32_t bitrate_bps,
|
| if (video_suspended_ == video_is_suspended)
|
| return;
|
| video_suspended_ = video_is_suspended;
|
| - }
|
| - // Video suspend-state changed, inform codec observer.
|
| - CriticalSectionScoped crit(callback_cs_.get());
|
| - if (codec_observer_) {
|
| LOG(LS_INFO) << "Video suspended " << video_is_suspended
|
| << " for channel " << channel_id_;
|
| - codec_observer_->SuspendChange(channel_id_, video_is_suspended);
|
| }
|
| + // Video suspend-state changed, inform codec observer.
|
| + if (stats_proxy_)
|
| + stats_proxy_->OnSuspendChange(video_is_suspended);
|
| }
|
|
|
| void ViEEncoder::SuspendBelowMinBitrate() {
|
| @@ -758,23 +737,11 @@ void ViEEncoder::SuspendBelowMinBitrate() {
|
| bitrate_allocator_->EnforceMinBitrate(false);
|
| }
|
|
|
| -void ViEEncoder::RegisterPreEncodeCallback(
|
| - I420FrameCallback* pre_encode_callback) {
|
| - CriticalSectionScoped cs(callback_cs_.get());
|
| - pre_encode_callback_ = pre_encode_callback;
|
| -}
|
| -
|
| void ViEEncoder::RegisterPostEncodeImageCallback(
|
| EncodedImageCallback* post_encode_callback) {
|
| vcm_->RegisterPostEncodeImageCallback(post_encode_callback);
|
| }
|
|
|
| -void ViEEncoder::RegisterSendStatisticsProxy(
|
| - SendStatisticsProxy* send_statistics_proxy) {
|
| - CriticalSectionScoped cs(callback_cs_.get());
|
| - send_statistics_proxy_ = send_statistics_proxy;
|
| -}
|
| -
|
| QMVideoSettingsCallback::QMVideoSettingsCallback(VideoProcessingModule* vpm)
|
| : vpm_(vpm) {
|
| }
|
|
|