diff options
author | mflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2012-10-25 11:30:29 +0000 |
---|---|---|
committer | mflodman@webrtc.org <mflodman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2012-10-25 11:30:29 +0000 |
commit | b6d9cfc6347e490751e142ba5fb89e4a975ed442 (patch) | |
tree | 00dbf087103185bf18bae5d983dca1979604e8be /video_engine/vie_channel_manager.cc | |
parent | 4dd77597fb230d3c98e6c166f9f4a00ede798337 (diff) | |
download | webrtc-b6d9cfc6347e490751e142ba5fb89e4a975ed442.tar.gz |
Revert the revert in r2988 since that wasn't the issue.
Review URL: https://webrtc-codereview.appspot.com/931005
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@2992 4adac7df-926f-26a2-2b94-8c16560cd09d
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, |