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

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

Issue 69603002: Incorporating logging into Cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Adding scoped_ptr include Created 7 years, 1 month 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 | Annotate | Revision Log
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_receiver/video_receiver.h" 5 #include "media/cast/video_receiver/video_receiver.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 framer_.reset(new Framer(cast_environment->Clock(), 120 framer_.reset(new Framer(cast_environment->Clock(),
121 incoming_payload_feedback_.get(), 121 incoming_payload_feedback_.get(),
122 video_config.incoming_ssrc, 122 video_config.incoming_ssrc,
123 video_config.decoder_faster_than_max_frame_rate, 123 video_config.decoder_faster_than_max_frame_rate,
124 max_unacked_frames)); 124 max_unacked_frames));
125 if (!video_config.use_external_decoder) { 125 if (!video_config.use_external_decoder) {
126 video_decoder_.reset(new VideoDecoder(video_config, cast_environment)); 126 video_decoder_.reset(new VideoDecoder(video_config, cast_environment));
127 } 127 }
128 128
129 rtcp_.reset( 129 rtcp_.reset(
130 new Rtcp(cast_environment_->Clock(), 130 new Rtcp(cast_environment_,
131 NULL, 131 NULL,
132 packet_sender, 132 packet_sender,
133 NULL, 133 NULL,
134 rtp_video_receiver_statistics_.get(), 134 rtp_video_receiver_statistics_.get(),
135 video_config.rtcp_mode, 135 video_config.rtcp_mode,
136 base::TimeDelta::FromMilliseconds(video_config.rtcp_interval), 136 base::TimeDelta::FromMilliseconds(video_config.rtcp_interval),
137 video_config.feedback_ssrc, 137 video_config.feedback_ssrc,
138 video_config.incoming_ssrc, 138 video_config.incoming_ssrc,
139 video_config.rtcp_c_name)); 139 video_config.rtcp_c_name));
140 } 140 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 // the next frame or we are running out of time and have to pull the following 242 // the next frame or we are running out of time and have to pull the following
243 // frame. 243 // frame.
244 // If the frame it too old to be rendered we set the don't show flag in the 244 // If the frame it too old to be rendered we set the don't show flag in the
245 // video bitstream where possible. 245 // video bitstream where possible.
246 bool VideoReceiver::PullEncodedVideoFrame(uint32 rtp_timestamp, 246 bool VideoReceiver::PullEncodedVideoFrame(uint32 rtp_timestamp,
247 bool next_frame, scoped_ptr<EncodedVideoFrame>* encoded_frame, 247 bool next_frame, scoped_ptr<EncodedVideoFrame>* encoded_frame,
248 base::TimeTicks* render_time) { 248 base::TimeTicks* render_time) {
249 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 249 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
250 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 250 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
251 *render_time = GetRenderTime(now, rtp_timestamp); 251 *render_time = GetRenderTime(now, rtp_timestamp);
252 base::TimeDelta diff = now - *render_time;
253
254 cast_environment_->Logging()->InsertFrameEvent(kVideoRenderDelay,
255 rtp_timestamp, diff.InMilliseconds());
252 256
253 // Minimum time before a frame is due to be rendered before we pull it for 257 // Minimum time before a frame is due to be rendered before we pull it for
254 // decode. 258 // decode.
255 base::TimeDelta min_wait_delta = frame_delay_; 259 base::TimeDelta min_wait_delta = frame_delay_;
256 base::TimeDelta time_until_render = *render_time - now; 260 base::TimeDelta time_until_render = *render_time - now;
257 if (!next_frame && (time_until_render > min_wait_delta)) { 261 if (!next_frame && (time_until_render > min_wait_delta)) {
258 // Example: 262 // Example:
259 // We have decoded frame 1 and we have received the complete frame 3, but 263 // We have decoded frame 1 and we have received the complete frame 3, but
260 // not frame 2. If we still have time before frame 3 should be rendered we 264 // not frame 2. If we still have time before frame 3 should be rendered we
261 // will wait for 2 to arrive, however if 2 never show up this timer will hit 265 // will wait for 2 to arrive, however if 2 never show up this timer will hit
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 388
385 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 389 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
386 if (time_incoming_packet_.is_null() || now - time_incoming_packet_ > 390 if (time_incoming_packet_.is_null() || now - time_incoming_packet_ >
387 base::TimeDelta::FromMilliseconds(kMinTimeBetweenOffsetUpdatesMs)) { 391 base::TimeDelta::FromMilliseconds(kMinTimeBetweenOffsetUpdatesMs)) {
388 if (time_incoming_packet_.is_null()) InitializeTimers(); 392 if (time_incoming_packet_.is_null()) InitializeTimers();
389 incoming_rtp_timestamp_ = rtp_header.webrtc.header.timestamp; 393 incoming_rtp_timestamp_ = rtp_header.webrtc.header.timestamp;
390 time_incoming_packet_ = now; 394 time_incoming_packet_ = now;
391 time_incoming_packet_updated_ = true; 395 time_incoming_packet_updated_ = true;
392 } 396 }
393 397
398 cast_environment_->Logging()->InsertPacketEvent(kPacketReceived,
399 rtp_header.webrtc.header.timestamp, rtp_header.frame_id,
400 rtp_header.packet_id, rtp_header.max_packet_id, payload_size);
401
394 bool complete = framer_->InsertPacket(payload_data, payload_size, rtp_header); 402 bool complete = framer_->InsertPacket(payload_data, payload_size, rtp_header);
395 403
396 if (!complete) return; // Video frame not complete; wait for more packets. 404 if (!complete) return; // Video frame not complete; wait for more packets.
397 if (queued_encoded_callbacks_.empty()) return; // No pending callback. 405 if (queued_encoded_callbacks_.empty()) return; // No pending callback.
398 406
399 VideoFrameEncodedCallback callback = queued_encoded_callbacks_.front(); 407 VideoFrameEncodedCallback callback = queued_encoded_callbacks_.front();
400 queued_encoded_callbacks_.pop_front(); 408 queued_encoded_callbacks_.pop_front();
401 cast_environment_->PostTask(CastEnvironment::MAIN, FROM_HERE, 409 cast_environment_->PostTask(CastEnvironment::MAIN, FROM_HERE,
402 base::Bind(&VideoReceiver::GetEncodedVideoFrame, 410 base::Bind(&VideoReceiver::GetEncodedVideoFrame,
403 weak_factory_.GetWeakPtr(), callback)); 411 weak_factory_.GetWeakPtr(), callback));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 } 457 }
450 458
451 void VideoReceiver::SendNextRtcpReport() { 459 void VideoReceiver::SendNextRtcpReport() {
452 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 460 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
453 rtcp_->SendRtcpFromRtpReceiver(NULL, NULL); 461 rtcp_->SendRtcpFromRtpReceiver(NULL, NULL);
454 ScheduleNextRtcpReport(); 462 ScheduleNextRtcpReport();
455 } 463 }
456 464
457 } // namespace cast 465 } // namespace cast
458 } // namespace media 466 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/video_receiver/video_decoder_unittest.cc ('k') | media/cast/video_receiver/video_receiver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698