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

Side by Side Diff: media/cast/rtcp/sender_rtcp_event_subscriber.cc

Issue 281293002: Cast: Remove SenderRtcpEventSubscriber from cast library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "media/cast/rtcp/sender_rtcp_event_subscriber.h"
6
7 #include <utility>
8
9 #include "base/logging.h"
10 #include "media/cast/rtcp/rtcp_defines.h"
11
12 namespace media {
13 namespace cast {
14
15 SenderRtcpEventSubscriber::SenderRtcpEventSubscriber(
16 const size_t max_size_to_retain)
17 : max_size_to_retain_(max_size_to_retain) {
18 DCHECK(max_size_to_retain_ > 0u);
19 }
20
21 SenderRtcpEventSubscriber::~SenderRtcpEventSubscriber() {
22 DCHECK(thread_checker_.CalledOnValidThread());
23 }
24
25 void SenderRtcpEventSubscriber::OnReceiveFrameEvent(
26 const FrameEvent& frame_event) {
27 DCHECK(thread_checker_.CalledOnValidThread());
28 if (frame_event.media_type != VIDEO_EVENT)
29 return;
30 if (frame_event.type != FRAME_CAPTURE_BEGIN &&
31 frame_event.type != FRAME_ENCODED) {
32 // Not interested in other events.
33 return;
34 }
35
36 RtcpEventMap::iterator it = rtcp_events_.find(frame_event.rtp_timestamp);
37 if (it == rtcp_events_.end()) {
38 // We have not stored this frame (RTP timestamp) in our map.
39 RtcpEvent rtcp_event;
40 rtcp_event.type = frame_event.type;
41 rtcp_event.timestamp = frame_event.timestamp;
42
43 // Do not need to fill out rtcp_event.delay_delta or rtcp_event.packet_id
44 // as they are not set in frame events we are interested in.
45 rtcp_events_.insert(std::make_pair(frame_event.rtp_timestamp, rtcp_event));
46
47 TruncateMapIfNeeded();
48 } else {
49 // We already have this frame (RTP timestamp) in our map.
50 // Only update events that are later in the chain.
51 // This is due to that events can be reordered on the wire.
52 if (frame_event.type == FRAME_CAPTURE_BEGIN) {
53 return; // First event in chain can not be late by definition.
54 }
55
56 if (it->second.type == FRAME_ENCODED) {
57 return; // Last event in chain should not be updated.
58 }
59
60 // Update existing entry.
61 it->second.type = frame_event.type;
62 }
63
64 DCHECK(rtcp_events_.size() <= max_size_to_retain_);
65 }
66
67 void SenderRtcpEventSubscriber::OnReceivePacketEvent(
68 const PacketEvent& packet_event) {
69 DCHECK(thread_checker_.CalledOnValidThread());
70 // Do nothing as RTP sender is not interested in packet events for RTCP.
71 }
72
73 void SenderRtcpEventSubscriber::GetRtcpEventsAndReset(
74 RtcpEventMap* rtcp_events) {
75 DCHECK(thread_checker_.CalledOnValidThread());
76 rtcp_events->swap(rtcp_events_);
77 rtcp_events_.clear();
78 }
79
80 void SenderRtcpEventSubscriber::TruncateMapIfNeeded() {
81 // If map size has exceeded |max_size_to_retain_|, remove entry with
82 // the smallest RTP timestamp.
83 if (rtcp_events_.size() > max_size_to_retain_) {
84 DVLOG(2) << "RTCP event map exceeded size limit; "
85 << "removing oldest entry";
86 // This is fine since we only insert elements one at a time.
87 rtcp_events_.erase(rtcp_events_.begin());
88 }
89 }
90
91 } // namespace cast
92 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/sender_rtcp_event_subscriber.h ('k') | media/cast/rtcp/sender_rtcp_event_subscriber_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698