| 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 <list> | 7 #include <list> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 VideoSender::VideoSender( | 54 VideoSender::VideoSender( |
| 55 scoped_refptr<CastEnvironment> cast_environment, | 55 scoped_refptr<CastEnvironment> cast_environment, |
| 56 const VideoSenderConfig& video_config, | 56 const VideoSenderConfig& video_config, |
| 57 const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories, | 57 const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories, |
| 58 transport::PacedPacketSender* const paced_packet_sender) | 58 transport::PacedPacketSender* const paced_packet_sender) |
| 59 : rtp_max_delay_( | 59 : rtp_max_delay_( |
| 60 base::TimeDelta::FromMilliseconds(video_config.rtp_max_delay_ms)), | 60 base::TimeDelta::FromMilliseconds(video_config.rtp_max_delay_ms)), |
| 61 max_frame_rate_(video_config.max_frame_rate), | 61 max_frame_rate_(video_config.max_frame_rate), |
| 62 cast_environment_(cast_environment), | 62 cast_environment_(cast_environment), |
| 63 rtcp_feedback_(new LocalRtcpVideoSenderFeedback(this)), | 63 rtcp_feedback_(new LocalRtcpVideoSenderFeedback(this)), |
| 64 rtp_sender_(new transport::RtpSender(cast_environment->Clock(), | 64 rtp_sender_(new transport::RtpSender(cast_environment, |
| 65 NULL, | 65 NULL, |
| 66 &video_config, | 66 &video_config, |
| 67 paced_packet_sender)), | 67 paced_packet_sender)), |
| 68 last_acked_frame_id_(-1), | 68 last_acked_frame_id_(-1), |
| 69 last_sent_frame_id_(-1), | 69 last_sent_frame_id_(-1), |
| 70 duplicate_ack_(0), | 70 duplicate_ack_(0), |
| 71 last_skip_count_(0), | 71 last_skip_count_(0), |
| 72 congestion_control_(cast_environment->Clock(), | 72 congestion_control_(cast_environment->Clock(), |
| 73 video_config.congestion_control_back_off, | 73 video_config.congestion_control_back_off, |
| 74 video_config.max_bitrate, | 74 video_config.max_bitrate, |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 cast_environment_->Logging()->InsertFrameEvent(now, kVideoFrameReceived, | 141 cast_environment_->Logging()->InsertFrameEvent(now, kVideoFrameReceived, |
| 142 GetVideoRtpTimestamp(capture_time), kFrameIdUnknown); | 142 GetVideoRtpTimestamp(capture_time), kFrameIdUnknown); |
| 143 | 143 |
| 144 if (!video_encoder_->EncodeVideoFrame(video_frame, capture_time, | 144 if (!video_encoder_->EncodeVideoFrame(video_frame, capture_time, |
| 145 base::Bind(&VideoSender::SendEncodedVideoFrameMainThread, | 145 base::Bind(&VideoSender::SendEncodedVideoFrameMainThread, |
| 146 weak_factory_.GetWeakPtr()))) { | 146 weak_factory_.GetWeakPtr()))) { |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 | 149 |
| 150 void VideoSender::SendEncodedVideoFrameMainThread( | 150 void VideoSender::SendEncodedVideoFrameMainThread( |
| 151 scoped_ptr<transport::EncodedVideoFrame> video_frame, | 151 scoped_ptr<EncodedVideoFrame> video_frame, |
| 152 const base::TimeTicks& capture_time) { | 152 const base::TimeTicks& capture_time) { |
| 153 SendEncodedVideoFrame(video_frame.get(), capture_time); | 153 SendEncodedVideoFrame(video_frame.get(), capture_time); |
| 154 } | 154 } |
| 155 | 155 |
| 156 bool VideoSender::EncryptVideoFrame( | 156 bool VideoSender::EncryptVideoFrame(const EncodedVideoFrame& video_frame, |
| 157 const transport::EncodedVideoFrame& video_frame, | 157 EncodedVideoFrame* encrypted_frame) { |
| 158 transport::EncodedVideoFrame* encrypted_frame) { | |
| 159 DCHECK(encryptor_) << "Invalid state"; | 158 DCHECK(encryptor_) << "Invalid state"; |
| 160 | 159 |
| 161 if (!encryptor_->SetCounter(GetAesNonce(video_frame.frame_id, iv_mask_))) { | 160 if (!encryptor_->SetCounter(GetAesNonce(video_frame.frame_id, iv_mask_))) { |
| 162 NOTREACHED() << "Failed to set counter"; | 161 NOTREACHED() << "Failed to set counter"; |
| 163 return false; | 162 return false; |
| 164 } | 163 } |
| 165 | 164 |
| 166 if (!encryptor_->Encrypt(video_frame.data, &encrypted_frame->data)) { | 165 if (!encryptor_->Encrypt(video_frame.data, &encrypted_frame->data)) { |
| 167 NOTREACHED() << "Encrypt error"; | 166 NOTREACHED() << "Encrypt error"; |
| 168 return false; | 167 return false; |
| 169 } | 168 } |
| 170 encrypted_frame->codec = video_frame.codec; | 169 encrypted_frame->codec = video_frame.codec; |
| 171 encrypted_frame->key_frame = video_frame.key_frame; | 170 encrypted_frame->key_frame = video_frame.key_frame; |
| 172 encrypted_frame->frame_id = video_frame.frame_id; | 171 encrypted_frame->frame_id = video_frame.frame_id; |
| 173 encrypted_frame->last_referenced_frame_id = | 172 encrypted_frame->last_referenced_frame_id = |
| 174 video_frame.last_referenced_frame_id; | 173 video_frame.last_referenced_frame_id; |
| 175 return true; | 174 return true; |
| 176 } | 175 } |
| 177 | 176 |
| 178 void VideoSender::SendEncodedVideoFrame( | 177 void VideoSender::SendEncodedVideoFrame(const EncodedVideoFrame* encoded_frame, |
| 179 const transport::EncodedVideoFrame* encoded_frame, | 178 const base::TimeTicks& capture_time) { |
| 180 const base::TimeTicks& capture_time) { | |
| 181 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 179 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
| 182 last_send_time_ = cast_environment_->Clock()->NowTicks(); | 180 last_send_time_ = cast_environment_->Clock()->NowTicks(); |
| 183 | 181 |
| 184 if (encryptor_) { | 182 if (encryptor_) { |
| 185 transport::EncodedVideoFrame encrypted_video_frame; | 183 EncodedVideoFrame encrypted_video_frame; |
| 186 | 184 |
| 187 if (!EncryptVideoFrame(*encoded_frame, &encrypted_video_frame)) { | 185 if (!EncryptVideoFrame(*encoded_frame, &encrypted_video_frame)) { |
| 188 // Logging already done. | 186 // Logging already done. |
| 189 return; | 187 return; |
| 190 } | 188 } |
| 191 rtp_sender_->IncomingEncodedVideoFrame(&encrypted_video_frame, | 189 rtp_sender_->IncomingEncodedVideoFrame(&encrypted_video_frame, |
| 192 capture_time); | 190 capture_time); |
| 193 } else { | 191 } else { |
| 194 rtp_sender_->IncomingEncodedVideoFrame(encoded_frame, capture_time); | 192 rtp_sender_->IncomingEncodedVideoFrame(encoded_frame, capture_time); |
| 195 } | 193 } |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 446 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
| 449 MissingFramesAndPacketsMap missing_frames_and_packets; | 447 MissingFramesAndPacketsMap missing_frames_and_packets; |
| 450 PacketIdSet missing; | 448 PacketIdSet missing; |
| 451 missing_frames_and_packets.insert(std::make_pair(resend_frame_id, missing)); | 449 missing_frames_and_packets.insert(std::make_pair(resend_frame_id, missing)); |
| 452 rtp_sender_->ResendPackets(missing_frames_and_packets); | 450 rtp_sender_->ResendPackets(missing_frames_and_packets); |
| 453 last_send_time_ = cast_environment_->Clock()->NowTicks(); | 451 last_send_time_ = cast_environment_->Clock()->NowTicks(); |
| 454 } | 452 } |
| 455 | 453 |
| 456 } // namespace cast | 454 } // namespace cast |
| 457 } // namespace media | 455 } // namespace media |
| OLD | NEW |