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, | 64 rtp_sender_(new transport::RtpSender(cast_environment->Clock(), |
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<EncodedVideoFrame> video_frame, | 151 scoped_ptr<transport::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(const EncodedVideoFrame& video_frame, | 156 bool VideoSender::EncryptVideoFrame( |
157 EncodedVideoFrame* encrypted_frame) { | 157 const transport::EncodedVideoFrame& video_frame, |
| 158 transport::EncodedVideoFrame* encrypted_frame) { |
158 DCHECK(encryptor_) << "Invalid state"; | 159 DCHECK(encryptor_) << "Invalid state"; |
159 | 160 |
160 if (!encryptor_->SetCounter(GetAesNonce(video_frame.frame_id, iv_mask_))) { | 161 if (!encryptor_->SetCounter(GetAesNonce(video_frame.frame_id, iv_mask_))) { |
161 NOTREACHED() << "Failed to set counter"; | 162 NOTREACHED() << "Failed to set counter"; |
162 return false; | 163 return false; |
163 } | 164 } |
164 | 165 |
165 if (!encryptor_->Encrypt(video_frame.data, &encrypted_frame->data)) { | 166 if (!encryptor_->Encrypt(video_frame.data, &encrypted_frame->data)) { |
166 NOTREACHED() << "Encrypt error"; | 167 NOTREACHED() << "Encrypt error"; |
167 return false; | 168 return false; |
168 } | 169 } |
169 encrypted_frame->codec = video_frame.codec; | 170 encrypted_frame->codec = video_frame.codec; |
170 encrypted_frame->key_frame = video_frame.key_frame; | 171 encrypted_frame->key_frame = video_frame.key_frame; |
171 encrypted_frame->frame_id = video_frame.frame_id; | 172 encrypted_frame->frame_id = video_frame.frame_id; |
172 encrypted_frame->last_referenced_frame_id = | 173 encrypted_frame->last_referenced_frame_id = |
173 video_frame.last_referenced_frame_id; | 174 video_frame.last_referenced_frame_id; |
174 return true; | 175 return true; |
175 } | 176 } |
176 | 177 |
177 void VideoSender::SendEncodedVideoFrame(const EncodedVideoFrame* encoded_frame, | 178 void VideoSender::SendEncodedVideoFrame( |
178 const base::TimeTicks& capture_time) { | 179 const transport::EncodedVideoFrame* encoded_frame, |
| 180 const base::TimeTicks& capture_time) { |
179 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 181 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
180 last_send_time_ = cast_environment_->Clock()->NowTicks(); | 182 last_send_time_ = cast_environment_->Clock()->NowTicks(); |
181 | 183 |
182 if (encryptor_) { | 184 if (encryptor_) { |
183 EncodedVideoFrame encrypted_video_frame; | 185 transport::EncodedVideoFrame encrypted_video_frame; |
184 | 186 |
185 if (!EncryptVideoFrame(*encoded_frame, &encrypted_video_frame)) { | 187 if (!EncryptVideoFrame(*encoded_frame, &encrypted_video_frame)) { |
186 // Logging already done. | 188 // Logging already done. |
187 return; | 189 return; |
188 } | 190 } |
189 rtp_sender_->IncomingEncodedVideoFrame(&encrypted_video_frame, | 191 rtp_sender_->IncomingEncodedVideoFrame(&encrypted_video_frame, |
190 capture_time); | 192 capture_time); |
191 } else { | 193 } else { |
192 rtp_sender_->IncomingEncodedVideoFrame(encoded_frame, capture_time); | 194 rtp_sender_->IncomingEncodedVideoFrame(encoded_frame, capture_time); |
193 } | 195 } |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 448 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
447 MissingFramesAndPacketsMap missing_frames_and_packets; | 449 MissingFramesAndPacketsMap missing_frames_and_packets; |
448 PacketIdSet missing; | 450 PacketIdSet missing; |
449 missing_frames_and_packets.insert(std::make_pair(resend_frame_id, missing)); | 451 missing_frames_and_packets.insert(std::make_pair(resend_frame_id, missing)); |
450 rtp_sender_->ResendPackets(missing_frames_and_packets); | 452 rtp_sender_->ResendPackets(missing_frames_and_packets); |
451 last_send_time_ = cast_environment_->Clock()->NowTicks(); | 453 last_send_time_ = cast_environment_->Clock()->NowTicks(); |
452 } | 454 } |
453 | 455 |
454 } // namespace cast | 456 } // namespace cast |
455 } // namespace media | 457 } // namespace media |
OLD | NEW |