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:
parent
c11348b5d7
commit
948d61724c
@ -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(),
|
||||
|
@ -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_);
|
||||
|
Loading…
x
Reference in New Issue
Block a user