Signal threads for faster receiver destruction.
Unblocks pending threads (render thread + decoder thread) when destroying renderers and shutting down decoders. Speeds up SetLocalDescription significantly (10x or so) under WebRtcVideoEngine2 but also shutdown times in ~ViEChannel and ~ViEReceiver in general. BUG=1788 R=mflodman@webrtc.org, stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/41959004 Cr-Commit-Position: refs/heads/master@{#8387} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8387 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -54,7 +54,6 @@ void VCMReceiver::Reset() {
|
||||
|
||||
int32_t VCMReceiver::Initialize() {
|
||||
Reset();
|
||||
CriticalSectionScoped cs(crit_sect_);
|
||||
return VCM_OK;
|
||||
}
|
||||
|
||||
@ -86,6 +85,11 @@ int32_t VCMReceiver::InsertPacket(const VCMPacket& packet,
|
||||
return VCM_OK;
|
||||
}
|
||||
|
||||
void VCMReceiver::TriggerDecoderShutdown() {
|
||||
jitter_buffer_.Stop();
|
||||
render_wait_event_->Set();
|
||||
}
|
||||
|
||||
VCMEncodedFrame* VCMReceiver::FrameForDecoding(uint16_t max_wait_time_ms,
|
||||
int64_t& next_render_time_ms,
|
||||
bool render_timing) {
|
||||
|
||||
@ -81,11 +81,13 @@ class VCMReceiver {
|
||||
|
||||
void RegisterStatsCallback(VCMReceiveStatisticsCallback* callback);
|
||||
|
||||
void TriggerDecoderShutdown();
|
||||
|
||||
private:
|
||||
static int32_t GenerateReceiverId();
|
||||
|
||||
CriticalSectionWrapper* crit_sect_;
|
||||
Clock* clock_;
|
||||
Clock* const clock_;
|
||||
VCMJitterBuffer jitter_buffer_;
|
||||
VCMTiming* timing_;
|
||||
scoped_ptr<EventWrapper> render_wait_event_;
|
||||
|
||||
@ -345,6 +345,10 @@ class VideoCodingModuleImpl : public VideoCodingModule {
|
||||
post_encode_callback_.Register(observer);
|
||||
}
|
||||
|
||||
void TriggerDecoderShutdown() override {
|
||||
receiver_->TriggerDecoderShutdown();
|
||||
}
|
||||
|
||||
private:
|
||||
EncodedImageCallbackWrapper post_encode_callback_;
|
||||
scoped_ptr<vcm::VideoSender> sender_;
|
||||
|
||||
@ -182,6 +182,7 @@ class VideoReceiver {
|
||||
int32_t Process();
|
||||
|
||||
void RegisterPreDecodeImageCallback(EncodedImageCallback* observer);
|
||||
void TriggerDecoderShutdown();
|
||||
|
||||
protected:
|
||||
int32_t Decode(const webrtc::VCMEncodedFrame& frame)
|
||||
|
||||
@ -335,6 +335,10 @@ int VideoReceiver::RegisterRenderBufferSizeCallback(
|
||||
return VCM_OK;
|
||||
}
|
||||
|
||||
void VideoReceiver::TriggerDecoderShutdown() {
|
||||
_receiver.TriggerDecoderShutdown();
|
||||
}
|
||||
|
||||
// Decode next frame, blocking.
|
||||
// Should be called as often as possible to get the most out of the decoder.
|
||||
int32_t VideoReceiver::Decode(uint16_t maxWaitTimeMs) {
|
||||
|
||||
Reference in New Issue
Block a user