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

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

Issue 192843002: Cast:Adding signaling and infrastructure for adjustable delay (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updates Created 6 years, 9 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 | 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 } 83 }
84 84
85 private: 85 private:
86 RtpReceiver* rtp_receiver_; 86 RtpReceiver* rtp_receiver_;
87 87
88 DISALLOW_IMPLICIT_CONSTRUCTORS(LocalRtpReceiverStatistics); 88 DISALLOW_IMPLICIT_CONSTRUCTORS(LocalRtpReceiverStatistics);
89 }; 89 };
90 90
91 VideoReceiver::VideoReceiver(scoped_refptr<CastEnvironment> cast_environment, 91 VideoReceiver::VideoReceiver(scoped_refptr<CastEnvironment> cast_environment,
92 const VideoReceiverConfig& video_config, 92 const VideoReceiverConfig& video_config,
93 transport::PacedPacketSender* const packet_sender) 93 transport::PacedPacketSender* const packet_sender,
94 const SetTargetDelayCallback& target_delay_cb)
94 : cast_environment_(cast_environment), 95 : cast_environment_(cast_environment),
95 event_subscriber_(kReceiverRtcpEventHistorySize, 96 event_subscriber_(kReceiverRtcpEventHistorySize,
96 ReceiverRtcpEventSubscriber::kVideoEventSubscriber), 97 ReceiverRtcpEventSubscriber::kVideoEventSubscriber),
97 codec_(video_config.codec), 98 codec_(video_config.codec),
98 target_delay_delta_( 99 target_delay_delta_(
99 base::TimeDelta::FromMilliseconds(video_config.rtp_max_delay_ms)), 100 base::TimeDelta::FromMilliseconds(video_config.rtp_max_delay_ms)),
100 frame_delay_(base::TimeDelta::FromMilliseconds( 101 frame_delay_(base::TimeDelta::FromMilliseconds(
101 1000 / video_config.max_frame_rate)), 102 1000 / video_config.max_frame_rate)),
102 incoming_payload_callback_(new LocalRtpVideoData(this)), 103 incoming_payload_callback_(new LocalRtpVideoData(this)),
103 incoming_payload_feedback_(new LocalRtpVideoFeedback(this)), 104 incoming_payload_feedback_(new LocalRtpVideoFeedback(this)),
104 rtp_receiver_(cast_environment_->Clock(), 105 rtp_receiver_(cast_environment_->Clock(),
105 NULL, 106 NULL,
106 &video_config, 107 &video_config,
107 incoming_payload_callback_.get()), 108 incoming_payload_callback_.get()),
108 rtp_video_receiver_statistics_( 109 rtp_video_receiver_statistics_(
109 new LocalRtpReceiverStatistics(&rtp_receiver_)), 110 new LocalRtpReceiverStatistics(&rtp_receiver_)),
110 decryptor_(), 111 decryptor_(),
111 time_incoming_packet_updated_(false), 112 time_incoming_packet_updated_(false),
112 incoming_rtp_timestamp_(0), 113 incoming_rtp_timestamp_(0),
114 target_delay_cb_(target_delay_cb),
113 weak_factory_(this) { 115 weak_factory_(this) {
114 int max_unacked_frames = 116 int max_unacked_frames =
115 video_config.rtp_max_delay_ms * video_config.max_frame_rate / 1000; 117 video_config.rtp_max_delay_ms * video_config.max_frame_rate / 1000;
116 DCHECK(max_unacked_frames) << "Invalid argument"; 118 DCHECK(max_unacked_frames) << "Invalid argument";
117 119
118 decryptor_.Initialize(video_config.aes_key, video_config.aes_iv_mask); 120 decryptor_.Initialize(video_config.aes_key, video_config.aes_iv_mask);
119 framer_.reset(new Framer(cast_environment->Clock(), 121 framer_.reset(new Framer(cast_environment->Clock(),
120 incoming_payload_feedback_.get(), 122 incoming_payload_feedback_.get(),
121 video_config.incoming_ssrc, 123 video_config.incoming_ssrc,
122 video_config.decoder_faster_than_max_frame_rate, 124 video_config.decoder_faster_than_max_frame_rate,
123 max_unacked_frames)); 125 max_unacked_frames));
124 126
125 if (!video_config.use_external_decoder) { 127 if (!video_config.use_external_decoder) {
126 video_decoder_.reset(new VideoDecoder(video_config, cast_environment)); 128 video_decoder_.reset(new VideoDecoder(video_config, cast_environment));
127 } 129 }
128 130
129 rtcp_.reset( 131 rtcp_.reset(
130 new Rtcp(cast_environment_, 132 new Rtcp(cast_environment_,
131 NULL, 133 NULL,
132 NULL, 134 NULL,
133 packet_sender, 135 packet_sender,
134 NULL, 136 NULL,
135 rtp_video_receiver_statistics_.get(), 137 rtp_video_receiver_statistics_.get(),
136 video_config.rtcp_mode, 138 video_config.rtcp_mode,
137 base::TimeDelta::FromMilliseconds(video_config.rtcp_interval), 139 base::TimeDelta::FromMilliseconds(video_config.rtcp_interval),
138 video_config.feedback_ssrc, 140 video_config.feedback_ssrc,
139 video_config.incoming_ssrc, 141 video_config.incoming_ssrc,
140 video_config.rtcp_c_name)); 142 video_config.rtcp_c_name));
143 // Set the target delay that will be conveyed to the sender.
144 rtcp_->SetTargetDelay(target_delay_delta_);
141 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_); 145 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_);
142 memset(frame_id_to_rtp_timestamp_, 0, sizeof(frame_id_to_rtp_timestamp_)); 146 memset(frame_id_to_rtp_timestamp_, 0, sizeof(frame_id_to_rtp_timestamp_));
143 } 147 }
144 148
145 VideoReceiver::~VideoReceiver() { 149 VideoReceiver::~VideoReceiver() {
146 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_); 150 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_);
147 } 151 }
148 152
149 void VideoReceiver::InitializeTimers() { 153 void VideoReceiver::InitializeTimers() {
150 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 154 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 weak_factory_.GetWeakPtr()), 517 weak_factory_.GetWeakPtr()),
514 time_to_next); 518 time_to_next);
515 } 519 }
516 520
517 void VideoReceiver::SendNextRtcpReport() { 521 void VideoReceiver::SendNextRtcpReport() {
518 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 522 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
519 rtcp_->SendRtcpFromRtpReceiver(NULL, NULL); 523 rtcp_->SendRtcpFromRtpReceiver(NULL, NULL);
520 ScheduleNextRtcpReport(); 524 ScheduleNextRtcpReport();
521 } 525 }
522 526
527 void VideoReceiver::UpdateTargetDelay() {
528 NOTIMPLEMENTED();
529 rtcp_->SetTargetDelay(target_delay_delta_);
530 target_delay_cb_.Run(target_delay_delta_);
531 }
532
523 } // namespace cast 533 } // namespace cast
524 } // namespace media 534 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698