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

Unified Diff: webrtc/modules/video_coding/jitter_buffer.cc

Issue 1778503002: Experiment for the nack module. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 9 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
Index: webrtc/modules/video_coding/jitter_buffer.cc
diff --git a/webrtc/modules/video_coding/jitter_buffer.cc b/webrtc/modules/video_coding/jitter_buffer.cc
index ca8c0d957148233f56ca07debc8dbf8aad155bb8..d38a5cfeca75fc01eb0f5a35bbddbca78d3bf4dc 100644
--- a/webrtc/modules/video_coding/jitter_buffer.cc
+++ b/webrtc/modules/video_coding/jitter_buffer.cc
@@ -28,10 +28,10 @@
#include "webrtc/system_wrappers/include/clock.h"
#include "webrtc/system_wrappers/include/critical_section_wrapper.h"
#include "webrtc/system_wrappers/include/event_wrapper.h"
+#include "webrtc/system_wrappers/include/field_trial.h"
#include "webrtc/system_wrappers/include/metrics.h"
namespace webrtc {
-
// Interval for updating SS data.
static const uint32_t kSsCleanupIntervalSec = 60;
@@ -215,7 +215,10 @@ void Vp9SsMap::UpdateFrames(FrameList* frames) {
}
VCMJitterBuffer::VCMJitterBuffer(Clock* clock,
- std::unique_ptr<EventWrapper> event)
+ std::unique_ptr<EventWrapper> event,
+ ProcessThread* module_process_thread,
+ NackSender* nack_sender,
+ KeyFrameRequestSender* keyframe_request_sender)
: clock_(clock),
running_(false),
crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
@@ -249,7 +252,17 @@ VCMJitterBuffer::VCMJitterBuffer(Clock* clock,
max_incomplete_time_ms_(0),
decode_error_mode_(kNoErrors),
average_packets_per_frame_(0.0f),
- frame_counter_(0) {
+ frame_counter_(0),
+ module_process_thread_(module_process_thread) {
+ if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled") {
+ RTC_DCHECK(module_process_thread);
+ RTC_DCHECK(nack_sender);
+ RTC_DCHECK(keyframe_request_sender);
+
+ nack_module_.reset(
+ new NackModule(clock, nack_sender, keyframe_request_sender));
stefan-webrtc 2016/03/10 14:20:40 Set in initializer list instead so that you can ma
philipel 2016/03/10 16:39:27 Can't do that since we have to check first if we a
stefan-webrtc 2016/03/10 17:06:29 You can still do it: nack_module_(IsInExperiment(
philipel 2016/03/11 09:24:14 Ok, it is possible, but don't you think it would b
stefan-webrtc 2016/03/11 09:57:11 I think that's fine, just break it out to a static
philipel 2016/03/11 10:12:59 Done.
+ module_process_thread_->RegisterModule(nack_module_.get());
+ }
for (int i = 0; i < kStartNumberOfFrames; i++)
free_frames_.push_back(new VCMFrameBuffer());
}
@@ -268,6 +281,8 @@ VCMJitterBuffer::~VCMJitterBuffer() {
it != decodable_frames_.end(); ++it) {
delete it->second;
}
+ if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled")
stefan-webrtc 2016/03/10 14:20:40 if (nack_module_) instead, here and all places bel
philipel 2016/03/10 16:39:27 Done.
+ module_process_thread_->DeRegisterModule(nack_module_.get());
delete crit_sect_;
}
@@ -329,6 +344,8 @@ void VCMJitterBuffer::Stop() {
UpdateHistograms();
running_ = false;
last_decoded_state_.Reset();
+ if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled")
+ nack_module_->Stop();
// Make sure all frames are free and reset.
for (FrameList::iterator it = decodable_frames_.begin();
@@ -665,6 +682,9 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet,
bool* retransmitted) {
CriticalSectionScoped cs(crit_sect_);
+ if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled")
+ nack_module_->OnReceivedPacket(packet);
+
++num_packets_;
if (num_packets_ == 1) {
time_first_packet_ms_ = clock_->TimeInMilliseconds();
@@ -927,6 +947,8 @@ void VCMJitterBuffer::UpdateRtt(int64_t rtt_ms) {
CriticalSectionScoped cs(crit_sect_);
rtt_ms_ = rtt_ms;
jitter_estimate_.UpdateRtt(rtt_ms);
+ if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled")
+ nack_module_->UpdateRtt(rtt_ms);
}
void VCMJitterBuffer::SetNackMode(VCMNackMode mode,
@@ -1046,6 +1068,10 @@ std::vector<uint16_t> VCMJitterBuffer::GetNackList(bool* request_key_frame) {
}
}
}
stefan-webrtc 2016/03/10 14:20:40 Should we really run lines 1017-1070 if using the
philipel 2016/03/10 16:39:27 Yes, the GetNackList interface does more than just
stefan-webrtc 2016/03/10 17:06:29 Ok, comment on why we don't return earlier to avoi
philipel 2016/03/11 09:24:14 Expanded my comment. This code won't be necessary
+ // The experiment is running, the nack module will send Nacks.
+ if (field_trial::FindFullName("WebRTC-NewVideoJitterBuffer") == "Enabled")
+ return std::vector<uint16_t>();
+
std::vector<uint16_t> nack_list(missing_sequence_numbers_.begin(),
missing_sequence_numbers_.end());
return nack_list;

Powered by Google App Engine
This is Rietveld 408576698