Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/cast/sender/video_sender.h" | 5 #include "media/cast/sender/video_sender.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cstring> | 8 #include <cstring> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 179 | 179 |
| 180 if (ShouldDropNextFrame(duration_added_by_next_frame)) { | 180 if (ShouldDropNextFrame(duration_added_by_next_frame)) { |
| 181 base::TimeDelta new_target_delay = std::min( | 181 base::TimeDelta new_target_delay = std::min( |
| 182 current_round_trip_time_ * kRoundTripsNeeded + | 182 current_round_trip_time_ * kRoundTripsNeeded + |
| 183 base::TimeDelta::FromMilliseconds(kConstantTimeMs), | 183 base::TimeDelta::FromMilliseconds(kConstantTimeMs), |
| 184 max_playout_delay_); | 184 max_playout_delay_); |
| 185 if (new_target_delay > target_playout_delay_) { | 185 if (new_target_delay > target_playout_delay_) { |
| 186 VLOG(1) << "New target delay: " << new_target_delay.InMilliseconds(); | 186 VLOG(1) << "New target delay: " << new_target_delay.InMilliseconds(); |
| 187 playout_delay_change_cb_.Run(new_target_delay); | 187 playout_delay_change_cb_.Run(new_target_delay); |
| 188 } | 188 } |
| 189 | |
| 190 // Some encoder implementations have a frame window for analysis. Since we | |
| 191 // are dropping this frame, unless we instruct the encoder to flush all the | |
| 192 // frames that have been enqueued for encoding, frames_in_encoder_ and | |
| 193 // last_enqueued_frame_reference_time_ will never be updated and we will | |
| 194 // drop every subsequent frame for the rest of the session. | |
| 195 video_encoder_->EmitFrames(); | |
|
miu
2015/01/21 23:24:27
Some questions:
Will the video encoder emit frame
| |
| 196 | |
| 189 return; | 197 return; |
| 190 } | 198 } |
| 191 | 199 |
| 192 uint32 bitrate = congestion_control_->GetBitrate( | 200 uint32 bitrate = congestion_control_->GetBitrate( |
| 193 reference_time + target_playout_delay_, target_playout_delay_); | 201 reference_time + target_playout_delay_, target_playout_delay_); |
| 194 if (bitrate != last_bitrate_) { | 202 if (bitrate != last_bitrate_) { |
| 195 video_encoder_->SetBitRate(bitrate); | 203 video_encoder_->SetBitRate(bitrate); |
| 196 last_bitrate_ = bitrate; | 204 last_bitrate_ = bitrate; |
| 197 } | 205 } |
| 198 | 206 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 DCHECK_GE(frames_in_encoder_, 0); | 259 DCHECK_GE(frames_in_encoder_, 0); |
| 252 | 260 |
| 253 duration_in_encoder_ = | 261 duration_in_encoder_ = |
| 254 last_enqueued_frame_reference_time_ - encoded_frame->reference_time; | 262 last_enqueued_frame_reference_time_ - encoded_frame->reference_time; |
| 255 | 263 |
| 256 SendEncodedFrame(encoder_bitrate, encoded_frame.Pass()); | 264 SendEncodedFrame(encoder_bitrate, encoded_frame.Pass()); |
| 257 } | 265 } |
| 258 | 266 |
| 259 } // namespace cast | 267 } // namespace cast |
| 260 } // namespace media | 268 } // namespace media |
| OLD | NEW |