Adds ChannelSend specific encoder task queue.
Before this change the encoder tasks runs on a shared worker queue. That makes the destruction require synchronization to avoid races. By keeping a separate encode queue to ChannelSend, we can safely destruct the object without worrying for left over tasks, as they will be stopped when the task queue is destroyed. For TaskQueue implementations using one thread per TaskQueue this will increase the thread count by the number of AudioSendStreams, which typically is just one. This is partly a reland of 9b9344742b186b14d87e827e71a1757f4c94b30e Original change's description: > Removes lock from ChannelSend. > > The lock isn't really needed as encoder_queue_is_active_ can be checked > on the task queue to provide synchronization. > > There is one behavioral change due to this: We will not cancel any currently > pending encoding tasks when we stop sending, they will be allowed to finish. > > Bug: webrtc:10365 > Change-Id: I2b4897dde8d49bc7ee5d2d69694616aee8aaea38 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/125096 > Reviewed-by: Oskar Sundbom <ossu@webrtc.org> > Commit-Queue: Sebastian Jansson <srte@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#26963} Bug: webrtc:10365 Change-Id: Iafb84e25d90ec8639359be80fad65763d08e5719 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/125740 Reviewed-by: Oskar Sundbom <ossu@webrtc.org> Commit-Queue: Sebastian Jansson <srte@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27038}
This commit is contained in:

committed by
Commit Bot

parent
e01857cca4
commit
44dd9f29c7
@ -666,10 +666,11 @@ webrtc::AudioSendStream* Call::CreateAudioSendStream(
|
||||
}
|
||||
}
|
||||
|
||||
AudioSendStream* send_stream = new AudioSendStream(
|
||||
clock_, config, config_.audio_state, module_process_thread_.get(),
|
||||
transport_send_ptr_, bitrate_allocator_.get(), event_log_,
|
||||
call_stats_.get(), suspended_rtp_state);
|
||||
AudioSendStream* send_stream =
|
||||
new AudioSendStream(clock_, config, config_.audio_state,
|
||||
task_queue_factory_, module_process_thread_.get(),
|
||||
transport_send_ptr_, bitrate_allocator_.get(),
|
||||
event_log_, call_stats_.get(), suspended_rtp_state);
|
||||
{
|
||||
WriteLockScoped write_lock(*send_crit_);
|
||||
RTC_DCHECK(audio_send_ssrcs_.find(config.rtp.ssrc) ==
|
||||
|
Reference in New Issue
Block a user