diff options
Diffstat (limited to 'video_engine/vie_channel_manager.cc')
-rw-r--r-- | video_engine/vie_channel_manager.cc | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/video_engine/vie_channel_manager.cc b/video_engine/vie_channel_manager.cc index be95b31a..9fabd8d4 100644 --- a/video_engine/vie_channel_manager.cc +++ b/video_engine/vie_channel_manager.cc @@ -121,8 +121,12 @@ int ViEChannelManager::CreateChannel(int* channel_id) { // Add ViEEncoder to EncoderFeedBackObserver. unsigned int ssrc = 0; - channel_map_[new_channel_id]->GetLocalSSRC(&ssrc); + int idx = 0; + channel_map_[new_channel_id]->GetLocalSSRC(idx, &ssrc); encoder_state_feedback->AddEncoder(ssrc, vie_encoder); + std::list<unsigned int> ssrcs; + ssrcs.push_back(ssrc); + vie_encoder->SetSsrcs(ssrcs); *channel_id = new_channel_id; group->AddChannel(*channel_id); @@ -170,7 +174,8 @@ int ViEChannelManager::CreateChannel(int* channel_id, } // Register the ViEEncoder to get key frame requests for this channel. unsigned int ssrc = 0; - channel_map_[new_channel_id]->GetLocalSSRC(&ssrc); + int stream_idx = 0; + channel_map_[new_channel_id]->GetLocalSSRC(stream_idx, &ssrc); encoder_state_feedback->AddEncoder(ssrc, vie_encoder); } else { vie_encoder = ViEEncoderPtr(original_channel); @@ -224,14 +229,12 @@ int ViEChannelManager::DeleteChannel(int channel_id) { group = FindGroup(channel_id); group->SetChannelRembStatus(channel_id, false, false, vie_channel, vie_encoder); + group->GetEncoderStateFeedback()->RemoveEncoder(vie_encoder); + unsigned int remote_ssrc = 0; vie_channel->GetRemoteSSRC(&remote_ssrc); group->RemoveChannel(channel_id, remote_ssrc); - unsigned int local_ssrc = 0; - vie_channel->GetLocalSSRC(&local_ssrc); - group->GetEncoderStateFeedback()->RemoveEncoder(local_ssrc); - // Check if other channels are using the same encoder. if (ChannelUsingViEEncoder(channel_id)) { vie_encoder = NULL; @@ -370,6 +373,24 @@ bool ViEChannelManager::SetBandwidthEstimationMode( return true; } +void ViEChannelManager::UpdateSsrcs(int channel_id, + const std::list<unsigned int>& ssrcs) { + CriticalSectionScoped cs(channel_id_critsect_); + ChannelGroup* channel_group = FindGroup(channel_id); + if (channel_group == NULL) { + return; + } + ViEEncoder* encoder = ViEEncoderPtr(channel_id); + assert(encoder); + + EncoderStateFeedback* encoder_state_feedback = + channel_group->GetEncoderStateFeedback(); + for (std::list<unsigned int>::const_iterator it = ssrcs.begin(); + it != ssrcs.end(); ++it) { + encoder_state_feedback->AddEncoder(*it, encoder); + } +} + bool ViEChannelManager::CreateChannelObject( int channel_id, ViEEncoder* vie_encoder, |