OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/video_sender/video_sender.h" | 5 #include "media/cast/video_sender/video_sender.h" |
6 | 6 |
7 #include <cstring> | 7 #include <cstring> |
8 #include <list> | 8 #include <list> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 uint32 new_bitrate = 0; | 400 uint32 new_bitrate = 0; |
401 if (congestion_control_.OnNack(rtt, &new_bitrate)) { | 401 if (congestion_control_.OnNack(rtt, &new_bitrate)) { |
402 video_encoder_->SetBitRate(new_bitrate); | 402 video_encoder_->SetBitRate(new_bitrate); |
403 } | 403 } |
404 } | 404 } |
405 ReceivedAck(cast_feedback.ack_frame_id_); | 405 ReceivedAck(cast_feedback.ack_frame_id_); |
406 } | 406 } |
407 | 407 |
408 void VideoSender::ReceivedAck(uint32 acked_frame_id) { | 408 void VideoSender::ReceivedAck(uint32 acked_frame_id) { |
409 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 409 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
| 410 if (acked_frame_id == UINT32_C(0xFFFFFFFF)) { |
| 411 // Receiver is sending a status message before any frames are ready to |
| 412 // be acked. Ignore. |
| 413 return; |
| 414 } |
410 // Start sending RTCP packets only after receiving the first ACK, i.e. only | 415 // Start sending RTCP packets only after receiving the first ACK, i.e. only |
411 // after establishing that the receiver is active. | 416 // after establishing that the receiver is active. |
412 if (last_acked_frame_id_ == -1) { | 417 if (last_acked_frame_id_ == -1) { |
413 ScheduleNextRtcpReport(); | 418 ScheduleNextRtcpReport(); |
414 } | 419 } |
415 last_acked_frame_id_ = static_cast<int>(acked_frame_id); | 420 last_acked_frame_id_ = static_cast<int>(acked_frame_id); |
416 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); | 421 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); |
417 | 422 |
418 RtpTimestamp rtp_timestamp = | 423 RtpTimestamp rtp_timestamp = |
419 frame_id_to_rtp_timestamp_[acked_frame_id & 0xff]; | 424 frame_id_to_rtp_timestamp_[acked_frame_id & 0xff]; |
420 cast_environment_->Logging()->InsertFrameEvent( | 425 cast_environment_->Logging()->InsertFrameEvent( |
421 now, kVideoAckReceived, rtp_timestamp, acked_frame_id); | 426 now, kVideoAckReceived, rtp_timestamp, acked_frame_id); |
422 | 427 |
423 VLOG(2) << "ReceivedAck:" << static_cast<int>(acked_frame_id); | 428 VLOG(2) << "ReceivedAck:" << static_cast<int>(acked_frame_id); |
424 last_acked_frame_id_ = acked_frame_id; | |
425 active_session_ = true; | 429 active_session_ = true; |
| 430 DCHECK_NE(-1, last_acked_frame_id_); |
426 UpdateFramesInFlight(); | 431 UpdateFramesInFlight(); |
427 } | 432 } |
428 | 433 |
429 void VideoSender::UpdateFramesInFlight() { | 434 void VideoSender::UpdateFramesInFlight() { |
430 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 435 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
431 if (last_sent_frame_id_ != -1) { | 436 if (last_sent_frame_id_ != -1) { |
432 DCHECK_LE(0, last_sent_frame_id_); | 437 DCHECK_LE(0, last_sent_frame_id_); |
433 uint32 frames_in_flight = 0; | 438 uint32 frames_in_flight = 0; |
434 if (last_acked_frame_id_ != -1) { | 439 if (last_acked_frame_id_ != -1) { |
435 DCHECK_LE(0, last_acked_frame_id_); | 440 DCHECK_LE(0, last_acked_frame_id_); |
(...skipping 18 matching lines...) Expand all Loading... |
454 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 459 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
455 MissingFramesAndPacketsMap missing_frames_and_packets; | 460 MissingFramesAndPacketsMap missing_frames_and_packets; |
456 PacketIdSet missing; | 461 PacketIdSet missing; |
457 missing_frames_and_packets.insert(std::make_pair(resend_frame_id, missing)); | 462 missing_frames_and_packets.insert(std::make_pair(resend_frame_id, missing)); |
458 last_send_time_ = cast_environment_->Clock()->NowTicks(); | 463 last_send_time_ = cast_environment_->Clock()->NowTicks(); |
459 transport_sender_->ResendPackets(false, missing_frames_and_packets); | 464 transport_sender_->ResendPackets(false, missing_frames_and_packets); |
460 } | 465 } |
461 | 466 |
462 } // namespace cast | 467 } // namespace cast |
463 } // namespace media | 468 } // namespace media |
OLD | NEW |