Create a separate thread for pacing.

This CL moves the pacer out from the regular module process thread to
instead use one thread per pacer. This is to get better accuracy for the
paced packets and to avoid overusing the module process thread.

BUG=
TEST=existing tests
R=stefan@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/41839004

Cr-Commit-Position: refs/heads/master@{#8308}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8308 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
mflodman@webrtc.org 2015-02-10 08:58:16 +00:00
parent c11348b5d7
commit 948d61724c
2 changed files with 17 additions and 11 deletions

View File

@ -155,6 +155,7 @@ ViEEncoder::ViEEncoder(int32_t engine_id,
codec_observer_(NULL),
effect_filter_(NULL),
module_process_thread_(module_process_thread),
pacer_thread_(ProcessThread::Create()),
has_received_sli_(false),
picture_id_sli_(0),
has_received_rpsi_(false),
@ -189,8 +190,11 @@ bool ViEEncoder::Init() {
vpm_.EnableContentAnalysis(false);
if (module_process_thread_.RegisterModule(&vcm_) != 0 ||
module_process_thread_.RegisterModule(default_rtp_rtcp_.get()) != 0 ||
module_process_thread_.RegisterModule(paced_sender_.get()) != 0) {
module_process_thread_.RegisterModule(default_rtp_rtcp_.get()) != 0) {
return false;
}
if (pacer_thread_->RegisterModule(paced_sender_.get()) != 0 ||
pacer_thread_->Start() != 0) {
return false;
}
if (qm_callback_) {
@ -241,10 +245,11 @@ ViEEncoder::~ViEEncoder() {
if (bitrate_controller_) {
bitrate_controller_->RemoveBitrateObserver(bitrate_observer_.get());
}
pacer_thread_->Stop();
pacer_thread_->DeRegisterModule(paced_sender_.get());
module_process_thread_.DeRegisterModule(&vcm_);
module_process_thread_.DeRegisterModule(&vpm_);
module_process_thread_.DeRegisterModule(default_rtp_rtcp_.get());
module_process_thread_.DeRegisterModule(paced_sender_.get());
VideoCodingModule::Destroy(&vcm_);
VideoProcessingModule::Destroy(&vpm_);
delete qm_callback_;
@ -559,7 +564,7 @@ void ViEEncoder::DeliverFrame(int id,
if (effect_filter_) {
size_t length =
CalcBufferSize(kI420, video_frame->width(), video_frame->height());
scoped_ptr<uint8_t[]> video_buffer(new uint8_t[length]);
rtc::scoped_ptr<uint8_t[]> video_buffer(new uint8_t[length]);
ExtractBuffer(*video_frame, length, video_buffer.get());
effect_filter_->Transform(length,
video_buffer.get(),

View File

@ -15,13 +15,13 @@
#include <map>
#include <vector>
#include "webrtc/base/scoped_ptr.h"
#include "webrtc/base/thread_annotations.h"
#include "webrtc/common_types.h"
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
#include "webrtc/modules/video_coding/main/interface/video_coding_defines.h"
#include "webrtc/modules/video_processing/main/interface/video_processing.h"
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
#include "webrtc/typedefs.h"
#include "webrtc/frame_callback.h"
#include "webrtc/video_engine/vie_defines.h"
@ -205,13 +205,13 @@ class ViEEncoder
VideoCodingModule& vcm_;
VideoProcessingModule& vpm_;
scoped_ptr<RtpRtcp> default_rtp_rtcp_;
rtc::scoped_ptr<RtpRtcp> default_rtp_rtcp_;
PayloadRouter* send_payload_router_;
scoped_ptr<CriticalSectionWrapper> callback_cs_;
scoped_ptr<CriticalSectionWrapper> data_cs_;
scoped_ptr<BitrateObserver> bitrate_observer_;
scoped_ptr<PacedSender> paced_sender_;
scoped_ptr<ViEPacedSenderCallback> pacing_callback_;
rtc::scoped_ptr<CriticalSectionWrapper> callback_cs_;
rtc::scoped_ptr<CriticalSectionWrapper> data_cs_;
rtc::scoped_ptr<BitrateObserver> bitrate_observer_;
rtc::scoped_ptr<PacedSender> paced_sender_;
rtc::scoped_ptr<ViEPacedSenderCallback> pacing_callback_;
BitrateController* bitrate_controller_;
@ -231,6 +231,7 @@ class ViEEncoder
ViEEncoderObserver* codec_observer_ GUARDED_BY(callback_cs_);
ViEEffectFilter* effect_filter_ GUARDED_BY(callback_cs_);
ProcessThread& module_process_thread_;
rtc::scoped_ptr<ProcessThread> pacer_thread_;
bool has_received_sli_ GUARDED_BY(data_cs_);
uint8_t picture_id_sli_ GUARDED_BY(data_cs_);