| 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.
 | 
| 
 |