Index: webrtc/video/stream_synchronization.cc |
diff --git a/webrtc/video/stream_synchronization.cc b/webrtc/video/stream_synchronization.cc |
index 3727f8fdb53e5934c6a884e507ac79f52161e8da..ff389736f4bd09883ac89d188a3d334e27c3545b 100644 |
--- a/webrtc/video/stream_synchronization.cc |
+++ b/webrtc/video/stream_synchronization.cc |
@@ -26,35 +26,14 @@ static const int kFilterLength = 4; |
// Minimum difference between audio and video to warrant a change. |
static const int kMinDeltaMs = 30; |
-struct ViESyncDelay { |
- ViESyncDelay() { |
- extra_video_delay_ms = 0; |
- last_video_delay_ms = 0; |
- extra_audio_delay_ms = 0; |
- last_audio_delay_ms = 0; |
- network_delay = 120; |
- } |
- |
- int extra_video_delay_ms; |
- int last_video_delay_ms; |
- int extra_audio_delay_ms; |
- int last_audio_delay_ms; |
- int network_delay; |
-}; |
- |
StreamSynchronization::StreamSynchronization(uint32_t video_primary_ssrc, |
int audio_channel_id) |
- : channel_delay_(new ViESyncDelay), |
- video_primary_ssrc_(video_primary_ssrc), |
+ : video_primary_ssrc_(video_primary_ssrc), |
audio_channel_id_(audio_channel_id), |
base_target_delay_ms_(0), |
avg_diff_ms_(0) { |
} |
-StreamSynchronization::~StreamSynchronization() { |
- delete channel_delay_; |
-} |
- |
bool StreamSynchronization::ComputeRelativeDelay( |
const Measurements& audio_measurement, |
const Measurements& video_measurement, |
@@ -94,7 +73,6 @@ bool StreamSynchronization::ComputeDelays(int relative_delay_ms, |
int current_video_delay_ms = *total_video_delay_target_ms; |
LOG(LS_VERBOSE) << "Audio delay: " << current_audio_delay_ms |
- << ", network delay diff: " << channel_delay_->network_delay |
<< " current diff: " << relative_delay_ms |
<< " for channel " << audio_channel_id_; |
// Calculate the difference between the lowest possible video delay and |
@@ -120,78 +98,78 @@ bool StreamSynchronization::ComputeDelays(int relative_delay_ms, |
if (diff_ms > 0) { |
// The minimum video delay is longer than the current audio delay. |
// We need to decrease extra video delay, or add extra audio delay. |
- if (channel_delay_->extra_video_delay_ms > base_target_delay_ms_) { |
+ if (channel_delay_.extra_video_delay_ms > base_target_delay_ms_) { |
// We have extra delay added to ViE. Reduce this delay before adding |
// extra delay to VoE. |
- channel_delay_->extra_video_delay_ms -= diff_ms; |
- channel_delay_->extra_audio_delay_ms = base_target_delay_ms_; |
- } else { // channel_delay_->extra_video_delay_ms > 0 |
+ channel_delay_.extra_video_delay_ms -= diff_ms; |
+ channel_delay_.extra_audio_delay_ms = base_target_delay_ms_; |
+ } else { // channel_delay_.extra_video_delay_ms > 0 |
// We have no extra video delay to remove, increase the audio delay. |
- channel_delay_->extra_audio_delay_ms += diff_ms; |
- channel_delay_->extra_video_delay_ms = base_target_delay_ms_; |
+ channel_delay_.extra_audio_delay_ms += diff_ms; |
+ channel_delay_.extra_video_delay_ms = base_target_delay_ms_; |
} |
} else { // if (diff_ms > 0) |
// The video delay is lower than the current audio delay. |
// We need to decrease extra audio delay, or add extra video delay. |
- if (channel_delay_->extra_audio_delay_ms > base_target_delay_ms_) { |
+ if (channel_delay_.extra_audio_delay_ms > base_target_delay_ms_) { |
// We have extra delay in VoiceEngine. |
// Start with decreasing the voice delay. |
// Note: diff_ms is negative; add the negative difference. |
- channel_delay_->extra_audio_delay_ms += diff_ms; |
- channel_delay_->extra_video_delay_ms = base_target_delay_ms_; |
- } else { // channel_delay_->extra_audio_delay_ms > base_target_delay_ms_ |
+ channel_delay_.extra_audio_delay_ms += diff_ms; |
+ channel_delay_.extra_video_delay_ms = base_target_delay_ms_; |
+ } else { // channel_delay_.extra_audio_delay_ms > base_target_delay_ms_ |
// We have no extra delay in VoiceEngine, increase the video delay. |
// Note: diff_ms is negative; subtract the negative difference. |
- channel_delay_->extra_video_delay_ms -= diff_ms; // X - (-Y) = X + Y. |
- channel_delay_->extra_audio_delay_ms = base_target_delay_ms_; |
+ channel_delay_.extra_video_delay_ms -= diff_ms; // X - (-Y) = X + Y. |
+ channel_delay_.extra_audio_delay_ms = base_target_delay_ms_; |
} |
} |
// Make sure that video is never below our target. |
- channel_delay_->extra_video_delay_ms = std::max( |
- channel_delay_->extra_video_delay_ms, base_target_delay_ms_); |
+ channel_delay_.extra_video_delay_ms = std::max( |
+ channel_delay_.extra_video_delay_ms, base_target_delay_ms_); |
int new_video_delay_ms; |
- if (channel_delay_->extra_video_delay_ms > base_target_delay_ms_) { |
- new_video_delay_ms = channel_delay_->extra_video_delay_ms; |
+ if (channel_delay_.extra_video_delay_ms > base_target_delay_ms_) { |
+ new_video_delay_ms = channel_delay_.extra_video_delay_ms; |
} else { |
// No change to the extra video delay. We are changing audio and we only |
// allow to change one at the time. |
- new_video_delay_ms = channel_delay_->last_video_delay_ms; |
+ new_video_delay_ms = channel_delay_.last_video_delay_ms; |
} |
// Make sure that we don't go below the extra video delay. |
new_video_delay_ms = std::max( |
- new_video_delay_ms, channel_delay_->extra_video_delay_ms); |
+ new_video_delay_ms, channel_delay_.extra_video_delay_ms); |
// Verify we don't go above the maximum allowed video delay. |
new_video_delay_ms = |
std::min(new_video_delay_ms, base_target_delay_ms_ + kMaxDeltaDelayMs); |
int new_audio_delay_ms; |
- if (channel_delay_->extra_audio_delay_ms > base_target_delay_ms_) { |
- new_audio_delay_ms = channel_delay_->extra_audio_delay_ms; |
+ if (channel_delay_.extra_audio_delay_ms > base_target_delay_ms_) { |
+ new_audio_delay_ms = channel_delay_.extra_audio_delay_ms; |
} else { |
// No change to the audio delay. We are changing video and we only |
// allow to change one at the time. |
- new_audio_delay_ms = channel_delay_->last_audio_delay_ms; |
+ new_audio_delay_ms = channel_delay_.last_audio_delay_ms; |
} |
// Make sure that we don't go below the extra audio delay. |
new_audio_delay_ms = std::max( |
- new_audio_delay_ms, channel_delay_->extra_audio_delay_ms); |
+ new_audio_delay_ms, channel_delay_.extra_audio_delay_ms); |
// Verify we don't go above the maximum allowed audio delay. |
new_audio_delay_ms = |
std::min(new_audio_delay_ms, base_target_delay_ms_ + kMaxDeltaDelayMs); |
// Remember our last audio and video delays. |
- channel_delay_->last_video_delay_ms = new_video_delay_ms; |
- channel_delay_->last_audio_delay_ms = new_audio_delay_ms; |
+ channel_delay_.last_video_delay_ms = new_video_delay_ms; |
+ channel_delay_.last_audio_delay_ms = new_audio_delay_ms; |
LOG(LS_VERBOSE) << "Sync video delay " << new_video_delay_ms |
<< " for video primary SSRC " << video_primary_ssrc_ |
- << " and audio delay " << channel_delay_->extra_audio_delay_ms |
+ << " and audio delay " << channel_delay_.extra_audio_delay_ms |
<< " for audio channel " << audio_channel_id_; |
// Return values. |
@@ -202,17 +180,17 @@ bool StreamSynchronization::ComputeDelays(int relative_delay_ms, |
void StreamSynchronization::SetTargetBufferingDelay(int target_delay_ms) { |
// Initial extra delay for audio (accounting for existing extra delay). |
- channel_delay_->extra_audio_delay_ms += |
+ channel_delay_.extra_audio_delay_ms += |
target_delay_ms - base_target_delay_ms_; |
- channel_delay_->last_audio_delay_ms += |
+ channel_delay_.last_audio_delay_ms += |
target_delay_ms - base_target_delay_ms_; |
// The video delay is compared to the last value (and how much we can update |
// is limited by that as well). |
- channel_delay_->last_video_delay_ms += |
+ channel_delay_.last_video_delay_ms += |
target_delay_ms - base_target_delay_ms_; |
- channel_delay_->extra_video_delay_ms += |
+ channel_delay_.extra_video_delay_ms += |
target_delay_ms - base_target_delay_ms_; |
// Video is already delayed by the desired amount. |