Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(248)

Unified Diff: webrtc/video/vie_encoder.cc

Issue 1713683003: Simplify SSRC usage inside ViEEncoder. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« webrtc/video/vie_encoder.h ('K') | « webrtc/video/vie_encoder.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/vie_encoder.cc
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc
index 20cfaffb62bd943f5c04c4054e162e0eb438d0a6..e8fcbb3c154cea4129d1fb720a7b190f1ce55124 100644
--- a/webrtc/video/vie_encoder.cc
+++ b/webrtc/video/vie_encoder.cc
@@ -105,6 +105,7 @@ class ViEBitrateObserver : public BitrateObserver {
};
ViEEncoder::ViEEncoder(uint32_t number_of_cores,
+ const std::vector<uint32_t>& ssrcs,
ProcessThread* module_process_thread,
SendStatisticsProxy* stats_proxy,
I420FrameCallback* pre_encode_callback,
@@ -113,6 +114,7 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores,
PayloadRouter* payload_router,
BitrateAllocator* bitrate_allocator)
: number_of_cores_(number_of_cores),
+ ssrcs_(ssrcs),
vp_(VideoProcessing::Create()),
qm_callback_(new QMVideoSettingsCallback(vp_.get())),
vcm_(VideoCodingModule::Create(Clock::GetRealTimeClock(),
@@ -132,6 +134,7 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores,
network_is_transmitting_(true),
encoder_paused_(false),
encoder_paused_and_dropped_frame_(false),
+ time_last_intra_request_ms_(ssrcs.size(), -1),
module_process_thread_(module_process_thread),
has_received_sli_(false),
picture_id_sli_(0),
@@ -495,61 +498,26 @@ void ViEEncoder::OnReceivedIntraFrameRequest(uint32_t ssrc) {
// Key frame request from remote side, signal to VCM.
TRACE_EVENT0("webrtc", "OnKeyFrameRequest");
- int idx = 0;
- {
- rtc::CritScope lock(&data_cs_);
- auto stream_it = ssrc_streams_.find(ssrc);
- if (stream_it == ssrc_streams_.end()) {
- LOG_F(LS_WARNING) << "ssrc not found: " << ssrc << ", map size "
- << ssrc_streams_.size();
- return;
- }
- std::map<unsigned int, int64_t>::iterator time_it =
- time_last_intra_request_ms_.find(ssrc);
- if (time_it == time_last_intra_request_ms_.end()) {
- time_last_intra_request_ms_[ssrc] = 0;
- }
-
- int64_t now = TickTime::MillisecondTimestamp();
- if (time_last_intra_request_ms_[ssrc] + kMinKeyFrameRequestIntervalMs
- > now) {
- return;
+ for (size_t i = 0; i < ssrcs_.size(); ++i) {
+ if (ssrcs_[i] != ssrc)
+ continue;
+ int64_t now_ms = TickTime::MillisecondTimestamp();
+ {
+ rtc::CritScope lock(&data_cs_);
+ if (time_last_intra_request_ms_[i] + kMinKeyFrameRequestIntervalMs >
danilchap 2016/02/19 19:25:56 no check if time_last_intra_request_ms_[i] is vali
pbos-webrtc 2016/02/19 19:30:07 We're relying on now_ms >= 0 (pretty much everywhe
danilchap 2016/02/19 19:39:36 Just want to be sure being implicit here is intend
+ now_ms) {
+ return;
+ }
+ time_last_intra_request_ms_[i] = now_ms;
}
- time_last_intra_request_ms_[ssrc] = now;
- idx = stream_it->second;
- }
- // Release the critsect before triggering key frame.
- vcm_->IntraFrameRequest(idx);
-}
-
-void ViEEncoder::OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc) {
- rtc::CritScope lock(&data_cs_);
- std::map<unsigned int, int>::iterator it = ssrc_streams_.find(old_ssrc);
- if (it == ssrc_streams_.end()) {
+ vcm_->IntraFrameRequest(static_cast<int>(i));
return;
}
-
- ssrc_streams_[new_ssrc] = it->second;
- ssrc_streams_.erase(it);
-
- std::map<unsigned int, int64_t>::iterator time_it =
- time_last_intra_request_ms_.find(old_ssrc);
- int64_t last_intra_request_ms = 0;
- if (time_it != time_last_intra_request_ms_.end()) {
- last_intra_request_ms = time_it->second;
- time_last_intra_request_ms_.erase(time_it);
- }
- time_last_intra_request_ms_[new_ssrc] = last_intra_request_ms;
+ RTC_NOTREACHED() << "Should not receive keyframe requests on unknown SSRCs.";
}
-void ViEEncoder::SetSsrcs(const std::vector<uint32_t>& ssrcs) {
- rtc::CritScope lock(&data_cs_);
- ssrc_streams_.clear();
- time_last_intra_request_ms_.clear();
- int idx = 0;
- for (uint32_t ssrc : ssrcs) {
- ssrc_streams_[ssrc] = idx++;
- }
+void ViEEncoder::OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc) {
+ RTC_NOTREACHED();
}
void ViEEncoder::SetMinTransmitBitrate(int min_transmit_bitrate_kbps) {
@@ -570,14 +538,12 @@ void ViEEncoder::OnNetworkChanged(uint32_t bitrate_bps,
bool video_is_suspended = vcm_->VideoSuspended();
bool video_suspension_changed;
VideoCodec send_codec;
- uint32_t first_ssrc;
{
rtc::CritScope lock(&data_cs_);
last_observed_bitrate_bps_ = bitrate_bps;
video_suspension_changed = video_suspended_ != video_is_suspended;
video_suspended_ = video_is_suspended;
send_codec = encoder_config_;
- first_ssrc = ssrc_streams_.begin()->first;
}
SimulcastStream* stream_configs = send_codec.simulcastStream;
@@ -590,7 +556,7 @@ void ViEEncoder::OnNetworkChanged(uint32_t bitrate_bps,
return;
// Video suspend-state changed, inform codec observer.
LOG(LS_INFO) << "Video suspend state changed " << video_is_suspended
- << " for ssrc " << first_ssrc;
+ << " for ssrc " << ssrcs_[0];
if (stats_proxy_)
stats_proxy_->OnSuspendChange(video_is_suspended);
}
« webrtc/video/vie_encoder.h ('K') | « webrtc/video/vie_encoder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698