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

Side by Side Diff: media/cast/sender/frame_sender.cc

Issue 1484403002: cast: Support for low-latency interactive mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years 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
« no previous file with comments | « media/cast/sender/frame_sender.h ('k') | media/cast/sender/video_sender.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/sender/frame_sender.h" 5 #include "media/cast/sender/frame_sender.h"
6 6
7 #include <algorithm>
7 #include <limits> 8 #include <limits>
9 #include <vector>
8 10
9 #include "base/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
10 #include "media/cast/cast_defines.h" 12 #include "media/cast/cast_defines.h"
11 #include "media/cast/constants.h" 13 #include "media/cast/constants.h"
12 #include "media/cast/sender/sender_encoded_frame.h" 14 #include "media/cast/sender/sender_encoded_frame.h"
13 15
14 namespace media { 16 namespace media {
15 namespace cast { 17 namespace cast {
16 namespace { 18 namespace {
17 19
(...skipping 10 matching lines...) Expand all
28 #define SENDER_SSRC (is_audio_ ? "AUDIO[" : "VIDEO[") << ssrc_ << "] " 30 #define SENDER_SSRC (is_audio_ ? "AUDIO[" : "VIDEO[") << ssrc_ << "] "
29 31
30 FrameSender::FrameSender(scoped_refptr<CastEnvironment> cast_environment, 32 FrameSender::FrameSender(scoped_refptr<CastEnvironment> cast_environment,
31 bool is_audio, 33 bool is_audio,
32 CastTransportSender* const transport_sender, 34 CastTransportSender* const transport_sender,
33 int rtp_timebase, 35 int rtp_timebase,
34 uint32_t ssrc, 36 uint32_t ssrc,
35 double max_frame_rate, 37 double max_frame_rate,
36 base::TimeDelta min_playout_delay, 38 base::TimeDelta min_playout_delay,
37 base::TimeDelta max_playout_delay, 39 base::TimeDelta max_playout_delay,
40 base::TimeDelta animated_playout_delay,
38 CongestionControl* congestion_control) 41 CongestionControl* congestion_control)
39 : cast_environment_(cast_environment), 42 : cast_environment_(cast_environment),
40 transport_sender_(transport_sender), 43 transport_sender_(transport_sender),
41 ssrc_(ssrc), 44 ssrc_(ssrc),
42 min_playout_delay_(min_playout_delay == base::TimeDelta() 45 min_playout_delay_(min_playout_delay == base::TimeDelta()
43 ? max_playout_delay 46 ? max_playout_delay
44 : min_playout_delay), 47 : min_playout_delay),
45 max_playout_delay_(max_playout_delay), 48 max_playout_delay_(max_playout_delay),
49 animated_playout_delay_(animated_playout_delay == base::TimeDelta()
50 ? max_playout_delay
51 : animated_playout_delay),
46 send_target_playout_delay_(false), 52 send_target_playout_delay_(false),
47 max_frame_rate_(max_frame_rate), 53 max_frame_rate_(max_frame_rate),
48 num_aggressive_rtcp_reports_sent_(0), 54 num_aggressive_rtcp_reports_sent_(0),
49 last_sent_frame_id_(0), 55 last_sent_frame_id_(0),
50 latest_acked_frame_id_(0), 56 latest_acked_frame_id_(0),
51 duplicate_ack_counter_(0), 57 duplicate_ack_counter_(0),
52 congestion_control_(congestion_control), 58 congestion_control_(congestion_control),
53 rtp_timebase_(rtp_timebase), 59 rtp_timebase_(rtp_timebase),
54 is_audio_(is_audio), 60 is_audio_(is_audio),
55 weak_factory_(this) { 61 weak_factory_(this) {
56 DCHECK(transport_sender_); 62 DCHECK(transport_sender_);
57 DCHECK_GT(rtp_timebase_, 0); 63 DCHECK_GT(rtp_timebase_, 0);
58 DCHECK(congestion_control_); 64 DCHECK(congestion_control_);
59 SetTargetPlayoutDelay(min_playout_delay_); 65 // We assume animated content to begin with since that is the common use
66 // case today.
67 VLOG(1) << SENDER_SSRC << "min latency "
68 << min_playout_delay_.InMilliseconds() << "max latency "
69 << max_playout_delay.InMilliseconds() << "animated latency "
70 << animated_playout_delay.InMilliseconds();
71 SetTargetPlayoutDelay(animated_playout_delay_);
60 send_target_playout_delay_ = false; 72 send_target_playout_delay_ = false;
61 memset(frame_rtp_timestamps_, 0, sizeof(frame_rtp_timestamps_)); 73 memset(frame_rtp_timestamps_, 0, sizeof(frame_rtp_timestamps_));
62 } 74 }
63 75
64 FrameSender::~FrameSender() { 76 FrameSender::~FrameSender() {
65 } 77 }
66 78
67 void FrameSender::ScheduleNextRtcpReport() { 79 void FrameSender::ScheduleNextRtcpReport() {
68 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 80 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
69 81
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 VLOG(1) << SENDER_SSRC << "Dropping: In-flight duration would be too high."; 419 VLOG(1) << SENDER_SSRC << "Dropping: In-flight duration would be too high.";
408 return true; 420 return true;
409 } 421 }
410 422
411 // Next frame is accepted. 423 // Next frame is accepted.
412 return false; 424 return false;
413 } 425 }
414 426
415 } // namespace cast 427 } // namespace cast
416 } // namespace media 428 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/sender/frame_sender.h ('k') | media/cast/sender/video_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698