Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: media/cast/video_sender/video_sender.cc

Issue 136903003: cast: Wire upp logging to be sent over RTCP between receiver and sender. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge TOT Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 219
220 cast_environment_->PostDelayedTask(CastEnvironment::MAIN, FROM_HERE, 220 cast_environment_->PostDelayedTask(CastEnvironment::MAIN, FROM_HERE,
221 base::Bind(&VideoSender::SendRtcpReport, weak_factory_.GetWeakPtr()), 221 base::Bind(&VideoSender::SendRtcpReport, weak_factory_.GetWeakPtr()),
222 time_to_next); 222 time_to_next);
223 } 223 }
224 224
225 void VideoSender::SendRtcpReport() { 225 void VideoSender::SendRtcpReport() {
226 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 226 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
227 227
228 transport::RtcpSenderLogMessage sender_log_message; 228 transport::RtcpSenderLogMessage sender_log_message;
229 const FrameRawMap& frame_raw_map = 229 VideoRtcpRawMap video_logs =
230 cast_environment_->Logging()->GetFrameRawData(); 230 cast_environment_->Logging()->GetVideoRtcpRawData();
231 231
232 FrameRawMap::const_iterator it = frame_raw_map.begin(); 232 while (!video_logs.empty()) {
233 while (it != frame_raw_map.end()) { 233 VideoRtcpRawMap::iterator it = video_logs.begin();
234 uint32 rtp_timestamp = it->first;
235
234 transport::RtcpSenderFrameLogMessage frame_message; 236 transport::RtcpSenderFrameLogMessage frame_message;
235 frame_message.rtp_timestamp = it->first; 237 frame_message.rtp_timestamp = rtp_timestamp;
236 frame_message.frame_status = transport::kRtcpSenderFrameStatusUnknown; 238 frame_message.frame_status = transport::kRtcpSenderFrameStatusUnknown;
237 if (it->second.type.empty()) { 239
238 ++it; 240 switch (it->second.type) {
239 continue;
240 }
241 CastLoggingEvent last_event = it->second.type.back();
242 switch (last_event) {
243 case kVideoFrameCaptured: 241 case kVideoFrameCaptured:
244 frame_message.frame_status = 242 frame_message.frame_status =
245 transport::kRtcpSenderFrameStatusDroppedByFlowControl; 243 transport::kRtcpSenderFrameStatusDroppedByFlowControl;
246 break; 244 break;
247 case kVideoFrameSentToEncoder: 245 case kVideoFrameSentToEncoder:
248 frame_message.frame_status = 246 frame_message.frame_status =
249 transport::kRtcpSenderFrameStatusDroppedByEncoder; 247 transport::kRtcpSenderFrameStatusDroppedByEncoder;
250 break; 248 break;
251 case kVideoFrameEncoded: 249 case kVideoFrameEncoded:
252 frame_message.frame_status = 250 frame_message.frame_status =
253 transport::kRtcpSenderFrameStatusSentToNetwork; 251 transport::kRtcpSenderFrameStatusSentToNetwork;
254 break; 252 break;
255 default: 253 default:
256 ++it; 254 NOTREACHED();
257 continue; 255 break;
258 } 256 }
259 ++it; 257 video_logs.erase(rtp_timestamp);
260 if (it == frame_raw_map.end()) {
261 // Last message on our map; only send if it is kVideoFrameEncoded.
262 if (last_event != kVideoFrameEncoded) {
263 // For other events we will wait for it to finish and report the result
264 // in the next report.
265 break;
266 }
267 }
268 sender_log_message.push_back(frame_message); 258 sender_log_message.push_back(frame_message);
269 } 259 }
270 rtcp_->SendRtcpFromRtpSender(&sender_log_message); 260 rtcp_->SendRtcpFromRtpSender(&sender_log_message);
271 if (!sender_log_message.empty()) { 261 if (!sender_log_message.empty()) {
272 VLOG(1) << "Failed to send all log messages"; 262 VLOG(1) << "Failed to send all log messages";
273 } 263 }
274
275 // TODO(pwestin): When we start pulling out the logging by other means we need
276 // to synchronize this.
277 cast_environment_->Logging()->ResetRaw();
278 ScheduleNextRtcpReport(); 264 ScheduleNextRtcpReport();
279 } 265 }
280 266
281 void VideoSender::ScheduleNextResendCheck() { 267 void VideoSender::ScheduleNextResendCheck() {
282 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 268 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
283 base::TimeDelta time_to_next; 269 base::TimeDelta time_to_next;
284 if (last_send_time_.is_null()) { 270 if (last_send_time_.is_null()) {
285 time_to_next = rtp_max_delay_; 271 time_to_next = rtp_max_delay_;
286 } else { 272 } else {
287 time_to_next = last_send_time_ - cast_environment_->Clock()->NowTicks() + 273 time_to_next = last_send_time_ - cast_environment_->Clock()->NowTicks() +
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 video_encoder_->SetBitRate(new_bitrate); 394 video_encoder_->SetBitRate(new_bitrate);
409 } 395 }
410 } 396 }
411 ReceivedAck(cast_feedback.ack_frame_id_); 397 ReceivedAck(cast_feedback.ack_frame_id_);
412 } 398 }
413 399
414 void VideoSender::ReceivedAck(uint32 acked_frame_id) { 400 void VideoSender::ReceivedAck(uint32 acked_frame_id) {
415 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 401 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
416 last_acked_frame_id_ = static_cast<int>(acked_frame_id); 402 last_acked_frame_id_ = static_cast<int>(acked_frame_id);
417 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 403 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
418 cast_environment_->Logging()->InsertGenericEvent(now, kAckReceived, 404 cast_environment_->Logging()->InsertGenericEvent(now, kVideoAckReceived,
419 acked_frame_id); 405 acked_frame_id);
420 VLOG(1) << "ReceivedAck:" << static_cast<int>(acked_frame_id); 406 VLOG(1) << "ReceivedAck:" << static_cast<int>(acked_frame_id);
421 last_acked_frame_id_ = acked_frame_id; 407 last_acked_frame_id_ = acked_frame_id;
422 UpdateFramesInFlight(); 408 UpdateFramesInFlight();
423 } 409 }
424 410
425 void VideoSender::UpdateFramesInFlight() { 411 void VideoSender::UpdateFramesInFlight() {
426 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 412 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
427 if (last_sent_frame_id_ != -1) { 413 if (last_sent_frame_id_ != -1) {
428 DCHECK_LE(0, last_sent_frame_id_); 414 DCHECK_LE(0, last_sent_frame_id_);
(...skipping 19 matching lines...) Expand all
448 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 434 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
449 MissingFramesAndPacketsMap missing_frames_and_packets; 435 MissingFramesAndPacketsMap missing_frames_and_packets;
450 PacketIdSet missing; 436 PacketIdSet missing;
451 missing_frames_and_packets.insert(std::make_pair(resend_frame_id, missing)); 437 missing_frames_and_packets.insert(std::make_pair(resend_frame_id, missing));
452 rtp_sender_->ResendPackets(missing_frames_and_packets); 438 rtp_sender_->ResendPackets(missing_frames_and_packets);
453 last_send_time_ = cast_environment_->Clock()->NowTicks(); 439 last_send_time_ = cast_environment_->Clock()->NowTicks();
454 } 440 }
455 441
456 } // namespace cast 442 } // namespace cast
457 } // namespace media 443 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/video_sender/video_encoder_impl_unittest.cc ('k') | media/cast/video_sender/video_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698