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

Unified Diff: media/cast/sender/frame_sender.h

Issue 560223002: [Cast] Limit frames in flight by duration, and not by number of frames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tweaks addressing review comments on PS6. Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: media/cast/sender/frame_sender.h
diff --git a/media/cast/sender/frame_sender.h b/media/cast/sender/frame_sender.h
index 3c8f884457c06453c115631559a4f3ca3c8572f9..0e8595d213493762a26970dfaca6b576d9d4cfc3 100644
--- a/media/cast/sender/frame_sender.h
+++ b/media/cast/sender/frame_sender.h
@@ -34,6 +34,8 @@ class FrameSender {
CongestionControl* congestion_control);
virtual ~FrameSender();
+ int rtp_timebase() const { return rtp_timebase_; }
+
// Calling this function is only valid if the receiver supports the
// "extra_playout_delay", rtp extension.
void SetTargetPlayoutDelay(base::TimeDelta new_target_playout_delay);
@@ -50,6 +52,10 @@ class FrameSender {
// Returns the number of frames in the encoder's backlog.
virtual int GetNumberOfFramesInEncoder() const = 0;
+ // Returns the duration of the data in the encoder's backlog plus the duration
+ // of sent, unacknowledged frames.
+ virtual base::TimeDelta GetInFlightMediaDuration() const = 0;
+
// Called when we get an ACK for a frame.
virtual void OnAck(uint32 frame_id) = 0;
@@ -84,11 +90,9 @@ class FrameSender {
// Protected for testability.
void OnReceivedCastFeedback(const RtcpCastMessage& cast_feedback);
- // Returns true if there are too many frames in flight, or if the media
- // duration of the frames in flight would be too high by sending the next
- // frame. The latter metric is determined from the given |capture_time|
- // for the next frame to be encoded and sent.
- bool ShouldDropNextFrame(base::TimeTicks capture_time) const;
+ // Returns true if too many frames would be in-flight by encoding and sending
+ // the next frame having the given |frame_duration|.
+ bool ShouldDropNextFrame(base::TimeDelta frame_duration) const;
// Record or retrieve a recent history of each frame's timestamps.
// Warning: If a frame ID too far in the past is requested, the getters will
@@ -100,6 +104,9 @@ class FrameSender {
base::TimeTicks GetRecordedReferenceTime(uint32 frame_id) const;
RtpTimestamp GetRecordedRtpTimestamp(uint32 frame_id) const;
+ // Returns the number of frames that were sent but not yet acknowledged.
+ int GetUnacknowledgedFrameCount() const;
+
const base::TimeDelta rtcp_interval_;
// The total amount of time between a frame's capture/recording on the sender
@@ -151,9 +158,6 @@ class FrameSender {
// STATUS_VIDEO_INITIALIZED.
CastInitializationStatus cast_initialization_status_;
- // RTP timestamp increment representing one second.
- const int rtp_timebase_;
-
// This object controls how we change the bitrate to make sure the
// buffer doesn't overflow.
scoped_ptr<CongestionControl> congestion_control_;
@@ -162,6 +166,13 @@ class FrameSender {
base::TimeDelta current_round_trip_time_;
private:
+ // Returns the maximum media duration currently allowed in-flight. This
+ // fluctuates in response to the currently-measured network latency.
+ base::TimeDelta GetAllowedInFlightMediaDuration() const;
+
+ // RTP timestamp increment representing one second.
+ const int rtp_timebase_;
+
const bool is_audio_;
// Ring buffers to keep track of recent frame timestamps (both in terms of

Powered by Google App Engine
This is Rietveld 408576698