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

Unified Diff: media/cast/net/rtcp/receiver_rtcp_event_subscriber.h

Issue 765643006: Cast: Make receiver use cast_transport (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix end2end test Created 6 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 side-by-side diff with in-line comments
Download patch
Index: media/cast/net/rtcp/receiver_rtcp_event_subscriber.h
diff --git a/media/cast/net/rtcp/receiver_rtcp_event_subscriber.h b/media/cast/net/rtcp/receiver_rtcp_event_subscriber.h
index c08733ca94d2a49bc455e89b19021aca829bd33b..b5321f98a0b387a20d4eefe3bca0ba4a6ee95ac6 100644
--- a/media/cast/net/rtcp/receiver_rtcp_event_subscriber.h
+++ b/media/cast/net/rtcp/receiver_rtcp_event_subscriber.h
@@ -5,7 +5,8 @@
#ifndef MEDIA_CAST_RTCP_RECEIVER_RTCP_EVENT_SUBSCRIBER_H_
#define MEDIA_CAST_RTCP_RECEIVER_RTCP_EVENT_SUBSCRIBER_H_
-#include <map>
+#include <deque>
+#include <vector>
#include "base/threading/thread_checker.h"
#include "media/cast/logging/logging_defines.h"
@@ -15,6 +16,10 @@
namespace media {
namespace cast {
+static const size_t kNumResends = 3;
+static const size_t kResendDelay = 10;
+static const size_t kMaxEventsPerRTCP = 20;
+
// A RawEventSubscriber implementation with the following properties:
// - Only processes raw event types that are relevant for sending from cast
// receiver to cast sender via RTCP.
@@ -26,7 +31,8 @@ namespace cast {
// timestamp) up to the size limit.
class ReceiverRtcpEventSubscriber : public RawEventSubscriber {
public:
- typedef std::multimap<RtpTimestamp, RtcpEvent> RtcpEventMultiMap;
+ typedef std::pair<RtpTimestamp, RtcpEvent> RtcpEventPair;
+ typedef std::vector<std::pair<RtpTimestamp, RtcpEvent> > RtcpEvents;
// |max_size_to_retain|: The object will keep up to |max_size_to_retain|
// events
@@ -43,9 +49,9 @@ class ReceiverRtcpEventSubscriber : public RawEventSubscriber {
void OnReceiveFrameEvent(const FrameEvent& frame_event) override;
void OnReceivePacketEvent(const PacketEvent& packet_event) override;
- // Assigns events collected to |rtcp_events| and clears them from this
- // object.
- void GetRtcpEventsAndReset(RtcpEventMultiMap* rtcp_events);
+ // Assigns events collected to |rtcp_events|. If there is space, some
+ // older events will be added for redundancy as well.
+ void GetRtcpEventsWithRedundancy(RtcpEvents* rtcp_events);
private:
// If |rtcp_events_.size()| exceeds |max_size_to_retain_|, remove an oldest
@@ -65,7 +71,24 @@ class ReceiverRtcpEventSubscriber : public RawEventSubscriber {
// to differentiate between video and audio frames, but since the
// implementation doesn't mix audio and video frame events, RTP timestamp
// only as key is fine.
- RtcpEventMultiMap rtcp_events_;
+ std::deque<RtcpEventPair> rtcp_events_;
+
+ // Counts how many events have been removed from rtcp_events_.
+ uint64 popped_events_;
+
+ // Events greater than send_ptrs_[0] have not been sent yet.
+ // Events greater than send_ptrs_[1] have been transmit once.
+ // Note that these counters use absolute numbers, so you need
+ // to subtract popped_events_ before looking up the events in
+ // rtcp_events_.
+ uint64 send_ptrs_[kNumResends];
+
+ // For each frame, we push how many events have been added to
+ // rtcp_events_ so far. We use this to make sure that
+ // send_ptrs_[N+1] is always at least kResendDelay frames behind
+ // send_ptrs_[N]. Old information is removed so that information
+ // for (kNumResends + 1) * kResendDelay frames remain.
+ std::deque<uint64> event_levels_for_past_frames_;
// Ensures methods are only called on the main thread.
base::ThreadChecker thread_checker_;

Powered by Google App Engine
This is Rietveld 408576698